Function(
Function {
head: Destructured(
FunctionHeadDestructured {
ellipsis: true,
identifier: None,
arguments: [
FunctionHeadDestructuredArgument {
identifier: "config",
default: None,
},
FunctionHeadDestructuredArgument {
identifier: "lib",
default: None,
},
FunctionHeadDestructuredArgument {
identifier: "pkgs",
default: None,
},
],
},
),
body: With(
With {
expression: Identifier(
Identifier {
id: "lib",
span: Span {
start: Position {
line: 3,
column: 6,
},
end: Position {
line: 3,
column: 9,
},
},
},
),
target: LetIn(
LetIn {
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "cfg",
span: Span {
start: Position {
line: 6,
column: 3,
},
end: Position {
line: 6,
column: 6,
},
},
},
),
],
to: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "config",
span: Span {
start: Position {
line: 6,
column: 9,
},
end: Position {
line: 6,
column: 15,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "services",
span: Span {
start: Position {
line: 6,
column: 16,
},
end: Position {
line: 6,
column: 24,
},
},
},
),
Raw(
PartRaw {
content: "minecraft-server",
span: Span {
start: Position {
line: 6,
column: 25,
},
end: Position {
line: 6,
column: 41,
},
},
},
),
],
default: None,
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "eulaFile",
span: Span {
start: Position {
line: 9,
column: 3,
},
end: Position {
line: 9,
column: 11,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "builtins",
span: Span {
start: Position {
line: 9,
column: 14,
},
end: Position {
line: 9,
column: 22,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "toFile",
span: Span {
start: Position {
line: 9,
column: 23,
},
end: Position {
line: 9,
column: 29,
},
},
},
),
],
default: None,
},
),
arguments: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "eula.txt",
span: Span {
start: Position {
line: 9,
column: 31,
},
end: Position {
line: 9,
column: 39,
},
},
},
),
],
span: Span {
start: Position {
line: 9,
column: 30,
},
end: Position {
line: 9,
column: 40,
},
},
},
),
IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "# eula.txt managed by NixOS Configuration\neula=true\n",
span: Span {
start: Position {
line: 10,
column: 1,
},
end: Position {
line: 12,
column: 3,
},
},
},
),
],
span: Span {
start: Position {
line: 9,
column: 41,
},
end: Position {
line: 12,
column: 5,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "whitelistFile",
span: Span {
start: Position {
line: 14,
column: 3,
},
end: Position {
line: 14,
column: 16,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "pkgs",
span: Span {
start: Position {
line: 14,
column: 19,
},
end: Position {
line: 14,
column: 23,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "writeText",
span: Span {
start: Position {
line: 14,
column: 24,
},
end: Position {
line: 14,
column: 33,
},
},
},
),
],
default: None,
},
),
arguments: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "whitelist.json",
span: Span {
start: Position {
line: 14,
column: 35,
},
end: Position {
line: 14,
column: 49,
},
},
},
),
],
span: Span {
start: Position {
line: 14,
column: 34,
},
end: Position {
line: 14,
column: 50,
},
},
},
),
FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "builtins",
span: Span {
start: Position {
line: 15,
column: 6,
},
end: Position {
line: 15,
column: 14,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "toJSON",
span: Span {
start: Position {
line: 15,
column: 15,
},
end: Position {
line: 15,
column: 21,
},
},
},
),
],
default: None,
},
),
arguments: [
FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mapAttrsToList",
span: Span {
start: Position {
line: 16,
column: 8,
},
end: Position {
line: 16,
column: 22,
},
},
},
),
arguments: [
Function(
Function {
head: Simple(
FunctionHeadSimple {
identifier: "n",
},
),
body: Function(
Function {
head: Simple(
FunctionHeadSimple {
identifier: "v",
},
),
body: Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "name",
span: Span {
start: Position {
line: 16,
column: 32,
},
end: Position {
line: 16,
column: 36,
},
},
},
),
],
to: Identifier(
Identifier {
id: "n",
span: Span {
start: Position {
line: 16,
column: 39,
},
end: Position {
line: 16,
column: 40,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "uuid",
span: Span {
start: Position {
line: 16,
column: 42,
},
end: Position {
line: 16,
column: 46,
},
},
},
),
],
to: Identifier(
Identifier {
id: "v",
span: Span {
start: Position {
line: 16,
column: 49,
},
end: Position {
line: 16,
column: 50,
},
},
},
),
},
),
],
span: Span {
start: Position {
line: 16,
column: 30,
},
end: Position {
line: 16,
column: 53,
},
},
},
),
span: Span {
start: Position {
line: 16,
column: 27,
},
end: Position {
line: 16,
column: 53,
},
},
},
),
span: Span {
start: Position {
line: 16,
column: 24,
},
end: Position {
line: 16,
column: 53,
},
},
},
),
PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 16,
column: 55,
},
end: Position {
line: 16,
column: 58,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "whitelist",
span: Span {
start: Position {
line: 16,
column: 59,
},
end: Position {
line: 16,
column: 68,
},
},
},
),
],
default: None,
},
),
],
},
),
],
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "cfgToString",
span: Span {
start: Position {
line: 18,
column: 3,
},
end: Position {
line: 18,
column: 14,
},
},
},
),
],
to: Function(
Function {
head: Simple(
FunctionHeadSimple {
identifier: "v",
},
),
body: IfThenElse(
IfThenElse {
predicate: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "builtins",
span: Span {
start: Position {
line: 18,
column: 23,
},
end: Position {
line: 18,
column: 31,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "isBool",
span: Span {
start: Position {
line: 18,
column: 32,
},
end: Position {
line: 18,
column: 38,
},
},
},
),
],
default: None,
},
),
arguments: [
Identifier(
Identifier {
id: "v",
span: Span {
start: Position {
line: 18,
column: 39,
},
end: Position {
line: 18,
column: 40,
},
},
},
),
],
},
),
then: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "boolToString",
span: Span {
start: Position {
line: 18,
column: 46,
},
end: Position {
line: 18,
column: 58,
},
},
},
),
arguments: [
Identifier(
Identifier {
id: "v",
span: Span {
start: Position {
line: 18,
column: 59,
},
end: Position {
line: 18,
column: 60,
},
},
},
),
],
},
),
else_: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "toString",
span: Span {
start: Position {
line: 18,
column: 66,
},
end: Position {
line: 18,
column: 74,
},
},
},
),
arguments: [
Identifier(
Identifier {
id: "v",
span: Span {
start: Position {
line: 18,
column: 75,
},
end: Position {
line: 18,
column: 76,
},
},
},
),
],
},
),
span: Span {
start: Position {
line: 18,
column: 20,
},
end: Position {
line: 18,
column: 76,
},
},
},
),
span: Span {
start: Position {
line: 18,
column: 17,
},
end: Position {
line: 18,
column: 76,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "serverPropertiesFile",
span: Span {
start: Position {
line: 20,
column: 3,
},
end: Position {
line: 20,
column: 23,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "pkgs",
span: Span {
start: Position {
line: 20,
column: 26,
},
end: Position {
line: 20,
column: 30,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "writeText",
span: Span {
start: Position {
line: 20,
column: 31,
},
end: Position {
line: 20,
column: 40,
},
},
},
),
],
default: None,
},
),
arguments: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "server.properties",
span: Span {
start: Position {
line: 20,
column: 42,
},
end: Position {
line: 20,
column: 59,
},
},
},
),
],
span: Span {
start: Position {
line: 20,
column: 41,
},
end: Position {
line: 20,
column: 60,
},
},
},
),
BinaryOperation(
BinaryOperation {
left: IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "# server.properties managed by NixOS configuration\n",
span: Span {
start: Position {
line: 21,
column: 1,
},
end: Position {
line: 22,
column: 3,
},
},
},
),
],
span: Span {
start: Position {
line: 20,
column: 62,
},
end: Position {
line: 22,
column: 5,
},
},
},
),
operator: Addition,
right: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "concatStringsSep",
span: Span {
start: Position {
line: 22,
column: 8,
},
end: Position {
line: 22,
column: 24,
},
},
},
),
arguments: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "\n",
span: Span {
start: Position {
line: 22,
column: 26,
},
end: Position {
line: 22,
column: 28,
},
},
},
),
],
span: Span {
start: Position {
line: 22,
column: 25,
},
end: Position {
line: 22,
column: 29,
},
},
},
),
FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mapAttrsToList",
span: Span {
start: Position {
line: 22,
column: 31,
},
end: Position {
line: 22,
column: 45,
},
},
},
),
arguments: [
Function(
Function {
head: Simple(
FunctionHeadSimple {
identifier: "n",
},
),
body: Function(
Function {
head: Simple(
FunctionHeadSimple {
identifier: "v",
},
),
body: String(
String_ {
parts: [
Interpolation(
PartInterpolation {
expression: Identifier(
Identifier {
id: "n",
span: Span {
start: Position {
line: 23,
column: 15,
},
end: Position {
line: 23,
column: 16,
},
},
},
),
},
),
Raw(
PartRaw {
content: "=",
span: Span {
start: Position {
line: 23,
column: 13,
},
end: Position {
line: 23,
column: 18,
},
},
},
),
Interpolation(
PartInterpolation {
expression: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "cfgToString",
span: Span {
start: Position {
line: 23,
column: 20,
},
end: Position {
line: 23,
column: 31,
},
},
},
),
arguments: [
Identifier(
Identifier {
id: "v",
span: Span {
start: Position {
line: 23,
column: 32,
},
end: Position {
line: 23,
column: 33,
},
},
},
),
],
},
),
},
),
],
span: Span {
start: Position {
line: 23,
column: 12,
},
end: Position {
line: 23,
column: 35,
},
},
},
),
span: Span {
start: Position {
line: 23,
column: 9,
},
end: Position {
line: 23,
column: 35,
},
},
},
),
span: Span {
start: Position {
line: 23,
column: 6,
},
end: Position {
line: 23,
column: 35,
},
},
},
),
PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 23,
column: 37,
},
end: Position {
line: 23,
column: 40,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "serverProperties",
span: Span {
start: Position {
line: 23,
column: 41,
},
end: Position {
line: 23,
column: 57,
},
},
},
),
],
default: None,
},
),
],
},
),
],
},
),
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "stopScript",
span: Span {
start: Position {
line: 25,
column: 3,
},
end: Position {
line: 25,
column: 13,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "pkgs",
span: Span {
start: Position {
line: 25,
column: 16,
},
end: Position {
line: 25,
column: 20,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "writeShellScript",
span: Span {
start: Position {
line: 25,
column: 21,
},
end: Position {
line: 25,
column: 37,
},
},
},
),
],
default: None,
},
),
arguments: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "minecraft-server-stop",
span: Span {
start: Position {
line: 25,
column: 39,
},
end: Position {
line: 25,
column: 60,
},
},
},
),
],
span: Span {
start: Position {
line: 25,
column: 38,
},
end: Position {
line: 25,
column: 61,
},
},
},
),
IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "echo stop > ",
span: Span {
start: Position {
line: 26,
column: 1,
},
end: Position {
line: 26,
column: 17,
},
},
},
),
Interpolation(
PartInterpolation {
expression: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "config",
span: Span {
start: Position {
line: 26,
column: 19,
},
end: Position {
line: 26,
column: 25,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "systemd",
span: Span {
start: Position {
line: 26,
column: 26,
},
end: Position {
line: 26,
column: 33,
},
},
},
),
Raw(
PartRaw {
content: "sockets",
span: Span {
start: Position {
line: 26,
column: 34,
},
end: Position {
line: 26,
column: 41,
},
},
},
),
Raw(
PartRaw {
content: "minecraft-server",
span: Span {
start: Position {
line: 26,
column: 42,
},
end: Position {
line: 26,
column: 58,
},
},
},
),
Raw(
PartRaw {
content: "socketConfig",
span: Span {
start: Position {
line: 26,
column: 59,
},
end: Position {
line: 26,
column: 71,
},
},
},
),
Raw(
PartRaw {
content: "ListenFIFO",
span: Span {
start: Position {
line: 26,
column: 72,
},
end: Position {
line: 26,
column: 82,
},
},
},
),
],
default: None,
},
),
},
),
Raw(
PartRaw {
content: "\n\n# Wait for the PID of the minecraft server to disappear before\n# returning, so systemd doesn't attempt to SIGKILL it.\nwhile kill -0 \"$1\" 2> /dev/null; do\n sleep 1s\ndone\n",
span: Span {
start: Position {
line: 26,
column: 1,
},
end: Position {
line: 33,
column: 3,
},
},
},
),
],
span: Span {
start: Position {
line: 25,
column: 62,
},
end: Position {
line: 33,
column: 5,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "defaultServerPort",
span: Span {
start: Position {
line: 38,
column: 3,
},
end: Position {
line: 38,
column: 20,
},
},
},
),
],
to: Integer(
Integer {
value: "25565",
span: Span {
start: Position {
line: 38,
column: 23,
},
end: Position {
line: 38,
column: 28,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "serverPort",
span: Span {
start: Position {
line: 40,
column: 3,
},
end: Position {
line: 40,
column: 13,
},
},
},
),
],
to: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 40,
column: 16,
},
end: Position {
line: 40,
column: 19,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "serverProperties",
span: Span {
start: Position {
line: 40,
column: 20,
},
end: Position {
line: 40,
column: 36,
},
},
},
),
Raw(
PartRaw {
content: "server-port",
span: Span {
start: Position {
line: 40,
column: 37,
},
end: Position {
line: 40,
column: 48,
},
},
},
),
],
default: Some(
Identifier(
Identifier {
id: "defaultServerPort",
span: Span {
start: Position {
line: 40,
column: 52,
},
end: Position {
line: 40,
column: 69,
},
},
},
),
),
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "rconPort",
span: Span {
start: Position {
line: 42,
column: 3,
},
end: Position {
line: 42,
column: 11,
},
},
},
),
],
to: IfThenElse(
IfThenElse {
predicate: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 42,
column: 17,
},
end: Position {
line: 42,
column: 20,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "serverProperties",
span: Span {
start: Position {
line: 42,
column: 21,
},
end: Position {
line: 42,
column: 37,
},
},
},
),
Raw(
PartRaw {
content: "enable-rcon",
span: Span {
start: Position {
line: 42,
column: 38,
},
end: Position {
line: 42,
column: 49,
},
},
},
),
],
default: Some(
Identifier(
Identifier {
id: "false",
span: Span {
start: Position {
line: 42,
column: 53,
},
end: Position {
line: 42,
column: 58,
},
},
},
),
),
},
),
then: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 43,
column: 10,
},
end: Position {
line: 43,
column: 13,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "serverProperties",
span: Span {
start: Position {
line: 43,
column: 14,
},
end: Position {
line: 43,
column: 30,
},
},
},
),
Expression(
PartExpression {
expression: String(
String_ {
parts: [
Raw(
PartRaw {
content: "rcon.port",
span: Span {
start: Position {
line: 43,
column: 32,
},
end: Position {
line: 43,
column: 41,
},
},
},
),
],
span: Span {
start: Position {
line: 43,
column: 31,
},
end: Position {
line: 43,
column: 42,
},
},
},
),
},
),
],
default: Some(
Integer(
Integer {
value: "25575",
span: Span {
start: Position {
line: 43,
column: 46,
},
end: Position {
line: 43,
column: 51,
},
},
},
),
),
},
),
else_: Identifier(
Identifier {
id: "null",
span: Span {
start: Position {
line: 44,
column: 10,
},
end: Position {
line: 44,
column: 14,
},
},
},
),
span: Span {
start: Position {
line: 42,
column: 14,
},
end: Position {
line: 44,
column: 14,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "queryPort",
span: Span {
start: Position {
line: 46,
column: 3,
},
end: Position {
line: 46,
column: 12,
},
},
},
),
],
to: IfThenElse(
IfThenElse {
predicate: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 46,
column: 18,
},
end: Position {
line: 46,
column: 21,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "serverProperties",
span: Span {
start: Position {
line: 46,
column: 22,
},
end: Position {
line: 46,
column: 38,
},
},
},
),
Raw(
PartRaw {
content: "enable-query",
span: Span {
start: Position {
line: 46,
column: 39,
},
end: Position {
line: 46,
column: 51,
},
},
},
),
],
default: Some(
Identifier(
Identifier {
id: "false",
span: Span {
start: Position {
line: 46,
column: 55,
},
end: Position {
line: 46,
column: 60,
},
},
},
),
),
},
),
then: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 47,
column: 10,
},
end: Position {
line: 47,
column: 13,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "serverProperties",
span: Span {
start: Position {
line: 47,
column: 14,
},
end: Position {
line: 47,
column: 30,
},
},
},
),
Expression(
PartExpression {
expression: String(
String_ {
parts: [
Raw(
PartRaw {
content: "query.port",
span: Span {
start: Position {
line: 47,
column: 32,
},
end: Position {
line: 47,
column: 42,
},
},
},
),
],
span: Span {
start: Position {
line: 47,
column: 31,
},
end: Position {
line: 47,
column: 43,
},
},
},
),
},
),
],
default: Some(
Integer(
Integer {
value: "25565",
span: Span {
start: Position {
line: 47,
column: 47,
},
end: Position {
line: 47,
column: 52,
},
},
},
),
),
},
),
else_: Identifier(
Identifier {
id: "null",
span: Span {
start: Position {
line: 48,
column: 10,
},
end: Position {
line: 48,
column: 14,
},
},
},
),
span: Span {
start: Position {
line: 46,
column: 15,
},
end: Position {
line: 48,
column: 14,
},
},
},
),
},
),
],
target: Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "options",
span: Span {
start: Position {
line: 51,
column: 3,
},
end: Position {
line: 51,
column: 10,
},
},
},
),
],
to: Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "services",
span: Span {
start: Position {
line: 52,
column: 5,
},
end: Position {
line: 52,
column: 13,
},
},
},
),
Raw(
PartRaw {
content: "minecraft-server",
span: Span {
start: Position {
line: 52,
column: 14,
},
end: Position {
line: 52,
column: 30,
},
},
},
),
],
to: Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "enable",
span: Span {
start: Position {
line: 54,
column: 7,
},
end: Position {
line: 54,
column: 13,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mkOption",
span: Span {
start: Position {
line: 54,
column: 16,
},
end: Position {
line: 54,
column: 24,
},
},
},
),
arguments: [
Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "type",
span: Span {
start: Position {
line: 55,
column: 9,
},
end: Position {
line: 55,
column: 13,
},
},
},
),
],
to: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "types",
span: Span {
start: Position {
line: 55,
column: 16,
},
end: Position {
line: 55,
column: 21,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "bool",
span: Span {
start: Position {
line: 55,
column: 22,
},
end: Position {
line: 55,
column: 26,
},
},
},
),
],
default: None,
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "default",
span: Span {
start: Position {
line: 56,
column: 9,
},
end: Position {
line: 56,
column: 16,
},
},
},
),
],
to: Identifier(
Identifier {
id: "false",
span: Span {
start: Position {
line: 56,
column: 19,
},
end: Position {
line: 56,
column: 24,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "description",
span: Span {
start: Position {
line: 57,
column: 9,
},
end: Position {
line: 57,
column: 20,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "lib",
span: Span {
start: Position {
line: 57,
column: 23,
},
end: Position {
line: 57,
column: 26,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "mdDoc",
span: Span {
start: Position {
line: 57,
column: 27,
},
end: Position {
line: 57,
column: 32,
},
},
},
),
],
default: None,
},
),
arguments: [
IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "If enabled, start a Minecraft Server. The server\ndata will be loaded from and saved to\n{option}`services.minecraft-server.dataDir`.\n",
span: Span {
start: Position {
line: 58,
column: 1,
},
end: Position {
line: 61,
column: 9,
},
},
},
),
],
span: Span {
start: Position {
line: 57,
column: 33,
},
end: Position {
line: 61,
column: 11,
},
},
},
),
],
},
),
},
),
],
span: Span {
start: Position {
line: 54,
column: 25,
},
end: Position {
line: 62,
column: 8,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "declarative",
span: Span {
start: Position {
line: 64,
column: 7,
},
end: Position {
line: 64,
column: 18,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mkOption",
span: Span {
start: Position {
line: 64,
column: 21,
},
end: Position {
line: 64,
column: 29,
},
},
},
),
arguments: [
Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "type",
span: Span {
start: Position {
line: 65,
column: 9,
},
end: Position {
line: 65,
column: 13,
},
},
},
),
],
to: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "types",
span: Span {
start: Position {
line: 65,
column: 16,
},
end: Position {
line: 65,
column: 21,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "bool",
span: Span {
start: Position {
line: 65,
column: 22,
},
end: Position {
line: 65,
column: 26,
},
},
},
),
],
default: None,
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "default",
span: Span {
start: Position {
line: 66,
column: 9,
},
end: Position {
line: 66,
column: 16,
},
},
},
),
],
to: Identifier(
Identifier {
id: "false",
span: Span {
start: Position {
line: 66,
column: 19,
},
end: Position {
line: 66,
column: 24,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "description",
span: Span {
start: Position {
line: 67,
column: 9,
},
end: Position {
line: 67,
column: 20,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "lib",
span: Span {
start: Position {
line: 67,
column: 23,
},
end: Position {
line: 67,
column: 26,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "mdDoc",
span: Span {
start: Position {
line: 67,
column: 27,
},
end: Position {
line: 67,
column: 32,
},
},
},
),
],
default: None,
},
),
arguments: [
IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "Whether to use a declarative Minecraft server configuration.\nOnly if set to `true`, the options\n{option}`services.minecraft-server.whitelist` and\n{option}`services.minecraft-server.serverProperties` will be\napplied.\n",
span: Span {
start: Position {
line: 68,
column: 1,
},
end: Position {
line: 73,
column: 9,
},
},
},
),
],
span: Span {
start: Position {
line: 67,
column: 33,
},
end: Position {
line: 73,
column: 11,
},
},
},
),
],
},
),
},
),
],
span: Span {
start: Position {
line: 64,
column: 30,
},
end: Position {
line: 74,
column: 8,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "eula",
span: Span {
start: Position {
line: 76,
column: 7,
},
end: Position {
line: 76,
column: 11,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mkOption",
span: Span {
start: Position {
line: 76,
column: 14,
},
end: Position {
line: 76,
column: 22,
},
},
},
),
arguments: [
Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "type",
span: Span {
start: Position {
line: 77,
column: 9,
},
end: Position {
line: 77,
column: 13,
},
},
},
),
],
to: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "types",
span: Span {
start: Position {
line: 77,
column: 16,
},
end: Position {
line: 77,
column: 21,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "bool",
span: Span {
start: Position {
line: 77,
column: 22,
},
end: Position {
line: 77,
column: 26,
},
},
},
),
],
default: None,
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "default",
span: Span {
start: Position {
line: 78,
column: 9,
},
end: Position {
line: 78,
column: 16,
},
},
},
),
],
to: Identifier(
Identifier {
id: "false",
span: Span {
start: Position {
line: 78,
column: 19,
},
end: Position {
line: 78,
column: 24,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "description",
span: Span {
start: Position {
line: 79,
column: 9,
},
end: Position {
line: 79,
column: 20,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "lib",
span: Span {
start: Position {
line: 79,
column: 23,
},
end: Position {
line: 79,
column: 26,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "mdDoc",
span: Span {
start: Position {
line: 79,
column: 27,
},
end: Position {
line: 79,
column: 32,
},
},
},
),
],
default: None,
},
),
arguments: [
IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "Whether you agree to\n[\nMojangs EULA](https://account.mojang.com/documents/minecraft_eula). This option must be set to\n`true` to run Minecraft server.\n",
span: Span {
start: Position {
line: 80,
column: 1,
},
end: Position {
line: 84,
column: 9,
},
},
},
),
],
span: Span {
start: Position {
line: 79,
column: 33,
},
end: Position {
line: 84,
column: 11,
},
},
},
),
],
},
),
},
),
],
span: Span {
start: Position {
line: 76,
column: 23,
},
end: Position {
line: 85,
column: 8,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "dataDir",
span: Span {
start: Position {
line: 87,
column: 7,
},
end: Position {
line: 87,
column: 14,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mkOption",
span: Span {
start: Position {
line: 87,
column: 17,
},
end: Position {
line: 87,
column: 25,
},
},
},
),
arguments: [
Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "type",
span: Span {
start: Position {
line: 88,
column: 9,
},
end: Position {
line: 88,
column: 13,
},
},
},
),
],
to: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "types",
span: Span {
start: Position {
line: 88,
column: 16,
},
end: Position {
line: 88,
column: 21,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "path",
span: Span {
start: Position {
line: 88,
column: 22,
},
end: Position {
line: 88,
column: 26,
},
},
},
),
],
default: None,
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "default",
span: Span {
start: Position {
line: 89,
column: 9,
},
end: Position {
line: 89,
column: 16,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "/var/lib/minecraft",
span: Span {
start: Position {
line: 89,
column: 20,
},
end: Position {
line: 89,
column: 38,
},
},
},
),
],
span: Span {
start: Position {
line: 89,
column: 19,
},
end: Position {
line: 89,
column: 39,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "description",
span: Span {
start: Position {
line: 90,
column: 9,
},
end: Position {
line: 90,
column: 20,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "lib",
span: Span {
start: Position {
line: 90,
column: 23,
},
end: Position {
line: 90,
column: 26,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "mdDoc",
span: Span {
start: Position {
line: 90,
column: 27,
},
end: Position {
line: 90,
column: 32,
},
},
},
),
],
default: None,
},
),
arguments: [
IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "Directory to store Minecraft database and other state/data files.\n",
span: Span {
start: Position {
line: 91,
column: 1,
},
end: Position {
line: 92,
column: 9,
},
},
},
),
],
span: Span {
start: Position {
line: 90,
column: 33,
},
end: Position {
line: 92,
column: 11,
},
},
},
),
],
},
),
},
),
],
span: Span {
start: Position {
line: 87,
column: 26,
},
end: Position {
line: 93,
column: 8,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "openFirewall",
span: Span {
start: Position {
line: 95,
column: 7,
},
end: Position {
line: 95,
column: 19,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mkOption",
span: Span {
start: Position {
line: 95,
column: 22,
},
end: Position {
line: 95,
column: 30,
},
},
},
),
arguments: [
Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "type",
span: Span {
start: Position {
line: 96,
column: 9,
},
end: Position {
line: 96,
column: 13,
},
},
},
),
],
to: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "types",
span: Span {
start: Position {
line: 96,
column: 16,
},
end: Position {
line: 96,
column: 21,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "bool",
span: Span {
start: Position {
line: 96,
column: 22,
},
end: Position {
line: 96,
column: 26,
},
},
},
),
],
default: None,
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "default",
span: Span {
start: Position {
line: 97,
column: 9,
},
end: Position {
line: 97,
column: 16,
},
},
},
),
],
to: Identifier(
Identifier {
id: "false",
span: Span {
start: Position {
line: 97,
column: 19,
},
end: Position {
line: 97,
column: 24,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "description",
span: Span {
start: Position {
line: 98,
column: 9,
},
end: Position {
line: 98,
column: 20,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "lib",
span: Span {
start: Position {
line: 98,
column: 23,
},
end: Position {
line: 98,
column: 26,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "mdDoc",
span: Span {
start: Position {
line: 98,
column: 27,
},
end: Position {
line: 98,
column: 32,
},
},
},
),
],
default: None,
},
),
arguments: [
IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "Whether to open ports in the firewall for the server.\n",
span: Span {
start: Position {
line: 99,
column: 1,
},
end: Position {
line: 100,
column: 9,
},
},
},
),
],
span: Span {
start: Position {
line: 98,
column: 33,
},
end: Position {
line: 100,
column: 11,
},
},
},
),
],
},
),
},
),
],
span: Span {
start: Position {
line: 95,
column: 31,
},
end: Position {
line: 101,
column: 8,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "whitelist",
span: Span {
start: Position {
line: 103,
column: 7,
},
end: Position {
line: 103,
column: 16,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mkOption",
span: Span {
start: Position {
line: 103,
column: 19,
},
end: Position {
line: 103,
column: 27,
},
},
},
),
arguments: [
Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "type",
span: Span {
start: Position {
line: 104,
column: 9,
},
end: Position {
line: 104,
column: 13,
},
},
},
),
],
to: LetIn(
LetIn {
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "minecraftUUID",
span: Span {
start: Position {
line: 105,
column: 11,
},
end: Position {
line: 105,
column: 24,
},
},
},
),
],
to: BinaryOperation(
BinaryOperation {
left: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "types",
span: Span {
start: Position {
line: 105,
column: 27,
},
end: Position {
line: 105,
column: 32,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "strMatching",
span: Span {
start: Position {
line: 105,
column: 33,
},
end: Position {
line: 105,
column: 44,
},
},
},
),
],
default: None,
},
),
arguments: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",
span: Span {
start: Position {
line: 106,
column: 14,
},
end: Position {
line: 106,
column: 74,
},
},
},
),
],
span: Span {
start: Position {
line: 106,
column: 13,
},
end: Position {
line: 106,
column: 75,
},
},
},
),
],
},
),
operator: Update,
right: Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "description",
span: Span {
start: Position {
line: 107,
column: 15,
},
end: Position {
line: 107,
column: 26,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "Minecraft UUID",
span: Span {
start: Position {
line: 107,
column: 30,
},
end: Position {
line: 107,
column: 44,
},
},
},
),
],
span: Span {
start: Position {
line: 107,
column: 29,
},
end: Position {
line: 107,
column: 45,
},
},
},
),
},
),
],
span: Span {
start: Position {
line: 106,
column: 79,
},
end: Position {
line: 108,
column: 14,
},
},
},
),
},
),
},
),
],
target: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "types",
span: Span {
start: Position {
line: 109,
column: 14,
},
end: Position {
line: 109,
column: 19,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "attrsOf",
span: Span {
start: Position {
line: 109,
column: 20,
},
end: Position {
line: 109,
column: 27,
},
},
},
),
],
default: None,
},
),
arguments: [
Identifier(
Identifier {
id: "minecraftUUID",
span: Span {
start: Position {
line: 109,
column: 28,
},
end: Position {
line: 109,
column: 41,
},
},
},
),
],
},
),
span: Span {
start: Position {
line: 104,
column: 16,
},
end: Position {
line: 109,
column: 41,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "default",
span: Span {
start: Position {
line: 110,
column: 9,
},
end: Position {
line: 110,
column: 16,
},
},
},
),
],
to: Map(
Map {
recursive: false,
bindings: [],
span: Span {
start: Position {
line: 110,
column: 19,
},
end: Position {
line: 110,
column: 21,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "description",
span: Span {
start: Position {
line: 111,
column: 9,
},
end: Position {
line: 111,
column: 20,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "lib",
span: Span {
start: Position {
line: 111,
column: 23,
},
end: Position {
line: 111,
column: 26,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "mdDoc",
span: Span {
start: Position {
line: 111,
column: 27,
},
end: Position {
line: 111,
column: 32,
},
},
},
),
],
default: None,
},
),
arguments: [
IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "Whitelisted players, only has an effect when\n{option}`services.minecraft-server.declarative` is\n`true` and the whitelist is enabled\nvia {option}`services.minecraft-server.serverProperties` by\nsetting `white-list` to `true`.\nThis is a mapping from Minecraft usernames to UUIDs.\nYou can use to get a\nMinecraft UUID for a username.\n",
span: Span {
start: Position {
line: 112,
column: 1,
},
end: Position {
line: 120,
column: 9,
},
},
},
),
],
span: Span {
start: Position {
line: 111,
column: 33,
},
end: Position {
line: 120,
column: 11,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "example",
span: Span {
start: Position {
line: 121,
column: 9,
},
end: Position {
line: 121,
column: 16,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "literalExpression",
span: Span {
start: Position {
line: 121,
column: 19,
},
end: Position {
line: 121,
column: 36,
},
},
},
),
arguments: [
IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "{\n username1 = \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\";\n username2 = \"yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy\";\n};\n",
span: Span {
start: Position {
line: 122,
column: 1,
},
end: Position {
line: 126,
column: 9,
},
},
},
),
],
span: Span {
start: Position {
line: 121,
column: 37,
},
end: Position {
line: 126,
column: 11,
},
},
},
),
],
},
),
},
),
],
span: Span {
start: Position {
line: 103,
column: 28,
},
end: Position {
line: 127,
column: 8,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "serverProperties",
span: Span {
start: Position {
line: 129,
column: 7,
},
end: Position {
line: 129,
column: 23,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mkOption",
span: Span {
start: Position {
line: 129,
column: 26,
},
end: Position {
line: 129,
column: 34,
},
},
},
),
arguments: [
Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "type",
span: Span {
start: Position {
line: 130,
column: 9,
},
end: Position {
line: 130,
column: 13,
},
},
},
),
],
to: With(
With {
expression: Identifier(
Identifier {
id: "types",
span: Span {
start: Position {
line: 130,
column: 21,
},
end: Position {
line: 130,
column: 26,
},
},
},
),
target: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "attrsOf",
span: Span {
start: Position {
line: 130,
column: 28,
},
end: Position {
line: 130,
column: 35,
},
},
},
),
arguments: [
FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "oneOf",
span: Span {
start: Position {
line: 130,
column: 37,
},
end: Position {
line: 130,
column: 42,
},
},
},
),
arguments: [
List(
List {
elements: [
Identifier(
Identifier {
id: "bool",
span: Span {
start: Position {
line: 130,
column: 45,
},
end: Position {
line: 130,
column: 49,
},
},
},
),
Identifier(
Identifier {
id: "int",
span: Span {
start: Position {
line: 130,
column: 50,
},
end: Position {
line: 130,
column: 53,
},
},
},
),
Identifier(
Identifier {
id: "str",
span: Span {
start: Position {
line: 130,
column: 54,
},
end: Position {
line: 130,
column: 57,
},
},
},
),
],
span: Span {
start: Position {
line: 130,
column: 43,
},
end: Position {
line: 130,
column: 59,
},
},
},
),
],
},
),
],
},
),
span: Span {
start: Position {
line: 130,
column: 16,
},
end: Position {
line: 130,
column: 60,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "default",
span: Span {
start: Position {
line: 131,
column: 9,
},
end: Position {
line: 131,
column: 16,
},
},
},
),
],
to: Map(
Map {
recursive: false,
bindings: [],
span: Span {
start: Position {
line: 131,
column: 19,
},
end: Position {
line: 131,
column: 21,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "example",
span: Span {
start: Position {
line: 132,
column: 9,
},
end: Position {
line: 132,
column: 16,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "literalExpression",
span: Span {
start: Position {
line: 132,
column: 19,
},
end: Position {
line: 132,
column: 36,
},
},
},
),
arguments: [
IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "{\n server-port = 43000;\n difficulty = 3;\n gamemode = 1;\n max-players = 5;\n motd = \"NixOS Minecraft server!\";\n white-list = true;\n enable-rcon = true;\n \"rcon.password\" = \"hunter2\";\n}\n",
span: Span {
start: Position {
line: 133,
column: 1,
},
end: Position {
line: 143,
column: 9,
},
},
},
),
],
span: Span {
start: Position {
line: 132,
column: 37,
},
end: Position {
line: 143,
column: 11,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "description",
span: Span {
start: Position {
line: 144,
column: 9,
},
end: Position {
line: 144,
column: 20,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "lib",
span: Span {
start: Position {
line: 144,
column: 23,
},
end: Position {
line: 144,
column: 26,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "mdDoc",
span: Span {
start: Position {
line: 144,
column: 27,
},
end: Position {
line: 144,
column: 32,
},
},
},
),
],
default: None,
},
),
arguments: [
IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "Minecraft server properties for the server.properties file. Only has\nan effect when {option}`services.minecraft-server.declarative`\nis set to `true`. See\n\nfor documentation on these values.\n",
span: Span {
start: Position {
line: 145,
column: 1,
},
end: Position {
line: 150,
column: 9,
},
},
},
),
],
span: Span {
start: Position {
line: 144,
column: 33,
},
end: Position {
line: 150,
column: 11,
},
},
},
),
],
},
),
},
),
],
span: Span {
start: Position {
line: 129,
column: 35,
},
end: Position {
line: 151,
column: 8,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "package",
span: Span {
start: Position {
line: 153,
column: 7,
},
end: Position {
line: 153,
column: 14,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mkOption",
span: Span {
start: Position {
line: 153,
column: 17,
},
end: Position {
line: 153,
column: 25,
},
},
},
),
arguments: [
Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "type",
span: Span {
start: Position {
line: 154,
column: 9,
},
end: Position {
line: 154,
column: 13,
},
},
},
),
],
to: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "types",
span: Span {
start: Position {
line: 154,
column: 16,
},
end: Position {
line: 154,
column: 21,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "package",
span: Span {
start: Position {
line: 154,
column: 22,
},
end: Position {
line: 154,
column: 29,
},
},
},
),
],
default: None,
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "default",
span: Span {
start: Position {
line: 155,
column: 9,
},
end: Position {
line: 155,
column: 16,
},
},
},
),
],
to: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "pkgs",
span: Span {
start: Position {
line: 155,
column: 19,
},
end: Position {
line: 155,
column: 23,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "minecraft-server",
span: Span {
start: Position {
line: 155,
column: 24,
},
end: Position {
line: 155,
column: 40,
},
},
},
),
],
default: None,
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "defaultText",
span: Span {
start: Position {
line: 156,
column: 9,
},
end: Position {
line: 156,
column: 20,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "literalExpression",
span: Span {
start: Position {
line: 156,
column: 23,
},
end: Position {
line: 156,
column: 40,
},
},
},
),
arguments: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "pkgs.minecraft-server",
span: Span {
start: Position {
line: 156,
column: 42,
},
end: Position {
line: 156,
column: 63,
},
},
},
),
],
span: Span {
start: Position {
line: 156,
column: 41,
},
end: Position {
line: 156,
column: 64,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "example",
span: Span {
start: Position {
line: 157,
column: 9,
},
end: Position {
line: 157,
column: 16,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "literalExpression",
span: Span {
start: Position {
line: 157,
column: 19,
},
end: Position {
line: 157,
column: 36,
},
},
},
),
arguments: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "pkgs.minecraft-server_1_12_2",
span: Span {
start: Position {
line: 157,
column: 38,
},
end: Position {
line: 157,
column: 66,
},
},
},
),
],
span: Span {
start: Position {
line: 157,
column: 37,
},
end: Position {
line: 157,
column: 67,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "description",
span: Span {
start: Position {
line: 158,
column: 9,
},
end: Position {
line: 158,
column: 20,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "lib",
span: Span {
start: Position {
line: 158,
column: 23,
},
end: Position {
line: 158,
column: 26,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "mdDoc",
span: Span {
start: Position {
line: 158,
column: 27,
},
end: Position {
line: 158,
column: 32,
},
},
},
),
],
default: None,
},
),
arguments: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "Version of minecraft-server to run.",
span: Span {
start: Position {
line: 158,
column: 34,
},
end: Position {
line: 158,
column: 69,
},
},
},
),
],
span: Span {
start: Position {
line: 158,
column: 33,
},
end: Position {
line: 158,
column: 70,
},
},
},
),
],
},
),
},
),
],
span: Span {
start: Position {
line: 153,
column: 26,
},
end: Position {
line: 159,
column: 8,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "jvmOpts",
span: Span {
start: Position {
line: 161,
column: 7,
},
end: Position {
line: 161,
column: 14,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mkOption",
span: Span {
start: Position {
line: 161,
column: 17,
},
end: Position {
line: 161,
column: 25,
},
},
},
),
arguments: [
Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "type",
span: Span {
start: Position {
line: 162,
column: 9,
},
end: Position {
line: 162,
column: 13,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "types",
span: Span {
start: Position {
line: 162,
column: 16,
},
end: Position {
line: 162,
column: 21,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "separatedString",
span: Span {
start: Position {
line: 162,
column: 22,
},
end: Position {
line: 162,
column: 37,
},
},
},
),
],
default: None,
},
),
arguments: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: " ",
span: Span {
start: Position {
line: 162,
column: 39,
},
end: Position {
line: 162,
column: 40,
},
},
},
),
],
span: Span {
start: Position {
line: 162,
column: 38,
},
end: Position {
line: 162,
column: 41,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "default",
span: Span {
start: Position {
line: 163,
column: 9,
},
end: Position {
line: 163,
column: 16,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "-Xmx2048M -Xms2048M",
span: Span {
start: Position {
line: 163,
column: 20,
},
end: Position {
line: 163,
column: 39,
},
},
},
),
],
span: Span {
start: Position {
line: 163,
column: 19,
},
end: Position {
line: 163,
column: 40,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "example",
span: Span {
start: Position {
line: 165,
column: 9,
},
end: Position {
line: 165,
column: 16,
},
},
},
),
],
to: BinaryOperation(
BinaryOperation {
left: BinaryOperation(
BinaryOperation {
left: String(
String_ {
parts: [
Raw(
PartRaw {
content: "-Xms4092M -Xmx4092M -XX:+UseG1GC -XX:+CMSIncrementalPacing ",
span: Span {
start: Position {
line: 165,
column: 20,
},
end: Position {
line: 165,
column: 79,
},
},
},
),
],
span: Span {
start: Position {
line: 165,
column: 19,
},
end: Position {
line: 165,
column: 80,
},
},
},
),
operator: Addition,
right: String(
String_ {
parts: [
Raw(
PartRaw {
content: "-XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 ",
span: Span {
start: Position {
line: 166,
column: 14,
},
end: Position {
line: 166,
column: 68,
},
},
},
),
],
span: Span {
start: Position {
line: 166,
column: 13,
},
end: Position {
line: 166,
column: 69,
},
},
},
),
},
),
operator: Addition,
right: String(
String_ {
parts: [
Raw(
PartRaw {
content: "-XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10",
span: Span {
start: Position {
line: 167,
column: 14,
},
end: Position {
line: 167,
column: 60,
},
},
},
),
],
span: Span {
start: Position {
line: 167,
column: 13,
},
end: Position {
line: 167,
column: 61,
},
},
},
),
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "description",
span: Span {
start: Position {
line: 168,
column: 9,
},
end: Position {
line: 168,
column: 20,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "lib",
span: Span {
start: Position {
line: 168,
column: 23,
},
end: Position {
line: 168,
column: 26,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "mdDoc",
span: Span {
start: Position {
line: 168,
column: 27,
},
end: Position {
line: 168,
column: 32,
},
},
},
),
],
default: None,
},
),
arguments: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "JVM options for the Minecraft server.",
span: Span {
start: Position {
line: 168,
column: 34,
},
end: Position {
line: 168,
column: 71,
},
},
},
),
],
span: Span {
start: Position {
line: 168,
column: 33,
},
end: Position {
line: 168,
column: 72,
},
},
},
),
],
},
),
},
),
],
span: Span {
start: Position {
line: 161,
column: 26,
},
end: Position {
line: 169,
column: 8,
},
},
},
),
],
},
),
},
),
],
span: Span {
start: Position {
line: 52,
column: 33,
},
end: Position {
line: 170,
column: 6,
},
},
},
),
},
),
],
span: Span {
start: Position {
line: 51,
column: 13,
},
end: Position {
line: 171,
column: 4,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "config",
span: Span {
start: Position {
line: 173,
column: 3,
},
end: Position {
line: 173,
column: 9,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mkIf",
span: Span {
start: Position {
line: 173,
column: 12,
},
end: Position {
line: 173,
column: 16,
},
},
},
),
arguments: [
PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 173,
column: 17,
},
end: Position {
line: 173,
column: 20,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "enable",
span: Span {
start: Position {
line: 173,
column: 21,
},
end: Position {
line: 173,
column: 27,
},
},
},
),
],
default: None,
},
),
Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "users",
span: Span {
start: Position {
line: 175,
column: 5,
},
end: Position {
line: 175,
column: 10,
},
},
},
),
Raw(
PartRaw {
content: "users",
span: Span {
start: Position {
line: 175,
column: 11,
},
end: Position {
line: 175,
column: 16,
},
},
},
),
Raw(
PartRaw {
content: "minecraft",
span: Span {
start: Position {
line: 175,
column: 17,
},
end: Position {
line: 175,
column: 26,
},
},
},
),
],
to: Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "description",
span: Span {
start: Position {
line: 176,
column: 7,
},
end: Position {
line: 176,
column: 18,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "Minecraft server service user",
span: Span {
start: Position {
line: 176,
column: 26,
},
end: Position {
line: 176,
column: 55,
},
},
},
),
],
span: Span {
start: Position {
line: 176,
column: 25,
},
end: Position {
line: 176,
column: 56,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "home",
span: Span {
start: Position {
line: 177,
column: 7,
},
end: Position {
line: 177,
column: 11,
},
},
},
),
],
to: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 177,
column: 25,
},
end: Position {
line: 177,
column: 28,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "dataDir",
span: Span {
start: Position {
line: 177,
column: 29,
},
end: Position {
line: 177,
column: 36,
},
},
},
),
],
default: None,
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "createHome",
span: Span {
start: Position {
line: 178,
column: 7,
},
end: Position {
line: 178,
column: 17,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 178,
column: 25,
},
end: Position {
line: 178,
column: 29,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "isSystemUser",
span: Span {
start: Position {
line: 179,
column: 7,
},
end: Position {
line: 179,
column: 19,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 179,
column: 25,
},
end: Position {
line: 179,
column: 29,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "group",
span: Span {
start: Position {
line: 180,
column: 7,
},
end: Position {
line: 180,
column: 12,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "minecraft",
span: Span {
start: Position {
line: 180,
column: 26,
},
end: Position {
line: 180,
column: 35,
},
},
},
),
],
span: Span {
start: Position {
line: 180,
column: 25,
},
end: Position {
line: 180,
column: 36,
},
},
},
),
},
),
],
span: Span {
start: Position {
line: 175,
column: 29,
},
end: Position {
line: 181,
column: 6,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "users",
span: Span {
start: Position {
line: 182,
column: 5,
},
end: Position {
line: 182,
column: 10,
},
},
},
),
Raw(
PartRaw {
content: "groups",
span: Span {
start: Position {
line: 182,
column: 11,
},
end: Position {
line: 182,
column: 17,
},
},
},
),
Raw(
PartRaw {
content: "minecraft",
span: Span {
start: Position {
line: 182,
column: 18,
},
end: Position {
line: 182,
column: 27,
},
},
},
),
],
to: Map(
Map {
recursive: false,
bindings: [],
span: Span {
start: Position {
line: 182,
column: 30,
},
end: Position {
line: 182,
column: 32,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "systemd",
span: Span {
start: Position {
line: 184,
column: 5,
},
end: Position {
line: 184,
column: 12,
},
},
},
),
Raw(
PartRaw {
content: "sockets",
span: Span {
start: Position {
line: 184,
column: 13,
},
end: Position {
line: 184,
column: 20,
},
},
},
),
Raw(
PartRaw {
content: "minecraft-server",
span: Span {
start: Position {
line: 184,
column: 21,
},
end: Position {
line: 184,
column: 37,
},
},
},
),
],
to: Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "bindsTo",
span: Span {
start: Position {
line: 185,
column: 7,
},
end: Position {
line: 185,
column: 14,
},
},
},
),
],
to: List(
List {
elements: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "minecraft-server.service",
span: Span {
start: Position {
line: 185,
column: 20,
},
end: Position {
line: 185,
column: 44,
},
},
},
),
],
span: Span {
start: Position {
line: 185,
column: 19,
},
end: Position {
line: 185,
column: 45,
},
},
},
),
],
span: Span {
start: Position {
line: 185,
column: 17,
},
end: Position {
line: 185,
column: 47,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "socketConfig",
span: Span {
start: Position {
line: 186,
column: 7,
},
end: Position {
line: 186,
column: 19,
},
},
},
),
],
to: Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "ListenFIFO",
span: Span {
start: Position {
line: 187,
column: 9,
},
end: Position {
line: 187,
column: 19,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "/run/minecraft-server.stdin",
span: Span {
start: Position {
line: 187,
column: 23,
},
end: Position {
line: 187,
column: 50,
},
},
},
),
],
span: Span {
start: Position {
line: 187,
column: 22,
},
end: Position {
line: 187,
column: 51,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "SocketMode",
span: Span {
start: Position {
line: 188,
column: 9,
},
end: Position {
line: 188,
column: 19,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "0660",
span: Span {
start: Position {
line: 188,
column: 23,
},
end: Position {
line: 188,
column: 27,
},
},
},
),
],
span: Span {
start: Position {
line: 188,
column: 22,
},
end: Position {
line: 188,
column: 28,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "SocketUser",
span: Span {
start: Position {
line: 189,
column: 9,
},
end: Position {
line: 189,
column: 19,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "minecraft",
span: Span {
start: Position {
line: 189,
column: 23,
},
end: Position {
line: 189,
column: 32,
},
},
},
),
],
span: Span {
start: Position {
line: 189,
column: 22,
},
end: Position {
line: 189,
column: 33,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "SocketGroup",
span: Span {
start: Position {
line: 190,
column: 9,
},
end: Position {
line: 190,
column: 20,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "minecraft",
span: Span {
start: Position {
line: 190,
column: 24,
},
end: Position {
line: 190,
column: 33,
},
},
},
),
],
span: Span {
start: Position {
line: 190,
column: 23,
},
end: Position {
line: 190,
column: 34,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "RemoveOnStop",
span: Span {
start: Position {
line: 191,
column: 9,
},
end: Position {
line: 191,
column: 21,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 191,
column: 24,
},
end: Position {
line: 191,
column: 28,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "FlushPending",
span: Span {
start: Position {
line: 192,
column: 9,
},
end: Position {
line: 192,
column: 21,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 192,
column: 24,
},
end: Position {
line: 192,
column: 28,
},
},
},
),
},
),
],
span: Span {
start: Position {
line: 186,
column: 22,
},
end: Position {
line: 193,
column: 8,
},
},
},
),
},
),
],
span: Span {
start: Position {
line: 184,
column: 40,
},
end: Position {
line: 194,
column: 6,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "systemd",
span: Span {
start: Position {
line: 196,
column: 5,
},
end: Position {
line: 196,
column: 12,
},
},
},
),
Raw(
PartRaw {
content: "services",
span: Span {
start: Position {
line: 196,
column: 13,
},
end: Position {
line: 196,
column: 21,
},
},
},
),
Raw(
PartRaw {
content: "minecraft-server",
span: Span {
start: Position {
line: 196,
column: 22,
},
end: Position {
line: 196,
column: 38,
},
},
},
),
],
to: Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "description",
span: Span {
start: Position {
line: 197,
column: 7,
},
end: Position {
line: 197,
column: 18,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "Minecraft Server Service",
span: Span {
start: Position {
line: 197,
column: 24,
},
end: Position {
line: 197,
column: 48,
},
},
},
),
],
span: Span {
start: Position {
line: 197,
column: 23,
},
end: Position {
line: 197,
column: 49,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "wantedBy",
span: Span {
start: Position {
line: 198,
column: 7,
},
end: Position {
line: 198,
column: 15,
},
},
},
),
],
to: List(
List {
elements: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "multi-user.target",
span: Span {
start: Position {
line: 198,
column: 26,
},
end: Position {
line: 198,
column: 43,
},
},
},
),
],
span: Span {
start: Position {
line: 198,
column: 25,
},
end: Position {
line: 198,
column: 44,
},
},
},
),
],
span: Span {
start: Position {
line: 198,
column: 23,
},
end: Position {
line: 198,
column: 46,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "requires",
span: Span {
start: Position {
line: 199,
column: 7,
},
end: Position {
line: 199,
column: 15,
},
},
},
),
],
to: List(
List {
elements: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "minecraft-server.socket",
span: Span {
start: Position {
line: 199,
column: 26,
},
end: Position {
line: 199,
column: 49,
},
},
},
),
],
span: Span {
start: Position {
line: 199,
column: 25,
},
end: Position {
line: 199,
column: 50,
},
},
},
),
],
span: Span {
start: Position {
line: 199,
column: 23,
},
end: Position {
line: 199,
column: 52,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "after",
span: Span {
start: Position {
line: 200,
column: 7,
},
end: Position {
line: 200,
column: 12,
},
},
},
),
],
to: List(
List {
elements: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "network.target",
span: Span {
start: Position {
line: 200,
column: 26,
},
end: Position {
line: 200,
column: 40,
},
},
},
),
],
span: Span {
start: Position {
line: 200,
column: 25,
},
end: Position {
line: 200,
column: 41,
},
},
},
),
String(
String_ {
parts: [
Raw(
PartRaw {
content: "minecraft-server.socket",
span: Span {
start: Position {
line: 200,
column: 43,
},
end: Position {
line: 200,
column: 66,
},
},
},
),
],
span: Span {
start: Position {
line: 200,
column: 42,
},
end: Position {
line: 200,
column: 67,
},
},
},
),
],
span: Span {
start: Position {
line: 200,
column: 23,
},
end: Position {
line: 200,
column: 69,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "serviceConfig",
span: Span {
start: Position {
line: 202,
column: 7,
},
end: Position {
line: 202,
column: 20,
},
},
},
),
],
to: Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "ExecStart",
span: Span {
start: Position {
line: 203,
column: 9,
},
end: Position {
line: 203,
column: 18,
},
},
},
),
],
to: String(
String_ {
parts: [
Interpolation(
PartInterpolation {
expression: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 203,
column: 24,
},
end: Position {
line: 203,
column: 27,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "package",
span: Span {
start: Position {
line: 203,
column: 28,
},
end: Position {
line: 203,
column: 35,
},
},
},
),
],
default: None,
},
),
},
),
Raw(
PartRaw {
content: "/bin/minecraft-server ",
span: Span {
start: Position {
line: 203,
column: 22,
},
end: Position {
line: 203,
column: 58,
},
},
},
),
Interpolation(
PartInterpolation {
expression: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 203,
column: 60,
},
end: Position {
line: 203,
column: 63,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "jvmOpts",
span: Span {
start: Position {
line: 203,
column: 64,
},
end: Position {
line: 203,
column: 71,
},
},
},
),
],
default: None,
},
),
},
),
],
span: Span {
start: Position {
line: 203,
column: 21,
},
end: Position {
line: 203,
column: 73,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "ExecStop",
span: Span {
start: Position {
line: 204,
column: 9,
},
end: Position {
line: 204,
column: 17,
},
},
},
),
],
to: String(
String_ {
parts: [
Interpolation(
PartInterpolation {
expression: Identifier(
Identifier {
id: "stopScript",
span: Span {
start: Position {
line: 204,
column: 23,
},
end: Position {
line: 204,
column: 33,
},
},
},
),
},
),
Raw(
PartRaw {
content: " $MAINPID",
span: Span {
start: Position {
line: 204,
column: 21,
},
end: Position {
line: 204,
column: 43,
},
},
},
),
],
span: Span {
start: Position {
line: 204,
column: 20,
},
end: Position {
line: 204,
column: 44,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "Restart",
span: Span {
start: Position {
line: 205,
column: 9,
},
end: Position {
line: 205,
column: 16,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "always",
span: Span {
start: Position {
line: 205,
column: 20,
},
end: Position {
line: 205,
column: 26,
},
},
},
),
],
span: Span {
start: Position {
line: 205,
column: 19,
},
end: Position {
line: 205,
column: 27,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "User",
span: Span {
start: Position {
line: 206,
column: 9,
},
end: Position {
line: 206,
column: 13,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "minecraft",
span: Span {
start: Position {
line: 206,
column: 17,
},
end: Position {
line: 206,
column: 26,
},
},
},
),
],
span: Span {
start: Position {
line: 206,
column: 16,
},
end: Position {
line: 206,
column: 27,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "WorkingDirectory",
span: Span {
start: Position {
line: 207,
column: 9,
},
end: Position {
line: 207,
column: 25,
},
},
},
),
],
to: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 207,
column: 28,
},
end: Position {
line: 207,
column: 31,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "dataDir",
span: Span {
start: Position {
line: 207,
column: 32,
},
end: Position {
line: 207,
column: 39,
},
},
},
),
],
default: None,
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "StandardInput",
span: Span {
start: Position {
line: 209,
column: 9,
},
end: Position {
line: 209,
column: 22,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "socket",
span: Span {
start: Position {
line: 209,
column: 26,
},
end: Position {
line: 209,
column: 32,
},
},
},
),
],
span: Span {
start: Position {
line: 209,
column: 25,
},
end: Position {
line: 209,
column: 33,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "StandardOutput",
span: Span {
start: Position {
line: 210,
column: 9,
},
end: Position {
line: 210,
column: 23,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "journal",
span: Span {
start: Position {
line: 210,
column: 27,
},
end: Position {
line: 210,
column: 34,
},
},
},
),
],
span: Span {
start: Position {
line: 210,
column: 26,
},
end: Position {
line: 210,
column: 35,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "StandardError",
span: Span {
start: Position {
line: 211,
column: 9,
},
end: Position {
line: 211,
column: 22,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "journal",
span: Span {
start: Position {
line: 211,
column: 26,
},
end: Position {
line: 211,
column: 33,
},
},
},
),
],
span: Span {
start: Position {
line: 211,
column: 25,
},
end: Position {
line: 211,
column: 34,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "CapabilityBoundingSet",
span: Span {
start: Position {
line: 214,
column: 9,
},
end: Position {
line: 214,
column: 30,
},
},
},
),
],
to: List(
List {
elements: [
String(
String_ {
parts: [],
span: Span {
start: Position {
line: 214,
column: 35,
},
end: Position {
line: 214,
column: 37,
},
},
},
),
],
span: Span {
start: Position {
line: 214,
column: 33,
},
end: Position {
line: 214,
column: 39,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "DeviceAllow",
span: Span {
start: Position {
line: 215,
column: 9,
},
end: Position {
line: 215,
column: 20,
},
},
},
),
],
to: List(
List {
elements: [
String(
String_ {
parts: [],
span: Span {
start: Position {
line: 215,
column: 25,
},
end: Position {
line: 215,
column: 27,
},
},
},
),
],
span: Span {
start: Position {
line: 215,
column: 23,
},
end: Position {
line: 215,
column: 29,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "LockPersonality",
span: Span {
start: Position {
line: 216,
column: 9,
},
end: Position {
line: 216,
column: 24,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 216,
column: 27,
},
end: Position {
line: 216,
column: 31,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "PrivateDevices",
span: Span {
start: Position {
line: 217,
column: 9,
},
end: Position {
line: 217,
column: 23,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 217,
column: 26,
},
end: Position {
line: 217,
column: 30,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "PrivateTmp",
span: Span {
start: Position {
line: 218,
column: 9,
},
end: Position {
line: 218,
column: 19,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 218,
column: 22,
},
end: Position {
line: 218,
column: 26,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "PrivateUsers",
span: Span {
start: Position {
line: 219,
column: 9,
},
end: Position {
line: 219,
column: 21,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 219,
column: 24,
},
end: Position {
line: 219,
column: 28,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "ProtectClock",
span: Span {
start: Position {
line: 220,
column: 9,
},
end: Position {
line: 220,
column: 21,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 220,
column: 24,
},
end: Position {
line: 220,
column: 28,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "ProtectControlGroups",
span: Span {
start: Position {
line: 221,
column: 9,
},
end: Position {
line: 221,
column: 29,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 221,
column: 32,
},
end: Position {
line: 221,
column: 36,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "ProtectHome",
span: Span {
start: Position {
line: 222,
column: 9,
},
end: Position {
line: 222,
column: 20,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 222,
column: 23,
},
end: Position {
line: 222,
column: 27,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "ProtectHostname",
span: Span {
start: Position {
line: 223,
column: 9,
},
end: Position {
line: 223,
column: 24,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 223,
column: 27,
},
end: Position {
line: 223,
column: 31,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "ProtectKernelLogs",
span: Span {
start: Position {
line: 224,
column: 9,
},
end: Position {
line: 224,
column: 26,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 224,
column: 29,
},
end: Position {
line: 224,
column: 33,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "ProtectKernelModules",
span: Span {
start: Position {
line: 225,
column: 9,
},
end: Position {
line: 225,
column: 29,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 225,
column: 32,
},
end: Position {
line: 225,
column: 36,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "ProtectKernelTunables",
span: Span {
start: Position {
line: 226,
column: 9,
},
end: Position {
line: 226,
column: 30,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 226,
column: 33,
},
end: Position {
line: 226,
column: 37,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "ProtectProc",
span: Span {
start: Position {
line: 227,
column: 9,
},
end: Position {
line: 227,
column: 20,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "invisible",
span: Span {
start: Position {
line: 227,
column: 24,
},
end: Position {
line: 227,
column: 33,
},
},
},
),
],
span: Span {
start: Position {
line: 227,
column: 23,
},
end: Position {
line: 227,
column: 34,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "RestrictAddressFamilies",
span: Span {
start: Position {
line: 228,
column: 9,
},
end: Position {
line: 228,
column: 32,
},
},
},
),
],
to: List(
List {
elements: [
String(
String_ {
parts: [
Raw(
PartRaw {
content: "AF_INET",
span: Span {
start: Position {
line: 228,
column: 38,
},
end: Position {
line: 228,
column: 45,
},
},
},
),
],
span: Span {
start: Position {
line: 228,
column: 37,
},
end: Position {
line: 228,
column: 46,
},
},
},
),
String(
String_ {
parts: [
Raw(
PartRaw {
content: "AF_INET6",
span: Span {
start: Position {
line: 228,
column: 48,
},
end: Position {
line: 228,
column: 56,
},
},
},
),
],
span: Span {
start: Position {
line: 228,
column: 47,
},
end: Position {
line: 228,
column: 57,
},
},
},
),
],
span: Span {
start: Position {
line: 228,
column: 35,
},
end: Position {
line: 228,
column: 59,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "RestrictNamespaces",
span: Span {
start: Position {
line: 229,
column: 9,
},
end: Position {
line: 229,
column: 27,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 229,
column: 30,
},
end: Position {
line: 229,
column: 34,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "RestrictRealtime",
span: Span {
start: Position {
line: 230,
column: 9,
},
end: Position {
line: 230,
column: 25,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 230,
column: 28,
},
end: Position {
line: 230,
column: 32,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "RestrictSUIDSGID",
span: Span {
start: Position {
line: 231,
column: 9,
},
end: Position {
line: 231,
column: 25,
},
},
},
),
],
to: Identifier(
Identifier {
id: "true",
span: Span {
start: Position {
line: 231,
column: 28,
},
end: Position {
line: 231,
column: 32,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "SystemCallArchitectures",
span: Span {
start: Position {
line: 232,
column: 9,
},
end: Position {
line: 232,
column: 32,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "native",
span: Span {
start: Position {
line: 232,
column: 36,
},
end: Position {
line: 232,
column: 42,
},
},
},
),
],
span: Span {
start: Position {
line: 232,
column: 35,
},
end: Position {
line: 232,
column: 43,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "UMask",
span: Span {
start: Position {
line: 233,
column: 9,
},
end: Position {
line: 233,
column: 14,
},
},
},
),
],
to: String(
String_ {
parts: [
Raw(
PartRaw {
content: "0077",
span: Span {
start: Position {
line: 233,
column: 18,
},
end: Position {
line: 233,
column: 22,
},
},
},
),
],
span: Span {
start: Position {
line: 233,
column: 17,
},
end: Position {
line: 233,
column: 23,
},
},
},
),
},
),
],
span: Span {
start: Position {
line: 202,
column: 23,
},
end: Position {
line: 234,
column: 8,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "preStart",
span: Span {
start: Position {
line: 236,
column: 7,
},
end: Position {
line: 236,
column: 15,
},
},
},
),
],
to: BinaryOperation(
BinaryOperation {
left: IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "ln -sf ",
span: Span {
start: Position {
line: 237,
column: 1,
},
end: Position {
line: 237,
column: 16,
},
},
},
),
Interpolation(
PartInterpolation {
expression: Identifier(
Identifier {
id: "eulaFile",
span: Span {
start: Position {
line: 237,
column: 18,
},
end: Position {
line: 237,
column: 26,
},
},
},
),
},
),
Raw(
PartRaw {
content: " eula.txt\n",
span: Span {
start: Position {
line: 237,
column: 1,
},
end: Position {
line: 238,
column: 7,
},
},
},
),
],
span: Span {
start: Position {
line: 236,
column: 18,
},
end: Position {
line: 238,
column: 9,
},
},
},
),
operator: Addition,
right: IfThenElse(
IfThenElse {
predicate: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 238,
column: 16,
},
end: Position {
line: 238,
column: 19,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "declarative",
span: Span {
start: Position {
line: 238,
column: 20,
},
end: Position {
line: 238,
column: 31,
},
},
},
),
],
default: None,
},
),
then: IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "\nif [ -e .declarative ]; then\n\n # Was declarative before, no need to back up anything\n ln -sf ",
span: Span {
start: Position {
line: 239,
column: 1,
},
end: Position {
line: 243,
column: 18,
},
},
},
),
Interpolation(
PartInterpolation {
expression: Identifier(
Identifier {
id: "whitelistFile",
span: Span {
start: Position {
line: 243,
column: 20,
},
end: Position {
line: 243,
column: 33,
},
},
},
),
},
),
Raw(
PartRaw {
content: " whitelist.json\n cp -f ",
span: Span {
start: Position {
line: 239,
column: 1,
},
end: Position {
line: 244,
column: 17,
},
},
},
),
Interpolation(
PartInterpolation {
expression: Identifier(
Identifier {
id: "serverPropertiesFile",
span: Span {
start: Position {
line: 244,
column: 19,
},
end: Position {
line: 244,
column: 39,
},
},
},
),
},
),
Raw(
PartRaw {
content: " server.properties\n\nelse\n\n # Declarative for the first time, backup stateful files\n ln -sb --suffix=.stateful ",
span: Span {
start: Position {
line: 239,
column: 1,
},
end: Position {
line: 249,
column: 37,
},
},
},
),
Interpolation(
PartInterpolation {
expression: Identifier(
Identifier {
id: "whitelistFile",
span: Span {
start: Position {
line: 249,
column: 39,
},
end: Position {
line: 249,
column: 52,
},
},
},
),
},
),
Raw(
PartRaw {
content: " whitelist.json\n cp -b --suffix=.stateful ",
span: Span {
start: Position {
line: 239,
column: 1,
},
end: Position {
line: 250,
column: 36,
},
},
},
),
Interpolation(
PartInterpolation {
expression: Identifier(
Identifier {
id: "serverPropertiesFile",
span: Span {
start: Position {
line: 250,
column: 38,
},
end: Position {
line: 250,
column: 58,
},
},
},
),
},
),
Raw(
PartRaw {
content: " server.properties\n\n # server.properties must have write permissions, because every time\n # the server starts it first parses the file and then regenerates it..\n chmod +w server.properties\n echo \"Autogenerated file that signifies that this server configuration is managed declaratively by NixOS\" \\\n > .declarative\n\nfi\n",
span: Span {
start: Position {
line: 239,
column: 1,
},
end: Position {
line: 259,
column: 7,
},
},
},
),
],
span: Span {
start: Position {
line: 238,
column: 37,
},
end: Position {
line: 259,
column: 9,
},
},
},
),
else_: IndentedString(
IndentedString {
parts: [
Raw(
PartRaw {
content: "if [ -e .declarative ]; then\n rm .declarative\nfi\n",
span: Span {
start: Position {
line: 260,
column: 1,
},
end: Position {
line: 263,
column: 7,
},
},
},
),
],
span: Span {
start: Position {
line: 259,
column: 15,
},
end: Position {
line: 263,
column: 9,
},
},
},
),
span: Span {
start: Position {
line: 238,
column: 13,
},
end: Position {
line: 263,
column: 9,
},
},
},
),
},
),
},
),
],
span: Span {
start: Position {
line: 196,
column: 41,
},
end: Position {
line: 264,
column: 6,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "networking",
span: Span {
start: Position {
line: 266,
column: 5,
},
end: Position {
line: 266,
column: 15,
},
},
},
),
Raw(
PartRaw {
content: "firewall",
span: Span {
start: Position {
line: 266,
column: 16,
},
end: Position {
line: 266,
column: 24,
},
},
},
),
],
to: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "mkIf",
span: Span {
start: Position {
line: 266,
column: 27,
},
end: Position {
line: 266,
column: 31,
},
},
},
),
arguments: [
PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 266,
column: 32,
},
end: Position {
line: 266,
column: 35,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "openFirewall",
span: Span {
start: Position {
line: 266,
column: 36,
},
end: Position {
line: 266,
column: 48,
},
},
},
),
],
default: None,
},
),
IfThenElse(
IfThenElse {
predicate: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 266,
column: 53,
},
end: Position {
line: 266,
column: 56,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "declarative",
span: Span {
start: Position {
line: 266,
column: 57,
},
end: Position {
line: 266,
column: 68,
},
},
},
),
],
default: None,
},
),
then: Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "allowedUDPPorts",
span: Span {
start: Position {
line: 267,
column: 7,
},
end: Position {
line: 267,
column: 22,
},
},
},
),
],
to: List(
List {
elements: [
Identifier(
Identifier {
id: "serverPort",
span: Span {
start: Position {
line: 267,
column: 27,
},
end: Position {
line: 267,
column: 37,
},
},
},
),
],
span: Span {
start: Position {
line: 267,
column: 25,
},
end: Position {
line: 267,
column: 39,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "allowedTCPPorts",
span: Span {
start: Position {
line: 268,
column: 7,
},
end: Position {
line: 268,
column: 22,
},
},
},
),
],
to: BinaryOperation(
BinaryOperation {
left: List(
List {
elements: [
Identifier(
Identifier {
id: "serverPort",
span: Span {
start: Position {
line: 268,
column: 27,
},
end: Position {
line: 268,
column: 37,
},
},
},
),
],
span: Span {
start: Position {
line: 268,
column: 25,
},
end: Position {
line: 268,
column: 39,
},
},
},
),
operator: Concatenation,
right: BinaryOperation(
BinaryOperation {
left: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "optional",
span: Span {
start: Position {
line: 269,
column: 12,
},
end: Position {
line: 269,
column: 20,
},
},
},
),
arguments: [
BinaryOperation(
BinaryOperation {
left: Identifier(
Identifier {
id: "queryPort",
span: Span {
start: Position {
line: 269,
column: 22,
},
end: Position {
line: 269,
column: 31,
},
},
},
),
operator: NotEqualTo,
right: Identifier(
Identifier {
id: "null",
span: Span {
start: Position {
line: 269,
column: 35,
},
end: Position {
line: 269,
column: 39,
},
},
},
),
},
),
Identifier(
Identifier {
id: "queryPort",
span: Span {
start: Position {
line: 269,
column: 41,
},
end: Position {
line: 269,
column: 50,
},
},
},
),
],
},
),
operator: Concatenation,
right: FunctionApplication(
FunctionApplication {
function: Identifier(
Identifier {
id: "optional",
span: Span {
start: Position {
line: 270,
column: 12,
},
end: Position {
line: 270,
column: 20,
},
},
},
),
arguments: [
BinaryOperation(
BinaryOperation {
left: Identifier(
Identifier {
id: "rconPort",
span: Span {
start: Position {
line: 270,
column: 22,
},
end: Position {
line: 270,
column: 30,
},
},
},
),
operator: NotEqualTo,
right: Identifier(
Identifier {
id: "null",
span: Span {
start: Position {
line: 270,
column: 34,
},
end: Position {
line: 270,
column: 38,
},
},
},
),
},
),
Identifier(
Identifier {
id: "rconPort",
span: Span {
start: Position {
line: 270,
column: 40,
},
end: Position {
line: 270,
column: 48,
},
},
},
),
],
},
),
},
),
},
),
},
),
],
span: Span {
start: Position {
line: 266,
column: 74,
},
end: Position {
line: 271,
column: 6,
},
},
},
),
else_: Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "allowedUDPPorts",
span: Span {
start: Position {
line: 272,
column: 7,
},
end: Position {
line: 272,
column: 22,
},
},
},
),
],
to: List(
List {
elements: [
Identifier(
Identifier {
id: "defaultServerPort",
span: Span {
start: Position {
line: 272,
column: 27,
},
end: Position {
line: 272,
column: 44,
},
},
},
),
],
span: Span {
start: Position {
line: 272,
column: 25,
},
end: Position {
line: 272,
column: 46,
},
},
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "allowedTCPPorts",
span: Span {
start: Position {
line: 273,
column: 7,
},
end: Position {
line: 273,
column: 22,
},
},
},
),
],
to: List(
List {
elements: [
Identifier(
Identifier {
id: "defaultServerPort",
span: Span {
start: Position {
line: 273,
column: 27,
},
end: Position {
line: 273,
column: 44,
},
},
},
),
],
span: Span {
start: Position {
line: 273,
column: 25,
},
end: Position {
line: 273,
column: 46,
},
},
},
),
},
),
],
span: Span {
start: Position {
line: 271,
column: 12,
},
end: Position {
line: 274,
column: 6,
},
},
},
),
span: Span {
start: Position {
line: 266,
column: 50,
},
end: Position {
line: 274,
column: 6,
},
},
},
),
],
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "assertions",
span: Span {
start: Position {
line: 276,
column: 5,
},
end: Position {
line: 276,
column: 15,
},
},
},
),
],
to: List(
List {
elements: [
Map(
Map {
recursive: false,
bindings: [
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "assertion",
span: Span {
start: Position {
line: 277,
column: 9,
},
end: Position {
line: 277,
column: 18,
},
},
},
),
],
to: PropertyAccess(
PropertyAccess {
expression: Identifier(
Identifier {
id: "cfg",
span: Span {
start: Position {
line: 277,
column: 21,
},
end: Position {
line: 277,
column: 24,
},
},
},
),
attribute_path: [
Raw(
PartRaw {
content: "eula",
span: Span {
start: Position {
line: 277,
column: 25,
},
end: Position {
line: 277,
column: 29,
},
},
},
),
],
default: None,
},
),
},
),
KeyValue(
BindingKeyValue {
from: [
Raw(
PartRaw {
content: "message",
span: Span {
start: Position {
line: 278,
column: 9,
},
end: Position {
line: 278,
column: 16,
},
},
},
),
],
to: BinaryOperation(
BinaryOperation {
left: BinaryOperation(
BinaryOperation {
left: String(
String_ {
parts: [
Raw(
PartRaw {
content: "You must agree to Mojangs EULA to run minecraft-server.",
span: Span {
start: Position {
line: 278,
column: 20,
},
end: Position {
line: 278,
column: 75,
},
},
},
),
],
span: Span {
start: Position {
line: 278,
column: 19,
},
end: Position {
line: 278,
column: 76,
},
},
},
),
operator: Addition,
right: String(
String_ {
parts: [
Raw(
PartRaw {
content: " Read https://account.mojang.com/documents/minecraft_eula and",
span: Span {
start: Position {
line: 279,
column: 14,
},
end: Position {
line: 279,
column: 75,
},
},
},
),
],
span: Span {
start: Position {
line: 279,
column: 13,
},
end: Position {
line: 279,
column: 76,
},
},
},
),
},
),
operator: Addition,
right: String(
String_ {
parts: [
Raw(
PartRaw {
content: " set `services.minecraft-server.eula` to `true` if you agree.",
span: Span {
start: Position {
line: 280,
column: 14,
},
end: Position {
line: 280,
column: 75,
},
},
},
),
],
span: Span {
start: Position {
line: 280,
column: 13,
},
end: Position {
line: 280,
column: 76,
},
},
},
),
},
),
},
),
],
span: Span {
start: Position {
line: 277,
column: 7,
},
end: Position {
line: 281,
column: 8,
},
},
},
),
],
span: Span {
start: Position {
line: 276,
column: 18,
},
end: Position {
line: 282,
column: 6,
},
},
},
),
},
),
],
span: Span {
start: Position {
line: 173,
column: 28,
},
end: Position {
line: 284,
column: 4,
},
},
},
),
],
},
),
},
),
],
span: Span {
start: Position {
line: 50,
column: 4,
},
end: Position {
line: 285,
column: 2,
},
},
},
),
span: Span {
start: Position {
line: 5,
column: 1,
},
end: Position {
line: 285,
column: 2,
},
},
},
),
span: Span {
start: Position {
line: 3,
column: 1,
},
end: Position {
line: 285,
column: 2,
},
},
},
),
span: Span {
start: Position {
line: 1,
column: 1,
},
end: Position {
line: 285,
column: 2,
},
},
},
)