Compare commits

..

2 commits

203 changed files with 781 additions and 5190 deletions
.git-blame-ignore-revs
checks
configuration
flake.lockflake.nix
modules/crowdsec
pkgs
crowdsec
minecraftmon
.packwizignore
config/defaultoptions
index.toml
mods

View file

@ -9,6 +9,3 @@ fd138d45e6a2cad89fead6e9f246ba282070d6b7
# Switch to alejandra formatting
046a88905ddfa7f9edc3291c310dbb985dee34f9
# Apply wide linting
63b3cbe00be80ccb4b221aad64eb657ae5c96d70

View file

@ -1,61 +0,0 @@
{
self,
nixpkgs,
deploy-rs,
system,
...
}:
let
pkgs = nixpkgs.legacyPackages.${system};
statix' = pkgs.statix.overrideAttrs (old: {
patches = old.patches ++ [
(pkgs.fetchpatch {
url = "https://github.com/oppiliappan/statix/commit/925dec39bb705acbbe77178b4d658fe1b752abbb.patch";
hash = "sha256-0wacO6wuYJ4ufN9PGucRVJucFdFFNF+NoHYIrLXsCWs=";
})
];
});
runNuCheck =
{
name,
packages,
check,
}:
pkgs.stdenvNoCC.mkDerivation {
inherit name;
src = nixpkgs.lib.cleanSourceWith {
src = self;
filter = nixpkgs.lib.cleanSourceFilter;
};
dontPatch = true;
dontConfigure = true;
dontBuild = true;
dontInstall = true;
dontFixup = true;
doCheck = true;
checkInputs = nixpkgs.lib.singleton pkgs.nushell ++ packages;
checkPhase = ''
nu ${check}
'';
};
in
nixpkgs.lib.recursiveUpdate {
lints = runNuCheck {
name = "lints";
packages = [
pkgs.deadnix
pkgs.nixfmt-rfc-style
pkgs.shellcheck
statix'
];
check = ./lints.nu;
};
} (deploy-rs.lib.${system}.deployChecks self.deploy)

View file

@ -1,39 +0,0 @@
#!/usr/bin/env nu
let shell_files = ls **/*.sh | get name
let nix_files = ls **/*.nix | where name !~ "hardware-configuration.nix|_sources" | get name
let linters = [
([shellcheck] ++ $shell_files)
([nixfmt --check --strict] ++ $nix_files)
([deadnix --fail] ++ $nix_files)
([statix check] ++ $nix_files)
]
mkdir $env.out
def run-linter [linterArgs: list<string>] {
print $'Running ($linterArgs.0)...'
let exit_code = try {
^$linterArgs.0 ...($linterArgs | skip 1)
$env.LAST_EXIT_CODE
} catch {|e| $e.exit_code}
[$linterArgs.0, $exit_code]
}
let results = $linters | each {|linter| run-linter $linter}
print 'Linter results:'
let success = $results | each {|result|
match $result.1 {
0 => {print $'(ansi green)($result.0)(ansi reset)'}
_ => {print $'(ansi red)($result.0)(ansi reset)'}
}
$result.1
} | math sum
exit $success

View file

@ -1,5 +1,7 @@
{
config,
pkgs,
lib,
modulesPath,
flake-inputs,
...
@ -19,7 +21,6 @@
./services/crowdsec.nix
./services/foundryvtt.nix
./services/gitea.nix
./services/immich.nix
./services/metrics
./services/minecraft.nix
./services/nextcloud.nix
@ -31,7 +32,13 @@
./sops.nix
];
nixpkgs.overlays = [ (_: prev: { local = import ../pkgs { pkgs = prev; }; }) ];
nixpkgs.overlays = [
(final: prev: {
local = import ../pkgs {
pkgs = prev;
};
})
];
nix = {
extraOptions = ''
@ -100,6 +107,7 @@
services = {
openssh = {
enable = true;
allowSFTP = false;
ports = [ 2222 ];
startWhenNeeded = true;

View file

@ -80,17 +80,6 @@
inherit mountOptions;
mountpoint = "/var";
};
"/volume/var/lib/private/matrix-conduit" = {
mountOptions = [
# Explicitly don't compress here, since
# conduwuit's database does compression by
# itself, and relies on being able to read the
# raw file data from disk (which is impossible
# if btrfs compresses it)
"noatime"
];
mountpoint = "/var/lib/private/matrix-conduit";
};
"/volume/nix-store" = {
inherit mountOptions;
mountpoint = "/nix";

View file

@ -6,35 +6,26 @@
boot.kernelParams = [ "nomodeset" ];
networking.hostName = "testvm";
services = {
# Sets the base domain for nginx to a local domain so that we can
# easily test locally with the VM.
nginx.domain = "dev.local";
# Don't run this
batteryManager.enable = lib.mkForce false;
openssh.hostKeys = lib.mkForce [
{
type = "rsa";
bits = 4096;
path = "/etc/staging.key";
}
];
};
# Sets the base domain for nginx to a local domain so that we can
# easily test locally with the VM.
services.nginx.domain = "dev.local";
# Use the staging secrets
sops.defaultSopsFile = lib.mkOverride 99 ../../keys/staging.yaml;
systemd.network.networks."10-eth0" = {
matchConfig.Name = "eth0";
gateway = [ "192.168.9.1" ];
gateway = [
"192.168.9.1"
];
networkConfig = {
Address = "192.168.9.2/24";
};
};
# Don't run this
services.batteryManager.enable = lib.mkForce false;
# Both so we have a predictable key for the staging env, as well as
# to have a static key for decrypting the sops secrets for the
# staging env.
@ -43,6 +34,14 @@
source = ../../keys/hosts/staging.key;
};
services.openssh.hostKeys = lib.mkForce [
{
type = "rsa";
bits = 4096;
path = "/etc/staging.key";
}
];
virtualisation.vmVariant = {
virtualisation = {
memorySize = 3941;

View file

@ -1,26 +1,26 @@
{ config, lib, ... }:
{
services = {
nginx = {
enable = true;
recommendedTlsSettings = true;
recommendedOptimisation = true;
recommendedGzipSettings = true;
recommendedProxySettings = true;
clientMaxBodySize = "10G";
services.nginx = {
enable = true;
recommendedTlsSettings = true;
recommendedOptimisation = true;
recommendedGzipSettings = true;
recommendedProxySettings = true;
clientMaxBodySize = "10G";
statusPage = true; # For metrics, should be accessible only from localhost
statusPage = true; # For metrics, should be accessible only from localhost
commonHttpConfig = ''
log_format upstream_time '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time"';
'';
};
commonHttpConfig = ''
log_format upstream_time '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time"';
'';
};
logrotate.settings = {
services.logrotate.settings =
{
# Override the default, just keep fewer logs
nginx.rotate = 6;
}
@ -36,14 +36,6 @@
}
) config.services.nginx.virtualHosts;
backups.acme = {
user = "acme";
paths = lib.mapAttrsToList (
virtualHost: _: "/var/lib/acme/${virtualHost}"
) config.services.nginx.virtualHosts;
};
};
systemd.tmpfiles.rules = lib.mapAttrsToList (
virtualHost: _:
#
@ -74,4 +66,11 @@
systemd.services.nginx.serviceConfig.SupplementaryGroups = [
config.security.acme.certs."tlater.net".group
];
services.backups.acme = {
user = "acme";
paths = lib.mapAttrsToList (
virtualHost: _: "/var/lib/acme/${virtualHost}"
) config.services.nginx.virtualHosts;
};
}

View file

@ -57,7 +57,7 @@ in
'';
type = types.attrsOf (
types.submodule (
{ name, ... }:
{ config, name, ... }:
{
options = {
user = lib.mkOption {
@ -140,121 +140,123 @@ in
};
config = lib.mkIf (config.services.backups != { }) {
systemd.services = {
restic-prune = {
# Doesn't hurt to finish the ongoing prune
restartIfChanged = false;
systemd.services =
{
restic-prune = {
# Doesn't hurt to finish the ongoing prune
restartIfChanged = false;
environment = resticEnv;
environment = resticEnv;
path = with pkgs; [
openssh
rclone
restic
];
script = ''
# TODO(tlater): In an append-only setup, we should be
# careful with this; an attacker could delete backups by
# simply appending ad infinitum:
# https://restic.readthedocs.io/en/stable/060_forget.html#security-considerations-in-append-only-mode
restic forget --keep-last 3 --prune
restic check
'';
serviceConfig = {
DynamicUser = true;
Group = "backup";
CacheDirectory = "restic-prune";
CacheDirectoryMode = "0700";
};
};
}
// lib.mapAttrs' (
name: backup:
lib.nameValuePair "backup-${name}" {
# Don't want to restart mid-backup
restartIfChanged = false;
environment = resticEnv // {
RESTIC_CACHE_DIR = "%C/backup-${name}";
};
path = with pkgs; [
coreutils
openssh
rclone
restic
];
# TODO(tlater): If I ever add more than one repo, service
# shutdown/restarting will potentially break if multiple
# backups for the same service overlap. A more clever
# sentinel file with reference counts would probably solve
# this.
serviceConfig = {
User = backup.user;
Group = "backup";
RuntimeDirectory = "backup-${name}";
CacheDirectory = "backup-${name}";
CacheDirectoryMode = "0700";
PrivateTmp = true;
ExecStart = [
(lib.concatStringsSep " " (
[
"${pkgs.restic}/bin/restic"
"backup"
"--tag"
name
]
++ backup.paths
))
path = with pkgs; [
openssh
rclone
restic
];
ExecStartPre =
map (service: "+${mkShutdownScript service}") backup.pauseServices
++ singleton (
writeScript "backup-${name}-repo-init" [ ] ''
restic snapshots || restic init
''
)
++ optional (backup.preparation.text != null) (
writeScript "backup-${name}-prepare" backup.preparation.packages backup.preparation.text
);
script = ''
# TODO(tlater): In an append-only setup, we should be
# careful with this; an attacker could delete backups by
# simply appending ad infinitum:
# https://restic.readthedocs.io/en/stable/060_forget.html#security-considerations-in-append-only-mode
restic forget --keep-last 3 --prune
restic check
'';
# TODO(tlater): Add repo pruning/checking
ExecStopPost =
map (service: "+${mkRestartScript service}") backup.pauseServices
++ optional (backup.cleanup.text != null) (
writeScript "backup-${name}-cleanup" backup.cleanup.packages backup.cleanup.text
);
serviceConfig = {
DynamicUser = true;
Group = "backup";
CacheDirectory = "restic-prune";
CacheDirectoryMode = "0700";
};
};
}
) config.services.backups;
// lib.mapAttrs' (
name: backup:
lib.nameValuePair "backup-${name}" {
# Don't want to restart mid-backup
restartIfChanged = false;
systemd.timers = {
restic-prune = {
wantedBy = [ "timers.target" ];
timerConfig.OnCalendar = "Thursday 03:00:00 UTC";
# Don't make this persistent, in case the server was offline
# for a while. This job cannot run at the same time as any
# of the backup jobs.
};
}
// lib.mapAttrs' (
name: _:
lib.nameValuePair "backup-${name}" {
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "Wednesday 02:30:00 UTC";
RandomizedDelaySec = "1h";
FixedRandomDelay = true;
Persistent = true;
environment = resticEnv // {
RESTIC_CACHE_DIR = "%C/backup-${name}";
};
path = with pkgs; [
coreutils
openssh
rclone
restic
];
# TODO(tlater): If I ever add more than one repo, service
# shutdown/restarting will potentially break if multiple
# backups for the same service overlap. A more clever
# sentinel file with reference counts would probably solve
# this.
serviceConfig = {
User = backup.user;
Group = "backup";
RuntimeDirectory = "backup-${name}";
CacheDirectory = "backup-${name}";
CacheDirectoryMode = "0700";
PrivateTmp = true;
ExecStart = [
(lib.concatStringsSep " " (
[
"${pkgs.restic}/bin/restic"
"backup"
"--tag"
name
]
++ backup.paths
))
];
ExecStartPre =
map (service: "+${mkShutdownScript service}") backup.pauseServices
++ singleton (
writeScript "backup-${name}-repo-init" [ ] ''
restic snapshots || restic init
''
)
++ optional (backup.preparation.text != null) (
writeScript "backup-${name}-prepare" backup.preparation.packages backup.preparation.text
);
# TODO(tlater): Add repo pruning/checking
ExecStopPost =
map (service: "+${mkRestartScript service}") backup.pauseServices
++ optional (backup.cleanup.text != null) (
writeScript "backup-${name}-cleanup" backup.cleanup.packages backup.cleanup.text
);
};
}
) config.services.backups;
systemd.timers =
{
restic-prune = {
wantedBy = [ "timers.target" ];
timerConfig.OnCalendar = "Thursday 03:00:00 UTC";
# Don't make this persistent, in case the server was offline
# for a while. This job cannot run at the same time as any
# of the backup jobs.
};
}
) config.services.backups;
// lib.mapAttrs' (
name: backup:
lib.nameValuePair "backup-${name}" {
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "Wednesday 02:30:00 UTC";
RandomizedDelaySec = "1h";
FixedRandomDelay = true;
Persistent = true;
};
}
) config.services.backups;
users = {
# This user is only used to own the ssh key, because apparently

View file

@ -1,5 +1,4 @@
{
pkgs,
config,
lib,
...
@ -17,166 +16,159 @@ in
./matrix-hookshot.nix
];
services = {
matrix-conduit = {
enable = true;
package = pkgs.matrix-continuwuity;
settings.global = {
address = "127.0.0.1";
server_name = domain;
new_user_displayname_suffix = "🦆";
allow_check_for_updates = true;
services.matrix-conduit = {
enable = true;
settings.global = {
address = "127.0.0.1";
server_name = domain;
database_backend = "rocksdb";
# Set up delegation: https://docs.conduit.rs/delegation.html#automatic-recommended
# This is primarily to make sliding sync work
well_known = {
client = "https://${domain}";
server = "${domain}:443";
};
turn_uris =
let
address = "${config.services.coturn.realm}:${toString config.services.coturn.listening-port}";
tls-address = "${config.services.coturn.realm}:${toString config.services.coturn.tls-listening-port}";
in
[
"turn:${address}?transport=udp"
"turn:${address}?transport=tcp"
"turns:${tls-address}?transport=udp"
"turns:${tls-address}?transport=tcp"
];
# Set up delegation: https://docs.conduit.rs/delegation.html#automatic-recommended
# This is primarily to make sliding sync work
well_known = {
client = "https://${domain}";
server = "${domain}:443";
};
};
coturn = {
enable = true;
no-cli = true;
use-auth-secret = true;
static-auth-secret-file = config.sops.secrets."turn/secret".path;
realm = turn-realm;
relay-ips = [ "116.202.158.55" ];
# SSL config
pkey = "${config.security.acme.certs."tlater.net".directory}/key.pem";
cert = "${config.security.acme.certs."tlater.net".directory}/fullchain.pem";
# Based on suggestions from
# https://github.com/matrix-org/synapse/blob/develop/docs/turn-howto.md
# and
# https://www.foxypossibilities.com/2018/05/19/setting-up-a-turn-sever-for-matrix-on-nixos/
no-tcp-relay = true;
secure-stun = true;
extraConfig = ''
# Deny various local IP ranges, see
# https://www.rtcsec.com/article/cve-2020-26262-bypass-of-coturns-access-control-protection/
no-multicast-peers
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255 denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
# *Allow* any IP addresses that we explicitly set as relay IPs
${concatMapStringsSep "\n" (ip: "allowed-peer-ip=${ip}") config.services.coturn.relay-ips}
# Various other security settings
no-tlsv1
no-tlsv1_1
# Monitoring
prometheus
'';
};
nginx.virtualHosts."${domain}" = {
useACMEHost = "tlater.net";
listen = [
{
addr = "0.0.0.0";
port = 80;
}
{
addr = "[::0]";
port = 80;
}
{
addr = "0.0.0.0";
port = 443;
ssl = true;
}
{
addr = "[::0]";
port = 443;
ssl = true;
}
{
addr = "0.0.0.0";
port = 8448;
ssl = true;
}
{
addr = "[::0]";
port = 8448;
ssl = true;
}
];
forceSSL = true;
enableHSTS = true;
extraConfig = ''
merge_slashes off;
'';
locations = {
"/_matrix" = {
proxyPass = "http://${cfg.settings.global.address}:${toString cfg.settings.global.port}";
# Recommended by conduit
extraConfig = ''
proxy_buffering off;
'';
};
"/.well-known/matrix" = {
proxyPass = "http://${cfg.settings.global.address}:${toString cfg.settings.global.port}";
};
};
};
backups.conduit = {
user = "root";
paths = [ "/var/lib/private/matrix-conduit/" ];
# Other services store their data in conduit, so no other services
# need to be shut down currently.
pauseServices = [ "conduit.service" ];
turn_uris =
let
address = "${config.services.coturn.realm}:${toString config.services.coturn.listening-port}";
tls-address = "${config.services.coturn.realm}:${toString config.services.coturn.tls-listening-port}";
in
[
"turn:${address}?transport=udp"
"turn:${address}?transport=tcp"
"turns:${tls-address}?transport=udp"
"turns:${tls-address}?transport=tcp"
];
};
};
systemd.services.conduit.serviceConfig = {
ExecStart = lib.mkForce "${config.services.matrix-conduit.package}/bin/conduwuit";
# Pass in the TURN secret via EnvironmentFile, not supported by
# upstream module currently.
#
# See also https://gitlab.com/famedly/conduit/-/issues/314
EnvironmentFile = config.sops.secrets."turn/env".path;
};
# Pass in the TURN secret via EnvironmentFile, not supported by
# upstream module currently.
#
# See also https://gitlab.com/famedly/conduit/-/issues/314
systemd.services.conduit.serviceConfig.EnvironmentFile = config.sops.secrets."turn/env".path;
systemd.services.coturn.serviceConfig.SupplementaryGroups = [
config.security.acme.certs."tlater.net".group
];
services.coturn = {
enable = true;
no-cli = true;
use-auth-secret = true;
static-auth-secret-file = config.sops.secrets."turn/secret".path;
realm = turn-realm;
relay-ips = [ "116.202.158.55" ];
# SSL config
pkey = "${config.security.acme.certs."tlater.net".directory}/key.pem";
cert = "${config.security.acme.certs."tlater.net".directory}/fullchain.pem";
# Based on suggestions from
# https://github.com/matrix-org/synapse/blob/develop/docs/turn-howto.md
# and
# https://www.foxypossibilities.com/2018/05/19/setting-up-a-turn-sever-for-matrix-on-nixos/
no-tcp-relay = true;
secure-stun = true;
extraConfig = ''
# Deny various local IP ranges, see
# https://www.rtcsec.com/article/cve-2020-26262-bypass-of-coturns-access-control-protection/
no-multicast-peers
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255 denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
# *Allow* any IP addresses that we explicitly set as relay IPs
${concatMapStringsSep "\n" (ip: "allowed-peer-ip=${ip}") config.services.coturn.relay-ips}
# Various other security settings
no-tlsv1
no-tlsv1_1
# Monitoring
prometheus
'';
};
services.nginx.virtualHosts."${domain}" = {
useACMEHost = "tlater.net";
listen = [
{
addr = "0.0.0.0";
port = 80;
}
{
addr = "[::0]";
port = 80;
}
{
addr = "0.0.0.0";
port = 443;
ssl = true;
}
{
addr = "[::0]";
port = 443;
ssl = true;
}
{
addr = "0.0.0.0";
port = 8448;
ssl = true;
}
{
addr = "[::0]";
port = 8448;
ssl = true;
}
];
forceSSL = true;
enableHSTS = true;
extraConfig = ''
merge_slashes off;
'';
locations = {
"/_matrix" = {
proxyPass = "http://${cfg.settings.global.address}:${toString cfg.settings.global.port}";
# Recommended by conduit
extraConfig = ''
proxy_buffering off;
'';
};
"/.well-known/matrix" = {
proxyPass = "http://${cfg.settings.global.address}:${toString cfg.settings.global.port}";
};
};
};
services.backups.conduit = {
user = "root";
paths = [ "/var/lib/private/matrix-conduit/" ];
# Other services store their data in conduit, so no other services
# need to be shut down currently.
pauseServices = [ "conduit.service" ];
};
}

View file

@ -29,29 +29,16 @@ let
};
# Encryption support
# TODO(tlater): Enable when
# https://github.com/matrix-org/matrix-hookshot/issues/1060 is
# fixed
# extraSettings = {
# "de.sorunome.msc2409.push_ephemeral" = true;
# push_ephemeral = true;
# "org.matrix.msc3202" = true;
# };
extraSettings = {
"de.sorunome.msc2409.push_ephemeral" = true;
push_ephemeral = true;
"org.matrix.msc3202" = true;
};
runtimeRegistration = "${cfg.registrationFile}";
};
in
{
# users = {
# users.matrix-hookshot = {
# home = "/run/matrix-hookshot";
# group = "matrix-hookshot";
# isSystemUser = true;
# };
# groups.matrix-hookshot = { };
# };
systemd.services.matrix-hookshot = {
serviceConfig = {
Type = lib.mkForce "exec";
@ -62,7 +49,6 @@ in
# Some library in matrix-hookshot wants a home directory
Environment = [ "HOME=/run/matrix-hookshot" ];
# User = "matrix-hookshot";
DynamicUser = true;
StateDirectory = "matrix-hookshot";
RuntimeDirectory = "matrix-hookshot";
@ -76,11 +62,7 @@ in
ProtectKernelModules = true;
ProtectKernelLogs = true;
ProtectControlGroups = true;
RestrictAddressFamilies = [
# "AF_UNIX"
"AF_INET"
"AF_INET6"
];
RestrictAddressFamilies = [ "AF_INET AF_INET6" ];
LockPersonality = true;
RestrictRealtime = true;
ProtectProc = "invisible";
@ -89,15 +71,12 @@ in
};
};
# services.redis.servers.matrix-hookshot = {
# enable = true;
# user = "matrix-hookshot";
# };
services.matrix-hookshot = {
enable = true;
serviceDependencies = [ "conduit.service" ];
serviceDependencies = [
"conduit.service"
];
registrationFile = "/run/matrix-hookshot/registration.yaml";
@ -112,8 +91,6 @@ in
bot.displayname = "Hookshot";
# cache.redisUri = "redis://${config.services.redis.servers.matrix-hookshot.unixSocket}";
generic = {
enabled = true;
outbound = false;
@ -123,10 +100,7 @@ in
allowJsTransformationFunctions = true;
};
# TODO(tlater): Enable when
# https://github.com/matrix-org/matrix-hookshot/issues/1060 is
# fixed
# encryption.storagePath = "/var/lib/matrix-hookshot/cryptostore";
encryption.storagePath = "/var/lib/matrix-hookshot/cryptostore";
permissions = [
{
@ -152,15 +126,19 @@ in
listeners = [
{
port = 9000;
resources = [ "webhooks" ];
resources = [
"webhooks"
];
}
{
port = 9001;
resources = [ "metrics" ];
resources = [
"metrics"
];
}
];
metrics.enabled = true;
metrics.enable = true;
};
};
}

View file

@ -8,7 +8,21 @@
security.crowdsec = {
enable = true;
parserWhitelist = [ "10.45.249.2" ];
parserWhitelist = [
"10.45.249.2"
];
extraConfig."postoverflows/s01-whitelist/matrix-whitelist.yaml" = {
name = "tetsumaki/matrix";
description = "custom matrix whitelist";
whitelist = {
reason = "whitelist false positive for matrix";
expression = [
"evt.Overflow.Alert.Events[0].GetMeta('target_fqdn') == '${config.services.matrix-conduit.settings.global.server_name}'"
"evt.Overflow.Alert.GetScenario() in ['crowdsecurity/http-probing', 'crowdsecurity/http-crawl-non_statics']"
];
};
};
extraGroups = [
"systemd-journal"
@ -19,23 +33,28 @@
{
source = "journalctl";
labels.type = "syslog";
journalctl_filter = [ "SYSLOG_IDENTIFIER=Nextcloud" ];
journalctl_filter = [
"SYSLOG_IDENTIFIER=Nextcloud"
];
}
{
source = "journalctl";
labels.type = "syslog";
journalctl_filter = [ "SYSLOG_IDENTIFIER=sshd-session" ];
journalctl_filter = [
"SYSLOG_IDENTIFIER=sshd-session"
];
}
{
labels.type = "nginx";
filenames = [
"/var/log/nginx/*.log"
]
++ lib.mapAttrsToList (
vHost: _: "/var/log/nginx/${vHost}/access.log"
) config.services.nginx.virtualHosts;
filenames =
[
"/var/log/nginx/*.log"
]
++ lib.mapAttrsToList (
vHost: _: "/var/log/nginx/${vHost}/access.log"
) config.services.nginx.virtualHosts;
}
];
@ -48,36 +67,4 @@
};
};
};
# Add whitelists for matrix
systemd.tmpfiles.settings."10-matrix" =
let
stateDir = config.security.crowdsec.stateDirectory;
in
{
"${stateDir}/config/postoverflows".d = {
user = "crowdsec";
group = "crowdsec";
mode = "0700";
};
"${stateDir}/config/postoverflows/s01-whitelist".d = {
user = "crowdsec";
group = "crowdsec";
mode = "0700";
};
"${stateDir}/config/postoverflows/s01-whitelist/matrix-whitelist.yaml"."L+".argument =
((pkgs.formats.yaml { }).generate "crowdsec-matrix-whitelist.yaml" {
name = "tetsumaki/matrix";
description = "custom matrix whitelist";
whitelist = {
reason = "whitelist false positive for matrix";
expression = [
"evt.Overflow.Alert.Events[0].GetMeta('target_fqdn') == '${config.services.matrix-conduit.settings.global.server_name}'"
"evt.Overflow.Alert.GetScenario() in ['crowdsecurity/http-probing', 'crowdsecurity/http-crawl-non_statics']"
];
};
}).outPath;
};
}

View file

@ -11,39 +11,37 @@ in
{
imports = [ flake-inputs.foundryvtt.nixosModules.foundryvtt ];
services = {
foundryvtt = {
enable = true;
hostName = domain;
minifyStaticFiles = true;
proxySSL = true;
proxyPort = 443;
package = flake-inputs.foundryvtt.packages.${pkgs.system}.foundryvtt_13;
};
nginx.virtualHosts."${domain}" =
let
inherit (config.services.foundryvtt) port;
in
{
forceSSL = true;
useACMEHost = "tlater.net";
enableHSTS = true;
locations."/" = {
proxyWebsockets = true;
proxyPass = "http://localhost:${toString port}";
};
};
backups.foundryvtt = {
user = "foundryvtt";
paths = [ config.services.foundryvtt.dataDir ];
pauseServices = [ "foundryvtt.service" ];
};
services.foundryvtt = {
enable = true;
hostName = domain;
minifyStaticFiles = true;
proxySSL = true;
proxyPort = 443;
package = flake-inputs.foundryvtt.packages.${pkgs.system}.foundryvtt_11;
};
# Want to start it manually when I need it, not have it constantly
# running
systemd.services.foundryvtt.wantedBy = lib.mkForce [ ];
services.nginx.virtualHosts."${domain}" =
let
inherit (config.services.foundryvtt) port;
in
{
forceSSL = true;
useACMEHost = "tlater.net";
enableHSTS = true;
locations."/" = {
proxyWebsockets = true;
proxyPass = "http://localhost:${toString port}";
};
};
services.backups.foundryvtt = {
user = "foundryvtt";
paths = [ config.services.foundryvtt.dataDir ];
pauseServices = [ "foundryvtt.service" ];
};
}

View file

@ -8,68 +8,24 @@ let
domain = "gitea.${config.services.nginx.domain}";
in
{
services = {
forgejo = {
enable = true;
database.type = "postgres";
services.forgejo = {
enable = true;
database.type = "postgres";
settings = {
server = {
DOMAIN = domain;
HTTP_ADDR = "127.0.0.1";
ROOT_URL = "https://${domain}/";
SSH_PORT = 2222;
};
metrics = {
ENABLED = true;
TOKEN = "#metricstoken#";
};
service.DISABLE_REGISTRATION = true;
session.COOKIE_SECURE = true;
};
};
# Set up SSL
nginx.virtualHosts."${domain}" =
let
httpAddress = config.services.forgejo.settings.server.HTTP_ADDR;
httpPort = config.services.forgejo.settings.server.HTTP_PORT;
in
{
forceSSL = true;
useACMEHost = "tlater.net";
enableHSTS = true;
locations."/".proxyPass = "http://${httpAddress}:${toString httpPort}";
locations."/metrics" = {
extraConfig = ''
access_log off;
allow 127.0.0.1;
${lib.optionalString config.networking.enableIPv6 "allow ::1;"}
deny all;
'';
};
settings = {
server = {
DOMAIN = domain;
HTTP_ADDR = "127.0.0.1";
ROOT_URL = "https://${domain}/";
SSH_PORT = 2222;
};
backups.forgejo = {
user = "forgejo";
paths = [
"/var/lib/forgejo/forgejo-db.sql"
"/var/lib/forgejo/repositories/"
"/var/lib/forgejo/data/"
"/var/lib/forgejo/custom/"
# Conf is backed up via nix
];
preparation = {
packages = [ config.services.postgresql.package ];
text = "pg_dump ${config.services.forgejo.database.name} --file=/var/lib/forgejo/forgejo-db.sql";
metrics = {
ENABLED = true;
TOKEN = "#metricstoken#";
};
cleanup = {
packages = [ pkgs.coreutils ];
text = "rm /var/lib/forgejo/forgejo-db.sql";
};
pauseServices = [ "forgejo.service" ];
service.DISABLE_REGISTRATION = true;
session.COOKIE_SECURE = true;
};
};
@ -80,4 +36,46 @@ in
runConfig = "${config.services.forgejo.customDir}/conf/app.ini";
in
[ "+${replaceSecretBin} '#metricstoken#' '${secretPath}' '${runConfig}'" ];
# Set up SSL
services.nginx.virtualHosts."${domain}" =
let
httpAddress = config.services.forgejo.settings.server.HTTP_ADDR;
httpPort = config.services.forgejo.settings.server.HTTP_PORT;
in
{
forceSSL = true;
useACMEHost = "tlater.net";
enableHSTS = true;
locations."/".proxyPass = "http://${httpAddress}:${toString httpPort}";
locations."/metrics" = {
extraConfig = ''
access_log off;
allow 127.0.0.1;
${lib.optionalString config.networking.enableIPv6 "allow ::1;"}
deny all;
'';
};
};
services.backups.forgejo = {
user = "forgejo";
paths = [
"/var/lib/forgejo/forgejo-db.sql"
"/var/lib/forgejo/repositories/"
"/var/lib/forgejo/data/"
"/var/lib/forgejo/custom/"
# Conf is backed up via nix
];
preparation = {
packages = [ config.services.postgresql.package ];
text = "pg_dump ${config.services.forgejo.database.name} --file=/var/lib/forgejo/forgejo-db.sql";
};
cleanup = {
packages = [ pkgs.coreutils ];
text = "rm /var/lib/forgejo/forgejo-db.sql";
};
pauseServices = [ "forgejo.service" ];
};
}

View file

@ -1,67 +0,0 @@
{
pkgs,
config,
lib,
...
}:
let
hostName = "immich.${config.services.nginx.domain}";
in
{
services = {
immich = {
enable = true;
settings.server.externalDomain = "https://${hostName}";
environment.IMMICH_TELEMETRY_INCLUDE = "all";
};
nginx.virtualHosts.${hostName} =
let
local = "http://${config.services.immich.host}:${toString config.services.immich.port}";
in
{
forceSSL = true;
useACMEHost = "tlater.net";
enableHSTS = true;
locations."/" = {
proxyPass = local;
proxyWebsockets = true;
};
locations."/metrics" = {
extraConfig = ''
access_log off;
allow 127.0.0.1;
${lib.optionalString config.networking.enableIPv6 "allow ::1;"}
deny all;
'';
};
};
backups.immich =
let
db-dump = "${config.services.immich.mediaLocation}/immich-db.sql";
in
{
user = "immich";
paths = [ config.services.immich.mediaLocation ];
preparation = {
packages = [ config.services.postgresql.package ];
text = ''
pg_dump ${config.services.immich.database.name} --clean --if-exists --file=${db-dump}
'';
};
cleanup = {
packages = [ pkgs.coreutils ];
text = "rm ${db-dump}";
};
pauseServices = [
"immich-server.service"
"immich-machine-learning.service"
];
};
};
}

View file

@ -74,7 +74,7 @@ in
listenAddress = "127.0.0.1";
group = "nginx";
settings.namespaces = lib.mapAttrsToList (name: _: {
settings.namespaces = lib.mapAttrsToList (name: virtualHost: {
inherit name;
metrics_override.prefix = "nginxlog";
namespace_label = "vhost";
@ -97,6 +97,4 @@ in
# - postgres (?)
# - ssl_exporter (?)
};
services.dbus.implementation = "broker";
}

View file

@ -1,4 +1,9 @@
{ pkgs, config, ... }:
{
pkgs,
config,
flake-inputs,
...
}:
let
domain = "metrics.${config.services.nginx.domain}";
in
@ -30,7 +35,7 @@ in
declarativePlugins = [
pkgs.grafanaPlugins.victoriametrics-metrics-datasource
pkgs.grafanaPlugins.victoriametrics-logs-datasource
flake-inputs.nixpkgs-unstable.legacyPackages.${pkgs.system}.grafanaPlugins.victoriametrics-logs-datasource
];
provision = {

View file

@ -38,7 +38,7 @@ in
services.victoriametrics.scrapeConfigs = mkOption {
type = types.attrsOf (
types.submodule (
{ name, ... }:
{ name, self, ... }:
{
options = {
job_name = mkOption {
@ -106,37 +106,35 @@ in
# module is an intractable mess
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
Restart = mkDefault "always";
PrivateTmp = mkDefault true;
WorkingDirectory = mkDefault /tmp;
DynamicUser = mkDefault true;
# Hardening
CapabilityBoundingSet = mkDefault [ "" ];
DeviceAllow = [ "" ];
LockPersonality = true;
MemoryDenyWriteExecute = true;
NoNewPrivileges = true;
PrivateDevices = mkDefault true;
ProtectClock = mkDefault true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectSystem = mkDefault "strict";
RemoveIPC = true;
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
UMask = "0077";
};
serviceConfig.Restart = mkDefault "always";
serviceConfig.PrivateTmp = mkDefault true;
serviceConfig.WorkingDirectory = mkDefault /tmp;
serviceConfig.DynamicUser = mkDefault true;
# Hardening
serviceConfig.CapabilityBoundingSet = mkDefault [ "" ];
serviceConfig.DeviceAllow = [ "" ];
serviceConfig.LockPersonality = true;
serviceConfig.MemoryDenyWriteExecute = true;
serviceConfig.NoNewPrivileges = true;
serviceConfig.PrivateDevices = mkDefault true;
serviceConfig.ProtectClock = mkDefault true;
serviceConfig.ProtectControlGroups = true;
serviceConfig.ProtectHome = true;
serviceConfig.ProtectHostname = true;
serviceConfig.ProtectKernelLogs = true;
serviceConfig.ProtectKernelModules = true;
serviceConfig.ProtectKernelTunables = true;
serviceConfig.ProtectSystem = mkDefault "strict";
serviceConfig.RemoveIPC = true;
serviceConfig.RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
];
serviceConfig.RestrictNamespaces = true;
serviceConfig.RestrictRealtime = true;
serviceConfig.RestrictSUIDSGID = true;
serviceConfig.SystemCallArchitectures = "native";
serviceConfig.UMask = "0077";
}
exporter.serviceOpts
]
@ -146,7 +144,7 @@ in
{
vmagent-scrape-exporters =
let
inherit (config.services.victoriametrics) listenAddress;
listenAddress = config.services.victoriametrics.listenAddress;
vmAddr = (lib.optionalString (lib.hasPrefix ":" listenAddress) "127.0.0.1") + listenAddress;
promscrape = yaml.generate "prometheus.yml" {
scrape_configs = lib.mapAttrsToList (
@ -154,7 +152,8 @@ in
lib.recursiveUpdate {
inherit (scrape) job_name;
static_configs =
scrape.static_configs ++ lib.optional (scrape.targets != [ ]) { inherit (scrape) targets; };
scrape.static_configs
++ lib.optional (scrape.targets != [ ]) { targets = scrape.targets; };
} scrape.extraSettings
) config.services.victoriametrics.scrapeConfigs;
};
@ -213,7 +212,7 @@ in
services.victoriametrics.scrapeConfigs =
let
allExporters = lib.mapAttrs (_: exporter: { inherit (exporter) listenAddress port; }) (
allExporters = lib.mapAttrs (name: exporter: { inherit (exporter) listenAddress port; }) (
(lib.filterAttrs (
name: exporter:
# A bunch of deprecated exporters that need to be ignored

View file

@ -1,22 +1,37 @@
{ config, lib, ... }:
{
config,
pkgs,
lib,
...
}:
let
cfg = config.services.victorialogs;
pkg = pkgs.victoriametrics;
dirname = "victorialogs";
in
{
options.services.victorialogs.bindAddress = lib.mkOption {
readOnly = true;
type = lib.types.str;
description = ''
Final address on which victorialogs listens.
'';
};
options.services.victorialogs =
let
inherit (lib.types) str;
in
{
listenAddress = lib.mkOption {
default = ":9428";
type = str;
};
bindAddress = lib.mkOption {
readOnly = true;
type = str;
description = ''
Final address on which victorialogs listens.
'';
};
};
config = {
services.victorialogs = {
enable = true;
bindAddress =
(lib.optionalString (lib.hasPrefix ":" cfg.listenAddress) "127.0.0.1") + cfg.listenAddress;
};
services.victorialogs.bindAddress =
(lib.optionalString (lib.hasPrefix ":" cfg.listenAddress) "127.0.0.1") + cfg.listenAddress;
services.journald.upload = {
enable = true;
@ -25,6 +40,71 @@ in
NetworkTimeoutSec = "20s";
};
};
systemd.services."systemd-journal-upload".after = [ "victorialogs.service" ];
systemd.services.victorialogs = {
description = "VictoriaLogs log database";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
startLimitBurst = 5;
serviceConfig = {
ExecStart = lib.escapeShellArgs [
"${pkg}/bin/victoria-logs"
"-storageDataPath=/var/lib/${dirname}"
"-httpListenAddr=${cfg.listenAddress}"
];
DynamicUser = true;
RestartSec = 1;
Restart = "on-failure";
RuntimeDirectory = dirname;
RuntimeDirectoryMode = "0700";
StateDirectory = dirname;
StateDirectoryMode = "0700";
LimitNOFILE = 1048576;
# Hardening
DeviceAllow = [ "/dev/null rw" ];
DevicePolicy = "strict";
LockPersonality = true;
MemoryDenyWriteExecute = true;
NoNewPrivileges = true;
PrivateDevices = true;
PrivateTmp = true;
PrivateUsers = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
ProtectSystem = "full";
RemoveIPC = true;
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
"AF_UNIX"
];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
SystemCallFilter = [
"@system-service"
"~@privileged"
];
};
postStart = lib.mkBefore ''
until ${lib.getBin pkgs.curl}/bin/curl -s -o /dev/null http://${cfg.bindAddress}/ping; do
sleep 1;
done
'';
};
};
}

View file

@ -84,16 +84,9 @@ in
in
[ "${address}:${toString port}" ];
immich.targets = [
"127.0.0.1:8081"
"127.0.0.1:8082"
];
# Configured in the hookshot listeners, but it's hard to filter
# the correct values out of that config.
matrixHookshot.targets = [ "127.0.0.1:9001" ];
victorialogs.targets = [ config.services.victorialogs.bindAddress ];
};
};
}

View file

@ -4,9 +4,6 @@
config,
...
}:
let
java = pkgs.jdk21_headless;
in
{
services.minecraft-server = {
enable = true;
@ -42,7 +39,7 @@ in
package = pkgs.writeShellApplication {
name = "minecraft-server";
runtimeInputs = [ java ];
runtimeInputs = with pkgs; [ jdk17_headless ];
text = ''
exec /var/lib/minecraft/run.sh $@
@ -51,19 +48,16 @@ in
};
systemd.services.minecraft-server = {
path = [ java ];
path = with pkgs; [ jdk17_headless ];
# Since we read from our own HTTP server, we need to wait for it
# to be up
after = [ "nginx.service" ];
# Don't auto-start the server
wantedBy = lib.mkForce [ ];
serviceConfig = {
# Use packwiz to install mods
ExecStartPre = [
"${java}/bin/java -jar ${config.services.minecraft-server.dataDir}/packwiz-installer-bootstrap.jar -g -s server 'https://minecraft.${config.services.nginx.domain}/cobblemon-pack/pack.toml'"
"${pkgs.jdk17_headless}/bin/java -jar ${config.services.minecraft-server.dataDir}/packwiz-installer-bootstrap.jar -g -s server 'https://minecraft.${config.services.nginx.domain}/cobblemon-pack/pack.toml'"
];
# Forge requires some bonus JVM options, which they include in a
# little `run.sh` script
@ -77,13 +71,6 @@ in
group = "minecraft";
mode = "0775";
};
"/srv/minecraft/cobblemon-pack"."L+" = {
user = "nginx";
group = "minecraft";
mode = "0775";
argument = "${../../pkgs/minecraftmon}";
};
};
services.nginx.virtualHosts."minecraft.${config.services.nginx.domain}" = {

View file

@ -5,99 +5,97 @@
...
}:
let
nextcloud = pkgs.nextcloud31;
nextcloud = pkgs.nextcloud30;
hostName = "nextcloud.${config.services.nginx.domain}";
in
{
services = {
nextcloud = {
inherit hostName;
services.nextcloud = {
inherit hostName;
package = nextcloud;
phpPackage = lib.mkForce (
pkgs.php.override {
packageOverrides = _: prev: {
extensions = prev.extensions // {
pgsql = prev.extensions.pgsql.overrideAttrs (_: {
configureFlags = [ "--with-pgsql=${lib.getDev config.services.postgresql.package.pg_config}" ];
});
pdo_pgsql = prev.extensions.pdo_pgsql.overrideAttrs (_: {
configureFlags = [ "--with-pdo-pgsql=${lib.getDev config.services.postgresql.package.pg_config}" ];
});
};
package = nextcloud;
phpPackage = lib.mkForce (
pkgs.php.override {
packageOverrides = final: prev: {
extensions = prev.extensions // {
pgsql = prev.extensions.pgsql.overrideAttrs (old: {
configureFlags = [ "--with-pgsql=${lib.getDev config.services.postgresql.package}" ];
});
pdo_pgsql = prev.extensions.pdo_pgsql.overrideAttrs (old: {
configureFlags = [ "--with-pdo-pgsql=${lib.getDev config.services.postgresql.package}" ];
});
};
}
);
enable = true;
maxUploadSize = "2G";
https = true;
};
}
);
enable = true;
maxUploadSize = "2G";
https = true;
configureRedis = true;
configureRedis = true;
config = {
dbtype = "pgsql";
dbhost = "/run/postgresql";
config = {
dbtype = "pgsql";
dbhost = "/run/postgresql";
adminuser = "tlater";
adminpassFile = config.sops.secrets."nextcloud/tlater".path;
};
settings = {
default_phone_region = "AT";
overwriteprotocol = "https";
};
phpOptions = {
"opcache.interned_strings_buffer" = "16";
};
extraApps = {
inherit (config.services.nextcloud.package.packages.apps)
calendar
contacts
cookbook
news
;
};
adminuser = "tlater";
adminpassFile = config.sops.secrets."nextcloud/tlater".path;
};
# Set up SSL
nginx.virtualHosts."${hostName}" = {
forceSSL = true;
useACMEHost = "tlater.net";
# The upstream module already adds HSTS
settings = {
default_phone_region = "AT";
overwriteprotocol = "https";
};
backups.nextcloud = {
user = "nextcloud";
paths = [
"/var/lib/nextcloud/nextcloud-db.sql"
"/var/lib/nextcloud/data/"
"/var/lib/nextcloud/config/config.php"
];
preparation = {
packages = [
config.services.postgresql.package
config.services.nextcloud.occ
];
text = ''
nextcloud-occ maintenance:mode --on
pg_dump ${config.services.nextcloud.config.dbname} --file=/var/lib/nextcloud/nextcloud-db.sql
'';
};
cleanup = {
packages = [
pkgs.coreutils
config.services.nextcloud.occ
];
text = ''
rm /var/lib/nextcloud/nextcloud-db.sql
nextcloud-occ maintenance:mode --off
'';
};
phpOptions = {
"opcache.interned_strings_buffer" = "16";
};
extraApps = {
inherit (config.services.nextcloud.package.packages.apps)
calendar
contacts
cookbook
news
;
};
};
# Ensure that this service doesn't start before postgres is ready
systemd.services.nextcloud-setup.after = [ "postgresql.service" ];
# Set up SSL
services.nginx.virtualHosts."${hostName}" = {
forceSSL = true;
useACMEHost = "tlater.net";
# The upstream module already adds HSTS
};
services.backups.nextcloud = {
user = "nextcloud";
paths = [
"/var/lib/nextcloud/nextcloud-db.sql"
"/var/lib/nextcloud/data/"
"/var/lib/nextcloud/config/config.php"
];
preparation = {
packages = [
config.services.postgresql.package
config.services.nextcloud.occ
];
text = ''
nextcloud-occ maintenance:mode --on
pg_dump ${config.services.nextcloud.config.dbname} --file=/var/lib/nextcloud/nextcloud-db.sql
'';
};
cleanup = {
packages = [
pkgs.coreutils
config.services.nextcloud.occ
];
text = ''
rm /var/lib/nextcloud/nextcloud-db.sql
nextcloud-occ maintenance:mode --off
'';
};
};
}

View file

@ -1,6 +1,6 @@
{ config, ... }:
let
inherit (config.services.nginx) domain;
domain = config.services.nginx.domain;
in
{
services.tlaternet-webserver = {

77
flake.lock generated
View file

@ -208,11 +208,11 @@
"utils": "utils"
},
"locked": {
"lastModified": 1749105467,
"narHash": "sha256-hXh76y/wDl15almBcqvjryB50B0BaiXJKk20f314RoE=",
"lastModified": 1727447169,
"narHash": "sha256-3KyjMPUKHkiWhwR91J1YchF6zb6gvckCAY1jOE+ne0U=",
"owner": "serokell",
"repo": "deploy-rs",
"rev": "6bc76b872374845ba9d645a2f012b764fecd765f",
"rev": "aa07eb05537d4cd025e2310397a6adcedfe72c76",
"type": "github"
},
"original": {
@ -300,11 +300,11 @@
]
},
"locked": {
"lastModified": 1753140376,
"narHash": "sha256-7lrVrE0jSvZHrxEzvnfHFE/Wkk9DDqb+mYCodI5uuB8=",
"lastModified": 1739841949,
"narHash": "sha256-lSOXdgW/1zi/SSu7xp71v+55D5Egz8ACv0STkj7fhbs=",
"owner": "nix-community",
"repo": "disko",
"rev": "545aba02960caa78a31bd9a8709a0ad4b6320a5c",
"rev": "15dbf8cebd8e2655a883b74547108e089f051bf0",
"type": "github"
},
"original": {
@ -358,11 +358,11 @@
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1733328505,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
@ -595,11 +595,11 @@
]
},
"locked": {
"lastModified": 1752975459,
"narHash": "sha256-nOr9FfazId66oneIeeH6e5eALWcu0/zPn19DqbeFGME=",
"lastModified": 1739712626,
"narHash": "sha256-u3m+awbdL+0BKk8IWidsWMr+R0ian3GZMUlH7623kd8=",
"owner": "reckenrode",
"repo": "nix-foundryvtt",
"rev": "924f814523ea8c8792178ec5171ea055abaae0e4",
"rev": "a7fa493ba2c623cf90e83756b62285b3b58f18d2",
"type": "github"
},
"original": {
@ -730,11 +730,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1743014863,
"narHash": "sha256-jAIUqsiN2r3hCuHji80U7NNEafpIMBXiwKlSrjWMlpg=",
"lastModified": 1702272962,
"narHash": "sha256-D+zHwkwPc6oYQ4G3A1HuadopqRwUY/JkMwHz1YF7j4Q=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "bd3bac8bfb542dbde7ffffb6987a1a1f9d41699f",
"rev": "e97b3e4186bcadf0ef1b6be22b8558eab1cdeb5d",
"type": "github"
},
"original": {
@ -744,18 +744,34 @@
"type": "github"
}
},
"nixpkgs_2": {
"nixpkgs-unstable": {
"locked": {
"lastModified": 1754108423,
"narHash": "sha256-0AhuEljFdqvY4894RArZH+mzd1Y0Wojmfq8znh0ireg=",
"lastModified": 1740215764,
"narHash": "sha256-wzBbGGZ6i1VVBA/cDJaLfuuGYCUriD7fwsLgJJHRVRk=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "a41340f34fa59485a7c2017af3506b2ee1b216d8",
"rev": "8465e233b0668cf162c608a92e62e8d78c1ba7e4",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.05-small",
"ref": "nixos-unstable-small",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1740162160,
"narHash": "sha256-SSYxFhqCOb3aiPb6MmN68yEzBIltfom8IgRz7phHscM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "11415c7ae8539d6292f2928317ee7a8410b28bb9",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.11-small",
"repo": "nixpkgs",
"type": "github"
}
@ -1006,6 +1022,7 @@
"disko": "disko",
"foundryvtt": "foundryvtt",
"nixpkgs": "nixpkgs_2",
"nixpkgs-unstable": "nixpkgs-unstable",
"sonnenshift": "sonnenshift",
"sops-nix": "sops-nix",
"tlaternet-webserver": "tlaternet-webserver"
@ -1059,11 +1076,11 @@
]
},
"locked": {
"lastModified": 1748144928,
"narHash": "sha256-OPdi6AjrWWwZlukNwDHDWAf1CCFkHsf8JbA3rJoibXM=",
"lastModified": 1740082109,
"narHash": "sha256-WdRNkwsIotFOSymee/yQyH46RmYtuxd1FENhvGL4KRc=",
"ref": "refs/heads/main",
"rev": "429036aa8630d2325f8a9f067cc041d628279a8e",
"revCount": 24,
"rev": "a1b48cf2ba194054e2d8816c94a84cebc4fb5de0",
"revCount": 23,
"type": "git",
"url": "ssh://git@github.com/sonnenshift/battery-manager"
},
@ -1079,11 +1096,11 @@
]
},
"locked": {
"lastModified": 1752544651,
"narHash": "sha256-GllP7cmQu7zLZTs9z0J2gIL42IZHa9CBEXwBY9szT0U=",
"lastModified": 1739262228,
"narHash": "sha256-7JAGezJ0Dn5qIyA2+T4Dt/xQgAbhCglh6lzCekTVMeU=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "2c8def626f54708a9c38a5861866660395bb3461",
"rev": "07af005bb7d60c7f118d9d9f5530485da5d1e975",
"type": "github"
},
"original": {
@ -1209,11 +1226,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"lastModified": 1701680307,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"type": "github"
},
"original": {

View file

@ -2,7 +2,8 @@
description = "tlater.net host configuration";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05-small";
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11-small";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable-small";
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
@ -91,7 +92,7 @@
#########
# Tests #
#########
checks.${system} = import ./checks (inputs // { inherit system; });
checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
###########################
# Garbage collection root #
@ -116,6 +117,8 @@
run-vm = {
type = "app";
program =
let
in
(pkgs.writeShellScript "" ''
${vm.config.system.build.vm.outPath}/bin/run-testvm-vm
'').outPath;
@ -141,22 +144,27 @@
###########################
# Development environment #
###########################
devShells.${system} = {
default = nixpkgs.legacyPackages.${system}.mkShell {
sopsPGPKeyDirs = [
"./keys/hosts/"
"./keys/users/"
];
nativeBuildInputs = [ sops-nix.packages.${system}.sops-import-keys-hook ];
devShells.${system}.default = nixpkgs.legacyPackages.${system}.mkShell {
sopsPGPKeyDirs = [
"./keys/hosts/"
"./keys/users/"
];
nativeBuildInputs = [ sops-nix.packages.${system}.sops-import-keys-hook ];
packages = with pkgs; [
sops-nix.packages.${system}.sops-init-gpg-key
deploy-rs.packages.${system}.default
nixpkgs-fmt
];
};
packages = with pkgs; [
sops-nix.packages.${system}.sops-init-gpg-key
deploy-rs.packages.${system}.default
nixpkgs-fmt
cargo
clippy
rustc
rustfmt
rust-analyzer
pkg-config
openssl
];
};
minecraft = nixpkgs.legacyPackages.${system}.mkShell { packages = [ pkgs.packwiz ]; };
};
}

View file

@ -31,6 +31,22 @@ let
${lib.concatMapStringsSep "\n---\n" builtins.toJSON cfg.acquisitions}
---
'';
extraConfigs = pkgs.symlinkJoin {
name = "crowdsec-extra-configs";
paths = lib.mapAttrsToList (
path: settings:
(settingsFormat.generate path settings).overrideAttrs (old: {
patchPhase = ''
mkdir -p "$out/${dirOf path}/"
out="$out/${dirOf path}/"
echo $out
exit 1
'';
})
) cfg.extraConfig;
};
in
{
imports = [ ./remediations ];
@ -38,6 +54,7 @@ in
options.security.crowdsec =
let
inherit (lib.types)
attrsOf
nullOr
listOf
package
@ -85,6 +102,16 @@ in
'';
};
extraConfig = lib.mkOption {
type = attrsOf (settingsFormat.type);
default = {
"parsers/s02-enrich/nixos-whitelist.yaml" = cfg.parserWhitelist;
};
description = ''
Set of additional configurations to install.
'';
};
acquisitions = lib.mkOption {
type = listOf settingsFormat.type;
default = [ ];
@ -247,7 +274,10 @@ in
online_client = {
# By default, we don't let crowdsec phone home, since
# this is usually within NixOS users' concerns.
sharing = lib.mkDefault false;
#
# TODO: Enable when this option becomes available
# (1.6.4, current nixpkgs-unstable)
# sharing = lib.mkDefault false;
credentials_path = cfg.centralApiCredentials;
};
};
@ -264,7 +294,9 @@ in
};
};
systemd.packages = [ cfg.package ];
systemd.packages = [
cfg.package
];
environment = {
systemPackages = [
@ -295,33 +327,6 @@ in
group = "crowdsec";
mode = "0700";
};
"${cfg.stateDirectory}/config/parsers".d = lib.mkIf (cfg.parserWhitelist != [ ]) {
user = "crowdsec";
group = "crowdsec";
mode = "0700";
};
"${cfg.stateDirectory}/config/parsers/s02-enrich".d = lib.mkIf (cfg.parserWhitelist != [ ]) {
user = "crowdsec";
group = "crowdsec";
mode = "0700";
};
"${cfg.stateDirectory}/config/parsers/s02-enrich/nixos-whitelist.yaml" =
lib.mkIf (cfg.parserWhitelist != [ ])
{
"L+".argument =
(settingsFormat.generate "crowdsec-nixos-whitelist.yaml" {
name = "nixos/parser-whitelist";
description = "Parser whitelist generated by the crowdsec NixOS module";
whitelist = {
reason = "Filtered by NixOS whitelist";
ip = lib.lists.filter (ip: !(lib.hasInfix "/" ip)) cfg.parserWhitelist;
cidr = lib.lists.filter (ip: lib.hasInfix "/" ip) cfg.parserWhitelist;
};
}).outPath;
};
};
services = {
@ -331,6 +336,8 @@ in
description = "Crowdsec database and config preparation";
script = ''
cp --copy-contents --recursive ${extraConfigs}/. ${cfg.stateDirectory}/config
if [ ! -e '${cfg.settings.config_paths.simulation_path}' ]; then
cp '${cfg.package}/share/crowdsec/config/simulation.yaml' '${cfg.settings.config_paths.simulation_path}'
fi

View file

@ -6,11 +6,10 @@
...
}:
let
inherit (flake-inputs.self.packages.${pkgs.system}) crowdsec-firewall-bouncer;
crowdsecCfg = config.security.crowdsec;
cfg = crowdsecCfg.remediationComponents.firewallBouncer;
settingsFormat = pkgs.formats.yaml { };
crowdsec-firewall-bouncer = flake-inputs.self.packages.${pkgs.system}.crowdsec-firewall-bouncer;
in
{
options.security.crowdsec.remediationComponents.firewallBouncer = {
@ -32,7 +31,9 @@ in
security.crowdsec.remediationComponents.firewallBouncer.settings = {
mode = lib.mkDefault "${if config.networking.nftables.enable then "nftables" else "iptables"}";
log_mode = "stdout";
iptables_chains = [ "nixos-fw" ];
iptables_chains = [
"nixos-fw"
];
# Don't let users easily override this; unfortunately we need to
# set up this key through substitution at runtime.
@ -77,7 +78,9 @@ in
requiredBy = [ "crowdsec.service" ];
path =
lib.optionals (cfg.settings.mode == "ipset" || cfg.settings.mode == "iptables") [ pkgs.ipset ]
lib.optionals (cfg.settings.mode == "ipset" || cfg.settings.mode == "iptables") [
pkgs.ipset
]
++ lib.optional (cfg.settings.mode == "iptables") pkgs.iptables
++ lib.optional (cfg.settings.mode == "nftables") pkgs.nftables;
};

View file

@ -1 +1,5 @@
{ imports = [ ./cs-firewall-bouncer.nix ]; }
{
imports = [
./cs-firewall-bouncer.nix
];
}

View file

@ -21,7 +21,7 @@
},
"crowdsec-hub": {
"cargoLocks": null,
"date": "2025-05-17",
"date": "2025-02-22",
"extract": null,
"name": "crowdsec-hub",
"passthru": null,
@ -33,10 +33,10 @@
"name": null,
"owner": "crowdsecurity",
"repo": "hub",
"rev": "850614b9fcd4298f559b422c5ac685a69aa2e5ff",
"sha256": "sha256-96MMwFN5KongQA3YJVSuk7Kanbr1gR94CCyiflmez2k=",
"rev": "f9883cd6c7d1913c13e4a3a69d9a0b887a7d57df",
"sha256": "sha256-45pUln7Qj5luY9I9BE2qhzjH7kv4IbYvNoEX3/4AVVg=",
"type": "github"
},
"version": "850614b9fcd4298f559b422c5ac685a69aa2e5ff"
"version": "f9883cd6c7d1913c13e4a3a69d9a0b887a7d57df"
}
}

View file

@ -14,14 +14,14 @@
};
crowdsec-hub = {
pname = "crowdsec-hub";
version = "850614b9fcd4298f559b422c5ac685a69aa2e5ff";
version = "f9883cd6c7d1913c13e4a3a69d9a0b887a7d57df";
src = fetchFromGitHub {
owner = "crowdsecurity";
repo = "hub";
rev = "850614b9fcd4298f559b422c5ac685a69aa2e5ff";
rev = "f9883cd6c7d1913c13e4a3a69d9a0b887a7d57df";
fetchSubmodules = false;
sha256 = "sha256-96MMwFN5KongQA3YJVSuk7Kanbr1gR94CCyiflmez2k=";
sha256 = "sha256-45pUln7Qj5luY9I9BE2qhzjH7kv4IbYvNoEX3/4AVVg=";
};
date = "2025-05-17";
date = "2025-02-22";
};
}

View file

@ -1 +1,4 @@
{ sources }: sources.crowdsec-hub.src
{
sources,
}:
sources.crowdsec-hub.src

View file

@ -1,2 +0,0 @@
.direnv
.envrc

View file

@ -1,811 +0,0 @@
[Etc]
#ScreenShake(on/off)
"ScreenShake(on/off)" = true
#Forced viewpoint change when hit by a grab attack
"setThirdPerson(on/off)" = true
#Forced viewpoint change when hit by a grab attack
"setFirstPerson(on/off)" = true
["bosses Common settings"]
#custombossbar(on/off)
"custombossbar(on/off)" = true
#BossMusic(on/off)
"BossMusic(on/off)" = true
#BossMusicVolume(denominator)
# Default: 1
# Range: 1 ~ 1000000
BossMusicVolume = 1
#If the boss leaves the summoned location and there is no target, it returns to the summoned location. When set to 0, it does not return
# Default: 20
# Range: 0 ~ 200
ReturnHome = 20
[Weapon]
#Armor Infinity Durability(on/off)
"Armor Infinity Durability(on/off)" = true
#Bulwark of the Flame's Cooldown
# Default: 80
# Range: 0 ~ 1000000
BulwarkOfTheFlameCooldown = 80
#Gauntlet of Bulwark's Cooldown
# Default: 80
# Range: 0 ~ 1000000
GauntletOfBulwarkCooldown = 80
#Infernal Forge's Cooldown
# Default: 80
# Range: 0 ~ 1000000
InfernalForgeCooldown = 80
#Void Forge's Cooldown
# Default: 120
# Range: 0 ~ 1000000
VoidForgeCooldown = 120
#The Incinerator's Cooldown
# Default: 400
# Range: 0 ~ 1000000
TheIncineratorCooldown = 400
#Wither Assault Shoulder Weapon's Missile Cooldown
# Default: 40
# Range: 0 ~ 1000000
WASWMissileCooldown = 40
#WASW's Wither Missile's Damage
# Default: 16.0
# Range: 0.0 ~ 1000000.0
"WASW's WitherMissiledamage" = 16.0
#Wither Assault Shoulder Weapon's Howitzer Cooldown
# Default: 100
# Range: 0 ~ 1000000
WASWHowitzerCooldown = 100
#Void Assault Shoulder Weapon's Cooldown
# Default: 120
# Range: 0 ~ 1000000
VASWCooldown = 120
#Void Core's Cooldown
# Default: 160
# Range: 0 ~ 1000000
VoidCoreCooldown = 160
#Sandstorm's cooldown
# Default: 300
# Range: 0 ~ 1000000
Sandstormcooldown = 300
#Soul Render's Timer
# Default: 100
# Range: 0 ~ 1000000
SoulRenderCooldown = 100
#Gauntlet of Maelstrom's Timer
# Default: 180
# Range: 0 ~ 1000000
gauntletofMaelstromCooldown = 180
#The Immolator's Timer
# Default: 300
# Range: 0 ~ 1000000
immolatorCooldown = 300
#Storm Bringer's LightningStorm Damage
# Default: 6.0
# Range: 0.0 ~ 1000000.0
"Ceraunus 's Lightning Storm Damage" = 6.0
#Ceraunus's Wave Damage
# Default: 6.0
# Range: 0.0 ~ 1000000.0
"Ceraunus's Wave Damage'" = 6.0
#Ceraunus's Cooldown
# Default: 150
# Range: 0 ~ 1000000
"Ceraunus Cooldown" = 150
#Astrape's LightningStorm Damage
# Default: 11.0
# Range: 0.0 ~ 1000000.0
"Astrape's Lightning Spear Damage" = 11.0
#Astrape's Wave Damage
# Default: 2.0
# Range: 0.0 ~ 1000000.0
"Astrape's Area Damage'" = 2.0
#Astrape's Cooldown
# Default: 80
# Range: 0 ~ 1000000
"Astrape Cooldown" = 80
[Block]
#Cursed Tombstone Summon cooldown Minute
# Default: 1
# Range: 1 ~ 300
"Cursed Tombstone Summon cooldown Minute" = 1
["Entity damage"]
#Void Rune's Damage
# Default: 7.0
# Range: 0.0 ~ 1000000.0
Voidrunedamage = 7.0
#Ashen Breath's Damage
# Default: 4.0
# Range: 0.0 ~ 1000000.0
Ashenbreathdamage = 4.0
#Death Laser's Damage
# Default: 5.0
# Range: 0.0 ~ 1000000.0
DeathLaserdamage = 5.0
#Death Laser's Hp Damage
# Default: 5.0
# Range: 0.0 ~ 100.0
DeathLaserHpdamage = 5.0
#Player's Laser's Damage
# Default: 7.0
# Range: 0.0 ~ 1000000.0
Laserdamage = 7.0
#Blazing Bone's Damage
# Default: 5.0
# Range: 0.0 ~ 1000000.0
BlazingBonedamage = 5.0
#Lionfish Spike's Damage
# Default: 4.0
# Range: 0.0 ~ 1000000.0
LionfishSpikedamage = 4.0
#Wither Howizter's Damage
# Default: 8.0
# Range: 0.0 ~ 1000000.0
WitherHowizterdamage = 8.0
#Dimensional Rift's Damage
# Default: 10.0
# Range: 0.0 ~ 1000000.0
DimensionalRiftdamage = 10.0
#Wither Homing Missile's Damage
# Default: 3.0
# Range: 0.0 ~ 1000000.0
WitherHomingMissiledamage = 3.0
#Abyss Blast's Damage
# Default: 10.0
# Range: 0.0 ~ 1000000.0
AbyssBlastdamage = 10.0
#Abyss Blast's Hp Damage
# Default: 0.1
# Range: 0.0 ~ 1.0
AbyssBlastHpdamage = 0.1
#Abyss Orb's Damage
# Default: 4.0
# Range: 0.0 ~ 1000000.0
AbyssOrbdamage = 4.0
#Lava bomb's Radius
# Default: 2
# Range: 1 ~ 7
Lavabombradius = 2
#Amethyst Cluster's Damage
# Default: 12.0
# Range: 0.0 ~ 1000000.0
"Amethyst Cluster Damage" = 12.0
#Sandstorm's Damage
# Default: 5.0
# Range: 0.0 ~ 1000000.0
"Sandstorm Damage" = 5.0
#Ancient Desert Stele's Damage
# Default: 18.0
# Range: 0.0 ~ 1000000.0
"Ancient Desert Stele Damage" = 18.0
#Player's Phantom Arrow's Damage
# Default: 8.0
# Range: 0.0 ~ 1000000.0
"Phantom Arrow Damage" = 8.0
#Phantom Halberd's Damage
# Default: 12.0
# Range: 0.0 ~ 1000000.0
"Phantom Halberd Damage" = 12.0
#Cursed Sandstorm's Damage
# Default: 7.5
# Range: 0.0 ~ 1000000.0
"Cursed Sandstorm Damage" = 7.5
#Flame jet's Damage
# Default: 7.0
# Range: 0.0 ~ 1000000.0
"Flame Jet Damage" = 7.0
#Flare Bomb's Damage
# Default: 7.0
# Range: 0.0 ~ 1000000.0
"Flare Bomb Damage" = 7.0
["Ender Guardian"]
#EnderGuardian's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
EnderGuardianHealthMultiplier = 1.0
#EnderGuardian's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
EnderGuardianDamageMultiplier = 1.0
#EnderGuardian's DamageCap
# Default: 22.0
# Range: 0.0 ~ 1000000.0
EnderGuardianDamageCap = 22.0
#EnderGuardian's DamageTime
# Default: 30
# Range: 0 ~ 100
EnderGuardianDamageTime = 30
#EnderGuardian's Healing with out target
# Default: 25.0
# Range: 0.0 ~ 1000000.0
EnderGuardianNatureHealing = 25.0
#Ender guardian's block breaking ignore the MobGriefing
EnderguardianBlockBreaking = true
#Guardian's Immune to Long distance attack range.
# Default: 12.0
# Range: 1.0 ~ 1000000.0
"Guardian's prevent attacks from far away Range" = 12.0
#Guardian's gravity Punch Hp Damage
# Default: 0.05
# Range: 0.0 ~ 1.0
"Guardian's gravity Punch Hp Damage" = 0.05
#Guardian's Teleport attack Hp Damage
# Default: 0.05
# Range: 0.0 ~ 1.0
"Guardian's Teleport attack Hp Damage" = 0.05
#Guardian's Punch Hp Damage
# Default: 0.06
# Range: 0.0 ~ 1.0
"Guardian's knockback Hp Damage" = 0.06
#Guardian's Uppercut Hp Damage
# Default: 0.1
# Range: 0.0 ~ 1.0
"Guardian's Uppercut Hp Damage" = 0.1
#Guardian's RocketPunch Hp Damage
# Default: 0.1
# Range: 0.0 ~ 1.0
"Guardian's RocketPunch Hp Damage" = 0.1
#Guardian's etc area attack Hp Damage
# Default: 0.08
# Range: 0.0 ~ 1.0
"Guardian's area attack Hp Damage" = 0.08
#EnderGuardianBlockBreaking radius
# Default: 15
# Range: 0 ~ 20
"EnderGuardianBlockBreaking X" = 15
#EnderGuardianBlockBreaking radius
# Default: 2
# Range: 0 ~ 10
"EnderGuardianBlockBreaking Y" = 2
#EnderGuardianBlockBreaking radius
# Default: 15
# Range: 0 ~ 20
"EnderGuardianBlockBreaking Z" = 15
["Netherite Monstrosity"]
#Monstrosity's Lavabomb magazine.
# Default: 3
# Range: 1 ~ 1000000
LavabombMagazine = 3
#Monstrosity's Lavabomb amount
# Default: 3
# Range: 1 ~ 1000000
Lavabombamount = 3
#Lava Bomb of Monstrosity's Duration
# Default: 350
# Range: 1 ~ 10000
LavaBombDuration = 350
#Lava Bomb of Monstrosity's additional random duration size
# Default: 150
# Range: 1 ~ 10000
LavaBombRandomDuration = 150
#Monstrosity's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
MonstrosityHealthMultiplier = 1.0
#Monstrosity's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
MonstrosityDamageMultiplier = 1.0
#Monstrosity's Healing Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
MonstrosityHealingMultiplier = 1.0
# Monstrosity's Healing with out target
# Default: 25.0
# Range: 0.0 ~ 1000000.0
MonstrosityNatureHealing = 25.0
#Monstrosity's DamageCap
# Default: 22.0
# Range: 0.0 ~ 1000000.0
MonstrosityDamageCap = 22.0
#Monstrosity's DamageTime
# Default: 10
# Range: 0 ~ 100
MonstrosityDamageTime = 10
#Monstrosity's bodyBlocking verdict
NetheritemonstrosityBodyBloking = true
#Monstrosity's attack Hp Damage
# Default: 0.08
# Range: 0.0 ~ 1.0
"Monstrosity's attack Hp Damage" = 0.08
#Monstrosity's Immune to Long distance attack range.
# Default: 18.0
# Range: 1.0 ~ 1000000.0
"Monstrosity's prevent attacks from far away Range" = 18.0
#Monstrosity's block breaking ignore the MobGriefing
monstrosityBlockBreaking = true
["Ender Golem"]
#Ender Golem's block breaking ignore the MobGriefing
EndergolemBlockBreaking = false
#Endergolem's Immune to Long distance attack range.
# Default: 6.0
# Range: 1.0 ~ 1000000.0
"Endergolem's prevent attacks from far away Range" = 6.0
#Golem's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
GolemHealthMultiplier = 1.0
#Golem's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
GolemDamageMultiplier = 1.0
[Ignis]
#Ignis's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
IgnisHealthMultiplier = 1.0
#Ignis's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
IgnisDamageMultiplier = 1.0
#Ignis's Healing with out target
# Default: 25.0
# Range: 0.0 ~ 1000000.0
IgnisNatureHealing = 25.0
#Ignis's Healing Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
IgnisHealingMultiplier = 1.0
#Ignis's Immune to Long distance attack range.
# Default: 15.0
# Range: 1.0 ~ 1000000.0
"Ignis's prevent attacks from far away Range" = 15.0
#Ignis's DamageCap
# Default: 20.0
# Range: 0.0 ~ 1000000.0
IgnisDamageCap = 20.0
#Ignis's DamageTime
# Default: 15
# Range: 0 ~ 100
IgnisDamageTime = 15
#Ignis's cracked block breaking ignore the MobGriefing
IgnisBlockBreaking = true
[revenant]
#Revenant's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
RevenantHealthMultiplier = 1.0
#Revenant's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
RevenantDamageMultiplier = 1.0
["The Prowler"]
#The Prowler's Immune to Long distance attack range.
# Default: 16.0
# Range: 1.0 ~ 1000000.0
"The Prowler's prevent attacks from far away Range" = 16.0
#Prowler's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
ProwlerHealthMultiplier = 1.0
#Prowler's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
ProwlerDamageMultiplier = 1.0
["The Harbinger"]
#Harbinger's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
HarbingerHealthMultiplier = 1.0
#Harbinger's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
HarbingerDamageMultiplier = 1.0
#Harbinger's Healing Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
HarbingerHealingMultiplier = 1.0
#Harbinger's Wither Missile's Damage
# Default: 8.0
# Range: 0.0 ~ 1000000.0
"Harbinger's WitherMissiledamage" = 8.0
#Harbinger's laser's Damage
# Default: 5.0
# Range: 0.0 ~ 1000000.0
"Harbinger's laser damage" = 5.0
#Harbinger's Immune to Long distance attack range.
# Default: 35.0
# Range: 1.0 ~ 1000000.0
"The Harbinger's prevent attacks from far away Range" = 35.0
#Harbinger's DamageCap
# Default: 22.0
# Range: 0.0 ~ 1000000.0
"The Harbinger DamageCap" = 22.0
#Harbinger's DamageTime
# Default: 12
# Range: 0 ~ 100
"The Harbinger DamageTime" = 12
#Harbinger's lasers can light a fire in MobGriefing
"The Harbinger Light A Fire" = true
#The Harbinger's charge attack Hp Damage
# Default: 0.06
# Range: 0.0 ~ 1.0
"The Harbinger's charge attack Hp Damage" = 0.06
["The Leviathan"]
#Leviathan's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
LeviathanHealthMultiplier = 1.0
#Leviathan's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
LeviathanDamageMultiplier = 1.0
#Leviathan's Healing with out target
# Default: 25.0
# Range: 0.0 ~ 1000000.0
LeviathanNatureHealing = 25.0
#Leviathan's Immune to Long distance attack range.
# Default: 38.0
# Range: 1.0 ~ 1000000.0
"Leviathan's prevent attacks from far away Range" = 38.0
#Leviathan's Bite Hp Damage
# Default: 0.1
# Range: 0.0 ~ 1.0
"Leviathan's Bite Hp Damage" = 0.1
#Leviathan's Rush Hp Damage
# Default: 0.05
# Range: 0.0 ~ 1.0
"Leviathan's Rush Hp Damage" = 0.05
#Leviathan's TailSwing Hp Damage
# Default: 0.08
# Range: 0.0 ~ 1.0
"Leviathan's TailSwing Hp Damage" = 0.08
#Leviathan's Tentacle Hp Damage
# Default: 0.03
# Range: 0.0 ~ 1.0
"Leviathan's Tentacle Hp Damage" = 0.03
#Leviathan's DamageCap
# Default: 20.0
# Range: 0.0 ~ 1000000.0
LeviathanDamageCap = 20.0
#Leviathan's DamageTime
# Default: 15
# Range: 0 ~ 100
"Leviathan DamageTime" = 15
#Leviathan's block breaking ignore the MobGriefing
LeviathanBlockBreaking = true
#Leviathan Immune Out of Water
LeviathanImmuneOutofWater = true
["The Baby Leviathan"]
#BabyLeviathan's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
BabyLeviathanHealthMultiplier = 1.0
#BabyLeviathan's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
BabyLeviathanDamageMultiplier = 1.0
["Modern Remnant"]
#Modern Remnant's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
ModernRemnantHealthMultiplier = 1.0
#Modern Remnant's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
ModernRemnantDamageMultiplier = 1.0
["Netherite Ministrosity"]
#Ministrosity's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
MinistrosityHealthMultiplier = 1.0
["Amethyst Crab"]
#Amethyst Crab's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
AmethystCrabHealthMultiplier = 1.0
#Amethyst Crab's EarthQuake Damage
# Default: 5.0
# Range: 0.0 ~ 1000000.0
AmethystCrabEarthQuakeDamage = 5.0
#Amethyst Crab's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
AmethystCrabDamageMultiplier = 1.0
["Ancient Remnant"]
#Ancient Remnant's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
AncientRemnantHealthMultiplier = 1.0
#Ancient Remnant's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
AncientRemnantDamageMultiplier = 1.0
#AncientRemnant's Healing with out target
# Default: 25.0
# Range: 0.0 ~ 1000000.0
AncientRemnantNatureHealing = 25.0
#Ancient Remnant's Immune to Long distance attack range.
# Default: 14.0
# Range: 1.0 ~ 1000000.0
"Ancient Remnant's prevent attacks from far away Range" = 14.0
#Ancient Remnant's DamageCap
# Default: 21.0
# Range: 0.0 ~ 1000000.0
AncientRemnantCap = 21.0
#Ancient Remnant's DamageTime
# Default: 12
# Range: 0 ~ 100
"Ancient Remnant DamageTime" = 12
#Ancient Remnant's block breaking ignore the MobGriefing
AncientRemnantBlockBreaking = true
#Remnant's Charge Hp Damage
# Default: 0.1
# Range: 0.0 ~ 1.0
"Remnant's Charge Hp Damage" = 0.1
#Remnant's Hp Damage
# Default: 0.05
# Range: 0.0 ~ 1.0
"Remnant's Normal attack Hp Damage" = 0.05
#Remnant's Stomp Hp Damage
# Default: 0.03
# Range: 0.0 ~ 1.0
"Remnant's Stomp Hp Damage" = 0.03
#Remnant's EarthQuake Damage
# Default: 11.0
# Range: 0.0 ~ 1000000.0
"Remnant's EarthQuakeDamage" = 11.0
[Koboleton]
#Cause Koboleton to Drop Item In Hand Percent
# Default: 5.0
# Range: 0.0 ~ 100.0
CauseKoboletontoDropItemInHandPercent = 5.0
[Kobolediator]
#Kobolediator's block breaking ignore the MobGriefing
KobolediatorBlockBreaking = false
#Kobolediator's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
KobolediatorHealthMultiplier = 1.0
#Kobolediator's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
KobolediatorDamageMultiplier = 1.0
[Wadjet]
#Wadjet's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
WadjetHealthMultiplier = 1.0
#Wadjet's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
WadjetDamageMultiplier = 1.0
[Aptrgangr]
#Aptrgangr's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
AptrgangrHealthMultiplier = 1.0
#Aptrgangr's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
AptrgangrDamageMultiplier = 1.0
#Axe Blade's Damage
# Default: 8.0
# Range: 0.0 ~ 1000000.0
AptrgangrAxeBladeDamage = 8.0
[Clawdian]
#Clawdian's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
ClawdianHealthMultiplier = 1.0
#Clawdian's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
ClawdianDamageMultiplier = 1.0
[Scylla]
#Scylla's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
ScyllaHealthMultiplier = 1.0
#Scylla's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
ScyllaDamageMultiplier = 1.0
#Scylla's Immune to Long distance attack range.
# Default: 10.0
# Range: 1.0 ~ 1000000.0
"Scylla's prevent attacks from far away Range" = 10.0
#Scylla's Spear Damage
# Default: 14.0
# Range: 0.0 ~ 1000000.0
"Scylla's Spear Damage" = 14.0
#Scylla's Lightning Storm
# Default: 10.0
# Range: 0.0 ~ 1000000.0
"Scylla's Lightning Storm" = 10.0
#Scylla's Lightning Area
# Default: 4.0
# Range: 0.0 ~ 1000000.0
"Scylla's Lightning Area" = 4.0
#Scylla's Storm Serpent
# Default: 16.0
# Range: 0.0 ~ 1000000.0
"Scylla's Snake Damage" = 16.0
#Scylla's Anchor Damage
# Default: 16.0
# Range: 0.0 ~ 1000000.0
"Scylla's Anchor Damage" = 16.0
#Scylla's Healing with out target
# Default: 25.0
# Range: 0.0 ~ 1000000.0
"Scylla NatureHealing" = 25.0
#Scylla's DamageCap
# Default: 22.0
# Range: 0.0 ~ 1000000.0
"Scylla DamageCap" = 22.0
#Scylla's DamageTime
# Default: 25
# Range: 0 ~ 100
"Scylla DamageTime" = 25
#Scylla's HP Damage
# Default: 0.05
# Range: 0.0 ~ 1000000.0
"Scylla's HP Damage" = 0.05
#Scylla's Spin HP Damage
# Default: 0.07
# Range: 0.0 ~ 1000000.0
"Scylla's Spin Hp Damage" = 0.07
#Scylla's Lightning Storm HP Damage
# Default: 0.04
# Range: 0.0 ~ 1000000.0
"Scylla's Lightning Storm HP Damage" = 0.04
[Maledictus]
#Maledictus's Health Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
MaledictusHealthMultiplier = 1.0
#Maledictus's Damage Multiplier
# Default: 1.0
# Range: 0.0 ~ 1000000.0
MaledictusDamageMultiplier = 1.0
#Maledictus's Immune to Long distance attack range.
# Default: 12.0
# Range: 1.0 ~ 1000000.0
"Maledictus's prevent attacks from far away Range" = 12.0
#Maledictus's Healing with out target
# Default: 25.0
# Range: 0.0 ~ 1000000.0
MaledictusNatureHealing = 25.0
#Maledictus's Phantom Halberd Damage
# Default: 10.0
# Range: 0.0 ~ 1000000.0
"Maledictus' Phantom Halberd Damage'" = 10.0
#Maledictus's DamageCap
# Default: 20.0
# Range: 0.0 ~ 1000000.0
MaledictusDamageCap = 20.0
#Maledictus's DamageTime
# Default: 30
# Range: 0 ~ 100
"Maledictus DamageTime" = 30
#Maledictus's melee Hp Damage
# Default: 0.05
# Range: 0.0 ~ 1.0
"Maledictus's melee Hp Damage" = 0.05
#Maledictus's Shock wave Hp Damage
# Default: 0.03
# Range: 0.0 ~ 1.0
"Maledictus's Shock Wave Hp Damage" = 0.03
#Maledictus's AOE Hp Damage
# Default: 0.15
# Range: 0.0 ~ 1.0
"Maledictus's AOE Hp Damage" = 0.15
#Maledictus's flying Smash Hp Damage
# Default: 0.1
# Range: 0.0 ~ 1.0
"Maledictus's Flying Smash Hp Damage" = 0.1
#Maledictus's Jump Smash Hp Damage
# Default: 0.08
# Range: 0.0 ~ 1.0
"Maledictus's Jump Smash Hp Damage" = 0.08
#Maledictus's Phantom Arrow's Damage
# Default: 5.0
# Range: 0.0 ~ 1000000.0
"Maledictus's Phantom Arrow Damage" = 5.0
#Maledictus's cracked block breaking ignore the MobGriefing
MaledictusBlockBreaking = true
[spawning]
#Spawn Weight, added to a pool of other mobs for each biome. Higher number = higher chance of spawning. 0 = disable spawn
# Default: 2
# Range: 0 ~ 1000
DeeplingSpawnWeight = 0
#Random roll chance to enable mob spawning. Higher number = lower chance of spawning
# Default: 30
# Range: > 0
DeeplingSpawnRolls = 30
#Spawn Weight, added to a pool of other mobs for each biome. Higher number = higher chance of spawning. 0 = disable spawn
# Default: 1
# Range: 0 ~ 1000
DeeplingBruteSpawnWeight = 0
#Random roll chance to enable mob spawning. Higher number = lower chance of spawning
# Default: 50
# Range: > 0
DeeplingBruteSpawnRolls = 50
#Spawn Weight, added to a pool of other mobs for each biome. Higher number = higher chance of spawning. 0 = disable spawn
# Default: 2
# Range: 0 ~ 1000
DeeplingAnglerSpawnWeight = 0
#Random roll chance to enable mob spawning. Higher number = lower chance of spawning
# Default: 30
# Range: > 0
DeeplingAnglerSpawnRolls = 30
#Spawn Weight, added to a pool of other mobs for each biome. Higher number = higher chance of spawning. 0 = disable spawn
# Default: 1
# Range: 0 ~ 1000
DeeplingPriestSpawnWeight = 0
#Random roll chance to enable mob spawning. Higher number = lower chance of spawning
# Default: 70
# Range: > 0
DeeplingPriestSpawnRolls = 70
#Spawn Weight, added to a pool of other mobs for each biome. Higher number = higher chance of spawning. 0 = disable spawn
# Default: 1
# Range: 0 ~ 1000
DeeplingWarlockSpawnWeight = 0
#Random roll chance to enable mob spawning. Higher number = lower chance of spawning
# Default: 70
# Range: > 0
DeeplingWarlockSpawnRolls = 70
#Spawn Weight, added to a pool of other mobs for each biome. Higher number = higher chance of spawning. 0 = disable spawn
# Default: 1
# Range: 0 ~ 1000
CoralgolemSpawnWeight = 1
#Random roll chance to enable mob spawning. Higher number = lower chance of spawning
# Default: 70
# Range: > 0
CoralgolemSpawnRolls = 70
#Spawn Weight, added to a pool of other mobs for each biome. Higher number = higher chance of spawning. 0 = disable spawn
# Default: 1
# Range: 0 ~ 1000
AmethystCrabSpawnWeight = 1
#Random roll chance to enable mob spawning. Higher number = lower chance of spawning
# Default: 20
# Range: > 0
AmethystCrabSpawnRolls = 20
#Spawn Weight, added to a pool of other mobs for each biome. Higher number = higher chance of spawning. 0 = disable spawn
# Default: 15
# Range: 0 ~ 1000
KoboletonSpawnWeight = 15
#Random roll chance to enable mob spawning. Higher number = lower chance of spawning
# Default: 1
# Range: > 0
KoboletonSpawnRolls = 1
#Spawn Weight, added to a pool of other mobs for each biome. Higher number = higher chance of spawning. 0 = disable spawn
# Default: 5
# Range: 0 ~ 1000
IgnitedBerserkerSpawnWeight = 5
#Random roll chance to enable mob spawning. Higher number = lower chance of spawning
# Default: 2
# Range: > 0
IgnitedBerserkerSpawnRolls = 2
["World Generation"]
#Defines the area in which the structure check for height variances (1 means 9 chunks will be checked (center + area around it)) - 0 disables this check
# Default: 2
# Range: 0 ~ 5
cursedPyramidCheckRange = 2
#Allowed height variance for the check - if the variance is lower than this value the structure will not spawn (has no effect if the are check is disabled)
# Default: 2
# Range: 0 ~ 32
cursedPyramidHeightVariance = 2

View file

@ -1,249 +0,0 @@
#Settings for Inventory HUD
[inventoryhud]
#Inventory HUD mini mode
invMini = true
#Inventory HUD vertical mode
invVert = false
#Inventory HUD alpha
# Default: 0
# Range: 0 ~ 100
invAlpha = 0
#Toggle on by default
byDefault = false
#Animate recently picked up items
animatedInv = false
#Hide background if inventory is empty
hideBackground = false
#Show Inventory HUD when debug menu is open
invWithDebug = true
#Settings for ArmorStatus HUD
[armorhud]
#Is Armor Damage HUD enabled
ArmorDamage = true
#Hide if durability is above this (in percentage):
# Default: 100
# Range: 0 ~ 100
armAbove = 100
#Show/Hide armor
showArmor = true
#Show/Hide armor
showMain = true
#Show/Hide armor
showOff = true
#Show/Hide armor
showArrows = true
#Show/Hide armor
showInv = true
#Armor HUD durability view (PERCENTAGE, DAMAGE, DAMAGE LEFT)
#Allowed Values: PERCENTAGE, DAMAGE, DAMAGE_LEFT, OFF
armView = "PERCENTAGE"
#Show item durability bar
armBars = false
#Move all items at once or each one
moveAll = true
#Show/Hide empty slot icon
showEmpty = true
#Show overall count of items in main/off hand
showCount = false
#ArmorHUD scale in persentage from 50 to 150
# Default: 100
# Range: 50 ~ 150
armScale = 100
#Show Armor HUD when debug menu is open
armWithDebug = true
#Show arrows count when no weapon in your hands
showArrowsWithoutWeapon = true
#Settings for Potions HUD
[potionshud]
#Is Potions HUD enabled
Potions = true
#Potion HUD alpha
# Default: 100
# Range: 0 ~ 100
potAlpha = 100
#Potion HUD gap
# Default: 0
# Range: -5 ~ 5
potGap = 0
#Potion HUD mini mode
potMini = false
#Potion HUD horizontal mode
potHor = false
#Full bar duration
# Default: 300
# Range: > 1
barDuration = 300
#Show hidden effects
showHiddenEffects = true
#Disable icons for effects in this list
effectsBlackList = []
#Show Potion HUD when debug menu is open
potWithDebug = true
#Show all levels of effects
potionLevels = false
#DONT TOUCH THESE FIELDS!
[positions]
#Inventory HUD vertical align
#Allowed Values: TOP, CENTER, BOTTOM
invValign = "BOTTOM"
#Inventory HUD horizontal align
#Allowed Values: LEFT, MIDDLE, RIGHT
invHalign = "MIDDLE"
#Inventory HUD position (X)
# Default: 0
# Range: -9999 ~ 9999
xPos = 0
#Inventory HUD position (Y)
# Default: 150
# Range: -9999 ~ 9999
yPos = 150
#Armor HUD vertical align
#Allowed Values: TOP, CENTER, BOTTOM
armValign = "BOTTOM"
#Armor HUD horizontal align
#Allowed Values: LEFT, MIDDLE, RIGHT
armHalign = "MIDDLE"
#Armor HUD position (X)
# Default: 0
# Range: -9999 ~ 9999
xArmPos = 0
#Armor HUD position (Y)
# Default: 70
# Range: -9999 ~ 9999
yArmPos = 70
#Potion HUD vertical align
#Allowed Values: TOP, CENTER, BOTTOM
potValign = "TOP"
#Potion HUD horizontal align
#Allowed Values: LEFT, MIDDLE, RIGHT
potHalign = "LEFT"
#Potion HUD position (X)
# Default: 20
# Range: -9999 ~ 9999
xPotionPos = 20
#Potion HUD position (Y)
# Default: 20
# Range: -9999 ~ 9999
yPotionPos = 20
#Helmet position (X)
# Default: 103
# Range: -9999 ~ 9999
helmPosX = 103
#Helmet position (Y)
# Default: 54
# Range: -9999 ~ 9999
helmPosY = 54
#Chestplate position (X)
# Default: 103
# Range: -9999 ~ 9999
chestPosX = 103
#Chestplate position (Y)
# Default: 37
# Range: -9999 ~ 9999
chestPosY = 37
#Leggings position (X)
# Default: -103
# Range: -9999 ~ 9999
legPosX = -103
#Leggings position (Y)
# Default: 54
# Range: -9999 ~ 9999
legPosY = 54
#Boots position (X)
# Default: -103
# Range: -9999 ~ 9999
bootPosX = -103
#Boots position (Y)
# Default: 37
# Range: -9999 ~ 9999
bootPosY = 37
#MainHand position (X)
# Default: 103
# Range: -9999 ~ 9999
mainPosX = 103
#MainHand position (Y)
# Default: 71
# Range: -9999 ~ 9999
mainPosY = 71
#OffHand position (X)
# Default: -103
# Range: -9999 ~ 9999
offPosX = -103
#OffHand position (Y)
# Default: 71
# Range: -9999 ~ 9999
offPosY = 71
#Arrows position (X)
# Default: 103
# Range: -9999 ~ 9999
arrPosX = 103
#Arrows position (Y)
# Default: 20
# Range: -9999 ~ 9999
arrPosY = 20
#InvIcon position (X)
# Default: -103
# Range: -9999 ~ 9999
invPosX = -103
#InvIcon position (Y)
# Default: 20
# Range: -9999 ~ 9999
invPosY = 20
#Helmet horizontal align
#Allowed Values: LEFT, MIDDLE, RIGHT
helmHal = "MIDDLE"
#Helmet vertical align
#Allowed Values: TOP, CENTER, BOTTOM
helmVal = "BOTTOM"
#Chestplate horizontal align
#Allowed Values: LEFT, MIDDLE, RIGHT
chestHal = "MIDDLE"
#Chestplate vertical align
#Allowed Values: TOP, CENTER, BOTTOM
chestVal = "BOTTOM"
#Leggings horizontal align
#Allowed Values: LEFT, MIDDLE, RIGHT
legHal = "MIDDLE"
#Leggings vertical align
#Allowed Values: TOP, CENTER, BOTTOM
legVal = "BOTTOM"
#Boots horizontal align
#Allowed Values: LEFT, MIDDLE, RIGHT
bootHal = "MIDDLE"
#Boots vertical align
#Allowed Values: TOP, CENTER, BOTTOM
bootVal = "BOTTOM"
#MainHand horizontal align
#Allowed Values: LEFT, MIDDLE, RIGHT
mainHal = "MIDDLE"
#MainHand vertical align
#Allowed Values: TOP, CENTER, BOTTOM
mainVal = "BOTTOM"
#OffHand horizontal align
#Allowed Values: LEFT, MIDDLE, RIGHT
offHal = "MIDDLE"
#OffHand vertical align
#Allowed Values: TOP, CENTER, BOTTOM
offVal = "BOTTOM"
#Arrows horizontal align
#Allowed Values: LEFT, MIDDLE, RIGHT
arrHal = "MIDDLE"
#Arrows vertical align
#Allowed Values: TOP, CENTER, BOTTOM
arrVal = "BOTTOM"
#InvIcon horizontal align
#Allowed Values: LEFT, MIDDLE, RIGHT
invHal = "MIDDLE"
#InvIcon vertical align
#Allowed Values: TOP, CENTER, BOTTOM
invVal = "BOTTOM"
#Notification settings
[notification]
#Last notified mod version
lastNotifiedVersion = "3.4.28"
#Notify more than once
keepNotifying = true

View file

@ -1,9 +0,0 @@
#This file stores configuration options for Iris, such as the currently active shaderpack
#Thu Jul 31 02:25:56 HKT 2025
allowUnknownShaders=false
colorSpace=SRGB
disableUpdateMessage=false
enableDebugOptions=false
enableShaders=true
maxShadowRenderDistance=32
shaderPack=ComplementaryReimagined_r5.5.1 + Colorwheel_0.2.4.zip

View file

@ -1,66 +0,0 @@
{
"animation_settings": {
"animation": true,
"water": true,
"lava": true,
"fire": true,
"portal": true,
"block_animations": true,
"sculk_sensor": true
},
"particle_settings": {
"particles": true,
"rain_splash": true,
"block_break": true,
"block_breaking": true,
"other": {
"subtle_effects:item_rarity": false,
"subtle_effects:frosty_breath": false
}
},
"detail_settings": {
"sky": true,
"sun": true,
"moon": true,
"stars": true,
"rain_snow": true,
"biome_colors": true,
"sky_colors": true
},
"render_settings": {
"fog_distance": 0,
"fog_start": 100,
"multi_dimension_fog_control": false,
"dimensionFogDistance": {},
"light_updates": true,
"item_frame": true,
"armor_stand": true,
"painting": true,
"piston": true,
"beacon_beam": true,
"limit_beacon_beam_height": false,
"enchanting_table_book": true,
"item_frame_name_tag": true,
"player_name_tag": true
},
"extra_settings": {
"overlay_corner": "TOP_LEFT",
"text_contrast": "NONE",
"show_fps": false,
"show_f_p_s_extended": true,
"show_coords": false,
"reduce_resolution_on_mac": false,
"use_adaptive_sync": false,
"cloud_height": 192,
"cloud_distance": 100,
"toasts": true,
"advancement_toast": true,
"recipe_toast": true,
"system_toast": true,
"tutorial_toast": true,
"instant_sneak": false,
"prevent_shaders": false,
"steady_debug_hud": true,
"steady_debug_hud_refresh_interval": 1
}
}

View file

@ -1,18 +0,0 @@
[sodiumdynamiclights]
#Lighting mode
#Allowed Values: OFF, SLOW, FAST, REALTIME
mode = "OFF"
#Enable entities light source.
entities = false
#Enable first-person player light source.
self = true
#Enable block entities light source.
block_entities = true
#Enables water-sensitive light sources check. This means that water-sensitive items will not light up when submerged in water.
water_sensitive_check = true
#TNT lighting mode. May be off, simple or fancy.
#Allowed Values: OFF, SIMPLE, FANCY
tnt = "SIMPLE"
#Creeper lighting mode. May be off, simple or fancy.
#Allowed Values: OFF, SIMPLE, FANCY
creeper = "OFF"

View file

@ -1,135 +0,0 @@
[embeddiumextras.general]
#Set Fullscreen mode
#Borderless let you change between screens more faster and move your mouse across monitors
#Allowed Values: WINDOWED, BORDERLESS, FULLSCREEN
fullscreen = "WINDOWED"
#Configure FPS Display mode
#Complete mode gives you min FPS count and average count
#Allowed Values: OFF, SIMPLE, ADVANCED
fpsDisplay = "ADVANCED"
#Configure FPS Display gravity
#Places counter on specified corner of your screen
#Allowed Values: LEFT, CENTER, RIGHT
fpsDisplayGravity = "LEFT"
#Shows GPU and memory usage onto FPS display
#Allowed Values: OFF, ON, GPU, RAM
fpsDisplaySystem = "ON"
#Configure FPS Display margin
#Give some space between corner and text
# Default: 12
# Range: 0 ~ 48
fpsDisplayMargin = 12
#Toggle FPS Display shadow
#In case sometimes you can't see the text
fpsDisplayShadow = false
[embeddiumextras.quality]
#Toggle fog feature
#Fog was a vanilla feature, toggling off may increases performance
fog = true
#Raise clouds
#Modify clouds height perfect for a adaptative world experience
# Default: 192
# Range: 0 ~ 512
cloudsHeight = 192
#Chunks fade in speed
#This option doesn't affect performance, just changes speed
#Allowed Values: OFF, FAST, SLOW
chunkFadeSpeed = "SLOW"
[embeddiumextras.quality.darkness]
#Configure Darkness Mode
#Each config changes what is considered 'true darkness'
#Allowed Values: PITCH_BLACK, TOTAL_DARKNESS, DARK, DIM, OFF
mode = "OFF"
#Toggle Darkness on Overworld dimension
enableOnOverworld = true
#Toggle Darkness on Nether dimension
enableOnNether = false
#Configure fog brightness on nether when darkness is enabled
# Default: 0.5
# Range: 0.0 ~ 1.0
netherFogBright = 0.5
#Toggle Darkness on End dimension
enableOnEnd = false
#Configure fog brightness on nether when darkness is enabled
# Default: 0.5
# Range: 0.0 ~ 1.0
endFogBright = 0.5
#Toggle Darkness default mode for modded dimensions
valueByDefault = false
#List of all dimensions to use True Darkness
#This option overrides 'valueByDefault' state
dimensionWhitelist = []
#Toggle darkness when dimension has no SkyLight
enableOnNoSkyLight = false
#Disables all bright sources of darkness like moon or fog
#Only affects darkness effect
enableBlockLightOnly = false
#Toggles if moon phases affects darkness in the overworld
affectedByMoonPhase = true
#Configure max moon brightness level with darkness
# Default: 0.25
# Range: 0.0 ~ 1.0
fullMoonBright = 0.25
#Configure min moon brightness level with darkness
# Default: 0.0
# Range: 0.0 ~ 1.0
newMoonBright = 0.0
[embeddiumextras.performance]
#Toggles JREI item rendering until searching
#Increases performance a little bit and cleans your screen when you don't want to use it
hideJREI = false
#Toggles Minecraft Fonts shadows
#Depending of the case may increase performance
#Gives a flat style text
fontShadows = true
[embeddiumextras.performance.distanceCulling.tileEntities]
#Toggles distance culling for Block Entities
#Maybe you use another mod for that :(
enable = true
#Configure horizontal max distance before cull Block entities
#Value is squared, default was 64^2 (or 64x64)
# Default: 4096
# Range: > 0
cullingMaxDistanceX = 4096
#Configure vertical max distance before cull Block entities
#Value is raw
# Default: 32
# Range: 0 ~ 512
cullingMaxDistanceY = 32
#List of all Block Entities to be ignored by distance culling
#Uses ResourceLocation to identify it
#Example 1: "minecraft:chest" - Ignores chests only
#Example 2: "ae2:*" - ignores all Block entities from Applied Energetics 2
whitelist = ["waterframes:*"]
[embeddiumextras.performance.distanceCulling.entities]
#Toggles distance culling for entities
#Maybe you use another mod for that :(
enable = true
#Configure horizontal max distance before cull entities
#Value is squared, default was 64^2 (or 64x64)
# Default: 4096
# Range: > 0
cullingMaxDistanceX = 4096
#Configure vertical max distance before cull entities
#Value is raw
# Default: 32
# Range: 0 ~ 512
cullingMaxDistanceY = 32
#List of all Entities to be ignored by distance culling
#Uses ResourceLocation to identify it
#Example 1: "minecraft:bat" - Ignores bats only
#Example 2: "alexsmobs:*" - ignores all entities for alexmobs mod
whitelist = ["minecraft:ghast", "minecraft:ender_dragon", "iceandfire:*", "create:*"]
[embeddiumextras.others]
#Configure if borderless fullscreen option should be attached to F11 or replace vanilla fullscreen
#Allowed Values: ATTACH, REPLACE, OFF
borderlessAttachModeOnF11 = "OFF"
#Toggles fast language reload
#Embeddedt points it maybe cause troubles to JEI, so ¿why not add it as a toggleable option?
fastLanguageReload = true

View file

@ -1,50 +0,0 @@
key_iris.keybind.reload:key.keyboard.unknown:
key_iris.keybind.toggleShaders:key.keyboard.unknown:
key_iris.keybind.shaderPackSelection:key.keyboard.unknown:
key_key.corpse.death_history:key.keyboard.unknown:
key_key.curios.open.desc:key.keyboard.unknown:
key_key.cobblemon.hideparty:key.keyboard.unknown:
key_key.cobblemon.throwpartypokemon:key.keyboard.z
key_accessories.key.open_accessories_screen:key.keyboard.unknown:
key_key.jei.toggleOverlay:key.keyboard.unknown:
key_key.jei.focusSearch:key.keyboard.unknown:
key_key.jei.bookmark:key.keyboard.unknown:
key_key.jei.showRecipe:key.keyboard.unknown:
key_key.jei.showRecipe2:key.keyboard.unknown:
key_key.jei.showUses:key.keyboard.unknown:
key_key.jei.showUses2:key.keyboard.unknown:
key_key.jei.transferRecipeBookmark:key.keyboard.unknown:
key_key.jei.maxTransferRecipeBookmark:key.keyboard.unknown:
key_key.jei.clearSearchBar:key.keyboard.unknown:
key_key.jei.previousSearch:key.keyboard.unknown:
key_key.jei.nextSearch:key.keyboard.unknown:
key_key.jei.cheatOneItem:key.keyboard.unknown:
key_key.jei.cheatOneItem2:key.keyboard.unknown:
key_key.jei.cheatItemStack:key.keyboard.unknown:
key_key.jei.cheatItemStack2:key.keyboard.unknown:
key_key.jei.toggleCheatModeConfigButton:key.keyboard.unknown:
key_key.jei.toggleHideIngredient:key.keyboard.unknown:
key_key.jei.toggleWildcardHideIngredient:key.keyboard.unknown:
key_key.jei.recipeBack:key.keyboard.unknown:
key_key.jei.previousRecipePage:key.keyboard.unknown:
key_key.jei.nextRecipePage:key.keyboard.unknown:
key_key.jei.previousCategory:key.keyboard.unknown:
key_key.jei.nextCategory:key.keyboard.unknown:
key_key.jei.closeRecipeGui:key.keyboard.unknown:
key_key.aether.open_accessories.desc:key.keyboard.unknown:
key_key.aether.invisibility_toggle.desc:key.keyboard.unknown:
key_key.deep_aether.stratus_dash_ability.desc:key.keyboard.unknown:
key_key.deep_aether.toggle_skyjade_transparency:key.keyboard.unknown:
key_key.cataclysm.ability:key.keyboard.unknown:
key_key.cataclysm.helmet_ability:key.keyboard.unknown:
key_key.cataclysm.chestplate_ability:key.keyboard.unknown:
key_key.cataclysm.boots_ability:key.keyboard.unknown:
key_key.fightorflight.startbattle:key.keyboard.unknown:
key_key.journeymap.minimap_type:key.keyboard.unknown:
key_key.journeymap.minimap_preset:key.keyboard.unknown:
key_key.journeymap.create_waypoint:key.keyboard.unknown:
key_key.journeymap.toggle_entity_names:key.keyboard.unknown:
key_key.irons_spellbooks.spell_wheel:key.keyboard.v
key_key.irons_spellbooks.spellbook_cast:key.keyboard.r
key_key.inventoryhud.toggle:key.keyboard.unknown:
key_key.inventoryhud.openconfig:key.keyboard.unknown:

View file

@ -1 +0,0 @@
guiScale:2

View file

@ -1,842 +0,0 @@
hash-format = "sha256"
[[files]]
file = "config/defaultoptions/extra/config/cataclysm.toml"
hash = "9a76bf60248db9056912d34a2f5c303882f9e4bd4c1b9ffe61fef99b8eb0de38"
[[files]]
file = "config/defaultoptions/extra/config/inventoryhud-client.toml"
hash = "61d89f6c1a9c1398ff109bc4f13ec30b68f3e71408b005ec096ebab163c05a53"
[[files]]
file = "config/defaultoptions/extra/config/iris.properties"
hash = "7c386f2921f9c1a94c984114ff8df28d7c127b5b986ce344615e4ac4cb02c4eb"
[[files]]
file = "config/defaultoptions/extra/config/sodium-extra-options.json"
hash = "92a62325cccecccf843d04e1be02f036fa1a3506a21290ebf040fbb78b46fc1f"
[[files]]
file = "config/defaultoptions/extra/config/sodiumdynamiclights-client.toml"
hash = "33516556e1f7761835817a2ad13a42c3563010cf4df15296b2f685e95d0ddcb1"
[[files]]
file = "config/defaultoptions/extra/config/sodiumextras-client.toml"
hash = "8b493ad01cbdb351da8f51d98ad791b9ae9519e69d353acf82a2f893094853ef"
[[files]]
file = "config/defaultoptions/keybindings.txt"
hash = "64852eef84ab3f853973c3ad6affb00999638d0fc49515b9daa42981e3b9f5b2"
[[files]]
file = "config/defaultoptions/options.txt"
hash = "624a8e4974cae64389b28e8046c3cc18a94e609a02df63f5397ec2ca0c0f7ee8"
[[files]]
file = "config/defaultoptions/servers.dat"
hash = "0e7bfc4d1ae85b5e1bb57914cb3d07abf75a4ef5158763095f5208891f43bfe7"
[[files]]
file = "mods/aether-emissivity.pw.toml"
hash = "d245f988ce58a69b2734cbd656afc8c0ba510a7ddcc7b779c0f05de3275c52d3"
metafile = true
[[files]]
file = "mods/aether-enhanced-extinguishing.pw.toml"
hash = "3ab0e784d15c52edda001697336bc3d7bceb1d016c89b166c77b10f6fb689737"
metafile = true
[[files]]
file = "mods/aether.pw.toml"
hash = "5e62bb12eb55e4575d1ca5e3570b5cc18473138973c80ac7093e61e459339db1"
metafile = true
[[files]]
file = "mods/ambientsounds.pw.toml"
hash = "f63a7e300c9556f4bcb76b7afd3aecc4d19d5323d24c48709083f5dafcbde09f"
metafile = true
[[files]]
file = "mods/appleskin.pw.toml"
hash = "3213c881d019cd8f952f738c10d5a950ee52ff0084750b81f656a58a4a78515d"
metafile = true
[[files]]
file = "mods/architectury-api.pw.toml"
hash = "ea336d25c3e21ef168aec20e1ea470c96949ad29632646ee8e8ab0d74b4bbfc9"
metafile = true
[[files]]
file = "mods/armourers-workshop.pw.toml"
hash = "735660605aff58b7a921c328a62195c3600d23b9e7709784c3863bd618adc19a"
metafile = true
[[files]]
file = "mods/attributefix.pw.toml"
hash = "586341de7078015cea16ffaf8e2e198a16c43b306d70bc439a15ea0298f9d3cb"
metafile = true
[[files]]
file = "mods/bad-wither-no-cookie.pw.toml"
hash = "574807cedb57ba6360060d6bf4a359cea9d00bf8700caee866d48ab949005b89"
metafile = true
[[files]]
file = "mods/badoptimizations.pw.toml"
hash = "c92c73551dc3ba9f116e0cef1e90bb553bf59f34530c7c281af28ac624a3a9d6"
metafile = true
[[files]]
file = "mods/balm.pw.toml"
hash = "13e7e233a4a658aa21212e45aecc6b20efb3cc34932836c2a6fed70c8d20ce23"
metafile = true
[[files]]
file = "mods/barbeques-delight-forge.pw.toml"
hash = "835ef70e3767f9a37474ca44366be17e6603212cd1333fd76266060d1771917e"
metafile = true
[[files]]
file = "mods/berry-good.pw.toml"
hash = "781a0931f5ab4cc333717c2d6a56ce311474d2c0bd27681c4126aa8f24e97aa8"
metafile = true
[[files]]
file = "mods/better-advancements.pw.toml"
hash = "93c4acd165a291c6d1e69c27b05b2747afc926b38a414712263fbc95f42da323"
metafile = true
[[files]]
file = "mods/better-animations-collection.pw.toml"
hash = "fbb8968dd31ab07131a8885ddf4f70999fad54cdd68d448dbb09dd56b2bf7919"
metafile = true
[[files]]
file = "mods/better-third-person.pw.toml"
hash = "e1f1588b18947699ddc9b4f7c5b5406c5559155b8cb52dcd0f203c07c31cd0b8"
metafile = true
[[files]]
file = "mods/betterf3.pw.toml"
hash = "c9aca350959a8936b054c7164fb55d789ab1e0d38cff2af48b78f70af2bc0c6d"
metafile = true
[[files]]
file = "mods/blueprint.pw.toml"
hash = "02c2891e2548adf5c59d0ef237ed01ffd89632b4908290269b513c4958ca9043"
metafile = true
[[files]]
file = "mods/bookshelf-lib.pw.toml"
hash = "293ec22e4e8342a9bd0f338505a14e3794b44cd7ca1e5278a86f41f99c69a3af"
metafile = true
[[files]]
file = "mods/cant-sleep-clowns-will-eat-me.pw.toml"
hash = "c9b95c629249ab90b4baeb88f501c51592b52f3edddb20ebf6eed96631a54839"
metafile = true
[[files]]
file = "mods/cloth-config.pw.toml"
hash = "75181b55e0407d1fca1e2f346c6501f919f5109545990ddfb66db9cd1b771f8a"
metafile = true
[[files]]
file = "mods/clumps.pw.toml"
hash = "2acaff560bbda5741538528a2967355ec86a8f7564adba0b2316989c66892374"
metafile = true
[[files]]
file = "mods/cobblemon-additions.pw.toml"
hash = "d94f943034bca0270c72a3e56a9ef4864d81e2300c5e64418ee2b2619b7d979b"
metafile = true
[[files]]
file = "mods/cobblemon-counter.pw.toml"
hash = "46e0f70fdcc4d47e3750b8b62a9d69c2accc3b08aafc25891ba1617c3c586714"
metafile = true
[[files]]
file = "mods/cobblemon-fight-or-flight-reborn.pw.toml"
hash = "c6c63f3818b49bf0de7d5000e43ef6a381faf7d46198b13771ab6080c751f56c"
metafile = true
[[files]]
file = "mods/cobblemon-integrations.pw.toml"
hash = "d21c41437169bb49b9b92bc97a2f05daa45bcd56744f590a2a858840a5f56044"
metafile = true
[[files]]
file = "mods/cobblemon-pokenav.pw.toml"
hash = "0d1d81244b3898bfeced61aaba79e063ced9778f0c70aaddd0bd2442131066b5"
metafile = true
[[files]]
file = "mods/cobblemon-unchained.pw.toml"
hash = "556abed0327d7cd3e96c31a0b9a2a483c52fa4adb04d11b9896a34560d5b18f7"
metafile = true
[[files]]
file = "mods/cobblemon.pw.toml"
hash = "e3cb1eb238192071af93f764e3ff2c493f4f437802bb56273f664bafdea13f1d"
metafile = true
[[files]]
file = "mods/colorwheel-patcher.pw.toml"
hash = "2d8c419acad3bab8eb54c6d5461f99ab76d924b753a9c811e7e94d624fe32f61"
metafile = true
[[files]]
file = "mods/colorwheel.pw.toml"
hash = "9da820e4bd91294a900ec2c2859fa8ae261a573922df3a15ca64cb838c76df9f"
metafile = true
[[files]]
file = "mods/comforts.pw.toml"
hash = "5e0a875282f4abed66a2cccf7929488ebb5e88447d2bb3369e8ddc728fc66fc0"
metafile = true
[[files]]
file = "mods/connector.pw.toml"
hash = "9f920c5f1df2577cf374285e4aad4f2982a30ea2a3da1cf7ddaf25e04b3a2e31"
metafile = true
[[files]]
file = "mods/controlling.pw.toml"
hash = "65c8086d2ec3d39acc7bd36c7a0306ccc43b602b38fa07d13291bc478ef7dfff"
metafile = true
[[files]]
file = "mods/corn-delight.pw.toml"
hash = "a7216dad68fe8cabfbdcced66ad94e1da20d23fe531e03022f877ffead92df50"
metafile = true
[[files]]
file = "mods/corpse.pw.toml"
hash = "d0c4db41717ede48a6f9c47ce2cd30a4336b7520279cac56649f96939cd1e7cb"
metafile = true
[[files]]
file = "mods/crabbers-delight.pw.toml"
hash = "cd66e48a19b8447ef66c6148bbcd5ecb363f4a7b472dba385b4b790feae0ad0f"
metafile = true
[[files]]
file = "mods/create-dragons-plus.pw.toml"
hash = "8e88d68a9dee5ca107ea3fd5d5394e52ae4e4f03decfc33974d6a958ccb200b5"
metafile = true
[[files]]
file = "mods/create-enchantment-industry.pw.toml"
hash = "0177b98d7552743df5bd62e45d2efe012d8d416c53f94735a0d4074468f5a2ca"
metafile = true
[[files]]
file = "mods/create.pw.toml"
hash = "7f25446123f66f57e7cc8e148155a3da39d85b31963c663b5b9be77fc1bacbe6"
metafile = true
[[files]]
file = "mods/creativecore.pw.toml"
hash = "6028668d5c1c5e49797eb97bb597d818be33a67a939d0cc356a702460b504675"
metafile = true
[[files]]
file = "mods/curios.pw.toml"
hash = "36debf7653e95a855b4fedacc19027cf2e01960fc0b6d55ef2ffbffbcb455690"
metafile = true
[[files]]
file = "mods/cut-through.pw.toml"
hash = "4c16ee75d3b04443e96d854eec79344293963e9f4beaaf8e7215023e8ef53b88"
metafile = true
[[files]]
file = "mods/deep-aether.pw.toml"
hash = "21134d88b6a1063faa58aec8163a1fb63316dbbed9bce8a50c0ab9613412f92a"
metafile = true
[[files]]
file = "mods/default-options.pw.toml"
hash = "8950c7377844b642f7e6547b821691f395a6d3f90f8cf9a6d740e390792a2de3"
metafile = true
[[files]]
file = "mods/diagonal-fences.pw.toml"
hash = "632743d54d410c8b78fb92c94d8f3bb6a7a3faed45171f91e554877f94f82163"
metafile = true
[[files]]
file = "mods/diagonal-walls.pw.toml"
hash = "bbc15c019fd260bbb9058b14a8e03232a55df77608d9aca466d051007d62abd2"
metafile = true
[[files]]
file = "mods/diagonal-windows.pw.toml"
hash = "218dcd780f0251a15f78b097206ea22a519d57b974b39e2fdd43dce91ac07133"
metafile = true
[[files]]
file = "mods/distanthorizons.pw.toml"
hash = "34fc0845727b08bc39e5b56444e0695b55f6a5471380f2d1d40c5548105da28e"
metafile = true
[[files]]
file = "mods/distinguished-potions.pw.toml"
hash = "fa1ff0b4d2c6fc9c26b74ba4b06d30f1e6d77763c6e2823b42fb2c08f5b72f13"
metafile = true
[[files]]
file = "mods/dynamic-fps.pw.toml"
hash = "975f1280c712d2e86dd4ecddf89c516afbf3f1fb684499d3e5c71fc666c4888c"
metafile = true
[[files]]
file = "mods/edivadlib.pw.toml"
hash = "e2ee2481b63a012bdfb8c9f588788dd2f116ff48298014bb3e00d08a224fe14f"
metafile = true
[[files]]
file = "mods/emi-create-schematics.pw.toml"
hash = "8a9bf4dfd8d29112e64dbffd71a84aba5279f6c85ed31233f026c84ebc4ef688"
metafile = true
[[files]]
file = "mods/emi-enchanting.pw.toml"
hash = "ff029ee6fc50f2696e96cdbcc696f42e75b483c9d7b83f2b1447dcf5c865e664"
metafile = true
[[files]]
file = "mods/emi-loot.pw.toml"
hash = "bbf03bec2bd4927ace16eef106c45b0f3ec53c48d5f43119520123ad98f3fdf1"
metafile = true
[[files]]
file = "mods/emi-ores.pw.toml"
hash = "0b921f73d5b1ad6615740956567d6cb06950f5520f094dbb7a045bb4bd5ba309"
metafile = true
[[files]]
file = "mods/emi-professions-(emip).pw.toml"
hash = "0477d572817d9de3a5569109a8d07a2e519af9ccf0e8236cae621369afbc6e4c"
metafile = true
[[files]]
file = "mods/emi.pw.toml"
hash = "d3c9b48d7caa2ed964e5d1a4dab1da5655c63f0a7e4a59231c4369be7ffc30e1"
metafile = true
[[files]]
file = "mods/emiffect.pw.toml"
hash = "34342d4a5a9a4853c653cf768309d5b42f651250dc832bc239e746c736c70411"
metafile = true
[[files]]
file = "mods/enchantment-descriptions.pw.toml"
hash = "0b380e24e46e328c362bda7cff892c5b0e471789ca8c429fd2a588eaf63b8712"
metafile = true
[[files]]
file = "mods/ends-delight.pw.toml"
hash = "c31e8aea1f4ddc50d79c6dfa46dec8cbbf1a6108ff74db140baa0395ea4c5766"
metafile = true
[[files]]
file = "mods/entityculling.pw.toml"
hash = "65026277699cc4b73c3d2c57ab7aad5173f161c0d6ff95e184911826387dbdec"
metafile = true
[[files]]
file = "mods/every-compat.pw.toml"
hash = "6235e7170c7322559d2b0e76a97c891dbab60e79c15a9d4cb3a4805b5d23fbda"
metafile = true
[[files]]
file = "mods/extra-mod-integrations.pw.toml"
hash = "6f59e18621f30c6dc0ffa7f34324b423f3e3a7a8c251560c6a1dd835b6bce87a"
metafile = true
[[files]]
file = "mods/extrastorage.pw.toml"
hash = "3c242c20cc1c5ef446abf5f56a1e0624bfd038ee3bc685435cec846b0051aab0"
metafile = true
[[files]]
file = "mods/farmers-delight.pw.toml"
hash = "c4027b8071cc6dfc7f0d49e702a5e25b1e36841e50acba1e699f308be156b8f2"
metafile = true
[[files]]
file = "mods/forgified-fabric-api.pw.toml"
hash = "5b34f5aff5000de94ed9e132315bad7288a72a9cbb8f902df2799a579433b7af"
metafile = true
[[files]]
file = "mods/friends-and-foes-beekeeper-hut-forge.pw.toml"
hash = "75c642b17b484c0d7c4ec9863295c24364ef69785937d15a80de568efafd585a"
metafile = true
[[files]]
file = "mods/friends-and-foes-flowery-mooblooms-forge.pw.toml"
hash = "1cdeed5adabcbac7ca3d06ead6392d43ae400557f71275c5449ec2505008cd40"
metafile = true
[[files]]
file = "mods/friends-and-foes-forge.pw.toml"
hash = "3ea8f49ae191f67ce56f1fad83147dbfd08b21640b9a4ce3330eea448664e92a"
metafile = true
[[files]]
file = "mods/fruits-delight.pw.toml"
hash = "bd1e1bf1cacb4f256a606a06b0f28a7adf99428bf2bf593b7631c85b1108374d"
metafile = true
[[files]]
file = "mods/fzzy-config.pw.toml"
hash = "b83675c9b88fcd909a7e1a0d93f8bfb06431f8f9f249d690520ba11e738c4402"
metafile = true
[[files]]
file = "mods/geckolib.pw.toml"
hash = "9e80e6f2a680b052f2a66ade20a5abbd98a0abbebde6f30472d6ae6b993e9464"
metafile = true
[[files]]
file = "mods/hardcore-revival.pw.toml"
hash = "2c0d0941d6ade8fb28d43b2ba211678aa643d229f0df0c2112442de1e5073a7b"
metafile = true
[[files]]
file = "mods/immersiveengineering.pw.toml"
hash = "91875c996a9958aeea794843fb449915218625f52aaf0234ccd1faffa887e277"
metafile = true
[[files]]
file = "mods/immersivemusicmod.pw.toml"
hash = "9b105ded2255d63b2b4d8b3bb24c14e467617d56019dc9abafe64cbb0c0d3cfa"
metafile = true
[[files]]
file = "mods/inventory-hud-forge.pw.toml"
hash = "bacbda049bf918a3a048f017a23e3197a91d31ab905e25f7a811d69d55344ca6"
metafile = true
[[files]]
file = "mods/iris.pw.toml"
hash = "f67aa60c765593a8c70f78296a460349c6aef5f4a16d173eae02e8803b545ad4"
metafile = true
[[files]]
file = "mods/irons-spells-n-spellbooks.pw.toml"
hash = "cf1bb72bbbb1ad55af745b6ccb8baf8ff5d6914dc11e41e4752212ca3eb17440"
metafile = true
[[files]]
file = "mods/jade.pw.toml"
hash = "407c4cc8cb9920a9b23674d81952c512302525755d8fba12e94acecaaae949e7"
metafile = true
[[files]]
file = "mods/jei.pw.toml"
hash = "49b54c496707ed15e2f22cd806cbebb3d3ac489483d97f4b61495690e2eeecea"
metafile = true
[[files]]
file = "mods/journey-pac.pw.toml"
hash = "c1a7d513c59eeb49bd2f377236357a280cc2e1d206c3eb3985a3a4615ed97aec"
metafile = true
[[files]]
file = "mods/journeymap-integration.pw.toml"
hash = "f161cd39e3619182a8606ec812634d74713d32ca30c3585bdf7d40b7bb573919"
metafile = true
[[files]]
file = "mods/journeymap.pw.toml"
hash = "cc903c56f854019dc420ab9a088e1a3a328e7839291aafae038f37005e59988e"
metafile = true
[[files]]
file = "mods/kiwi.pw.toml"
hash = "a5e837dd0b40e4c730252cd8b571a28bb8baab22ab8c277d2293b39ab403c201"
metafile = true
[[files]]
file = "mods/kotlin-for-forge.pw.toml"
hash = "297eb75ce1aedc28f183a8891fde9c67318953e6c8adf3d7531a17b211f9349d"
metafile = true
[[files]]
file = "mods/l_enders-cataclysm.pw.toml"
hash = "5d1be74f86f5f9ec1b414368fbee483859048e17f51376efae530b32135377ea"
metafile = true
[[files]]
file = "mods/leave-my-bars-alone.pw.toml"
hash = "6fc46d72336be11582b933177410f6e0e1e89c5464e19a1885c5ce80738b01c5"
metafile = true
[[files]]
file = "mods/leaves-be-gone.pw.toml"
hash = "6917553073df67745da1d535cc6107839a76b54081b1b6f368a38c723f5fd8c7"
metafile = true
[[files]]
file = "mods/lionfish-api.pw.toml"
hash = "b821efc793dd7308be6788095bea26a2a0479f9a3ddc3b0d6a6a2af351153fc0"
metafile = true
[[files]]
file = "mods/lithostitched.pw.toml"
hash = "c18ca4f4035e67182ea949ee2d6cd2c31409306ffc404c0c14bc5c1c212747a8"
metafile = true
[[files]]
file = "mods/magnum-torch.pw.toml"
hash = "f0c97c0212ddda5c012ba451a123d4b39e89f402cc70d38d31dc9098736ec07f"
metafile = true
[[files]]
file = "mods/mmlib.pw.toml"
hash = "59f033615895cd019f9fb168fa93590422c5050274630a8faec46460979a5156"
metafile = true
[[files]]
file = "mods/modelfix.pw.toml"
hash = "6f0dcbcffd4400c6cef07f1eeb48cdc25bac0fa01270936feab4c549aff4738e"
metafile = true
[[files]]
file = "mods/moderately-enough-effect-descriptions-(meed)-jeed-addon.pw.toml"
hash = "67cf0829e2773cb44edda983e169b8197deb8e87b1cc8e1669c6ad5e4c760880"
metafile = true
[[files]]
file = "mods/modernfix.pw.toml"
hash = "a9593968393bae08257ba9aae887ad60fc49991f676b637006b2bcd89907f09a"
metafile = true
[[files]]
file = "mods/moonlight.pw.toml"
hash = "2219a1b4f53f8a96bf1e9827aa695e84ad9d53623f7fe40b88ccd260c732cc98"
metafile = true
[[files]]
file = "mods/more-concrete.pw.toml"
hash = "af08c145608a13f68a624394b68611753f7d7d6f439538e2c328eea60be5a8e1"
metafile = true
[[files]]
file = "mods/mouse-tweaks.pw.toml"
hash = "6bc414cc0f2d4c078fe83f384d786343f701f371d657c5279b5b0df1595804bd"
metafile = true
[[files]]
file = "mods/no-chat-reports.pw.toml"
hash = "5da18814472be5dc93a21886983646da3a7236413800075ac75229be82d114fa"
metafile = true
[[files]]
file = "mods/noisium.pw.toml"
hash = "b3e831b3e4d6ddbf23806b0fec6087eca264af1ebc04e747c89024972aaa8607"
metafile = true
[[files]]
file = "mods/notenoughrecipebook.pw.toml"
hash = "8c36ea5d11344480d76f8463f452c4ecc8ee59781667589ea2fd7b69f6ee86e8"
metafile = true
[[files]]
file = "mods/nullscape.pw.toml"
hash = "71dba581a68de19790dd6888e515d8b693debfc915a18ffb82af473c395f4dd3"
metafile = true
[[files]]
file = "mods/oceans-delight.pw.toml"
hash = "152f6cfe8ee891ba80faa800dd3df3058be14882f9f8d07cb38eb6a6f96ece4b"
metafile = true
[[files]]
file = "mods/octo-lib.pw.toml"
hash = "94828636fa5e8b258a60049250c84ba8c5a0310a98bc1530fc02c351a06aab8b"
metafile = true
[[files]]
file = "mods/ominous-phantoms.pw.toml"
hash = "086a276f1ab191871a11914448792bcdacc29de00770978b55ebe7d40eb6f4c9"
metafile = true
[[files]]
file = "mods/open-loader.pw.toml"
hash = "904c4adb3f8087a2c5381efd5d210183484934540372a5c839ab4790325e5cff"
metafile = true
[[files]]
file = "mods/open-parties-and-claims.pw.toml"
hash = "39261ba5716225d4fcfe98701080fe78ad1832419f620a3789390a5998e918bf"
metafile = true
[[files]]
file = "mods/overflowing-bars.pw.toml"
hash = "cb40fc0e1e0a3338d57b34a5ba2612ae9a9f0e32619695c4da637a98b4e52cf3"
metafile = true
[[files]]
file = "mods/owo-lib.pw.toml"
hash = "46831c04077a06df823bcd0f254833a90a9a9ccc78f5069f4b4c27fa301ac0cf"
metafile = true
[[files]]
file = "mods/pick-up-notifier.pw.toml"
hash = "a1b19740a94f43405c4a9d303e9313911b3d12e48958699bfeaed3dafc57a24f"
metafile = true
[[files]]
file = "mods/platter.pw.toml"
hash = "f82f7a5186b43d1e40773b8576a711f4d93bf09f4e3dcacc811e896f8271ad9c"
metafile = true
[[files]]
file = "mods/playeranimator.pw.toml"
hash = "c83705becd548879473132552de960f9d5975fa0edaeeb2d4665a4e35457423e"
metafile = true
[[files]]
file = "mods/prickle.pw.toml"
hash = "a69a8ba0d9e52361b1853cf59b2cf2a38b668b1d508a565f315f2fa30407f546"
metafile = true
[[files]]
file = "mods/puzzles-lib.pw.toml"
hash = "b27fedf73ce2b829db06bf18fea5afd33f0a001b75465301c7f5bafe7e3c04d8"
metafile = true
[[files]]
file = "mods/reeses-sodium-options.pw.toml"
hash = "09306b955060349986ccf6a6d2a67f1e019fa172a7dc690dd6007f81c966309a"
metafile = true
[[files]]
file = "mods/refined-storage-emi-integration.pw.toml"
hash = "4a5af515250fbde913593346d51b2c4ac8f660e71ba21f65f49a02209bb65509"
metafile = true
[[files]]
file = "mods/refined-storage.pw.toml"
hash = "f5658cd7ba78eedf85cfb999945eb708adfd8aa65a4f32703bd5711ced59abae"
metafile = true
[[files]]
file = "mods/resource-pack-overrides.pw.toml"
hash = "b8101dca20d054277d99e75b43dd8db44dea64a761d2ab69fdda9f6d59d9e6f1"
metafile = true
[[files]]
file = "mods/resourceful-lib.pw.toml"
hash = "c0b066684294c33972d562e0cb08ea17b2d31bcf86cd1d6c63b8e968f0eac7a2"
metafile = true
[[files]]
file = "mods/respawning-animals.pw.toml"
hash = "c24f3a995c06808a047abf9b8b97fb1e09defcbab121755cb23f7316a6b0bb4c"
metafile = true
[[files]]
file = "mods/rrls.pw.toml"
hash = "b78044fd79ce21750d05dc61b6aede33c4b87cdc16a26f5aff472d4f73ab623c"
metafile = true
[[files]]
file = "mods/searchables.pw.toml"
hash = "ce9ddada6ffd55a512149cc474c6a453281a997a5fdf1b7b4a2cc73f875e704a"
metafile = true
[[files]]
file = "mods/silent-gear.pw.toml"
hash = "3ef17cc38cbe19ee924f20f3bfebb7c52bb2bb0db5e578e32473870bd1de67fa"
metafile = true
[[files]]
file = "mods/silent-lib.pw.toml"
hash = "0270a241e1d1c3c8e1ecda59aeaa5004771a57d46a4a470566cb7dd6d7e89c85"
metafile = true
[[files]]
file = "mods/simpletms-tms-and-trs-for-cobblemon.pw.toml"
hash = "f8ba20a06c8391dedc25741ab2817e1af2bfb9a182eee248471dae4b41eb7d77"
metafile = true
[[files]]
file = "mods/snow-real-magic.pw.toml"
hash = "a1deef8071fb83a13df63c289576813b82f0687eebda9b48b7667620d5d45103"
metafile = true
[[files]]
file = "mods/snow-under-trees.pw.toml"
hash = "82aedef3c457ffe51e27a4153aaf73ef7c073b87059a021495af487e41ed2e99"
metafile = true
[[files]]
file = "mods/sodium-dynamic-lights.pw.toml"
hash = "c1e526d3d17cb3563e596d45c7567ed1fe60c31bdc3457f7a747ef8150bd3c1b"
metafile = true
[[files]]
file = "mods/sodium-extra.pw.toml"
hash = "a1fb713df668ed21dda0602e99cb23b991c8faff841e130d7aae46258c3d6a45"
metafile = true
[[files]]
file = "mods/sodium-extras.pw.toml"
hash = "02b29315d2ec0d055d0ebba1f36879da5bcacc823328a668c7e7340fb2cb03d4"
metafile = true
[[files]]
file = "mods/sodium-options-api.pw.toml"
hash = "d193173f0f5dfb4a921d44e29e8d5cee656dd3a40872939069715bb482b66fc9"
metafile = true
[[files]]
file = "mods/sodium.pw.toml"
hash = "0281ed9713f3141bdac363056a791845510e14761ea65b4b2813cf96d664b20a"
metafile = true
[[files]]
file = "mods/sophisticated-backpacks.pw.toml"
hash = "8dd03896ae32eb04e41632127b7265b7fc8b6771ea02bf68830eb9dc8eaba6bc"
metafile = true
[[files]]
file = "mods/sophisticated-core.pw.toml"
hash = "e770af79af2825410069e4889865dc2da89c0d46a21c0e4991749740ea32959b"
metafile = true
[[files]]
file = "mods/sophisticated-storage-create-integration.pw.toml"
hash = "27ff0f0f6845e5ca640a1d0eaa70ec9af869e5794c18abf65546a23c9ceac765"
metafile = true
[[files]]
file = "mods/sophisticated-storage.pw.toml"
hash = "f21fbfc70bc381e1beb3d8e123ec7a9fe5290e70bc0b91fe53e26e2244c71ef0"
metafile = true
[[files]]
file = "mods/spice-of-life-onion.pw.toml"
hash = "bce75bb35eb4719687f61b217bb57d83ef0e63040c291354c1b2369f3c508680"
metafile = true
[[files]]
file = "mods/storage-delight.pw.toml"
hash = "0ccdb1ac3f7fffacc28ffa235bdf7e37105c088095f96b6e3fc9748d64328b94"
metafile = true
[[files]]
file = "mods/stylish-effects.pw.toml"
hash = "07208867dff9eb56eed1f370186187dab4ac0c1086d57ce5fd9ce07ea93a5320"
metafile = true
[[files]]
file = "mods/subtle-effects.pw.toml"
hash = "d42a1a14488605365ab717784d6552dcfa3ad45f09332e0b983eab7516848c68"
metafile = true
[[files]]
file = "mods/tax-free-levels.pw.toml"
hash = "dbfe27c8d868f5d934b882b8d26f3772fad78d97da191937d051a4f5c81a0b3b"
metafile = true
[[files]]
file = "mods/tectonic.pw.toml"
hash = "3601406f8001d9e5a1564e0bed50a4b92f75d435af37415e44900ae74273bb0e"
metafile = true
[[files]]
file = "mods/terralith.pw.toml"
hash = "da7ee99189ad35aac094919fe33cac647d98533b23c228f10d4811f08989e2b8"
metafile = true
[[files]]
file = "mods/tidal-towns.pw.toml"
hash = "0ccb1c696758d7935d02dd5160987cab8d3594ab24f89deb01c28f9e596094e7"
metafile = true
[[files]]
file = "mods/wall-jump-txf.pw.toml"
hash = "4ba37fc038fb52396b3557d6249d96c45acd8feec0355589032ea625d0a9edd6"
metafile = true
[[files]]
file = "mods/yacl.pw.toml"
hash = "aa9070a0e763f00f0d0b325e9bb980e53faabe9854bae25f2e542a7b81b7492e"
metafile = true
[[files]]
file = "mods/yeetus-experimentus.pw.toml"
hash = "5e25dccab496945a5f19bb82383e0ebf98452ffc14cd25c7e0259cc44312281a"
metafile = true
[[files]]
file = "mods/yungs-api.pw.toml"
hash = "d9c0c9209bac0b693af2a7c1e47ffb28d366bad19c91df31dc6d345fa75250a1"
metafile = true
[[files]]
file = "mods/yungs-better-desert-temples.pw.toml"
hash = "c2cb28859e7bcc0eb4ce59c5792f90fa5f8ab8865f5867ba26a5a345ec60b498"
metafile = true
[[files]]
file = "mods/yungs-better-dungeons.pw.toml"
hash = "1496ffa30020676979e65921b91e583a2fdc77e50001e2ed55f99edf1a0ae880"
metafile = true
[[files]]
file = "mods/yungs-better-end-island.pw.toml"
hash = "03d964cba45be30fbcbef52f89f3953185737f55c8934d12e199b67194c2b368"
metafile = true
[[files]]
file = "mods/yungs-better-jungle-temples.pw.toml"
hash = "c2dc09f214e7c1cecca6cf434776c2616f6d36bd27c06a6b39f985da0453a4f5"
metafile = true
[[files]]
file = "mods/yungs-better-mineshafts.pw.toml"
hash = "e839608ebc974e9e7819adc7bf29132ea86fc41b46af540fe0fa39b2007b2439"
metafile = true
[[files]]
file = "mods/yungs-better-nether-fortresses.pw.toml"
hash = "50c1731148d91a4ef05cfc47f759ca8fb3dad254e15ce4ecc5732d6fbfa68637"
metafile = true
[[files]]
file = "mods/yungs-better-ocean-monuments.pw.toml"
hash = "a2d7176026abf4a68a663b375811a603c508f36062cc7fb5b45416e1462682a8"
metafile = true
[[files]]
file = "mods/yungs-better-strongholds.pw.toml"
hash = "03084966c05070b5c4b17cd89234f3c0d813940a2d76b405a6699deac10a0ab8"
metafile = true
[[files]]
file = "mods/yungs-better-witch-huts.pw.toml"
hash = "9854b699d5a067c46ac99b1dedeeb529bff3fc18dd079e29b438c4cbf9725f68"
metafile = true
[[files]]
file = "mods/yungs-bridges.pw.toml"
hash = "c5e5f5aed37edd8073ec736e179b6159530ff497f4fe4c4dfaf954c810910433"
metafile = true
[[files]]
file = "mods/yungs-extras.pw.toml"
hash = "cfb7ce4c2b00cedd2e61f7d345b824d6bcc1471021668d2319ee2e4079108639"
metafile = true
[[files]]
file = "shaderpacks/complementary-reimagined.pw.toml"
hash = "3385e33cb8e2cbf402562dcb68669cc2905fec01b4be9fe27a516010c5aaff87"
metafile = true

View file

@ -1,13 +0,0 @@
name = "Aether Addon: Emissivity"
filename = "aether_emissivity-1.21.1-1.0.1-neoforge.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/sKHHynnb/versions/NgXUuFDh/aether_emissivity-1.21.1-1.0.1-neoforge.jar"
hash-format = "sha512"
hash = "51d68890596958d9dba32afce0f27b8d03fcfbaafec654c8604e847beef681adb895b85a349380997d448449c86d255825b0061290daf0db5fe890bc31016689"
[update]
[update.modrinth]
mod-id = "sKHHynnb"
version = "NgXUuFDh"

View file

@ -1,13 +0,0 @@
name = "Aether Addon: Enhanced Extinguishing"
filename = "aether_enhanced_extinguishing-1.21.1-1.0.0-neoforge.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/FDrEl7QY/versions/6O6CJTuj/aether_enhanced_extinguishing-1.21.1-1.0.0-neoforge.jar"
hash-format = "sha512"
hash = "006a921f1c52bd8aa0c195cda646ab6787c28bbc70ebed66d7d444838f464ba8be479c74b801deeb9aaf3ddf7350ea238fc73228af275a7112783d91c064d4b0"
[update]
[update.modrinth]
mod-id = "FDrEl7QY"
version = "6O6CJTuj"

View file

@ -1,13 +0,0 @@
name = "The Aether"
filename = "aether-1.21.1-1.5.8-neoforge.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/YhmgMVyu/versions/IOyjRzWX/aether-1.21.1-1.5.8-neoforge.jar"
hash-format = "sha512"
hash = "3343a8d87f49ae46eeae1aa657bcec8a6a6451110ffee18bc7d6e6b5df5a85c01a534c1bc01ef7f62648abc8a8ee408ac741891cd066804fa3fe6761b9532f7e"
[update]
[update.modrinth]
mod-id = "YhmgMVyu"
version = "IOyjRzWX"

View file

@ -1,13 +0,0 @@
name = "AmbientSounds"
filename = "AmbientSounds_NEOFORGE_v6.1.12_mc1.21.1.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/fM515JnW/versions/YY79wyx3/AmbientSounds_NEOFORGE_v6.1.12_mc1.21.1.jar"
hash-format = "sha512"
hash = "9af4fdae4d520924299baea52a56c2bb3ce6997d356ba7e74d5a48cf42ee6353583037fa3cbc36172c97cff806b321bbb8d9b8d4065465cfbf8d883b67c80340"
[update]
[update.modrinth]
mod-id = "fM515JnW"
version = "YY79wyx3"

View file

@ -1,13 +0,0 @@
name = "AppleSkin"
filename = "appleskin-neoforge-mc1.21-3.0.7.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/EsAfCjCV/versions/kztxpjAA/appleskin-neoforge-mc1.21-3.0.7.jar"
hash-format = "sha512"
hash = "03a94fe4143250b8e80abe97770918ba0af1265110bb73c25444674f9cdf86164464332a913cbac29af82d8ed02dce6ef19bbb62fced92620817a7ec1e761b71"
[update]
[update.modrinth]
mod-id = "EsAfCjCV"
version = "kztxpjAA"

View file

@ -1,13 +0,0 @@
name = "Architectury API"
filename = "architectury-13.0.8-neoforge.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/lhGA9TYQ/versions/ZxYGwlk0/architectury-13.0.8-neoforge.jar"
hash-format = "sha512"
hash = "65e3664953385d880320dd6bb818bcb96d361c07c53e2a7f65e64c6a47720ee26b233224ae9cad465ef0b2bbaefdaf30fb0175a983cecd91de058817d6fcf57e"
[update]
[update.modrinth]
mod-id = "lhGA9TYQ"
version = "ZxYGwlk0"

View file

@ -1,13 +0,0 @@
name = "Armourer's Workshop"
filename = "armourersworkshop-forge-1.21.1-3.2.3-beta.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/y4JF3gXL/versions/gWKk3ffs/armourersworkshop-forge-1.21.1-3.2.3-beta.jar"
hash-format = "sha512"
hash = "d36aa65096c3293db2b6f4056123f737823bd55eeaf86984e9bfd83d3ab33e68f0e38770962913530d4113ceebac6ebb53676c739975aac8a56f646eccd7fd0c"
[update]
[update.modrinth]
mod-id = "y4JF3gXL"
version = "gWKk3ffs"

View file

@ -1,13 +0,0 @@
name = "AttributeFix"
filename = "attributefix-neoforge-1.21.1-21.1.2.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/lOOpEntO/versions/a0oKmnPU/attributefix-neoforge-1.21.1-21.1.2.jar"
hash-format = "sha512"
hash = "bbfe003ed29a2bb0b4dd0a61d64b411748c9f5cb48ccbfd954dd2d813c452c540638749b6f19e7472e44ae1e966a3629b135190ffba3099cfdf45355618c0b97"
[update]
[update.modrinth]
mod-id = "lOOpEntO"
version = "a0oKmnPU"

View file

@ -1,13 +0,0 @@
name = "Bad Wither No Cookie - Reloaded"
filename = "bwncr-neoforge-1.21.1-3.20.3.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/lL2MtE37/versions/Vg54emzq/bwncr-neoforge-1.21.1-3.20.3.jar"
hash-format = "sha512"
hash = "db8419504e6ede1553b2e2d060fe4937c53898154c66475b726381155233a55daa0f52a530562dfc84202692e52614f8c585e89b1f8621f6bf799ce6d97c91ab"
[update]
[update.modrinth]
mod-id = "lL2MtE37"
version = "Vg54emzq"

View file

@ -1,13 +0,0 @@
name = "BadOptimizations"
filename = "BadOptimizations-2.3.0-1.21.1.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/g96Z4WVZ/versions/AQrpXs3f/BadOptimizations-2.3.0-1.21.1.jar"
hash-format = "sha512"
hash = "a9d78ab8d84d0ba3ebfd77eb3c4f585b9c3f0cad8e59b0ecef8c3ba107067342d7549f275c8fe45a5d4f35f7d848a15c184ad6e369044e659d17ce08afe91a77"
[update]
[update.modrinth]
mod-id = "g96Z4WVZ"
version = "AQrpXs3f"

View file

@ -1,13 +0,0 @@
name = "Balm"
filename = "balm-neoforge-1.21.1-21.0.48.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/MBAkmtvl/versions/flSytBwz/balm-neoforge-1.21.1-21.0.48.jar"
hash-format = "sha512"
hash = "66a601c8b84c994392d5b81766b0610d9fe757c84ae0879799f0f669750c04f7aa4d8e3b9ca6f0049aaa959a1aa5d49d77e570cec678f569b8ad00e96cd09414"
[update]
[update.modrinth]
mod-id = "MBAkmtvl"
version = "flSytBwz"

View file

@ -1,13 +0,0 @@
name = "Barbeque's Delight [Forge/NeoForge]"
filename = "barbequesdelight-1.2.0+3.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/rtu7uERF/versions/h49PLX7j/barbequesdelight-1.2.0%2B3.jar"
hash-format = "sha512"
hash = "d29490f2982bfb225e23a77b37d82a8a35f0b0d6a842205685215eb9005b87ac92ad3ff0bbe3ffa08df1e7f466fadf2e3c245f9be17c15b32e76bf9f023c1cf5"
[update]
[update.modrinth]
mod-id = "rtu7uERF"
version = "h49PLX7j"

View file

@ -1,13 +0,0 @@
name = "Berry Good"
filename = "berry_good-1.21.1-8.0.0.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/2WZWaKCl/versions/dJvvZvQk/berry_good-1.21.1-8.0.0.jar"
hash-format = "sha512"
hash = "0fea9a289d39e0d722a323d5777bede66d4850655377c923cd4cae2f864b0e994fc87b0e75df7bd50683f40f08f509a77f3107c9956169326a0c184d7f092970"
[update]
[update.modrinth]
mod-id = "2WZWaKCl"
version = "dJvvZvQk"

View file

@ -1,13 +0,0 @@
name = "Better Advancements"
filename = "BetterAdvancements-NeoForge-1.21.1-0.4.3.21.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/Q2OqKxDG/versions/FjTYILOi/BetterAdvancements-NeoForge-1.21.1-0.4.3.21.jar"
hash-format = "sha512"
hash = "b3deafd146dc3ea6e879fbc92f00de5797319a1aa620fb3b39be64c19271dab2efa07f824cda7139f8c22f2524ea413949357f5469bb6de584d1386de069c6b7"
[update]
[update.modrinth]
mod-id = "Q2OqKxDG"
version = "FjTYILOi"

View file

@ -1,13 +0,0 @@
name = "Better Animations Collection"
filename = "BetterAnimationsCollection-v21.1.0-1.21.1-NeoForge.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/OoOVj3J3/versions/tlFY9zBb/BetterAnimationsCollection-v21.1.0-1.21.1-NeoForge.jar"
hash-format = "sha512"
hash = "bd99f6040b076ff878e4aae3832e6c494fbaba5d0cb0b26d80c1874c7bd59c11e725705aaeb777d9f1bb821b516e15866600c665a4fba1eafa7a75cbf66307bf"
[update]
[update.modrinth]
mod-id = "OoOVj3J3"
version = "tlFY9zBb"

View file

@ -1,13 +0,0 @@
name = "Better Third Person"
filename = "BetterThirdPerson-neoforge-1.9.0.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/G1s2WpNo/versions/aG5y4JUQ/BetterThirdPerson-neoforge-1.9.0.jar"
hash-format = "sha512"
hash = "053acb813940aac69578810558056942966f2f0a24006a3a5de545c82888f8190b3bdc27a2401d0f70200dc4c927c0f84a45bf17821fb94fb9b886d633644619"
[update]
[update.modrinth]
mod-id = "G1s2WpNo"
version = "aG5y4JUQ"

View file

@ -1,13 +0,0 @@
name = "BetterF3"
filename = "BetterF3-11.0.3-NeoForge-1.21.1.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/8shC1gFX/versions/maXNB1dn/BetterF3-11.0.3-NeoForge-1.21.1.jar"
hash-format = "sha512"
hash = "59c36a882669399dce2110db42df05e8fe935a2e1194c4bac49abffc3129b2e19373dfe3c4a3d2f8b22f21b1d66ad8cbd653944ce0a71ae05d3d65528d1b7514"
[update]
[update.modrinth]
mod-id = "8shC1gFX"
version = "maXNB1dn"

View file

@ -1,13 +0,0 @@
name = "Blueprint"
filename = "blueprint-1.21.1-8.0.5.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/VsM5EDoI/versions/l2AucG5l/blueprint-1.21.1-8.0.5.jar"
hash-format = "sha512"
hash = "6a0801d078b233e4e909c9f9644236def1b29dd135bdf64a98c2688edebc0eef266a7b419911035726c565eee616090047e59601ece77033e38108a3e1bfd525"
[update]
[update.modrinth]
mod-id = "VsM5EDoI"
version = "l2AucG5l"

View file

@ -1,13 +0,0 @@
name = "Bookshelf"
filename = "bookshelf-neoforge-1.21.1-21.1.67.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/uy4Cnpcm/versions/9LiRySL2/bookshelf-neoforge-1.21.1-21.1.67.jar"
hash-format = "sha512"
hash = "98225af4ba0a8e10e30219b9a2bef39d0aa49425f5f09b6b2c7f627992458e39e30b686d03a8b8c4563eae44505ce94a7d21363700d77b21c1c4771409c34c63"
[update]
[update.modrinth]
mod-id = "uy4Cnpcm"
version = "9LiRySL2"

View file

@ -1,13 +0,0 @@
name = "Can't Sleep Clowns Will Eat Me"
filename = "cant_sleep_clowns_will_eat_me-1.21-2.0.0.0.jar"
side = "both"
[download]
hash-format = "sha1"
hash = "da6f8415bb3be1f1855b1bb2c617db27683d3dab"
mode = "metadata:curseforge"
[update]
[update.curseforge]
file-id = 5530236
project-id = 430957

View file

@ -1,13 +0,0 @@
name = "Cloth Config API"
filename = "cloth-config-15.0.140-neoforge.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/9s6osm5g/versions/izKINKFg/cloth-config-15.0.140-neoforge.jar"
hash-format = "sha512"
hash = "aaf9b010955b8cd294e5a92f069985b18729fd5e2cf22d351f1dff9680f15488688803ec41e77e941cbde130ceb535014ca4c868047d80ab69c2d508e216654d"
[update]
[update.modrinth]
mod-id = "9s6osm5g"
version = "izKINKFg"

View file

@ -1,13 +0,0 @@
name = "Clumps"
filename = "Clumps-neoforge-1.21.1-19.0.0.1.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/Wnxd13zP/versions/jo7lDoK4/Clumps-neoforge-1.21.1-19.0.0.1.jar"
hash-format = "sha512"
hash = "314d8d8e640d73041f27e0f3f2cad7aad8b4c77dbd7fb31700ef7760362261f77085eed5289555c725d99c3f47a114e7290cd608f39c9f0f12ef74958463bdcc"
[update]
[update.modrinth]
mod-id = "Wnxd13zP"
version = "jo7lDoK4"

View file

@ -1,13 +0,0 @@
name = "Cobblemon additions"
filename = "BCA-Datapack-3.8_CE_norm_M1.21.1_C1.6.1.zip"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/W2pr9jyL/versions/J1wqmyOI/BCA-Datapack-3.8_CE_norm_M1.21.1_C1.6.1.zip"
hash-format = "sha512"
hash = "65d97aeb98572b264badf9c19b7994853472910dc2b9da2c962525e6f635deae812b9bf7a7e1886fcdf5e72764271fa0543d9066bb43f71a60028507e6e4e35c"
[update]
[update.modrinth]
mod-id = "W2pr9jyL"
version = "J1wqmyOI"

View file

@ -1,13 +0,0 @@
name = "Cobblemon Counter"
filename = "cobblemon-counter-1.6-neoforge-1.5.1.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/rj8uLYP4/versions/4NXvB2jm/cobblemon-counter-1.6-neoforge-1.5.1.jar"
hash-format = "sha512"
hash = "ff49a9e9939ef3c84e941c4070ca923dfc439f5ffed0aad3530db5fc5b70b1c4be5751310cc61e7d61853e25ff2c8a039de5e5cf38827e24aadfd659e0d1b511"
[update]
[update.modrinth]
mod-id = "rj8uLYP4"
version = "4NXvB2jm"

View file

@ -1,13 +0,0 @@
name = "Cobblemon Fight or Flight Reborn"
filename = "fightorflight-neoforge-0.8.2.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/cTdIg5HZ/versions/9JSwVvPR/fightorflight-neoforge-0.8.2.jar"
hash-format = "sha512"
hash = "3024acdc80eb3e07a914d46ecfc85c9addf2775c6469a5f4d88922d9d0f2fe6599aa8b6c4137bad10bc38dc88c0351eb5d7173bdcbf29a5b238610a3fbf2f80c"
[update]
[update.modrinth]
mod-id = "cTdIg5HZ"
version = "9JSwVvPR"

View file

@ -1,13 +0,0 @@
name = "Cobblemon Integrations"
filename = "cobblemonintegrations-neoforge-1.21.1-1.1.3.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/NPCfuUI4/versions/slzdgomG/cobblemonintegrations-neoforge-1.21.1-1.1.3.jar"
hash-format = "sha512"
hash = "74a30fdd644638d2fc95bccb8b4c20cb6e5dd33309ccca8c155e30e8e77e8bf3670f6a79a86c4f9404b04bc3ce7b78428cf69a3fb15ba46e4a71a4ddd2f1f471"
[update]
[update.modrinth]
mod-id = "NPCfuUI4"
version = "slzdgomG"

View file

@ -1,13 +0,0 @@
name = "Cobblemon Pokenav"
filename = "cobblenav-neoforge-2.2.3.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/bI8Nt3uA/versions/O4yCDqfr/cobblenav-neoforge-2.2.3.jar"
hash-format = "sha512"
hash = "3d6d97246a4255c172e13542d551de91d4047934711405cf7717d55bce83dd476fb146318c793592c28331d01fd8887e3e67dda4071d6c34ad8576393401ed12"
[update]
[update.modrinth]
mod-id = "bI8Nt3uA"
version = "O4yCDqfr"

View file

@ -1,13 +0,0 @@
name = "Cobblemon Unchained"
filename = "cobblemon-unchained-1.6-neoforge-1.2.3.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/wh0wnzrT/versions/SLb2aN0u/cobblemon-unchained-1.6-neoforge-1.2.3.jar"
hash-format = "sha512"
hash = "c30f82a160794f00534ab31eea3f8e340bb76ce4d950b9825eba34d5a924a7355f31e35f3e4ce98c165c6c29897dbf55fdd75d8603b1c3f3ae3a9f28dac54388"
[update]
[update.modrinth]
mod-id = "wh0wnzrT"
version = "SLb2aN0u"

View file

@ -1,13 +0,0 @@
name = "Cobblemon"
filename = "Cobblemon-neoforge-1.6.1+1.21.1.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/MdwFAVRL/versions/eLcb8xod/Cobblemon-neoforge-1.6.1%2B1.21.1.jar"
hash-format = "sha512"
hash = "9d10fb7aec60c775ea050002b7f8f4390a5bed823a91e68ec088160ddf024860c7a7fb8aef3069b7619009a04335466702150eac6e1502f1c1051d88cb5b3897"
[update]
[update.modrinth]
mod-id = "MdwFAVRL"
version = "eLcb8xod"

View file

@ -1,13 +0,0 @@
name = "Colorwheel Patcher"
filename = "colorwheel_patcher-neoforge-0.2.4+mc1.21.1.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/KPsw5jDu/versions/TxG8hsQV/colorwheel_patcher-neoforge-0.2.4%2Bmc1.21.1.jar"
hash-format = "sha512"
hash = "ee3fa2cee448fa7733a20d1e0cda6ca6868063ef234c78d55798cff7d62181880639a12655401c7e15329add38b8253292471dc5d96b57d666fec68cacd9ff26"
[update]
[update.modrinth]
mod-id = "KPsw5jDu"
version = "TxG8hsQV"

View file

@ -1,13 +0,0 @@
name = "Colorwheel"
filename = "colorwheel-neoforge-0.2.3+mc1.21.1.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/BzHgFoGz/versions/jF0HWFDB/colorwheel-neoforge-0.2.3%2Bmc1.21.1.jar"
hash-format = "sha512"
hash = "297d252f8e5b01116832a6e867c7a3b159bdb984a58f8c07baf2598915e91c3c23369065bcf763c655ea23849de8b791b5ed945f1a70d63292d647dbc704cb94"
[update]
[update.modrinth]
mod-id = "BzHgFoGz"
version = "jF0HWFDB"

View file

@ -1,13 +0,0 @@
name = "Comforts"
filename = "comforts-neoforge-9.0.4+1.21.1.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/SaCpeal4/versions/f0FgfKAZ/comforts-neoforge-9.0.4%2B1.21.1.jar"
hash-format = "sha512"
hash = "c1fcb536f1a311876c09c9b42b43f599115bcd14bbbbc22d56c5ba8ec72f9e32d84661f0f2f1abbfa19d085f3798ce471b3d89e396f1656a2c57edf2ec8cc3dd"
[update]
[update.modrinth]
mod-id = "SaCpeal4"
version = "f0FgfKAZ"

View file

@ -1,13 +0,0 @@
name = "Sinytra Connector"
filename = "connector-2.0.0-beta.8+1.21.1-full.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/u58R1TMW/versions/KrmWHpgS/connector-2.0.0-beta.8%2B1.21.1-full.jar"
hash-format = "sha512"
hash = "c734a56142138aeabab116c7e30427d894c8b6c36dc95f498bbcd262916287894326f23a5da84d2605a924a93337f9302b83c2221ead2e013531d350baec796f"
[update]
[update.modrinth]
mod-id = "u58R1TMW"
version = "KrmWHpgS"

View file

@ -1,13 +0,0 @@
name = "Controlling"
filename = "Controlling-neoforge-1.21.1-19.0.5.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/xv94TkTM/versions/FaNppCJJ/Controlling-neoforge-1.21.1-19.0.5.jar"
hash-format = "sha512"
hash = "bd01b2a38a869ea38e5f2a8fcd601e67ea9b132b9883c6ae752bc35dff6e94f6d47b965e31c1ee5c2f6a1221653549680da779fcb5319d199aec261d221d179e"
[update]
[update.modrinth]
mod-id = "xv94TkTM"
version = "FaNppCJJ"

View file

@ -1,13 +0,0 @@
name = "Corn Delight"
filename = "corn_delight-1.1.8-1.21.1.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/uxLAKWU8/versions/IyuE10ak/corn_delight-1.1.8-1.21.1.jar"
hash-format = "sha512"
hash = "2f3cbf3e9dacbad3184f6f8f898f069008926a0342da3b1e84608523c74a3100eae7ed65c1d2f43cdfe0eb9d84175908974d39722ab342a7b6dbc326d2dc7c64"
[update]
[update.modrinth]
mod-id = "uxLAKWU8"
version = "IyuE10ak"

View file

@ -1,13 +0,0 @@
name = "Corpse"
filename = "corpse-neoforge-1.21.1-1.1.10.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/WrpuIfhw/versions/9KagdOAl/corpse-neoforge-1.21.1-1.1.10.jar"
hash-format = "sha512"
hash = "7a7f4f53497e281678e3e2cf8e3fcbc7369564a32bf3c4b427e775f512745bb56a800e322e3f95aa9a127b25772ca495f4ec312e3049da2c5ce03fac8bff9365"
[update]
[update.modrinth]
mod-id = "WrpuIfhw"
version = "9KagdOAl"

View file

@ -1,13 +0,0 @@
name = "Crabber's Delight"
filename = "crabbersdelight-1.21.1-1.1.10.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/gBGdVBJy/versions/ptG64SYO/crabbersdelight-1.21.1-1.1.10.jar"
hash-format = "sha512"
hash = "1e7aee54a97a71e6e55cdad6fb45e097f3bb25afbe6c91b62696b8ac5df7e471e3b0f089b4202f9a64efbd485ed2981d5f2ddafcef37d3e69fc3e770e4c2b07f"
[update]
[update.modrinth]
mod-id = "gBGdVBJy"
version = "ptG64SYO"

View file

@ -1,13 +0,0 @@
name = "Create: Dragons Plus"
filename = "create-dragons-plus-1.6.1.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/dzb1a5WV/versions/M71tJKIz/create-dragons-plus-1.6.1.jar"
hash-format = "sha512"
hash = "fa5af12d67974d40e0ce0f37c520b88b2a1ebb292af94634cbd404bed4315000e37169728385cf211ddcd91e3fb2a225039a2d80acb54102eb3775e31d0f6906"
[update]
[update.modrinth]
mod-id = "dzb1a5WV"
version = "M71tJKIz"

View file

@ -1,13 +0,0 @@
name = "Create: Enchantment Industry"
filename = "create-enchantment-industry-2.1.7.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/JWGBpFUP/versions/MYRXafDX/create-enchantment-industry-2.1.7.jar"
hash-format = "sha512"
hash = "8d224728c45ed08a676c229c57baadb4a0c3006cd35ea13bf8084d869391411c8bb440c3d1b9dd7ea8c48ce03359852b6d188198e61a9d91ab5cc1844aa861b8"
[update]
[update.modrinth]
mod-id = "JWGBpFUP"
version = "MYRXafDX"

View file

@ -1,13 +0,0 @@
name = "Create"
filename = "create-1.21.1-6.0.6.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/LNytGWDc/versions/tS7ygzAE/create-1.21.1-6.0.6.jar"
hash-format = "sha512"
hash = "a65723abb0439ab5bb9dfae0b66db33a7c41422d015be7524912033b6cb39a1ef3a247b4b842981131cd541d141cc257d761b6de4e8837960a98b43054049228"
[update]
[update.modrinth]
mod-id = "LNytGWDc"
version = "tS7ygzAE"

View file

@ -1,13 +0,0 @@
name = "CreativeCore"
filename = "CreativeCore_NEOFORGE_v2.13.7_mc1.21.1.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/OsZiaDHq/versions/jy6rEC2t/CreativeCore_NEOFORGE_v2.13.7_mc1.21.1.jar"
hash-format = "sha512"
hash = "ab0f95c8127ea248592e26120a2aedc15ffb91ba27fce1da318d1cb3cfcea6accdacb334076363955f99d4d12816c3e4546298e0ec8b9bda223062f4e5c8b33b"
[update]
[update.modrinth]
mod-id = "OsZiaDHq"
version = "jy6rEC2t"

View file

@ -1,13 +0,0 @@
name = "Curios API"
filename = "curios-neoforge-9.5.1+1.21.1.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/vvuO3ImH/versions/yohfFbgD/curios-neoforge-9.5.1%2B1.21.1.jar"
hash-format = "sha512"
hash = "5981a267686b744e7e3c227f78cbcd5267c14ac6979a28e814695f4589273998563147207fef4a5cdb7cdbdc39797cd95d9e4abadb55869f18e02a38d0654ae5"
[update]
[update.modrinth]
mod-id = "vvuO3ImH"
version = "yohfFbgD"

View file

@ -1,13 +0,0 @@
name = "Cut Through"
filename = "CutThrough-v21.1.0-1.21.1-NeoForge.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/Dk6su9JN/versions/5P5tLHSh/CutThrough-v21.1.0-1.21.1-NeoForge.jar"
hash-format = "sha512"
hash = "e6313fe2c2fb8b5131b39bf8ae105e5120630b78d713db5a573c6830a476868beee3f38aa4da7c29779214b7690af83ca0ce9036d1f757a54c2352e0748cd256"
[update]
[update.modrinth]
mod-id = "Dk6su9JN"
version = "5P5tLHSh"

View file

@ -1,13 +0,0 @@
name = "Deep Aether"
filename = "deep_aether-1.21.1-1.1.2.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/gcHIih5B/versions/6zQqREgL/deep_aether-1.21.1-1.1.2.jar"
hash-format = "sha512"
hash = "d0eb647503cf7f806b31c2ae23901c8f886570b2a593d9510a71cc303c647478eb0e2d183c95f6da644d700ccc6f17978471b035c20a968b895b248c5e81c1cf"
[update]
[update.modrinth]
mod-id = "gcHIih5B"
version = "6zQqREgL"

View file

@ -1,13 +0,0 @@
name = "Default Options"
filename = "defaultoptions-neoforge-1.21.1-21.1.4.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/WEg59z5b/versions/zFWJFG9t/defaultoptions-neoforge-1.21.1-21.1.4.jar"
hash-format = "sha512"
hash = "050b9216e082530facd2531cac9f3d9598b4bade37e8b2fbe785da9e9cd2ea189fa7aa41a7b7f8be1a14df12ec1a1be7bc71bf558b80bb123c444d798d940d3d"
[update]
[update.modrinth]
mod-id = "WEg59z5b"
version = "zFWJFG9t"

View file

@ -1,13 +0,0 @@
name = "Diagonal Fences"
filename = "DiagonalFences-v21.1.1-1.21.1-NeoForge.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/IKARgflD/versions/bgR1e0O5/DiagonalFences-v21.1.1-1.21.1-NeoForge.jar"
hash-format = "sha512"
hash = "856e035193eb99264321e6d971881bad14baeb7196cb3ae75463457802dfb4d967eaec27a046e1290f074721fc1cd85d59adfd773a287b159a7baac1435c09d1"
[update]
[update.modrinth]
mod-id = "IKARgflD"
version = "bgR1e0O5"

View file

@ -1,13 +0,0 @@
name = "Diagonal Walls"
filename = "DiagonalWalls-v21.1.2-1.21.1-NeoForge.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/FQgc8dib/versions/2k3GCxEt/DiagonalWalls-v21.1.2-1.21.1-NeoForge.jar"
hash-format = "sha512"
hash = "69495235948a9786b6c99eac06cf2a406f478b4425f08699b205da667a3a8a7f9cd3e7ac643199a01487d3a7319b275e014d2a81885008845d2ec798664620f0"
[update]
[update.modrinth]
mod-id = "FQgc8dib"
version = "2k3GCxEt"

View file

@ -1,13 +0,0 @@
name = "Diagonal Windows"
filename = "DiagonalWindows-v21.1.1-1.21.1-NeoForge.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/oOi0CKes/versions/IwUmOLxe/DiagonalWindows-v21.1.1-1.21.1-NeoForge.jar"
hash-format = "sha512"
hash = "fd335b7789321a1d0de9691d855c2bcc51d669f4614bdd2cd6fe17f7881f9dd39e63cb28c39a1a1798e98a6876ad1658ef2e3805e884f13e4650810611227849"
[update]
[update.modrinth]
mod-id = "oOi0CKes"
version = "IwUmOLxe"

View file

@ -1,13 +0,0 @@
name = "Distant Horizons"
filename = "DistantHorizons-2.3.4-b-1.21.1-fabric-neoforge.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/uCdwusMi/versions/P14vqscU/DistantHorizons-2.3.4-b-1.21.1-fabric-neoforge.jar"
hash-format = "sha512"
hash = "5514def7741ae61517c4b678294b2672c767c3bbe15f4beb3dfb60761a3bf367ed480136c9c1f6e6fcd302d0e4f79984215dbd348cfda983dacc714f377392dd"
[update]
[update.modrinth]
mod-id = "uCdwusMi"
version = "P14vqscU"

View file

@ -1,13 +0,0 @@
name = "Distinguished Potions"
filename = "DistinguishedPotions-v21.1.1-1.21.1-NeoForge.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/lX1xTFBZ/versions/Jya0J2fp/DistinguishedPotions-v21.1.1-1.21.1-NeoForge.jar"
hash-format = "sha512"
hash = "0e64e8aab8048960a09e8af2cd2379fd255c5a7810757bca787ecd2a123a6cf713820ae422b2b385311236b47519f5f04786bf3f23a533292507794b9a41a216"
[update]
[update.modrinth]
mod-id = "lX1xTFBZ"
version = "Jya0J2fp"

View file

@ -1,13 +0,0 @@
name = "Dynamic FPS"
filename = "dynamic-fps-3.9.5+minecraft-1.21.0-neoforge.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/LQ3K71Q1/versions/TWvfxJSz/dynamic-fps-3.9.5%2Bminecraft-1.21.0-neoforge.jar"
hash-format = "sha512"
hash = "e6f128e39eee182319d5d0f6f8a602007172906f49b4568e3f4d5c9aa32d0a375bdbd440567318c0d5e31e6fc446294e1919cbbedfb85edd9d7fa6c1853e830a"
[update]
[update.modrinth]
mod-id = "LQ3K71Q1"
version = "TWvfxJSz"

View file

@ -1,13 +0,0 @@
name = "EdivadLib"
filename = "EdivadLib-1.21-3.0.0.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/a8Jk9kpK/versions/exl6hgWJ/EdivadLib-1.21-3.0.0.jar"
hash-format = "sha512"
hash = "3cb39fdc7ce4b68bf4681ef7395fb6b81961372b10a68784abedd33e2026d9c3841daa93d29a44f9872ef0287eac276f10ab8640a8543ae67e9ae294f28bd8b6"
[update]
[update.modrinth]
mod-id = "a8Jk9kpK"
version = "exl6hgWJ"

View file

@ -1,13 +0,0 @@
name = "EMI: Create Schematics"
filename = "emi_create_schematics-1.0.2.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/5bgqgixq/versions/XhimCTHT/emi_create_schematics-1.0.2.jar"
hash-format = "sha512"
hash = "afdd6fb0e09ce13e3163cb664786e4b2d20143669b35fbf97cce05a12110feefc4e3e9a81a081c9afb69d175f64ce15a1e92decfbbed8c62b552734afa7a1220"
[update]
[update.modrinth]
mod-id = "5bgqgixq"
version = "XhimCTHT"

View file

@ -1,13 +0,0 @@
name = "EMI Enchanting"
filename = "emi_enchanting-0.1.2+1.21+neoforge.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/wbWoo11W/versions/ZyJ6TKvh/emi_enchanting-0.1.2%2B1.21%2Bneoforge.jar"
hash-format = "sha512"
hash = "90944c8ff897fa98d0323fe94e4053fb89f43cbaf4fd28d6ad58134cea1469c9398e0c0edd4328a5530e1578ad2286ec5822292bf9c587182e5606dbfff218be"
[update]
[update.modrinth]
mod-id = "wbWoo11W"
version = "ZyJ6TKvh"

View file

@ -1,13 +0,0 @@
name = "EMI Loot"
filename = "emi_loot-0.7.6+1.21+neoforge.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/qbbO7Jns/versions/ZCSyd1co/emi_loot-0.7.6%2B1.21%2Bneoforge.jar"
hash-format = "sha512"
hash = "273dce3dc8746c664f95cd97f2afc8f32684dd107c69daacd40c514574207d856a9edf6133cb1529cf7c50d6fbc16f30028a9ecb8137162d29f52567cdc4c564"
[update]
[update.modrinth]
mod-id = "qbbO7Jns"
version = "ZCSyd1co"

View file

@ -1,13 +0,0 @@
name = "EMI Ores"
filename = "emi_ores-1.2+1.21.1+neoforge.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/sG4TqDb8/versions/1jY6MIrK/emi_ores-1.2%2B1.21.1%2Bneoforge.jar"
hash-format = "sha512"
hash = "7b01dd29400802a18e3f23bcc2057e12070d28529bf358306758b462d69ab0532aa392a4b683cb0f5cf1a20f09e5f0d965f90923e72fb2fd6476f63a55a210a7"
[update]
[update.modrinth]
mod-id = "sG4TqDb8"
version = "1jY6MIrK"

View file

@ -1,13 +0,0 @@
name = "EMI professions (EMIP)"
filename = "EMIProfessions-neoforge-1.21.1-1.0.3.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/LGVihYcz/versions/wGOa5uxT/EMIProfessions-neoforge-1.21.1-1.0.3.jar"
hash-format = "sha512"
hash = "f720f58590e3098459c27e3579f36a00b66443b7c089e3fa9ef1399ed17587d51b046c69e2f07f6e21089fc85d58881a5b224d94a1b2f4738a0c6cbb2dd9c798"
[update]
[update.modrinth]
mod-id = "LGVihYcz"
version = "wGOa5uxT"

View file

@ -1,13 +0,0 @@
name = "EMI"
filename = "emi-1.1.22+1.21.1+neoforge.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/fRiHVvU7/versions/ouSj7NfF/emi-1.1.22%2B1.21.1%2Bneoforge.jar"
hash-format = "sha512"
hash = "6b4f2b93ccd40bbbf3d1f368a9d92b43777543c44243a76ed4010bd563a7f9658decdd58a3d79a3cdc04a288bf98e327a1cce93a5a9d2b8840306578fe633bca"
[update]
[update.modrinth]
mod-id = "fRiHVvU7"
version = "ouSj7NfF"

View file

@ -1,13 +0,0 @@
name = "EMIffect"
filename = "emiffect-neoforge-2.1.5+mc1.21.1.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/705gWllI/versions/8t6Kpge9/emiffect-neoforge-2.1.5%2Bmc1.21.1.jar"
hash-format = "sha512"
hash = "f5cc9936e0beccb578814cbb5fd343f1e49fd74d9f157a4314bf6643b4d5fd555dc28975daeb9013918a4ba20c1d50d9f0de779d72f26189599fce41f9202bc8"
[update]
[update.modrinth]
mod-id = "705gWllI"
version = "8t6Kpge9"

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