Function( Function { head: Destructured( FunctionHeadDestructured { ellipsis: true, identifier: None, arguments: [ FunctionHeadDestructuredArgument { identifier: "config", default: None, }, FunctionHeadDestructuredArgument { identifier: "pkgs", default: None, }, FunctionHeadDestructuredArgument { identifier: "lib", default: None, }, ], }, ), body: With( With { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 2, column: 6, }, end: Position { line: 2, column: 9, }, }, }, ), target: LetIn( LetIn { bindings: [ Inherit( BindingInherit { from: Some( PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 4, column: 12, }, end: Position { line: 4, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 4, column: 19, }, end: Position { line: 4, column: 27, }, }, }, ), ], default: None, }, ), ), attributes: [ Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 4, column: 29, }, end: Position { line: 4, column: 34, }, }, }, ), Raw( PartRaw { content: "postfix", span: Span { start: Position { line: 4, column: 35, }, end: Position { line: 4, column: 42, }, }, }, ), Raw( PartRaw { content: "postgresql", span: Span { start: Position { line: 4, column: 43, }, end: Position { line: 4, column: 53, }, }, }, ), Raw( PartRaw { content: "redis", span: Span { start: Position { line: 4, column: 54, }, end: Position { line: 4, column: 59, }, }, }, ), ], span: Span { start: Position { line: 3, column: 4, }, end: Position { line: 4, column: 60, }, }, }, ), Inherit( BindingInherit { from: Some( PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 5, column: 12, }, end: Position { line: 5, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 5, column: 19, }, end: Position { line: 5, column: 24, }, }, }, ), ], default: None, }, ), ), attributes: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 5, column: 26, }, end: Position { line: 5, column: 31, }, }, }, ), Raw( PartRaw { content: "groups", span: Span { start: Position { line: 5, column: 32, }, end: Position { line: 5, column: 38, }, }, }, ), ], span: Span { start: Position { line: 3, column: 4, }, end: Position { line: 5, column: 39, }, }, }, ), 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: "sourcehut", span: Span { start: Position { line: 6, column: 25, }, end: Position { line: 6, column: 34, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "domain", span: Span { start: Position { line: 7, column: 3, }, end: Position { line: 7, column: 9, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 7, column: 12, }, end: Position { line: 7, column: 15, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 7, column: 16, }, end: Position { line: 7, column: 24, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "sr.ht", span: Span { start: Position { line: 7, column: 26, }, end: Position { line: 7, column: 31, }, }, }, ), ], span: Span { start: Position { line: 7, column: 25, }, end: Position { line: 7, column: 32, }, }, }, ), }, ), Raw( PartRaw { content: "global-domain", span: Span { start: Position { line: 7, column: 33, }, end: Position { line: 7, column: 46, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "settingsFormat", span: Span { start: Position { line: 8, column: 3, }, end: Position { line: 8, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 8, column: 20, }, end: Position { line: 8, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "formats", span: Span { start: Position { line: 8, column: 25, }, end: Position { line: 8, column: 32, }, }, }, ), Raw( PartRaw { content: "ini", span: Span { start: Position { line: 8, column: 33, }, end: Position { line: 8, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "listToValue", span: Span { start: Position { line: 9, column: 5, }, end: Position { line: 9, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "concatMapStringsSep", span: Span { start: Position { line: 9, column: 19, }, end: Position { line: 9, column: 38, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: ",", span: Span { start: Position { line: 9, column: 40, }, end: Position { line: 9, column: 41, }, }, }, ), ], span: Span { start: Position { line: 9, column: 39, }, end: Position { line: 9, column: 42, }, }, }, ), FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "generators", span: Span { start: Position { line: 9, column: 44, }, end: Position { line: 9, column: 54, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mkValueStringDefault", span: Span { start: Position { line: 9, column: 55, }, end: Position { line: 9, column: 75, }, }, }, ), ], default: None, }, ), arguments: [ Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 9, column: 76, }, end: Position { line: 9, column: 78, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "mkKeyValue", span: Span { start: Position { line: 10, column: 5, }, end: Position { line: 10, column: 15, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "k", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "v", }, ), body: IfThenElse( IfThenElse { predicate: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "v", span: Span { start: Position { line: 11, column: 10, }, end: Position { line: 11, column: 11, }, }, }, ), operator: EqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 11, column: 15, }, end: Position { line: 11, column: 19, }, }, }, ), }, ), then: String( String_ { parts: [], span: Span { start: Position { line: 11, column: 25, }, end: Position { line: 11, column: 27, }, }, }, ), else_: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "generators", span: Span { start: Position { line: 12, column: 12, }, end: Position { line: 12, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mkKeyValueDefault", span: Span { start: Position { line: 12, column: 23, }, end: Position { line: 12, column: 40, }, }, }, ), ], default: None, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "mkValueString", span: Span { start: Position { line: 13, column: 9, }, end: Position { line: 13, column: 22, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "v", }, ), body: IfThenElse( IfThenElse { predicate: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "v", span: Span { start: Position { line: 14, column: 14, }, end: Position { line: 14, column: 15, }, }, }, ), operator: EqualTo, right: Identifier( Identifier { id: "true", span: Span { start: Position { line: 14, column: 19, }, end: Position { line: 14, column: 23, }, }, }, ), }, ), then: String( String_ { parts: [ Raw( PartRaw { content: "yes", span: Span { start: Position { line: 14, column: 30, }, end: Position { line: 14, column: 33, }, }, }, ), ], span: Span { start: Position { line: 14, column: 29, }, end: Position { line: 14, column: 34, }, }, }, ), else_: IfThenElse( IfThenElse { predicate: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "v", span: Span { start: Position { line: 15, column: 19, }, end: Position { line: 15, column: 20, }, }, }, ), operator: EqualTo, right: Identifier( Identifier { id: "false", span: Span { start: Position { line: 15, column: 24, }, end: Position { line: 15, column: 29, }, }, }, ), }, ), then: String( String_ { parts: [ Raw( PartRaw { content: "no", span: Span { start: Position { line: 15, column: 36, }, end: Position { line: 15, column: 38, }, }, }, ), ], span: Span { start: Position { line: 15, column: 35, }, end: Position { line: 15, column: 39, }, }, }, ), else_: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "generators", span: Span { start: Position { line: 16, column: 16, }, end: Position { line: 16, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mkValueStringDefault", span: Span { start: Position { line: 16, column: 27, }, end: Position { line: 16, column: 47, }, }, }, ), ], default: None, }, ), arguments: [ Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 16, column: 48, }, end: Position { line: 16, column: 50, }, }, }, ), Identifier( Identifier { id: "v", span: Span { start: Position { line: 16, column: 51, }, end: Position { line: 16, column: 52, }, }, }, ), ], }, ), span: Span { start: Position { line: 15, column: 16, }, end: Position { line: 16, column: 52, }, }, }, ), span: Span { start: Position { line: 14, column: 11, }, end: Position { line: 16, column: 52, }, }, }, ), span: Span { start: Position { line: 13, column: 25, }, end: Position { line: 16, column: 52, }, }, }, ), }, ), ], span: Span { start: Position { line: 12, column: 41, }, end: Position { line: 17, column: 8, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "=", span: Span { start: Position { line: 17, column: 10, }, end: Position { line: 17, column: 11, }, }, }, ), ], span: Span { start: Position { line: 17, column: 9, }, end: Position { line: 17, column: 12, }, }, }, ), Identifier( Identifier { id: "k", span: Span { start: Position { line: 17, column: 13, }, end: Position { line: 17, column: 14, }, }, }, ), Identifier( Identifier { id: "v", span: Span { start: Position { line: 17, column: 15, }, end: Position { line: 17, column: 16, }, }, }, ), ], }, ), span: Span { start: Position { line: 11, column: 7, }, end: Position { line: 17, column: 16, }, }, }, ), span: Span { start: Position { line: 10, column: 21, }, end: Position { line: 17, column: 16, }, }, }, ), span: Span { start: Position { line: 10, column: 18, }, end: Position { line: 17, column: 16, }, }, }, ), }, ), ], span: Span { start: Position { line: 8, column: 37, }, end: Position { line: 18, column: 4, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "configIniOfService", span: Span { start: Position { line: 19, column: 3, }, end: Position { line: 19, column: 21, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "srv", }, ), body: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "settingsFormat", span: Span { start: Position { line: 19, column: 29, }, end: Position { line: 19, column: 43, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "generate", span: Span { start: Position { line: 19, column: 44, }, end: Position { line: 19, column: 52, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "sourcehut-", span: Span { start: Position { line: 19, column: 54, }, end: Position { line: 19, column: 70, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "srv", span: Span { start: Position { line: 19, column: 66, }, end: Position { line: 19, column: 69, }, }, }, ), }, ), Raw( PartRaw { content: "-config.ini", span: Span { start: Position { line: 19, column: 54, }, end: Position { line: 19, column: 81, }, }, }, ), ], span: Span { start: Position { line: 19, column: 53, }, end: Position { line: 19, column: 82, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "filterAttrs", span: Span { start: Position { line: 21, column: 6, }, end: Position { line: 21, column: 17, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "k", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "v", }, ), body: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "v", span: Span { start: Position { line: 21, column: 25, }, end: Position { line: 21, column: 26, }, }, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 21, column: 30, }, end: Position { line: 21, column: 34, }, }, }, ), }, ), span: Span { start: Position { line: 21, column: 22, }, end: Position { line: 21, column: 34, }, }, }, ), span: Span { start: Position { line: 21, column: 19, }, end: Position { line: 21, column: 34, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrs", span: Span { start: Position { line: 22, column: 6, }, end: Position { line: 22, column: 14, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "section", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "v", }, ), body: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "srvMatch", span: Span { start: Position { line: 23, column: 11, }, end: Position { line: 23, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 23, column: 22, }, end: Position { line: 23, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "match", span: Span { start: Position { line: 23, column: 31, }, end: Position { line: 23, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "^([a-z]*)\\.sr\\.ht(::.*)?$", span: Span { start: Position { line: 23, column: 38, }, end: Position { line: 23, column: 65, }, }, }, ), ], span: Span { start: Position { line: 23, column: 37, }, end: Position { line: 23, column: 66, }, }, }, ), Identifier( Identifier { id: "section", span: Span { start: Position { line: 23, column: 67, }, end: Position { line: 23, column: 74, }, }, }, ), ], }, ), }, ), ], target: IfThenElse( IfThenElse { predicate: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "srvMatch", span: Span { start: Position { line: 24, column: 10, }, end: Position { line: 24, column: 18, }, }, }, ), operator: EqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 24, column: 22, }, end: Position { line: 24, column: 26, }, }, }, ), }, ), operator: LogicalOr, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "head", span: Span { start: Position { line: 25, column: 10, }, end: Position { line: 25, column: 14, }, }, }, ), arguments: [ Identifier( Identifier { id: "srvMatch", span: Span { start: Position { line: 25, column: 15, }, end: Position { line: 25, column: 23, }, }, }, ), ], }, ), operator: EqualTo, right: Identifier( Identifier { id: "srv", span: Span { start: Position { line: 25, column: 27, }, end: Position { line: 25, column: 30, }, }, }, ), }, ), }, ), then: Identifier( Identifier { id: "v", span: Span { start: Position { line: 26, column: 12, }, end: Position { line: 26, column: 13, }, }, }, ), else_: IfThenElse( IfThenElse { predicate: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "tail", span: Span { start: Position { line: 28, column: 15, }, end: Position { line: 28, column: 19, }, }, }, ), arguments: [ Identifier( Identifier { id: "srvMatch", span: Span { start: Position { line: 28, column: 20, }, end: Position { line: 28, column: 28, }, }, }, ), ], }, ), operator: EqualTo, right: List( List { elements: [ Identifier( Identifier { id: "null", span: Span { start: Position { line: 28, column: 34, }, end: Position { line: 28, column: 38, }, }, }, ), ], span: Span { start: Position { line: 28, column: 32, }, end: Position { line: 28, column: 40, }, }, }, ), }, ), operator: LogicalAnd, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "elem", span: Span { start: Position { line: 28, column: 44, }, end: Position { line: 28, column: 48, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "head", span: Span { start: Position { line: 28, column: 50, }, end: Position { line: 28, column: 54, }, }, }, ), arguments: [ Identifier( Identifier { id: "srvMatch", span: Span { start: Position { line: 28, column: 55, }, end: Position { line: 28, column: 63, }, }, }, ), ], }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 28, column: 65, }, end: Position { line: 28, column: 68, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 28, column: 69, }, end: Position { line: 28, column: 77, }, }, }, ), ], default: None, }, ), ], }, ), }, ), then: Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: Some( Identifier( Identifier { id: "v", span: Span { start: Position { line: 30, column: 18, }, end: Position { line: 30, column: 19, }, }, }, ), ), attributes: [ Raw( PartRaw { content: "origin", span: Span { start: Position { line: 30, column: 21, }, end: Position { line: 30, column: 27, }, }, }, ), ], span: Span { start: Position { line: 29, column: 13, }, end: Position { line: 30, column: 28, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "oauth-client-id", span: Span { start: Position { line: 32, column: 9, }, end: Position { line: 32, column: 24, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "v", span: Span { start: Position { line: 32, column: 27, }, end: Position { line: 32, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "oauth-client-id", span: Span { start: Position { line: 32, column: 29, }, end: Position { line: 32, column: 44, }, }, }, ), ], default: Some( Identifier( Identifier { id: "null", span: Span { start: Position { line: 32, column: 48, }, end: Position { line: 32, column: 52, }, }, }, ), ), }, ), }, ), ], span: Span { start: Position { line: 29, column: 12, }, end: Position { line: 33, column: 8, }, }, }, ), else_: Identifier( Identifier { id: "null", span: Span { start: Position { line: 35, column: 12, }, end: Position { line: 35, column: 16, }, }, }, ), span: Span { start: Position { line: 28, column: 12, }, end: Position { line: 35, column: 16, }, }, }, ), span: Span { start: Position { line: 24, column: 7, }, end: Position { line: 35, column: 16, }, }, }, ), span: Span { start: Position { line: 23, column: 7, }, end: Position { line: 35, column: 16, }, }, }, ), span: Span { start: Position { line: 22, column: 25, }, end: Position { line: 35, column: 16, }, }, }, ), span: Span { start: Position { line: 22, column: 16, }, end: Position { line: 35, column: 16, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "recursiveUpdate", span: Span { start: Position { line: 36, column: 6, }, end: Position { line: 36, column: 21, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 36, column: 22, }, end: Position { line: 36, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 36, column: 26, }, end: Position { line: 36, column: 34, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "builds.sr.ht::worker", span: Span { start: Position { line: 39, column: 8, }, end: Position { line: 39, column: 28, }, }, }, ), ], span: Span { start: Position { line: 39, column: 7, }, end: Position { line: 39, column: 29, }, }, }, ), }, ), Raw( PartRaw { content: "buildlogs", span: Span { start: Position { line: 39, column: 30, }, end: Position { line: 39, column: 39, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/log/sourcehut/buildsrht-worker", span: Span { start: Position { line: 39, column: 43, }, end: Position { line: 39, column: 78, }, }, }, ), ], span: Span { start: Position { line: 39, column: 42, }, end: Position { line: 39, column: 79, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "git.sr.ht", span: Span { start: Position { line: 40, column: 8, }, end: Position { line: 40, column: 17, }, }, }, ), ], span: Span { start: Position { line: 40, column: 7, }, end: Position { line: 40, column: 18, }, }, }, ), }, ), Raw( PartRaw { content: "post-update-script", span: Span { start: Position { line: 40, column: 19, }, end: Position { line: 40, column: 37, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/usr/bin/gitsrht-update-hook", span: Span { start: Position { line: 40, column: 41, }, end: Position { line: 40, column: 69, }, }, }, ), ], span: Span { start: Position { line: 40, column: 40, }, end: Position { line: 40, column: 70, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "git.sr.ht", span: Span { start: Position { line: 41, column: 8, }, end: Position { line: 41, column: 17, }, }, }, ), ], span: Span { start: Position { line: 41, column: 7, }, end: Position { line: 41, column: 18, }, }, }, ), }, ), Raw( PartRaw { content: "repos", span: Span { start: Position { line: 41, column: 19, }, end: Position { line: 41, column: 24, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/sourcehut/gitsrht/repos", span: Span { start: Position { line: 41, column: 28, }, end: Position { line: 41, column: 60, }, }, }, ), ], span: Span { start: Position { line: 41, column: 27, }, end: Position { line: 41, column: 61, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "hg.sr.ht", span: Span { start: Position { line: 42, column: 8, }, end: Position { line: 42, column: 16, }, }, }, ), ], span: Span { start: Position { line: 42, column: 7, }, end: Position { line: 42, column: 17, }, }, }, ), }, ), Raw( PartRaw { content: "changegroup-script", span: Span { start: Position { line: 42, column: 18, }, end: Position { line: 42, column: 36, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/usr/bin/hgsrht-hook-changegroup", span: Span { start: Position { line: 42, column: 40, }, end: Position { line: 42, column: 72, }, }, }, ), ], span: Span { start: Position { line: 42, column: 39, }, end: Position { line: 42, column: 73, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "hg.sr.ht", span: Span { start: Position { line: 43, column: 8, }, end: Position { line: 43, column: 16, }, }, }, ), ], span: Span { start: Position { line: 43, column: 7, }, end: Position { line: 43, column: 17, }, }, }, ), }, ), Raw( PartRaw { content: "repos", span: Span { start: Position { line: 43, column: 18, }, end: Position { line: 43, column: 23, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/sourcehut/hgsrht/repos", span: Span { start: Position { line: 43, column: 27, }, end: Position { line: 43, column: 58, }, }, }, ), ], span: Span { start: Position { line: 43, column: 26, }, end: Position { line: 43, column: 59, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "sr.ht", span: Span { start: Position { line: 46, column: 8, }, end: Position { line: 46, column: 13, }, }, }, ), ], span: Span { start: Position { line: 46, column: 7, }, end: Position { line: 46, column: 14, }, }, }, ), }, ), Raw( PartRaw { content: "redis-host", span: Span { start: Position { line: 46, column: 15, }, end: Position { line: 46, column: 25, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 46, column: 28, }, end: Position { line: 46, column: 31, }, }, }, ), attribute_path: [ Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "srv", span: Span { start: Position { line: 46, column: 34, }, end: Position { line: 46, column: 37, }, }, }, ), }, ), Raw( PartRaw { content: "redis", span: Span { start: Position { line: 46, column: 39, }, end: Position { line: 46, column: 44, }, }, }, ), Raw( PartRaw { content: "host", span: Span { start: Position { line: 46, column: 45, }, end: Position { line: 46, column: 49, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 36, column: 35, }, end: Position { line: 47, column: 6, }, }, }, ), ], }, ), ], }, ), ], }, ), ], }, ), span: Span { start: Position { line: 19, column: 24, }, end: Position { line: 47, column: 9, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "commonServiceSettings", span: Span { start: Position { line: 48, column: 3, }, end: Position { line: 48, column: 24, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "srv", }, ), body: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "origin", span: Span { start: Position { line: 49, column: 5, }, end: Position { line: 49, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 49, column: 14, }, end: Position { line: 49, column: 22, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 50, column: 7, }, end: Position { line: 50, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 50, column: 21, }, end: Position { line: 50, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 50, column: 25, }, end: Position { line: 50, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "URL ", span: Span { start: Position { line: 50, column: 32, }, end: Position { line: 50, column: 42, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "srv", span: Span { start: Position { line: 50, column: 38, }, end: Position { line: 50, column: 41, }, }, }, ), }, ), Raw( PartRaw { content: ".sr.ht is being served at (protocol://domain)", span: Span { start: Position { line: 50, column: 32, }, end: Position { line: 50, column: 87, }, }, }, ), ], span: Span { start: Position { line: 50, column: 31, }, end: Position { line: 50, column: 88, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 51, column: 7, }, end: Position { line: 51, column: 11, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 51, column: 14, }, end: Position { line: 51, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 51, column: 20, }, end: Position { line: 51, column: 23, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 52, column: 7, }, end: Position { line: 52, column: 14, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "https://", span: Span { start: Position { line: 52, column: 18, }, end: Position { line: 52, column: 32, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "srv", span: Span { start: Position { line: 52, column: 28, }, end: Position { line: 52, column: 31, }, }, }, ), }, ), Raw( PartRaw { content: ".", span: Span { start: Position { line: 52, column: 18, }, end: Position { line: 52, column: 33, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 52, column: 35, }, end: Position { line: 52, column: 41, }, }, }, ), }, ), ], span: Span { start: Position { line: 52, column: 17, }, end: Position { line: 52, column: 43, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 53, column: 7, }, end: Position { line: 53, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "https://", span: Span { start: Position { line: 53, column: 22, }, end: Position { line: 53, column: 36, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "srv", span: Span { start: Position { line: 53, column: 32, }, end: Position { line: 53, column: 35, }, }, }, ), }, ), Raw( PartRaw { content: ".example.com", span: Span { start: Position { line: 53, column: 22, }, end: Position { line: 53, column: 48, }, }, }, ), ], span: Span { start: Position { line: 53, column: 21, }, end: Position { line: 53, column: 49, }, }, }, ), }, ), ], span: Span { start: Position { line: 49, column: 23, }, end: Position { line: 54, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "debug-host", span: Span { start: Position { line: 55, column: 5, }, end: Position { line: 55, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 55, column: 18, }, end: Position { line: 55, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 56, column: 7, }, end: Position { line: 56, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 56, column: 21, }, end: Position { line: 56, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 56, column: 25, }, end: Position { line: 56, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Address to bind the debug server to.", span: Span { start: Position { line: 56, column: 32, }, end: Position { line: 56, column: 68, }, }, }, ), ], span: Span { start: Position { line: 56, column: 31, }, end: Position { line: 56, column: 69, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 57, column: 7, }, end: Position { line: 57, column: 11, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 57, column: 19, }, end: Position { line: 57, column: 24, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 57, column: 26, }, end: Position { line: 57, column: 32, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 57, column: 33, }, end: Position { line: 57, column: 36, }, }, }, ), ], }, ), span: Span { start: Position { line: 57, column: 14, }, end: Position { line: 57, column: 36, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 58, column: 7, }, end: Position { line: 58, column: 14, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 58, column: 17, }, end: Position { line: 58, column: 21, }, }, }, ), }, ), ], span: Span { start: Position { line: 55, column: 27, }, end: Position { line: 59, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "debug-port", span: Span { start: Position { line: 60, column: 5, }, end: Position { line: 60, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 60, column: 18, }, end: Position { line: 60, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 61, column: 7, }, end: Position { line: 61, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 61, column: 21, }, end: Position { line: 61, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 61, column: 25, }, end: Position { line: 61, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Port to bind the debug server to.", span: Span { start: Position { line: 61, column: 32, }, end: Position { line: 61, column: 65, }, }, }, ), ], span: Span { start: Position { line: 61, column: 31, }, end: Position { line: 61, column: 66, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 62, column: 7, }, end: Position { line: 62, column: 11, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 62, column: 19, }, end: Position { line: 62, column: 24, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 62, column: 26, }, end: Position { line: 62, column: 32, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 62, column: 33, }, end: Position { line: 62, column: 36, }, }, }, ), ], }, ), span: Span { start: Position { line: 62, column: 14, }, end: Position { line: 62, column: 36, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 63, column: 7, }, end: Position { line: 63, column: 14, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 63, column: 17, }, end: Position { line: 63, column: 21, }, }, }, ), }, ), ], span: Span { start: Position { line: 60, column: 27, }, end: Position { line: 64, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "connection-string", span: Span { start: Position { line: 65, column: 5, }, end: Position { line: 65, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 65, column: 25, }, end: Position { line: 65, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 66, column: 7, }, end: Position { line: 66, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 66, column: 21, }, end: Position { line: 66, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 66, column: 25, }, end: Position { line: 66, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "SQLAlchemy connection string for the database.", span: Span { start: Position { line: 66, column: 32, }, end: Position { line: 66, column: 78, }, }, }, ), ], span: Span { start: Position { line: 66, column: 31, }, end: Position { line: 66, column: 79, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 67, column: 7, }, end: Position { line: 67, column: 11, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 67, column: 14, }, end: Position { line: 67, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 67, column: 20, }, end: Position { line: 67, column: 23, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 68, column: 7, }, end: Position { line: 68, column: 14, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "postgresql:///localhost?user=", span: Span { start: Position { line: 68, column: 18, }, end: Position { line: 68, column: 53, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "srv", span: Span { start: Position { line: 68, column: 49, }, end: Position { line: 68, column: 52, }, }, }, ), }, ), Raw( PartRaw { content: "srht&host=/run/postgresql", span: Span { start: Position { line: 68, column: 18, }, end: Position { line: 68, column: 78, }, }, }, ), ], span: Span { start: Position { line: 68, column: 17, }, end: Position { line: 68, column: 79, }, }, }, ), }, ), ], span: Span { start: Position { line: 65, column: 34, }, end: Position { line: 69, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "migrate-on-upgrade", span: Span { start: Position { line: 70, column: 5, }, end: Position { line: 70, column: 23, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 70, column: 26, }, end: Position { line: 70, column: 40, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 70, column: 42, }, end: Position { line: 70, column: 45, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 70, column: 46, }, end: Position { line: 70, column: 51, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "automatic migrations on package upgrade", span: Span { start: Position { line: 70, column: 53, }, end: Position { line: 70, column: 92, }, }, }, ), ], span: Span { start: Position { line: 70, column: 52, }, end: Position { line: 70, column: 93, }, }, }, ), ], }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 70, column: 100, }, end: Position { line: 70, column: 107, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 70, column: 110, }, end: Position { line: 70, column: 114, }, }, }, ), }, ), ], span: Span { start: Position { line: 70, column: 98, }, end: Position { line: 70, column: 117, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "oauth-client-id", span: Span { start: Position { line: 71, column: 5, }, end: Position { line: 71, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 71, column: 23, }, end: Position { line: 71, column: 31, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 72, column: 7, }, end: Position { line: 72, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 72, column: 21, }, end: Position { line: 72, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 72, column: 25, }, end: Position { line: 72, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "srv", span: Span { start: Position { line: 72, column: 34, }, end: Position { line: 72, column: 37, }, }, }, ), }, ), Raw( PartRaw { content: ".sr.ht's OAuth client id for meta.sr.ht.", span: Span { start: Position { line: 72, column: 32, }, end: Position { line: 72, column: 78, }, }, }, ), ], span: Span { start: Position { line: 72, column: 31, }, end: Position { line: 72, column: 79, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 73, column: 7, }, end: Position { line: 73, column: 11, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 73, column: 14, }, end: Position { line: 73, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 73, column: 20, }, end: Position { line: 73, column: 23, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 71, column: 32, }, end: Position { line: 74, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "oauth-client-secret", span: Span { start: Position { line: 75, column: 5, }, end: Position { line: 75, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 75, column: 27, }, end: Position { line: 75, column: 35, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 76, column: 7, }, end: Position { line: 76, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 76, column: 21, }, end: Position { line: 76, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 76, column: 25, }, end: Position { line: 76, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "srv", span: Span { start: Position { line: 76, column: 34, }, end: Position { line: 76, column: 37, }, }, }, ), }, ), Raw( PartRaw { content: ".sr.ht's OAuth client secret for meta.sr.ht.", span: Span { start: Position { line: 76, column: 32, }, end: Position { line: 76, column: 82, }, }, }, ), ], span: Span { start: Position { line: 76, column: 31, }, end: Position { line: 76, column: 83, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 77, column: 7, }, end: Position { line: 77, column: 11, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 77, column: 14, }, end: Position { line: 77, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 77, column: 20, }, end: Position { line: 77, column: 24, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "apply", span: Span { start: Position { line: 78, column: 7, }, end: Position { line: 78, column: 12, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "s", }, ), body: BinaryOperation( BinaryOperation { left: String( String_ { parts: [ Raw( PartRaw { content: "<", span: Span { start: Position { line: 78, column: 19, }, end: Position { line: 78, column: 20, }, }, }, ), ], span: Span { start: Position { line: 78, column: 18, }, end: Position { line: 78, column: 21, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 78, column: 24, }, end: Position { line: 78, column: 32, }, }, }, ), arguments: [ Identifier( Identifier { id: "s", span: Span { start: Position { line: 78, column: 33, }, end: Position { line: 78, column: 34, }, }, }, ), ], }, ), }, ), span: Span { start: Position { line: 78, column: 15, }, end: Position { line: 78, column: 34, }, }, }, ), }, ), ], span: Span { start: Position { line: 75, column: 36, }, end: Position { line: 79, column: 6, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 48, column: 32, }, end: Position { line: 80, column: 4, }, }, }, ), span: Span { start: Position { line: 48, column: 27, }, end: Position { line: 80, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "python", span: Span { start: Position { line: 83, column: 3, }, end: Position { line: 83, column: 9, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 83, column: 12, }, end: Position { line: 83, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 83, column: 17, }, end: Position { line: 83, column: 26, }, }, }, ), Raw( PartRaw { content: "python", span: Span { start: Position { line: 83, column: 27, }, end: Position { line: 83, column: 33, }, }, }, ), Raw( PartRaw { content: "withPackages", span: Span { start: Position { line: 83, column: 34, }, end: Position { line: 83, column: 46, }, }, }, ), ], default: None, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "ps", }, ), body: With( With { expression: Identifier( Identifier { id: "ps", span: Span { start: Position { line: 83, column: 57, }, end: Position { line: 83, column: 59, }, }, }, ), target: List( List { elements: [ Identifier( Identifier { id: "gunicorn", span: Span { start: Position { line: 84, column: 5, }, end: Position { line: 84, column: 13, }, }, }, ), Identifier( Identifier { id: "eventlet", span: Span { start: Position { line: 85, column: 5, }, end: Position { line: 85, column: 13, }, }, }, ), Identifier( Identifier { id: "flower", span: Span { start: Position { line: 87, column: 5, }, end: Position { line: 87, column: 11, }, }, }, ), Identifier( Identifier { id: "srht", span: Span { start: Position { line: 89, column: 5, }, end: Position { line: 89, column: 9, }, }, }, ), Identifier( Identifier { id: "buildsrht", span: Span { start: Position { line: 90, column: 5, }, end: Position { line: 90, column: 14, }, }, }, ), Identifier( Identifier { id: "dispatchsrht", span: Span { start: Position { line: 91, column: 5, }, end: Position { line: 91, column: 17, }, }, }, ), Identifier( Identifier { id: "gitsrht", span: Span { start: Position { line: 92, column: 5, }, end: Position { line: 92, column: 12, }, }, }, ), Identifier( Identifier { id: "hgsrht", span: Span { start: Position { line: 93, column: 5, }, end: Position { line: 93, column: 11, }, }, }, ), Identifier( Identifier { id: "hubsrht", span: Span { start: Position { line: 94, column: 5, }, end: Position { line: 94, column: 12, }, }, }, ), Identifier( Identifier { id: "listssrht", span: Span { start: Position { line: 95, column: 5, }, end: Position { line: 95, column: 14, }, }, }, ), Identifier( Identifier { id: "mansrht", span: Span { start: Position { line: 96, column: 5, }, end: Position { line: 96, column: 12, }, }, }, ), Identifier( Identifier { id: "metasrht", span: Span { start: Position { line: 97, column: 5, }, end: Position { line: 97, column: 13, }, }, }, ), Identifier( Identifier { id: "pastesrht", span: Span { start: Position { line: 100, column: 5, }, end: Position { line: 100, column: 14, }, }, }, ), Identifier( Identifier { id: "todosrht", span: Span { start: Position { line: 101, column: 5, }, end: Position { line: 101, column: 13, }, }, }, ), ], span: Span { start: Position { line: 83, column: 61, }, end: Position { line: 102, column: 4, }, }, }, ), span: Span { start: Position { line: 83, column: 52, }, end: Position { line: 102, column: 4, }, }, }, ), span: Span { start: Position { line: 83, column: 48, }, end: Position { line: 102, column: 4, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "mkOptionNullOrStr", span: Span { start: Position { line: 103, column: 3, }, end: Position { line: 103, column: 20, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "description", }, ), body: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 103, column: 36, }, end: Position { line: 103, column: 44, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 104, column: 5, }, end: Position { line: 104, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 104, column: 19, }, end: Position { line: 104, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 104, column: 23, }, end: Position { line: 104, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ Identifier( Identifier { id: "description", span: Span { start: Position { line: 104, column: 29, }, end: Position { line: 104, column: 40, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 105, column: 5, }, end: Position { line: 105, column: 9, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 105, column: 17, }, end: Position { line: 105, column: 22, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 105, column: 24, }, end: Position { line: 105, column: 30, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 105, column: 31, }, end: Position { line: 105, column: 34, }, }, }, ), ], }, ), span: Span { start: Position { line: 105, column: 12, }, end: Position { line: 105, column: 34, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 106, column: 5, }, end: Position { line: 106, column: 12, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 106, column: 15, }, end: Position { line: 106, column: 19, }, }, }, ), }, ), ], span: Span { start: Position { line: 103, column: 45, }, end: Position { line: 107, column: 4, }, }, }, ), ], }, ), span: Span { start: Position { line: 103, column: 23, }, end: Position { line: 107, column: 4, }, }, }, ), }, ), ], target: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 110, column: 3, }, end: Position { line: 110, column: 10, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 110, column: 11, }, end: Position { line: 110, column: 19, }, }, }, ), Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 110, column: 20, }, end: Position { line: 110, column: 29, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 111, column: 5, }, end: Position { line: 111, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 111, column: 14, }, end: Position { line: 111, column: 28, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 111, column: 30, }, end: Position { line: 111, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 111, column: 34, }, end: Position { line: 111, column: 39, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "sourcehut - git hosting, continuous integration, mailing list, ticket tracking,\ntask dispatching, wiki and account management services\n", span: Span { start: Position { line: 112, column: 1, }, end: Position { line: 114, column: 5, }, }, }, ), ], span: Span { start: Position { line: 111, column: 40, }, end: Position { line: 114, column: 7, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 116, column: 5, }, end: Position { line: 116, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 116, column: 16, }, end: Position { line: 116, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 117, column: 7, }, end: Position { line: 117, column: 11, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 117, column: 19, }, end: Position { line: 117, column: 24, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "listOf", span: Span { start: Position { line: 117, column: 26, }, end: Position { line: 117, column: 32, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "enum", span: Span { start: Position { line: 117, column: 34, }, end: Position { line: 117, column: 38, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 118, column: 12, }, end: Position { line: 118, column: 18, }, }, }, ), ], span: Span { start: Position { line: 118, column: 11, }, end: Position { line: 118, column: 19, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "dispatch", span: Span { start: Position { line: 118, column: 21, }, end: Position { line: 118, column: 29, }, }, }, ), ], span: Span { start: Position { line: 118, column: 20, }, end: Position { line: 118, column: 30, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 118, column: 32, }, end: Position { line: 118, column: 35, }, }, }, ), ], span: Span { start: Position { line: 118, column: 31, }, end: Position { line: 118, column: 36, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 118, column: 38, }, end: Position { line: 118, column: 40, }, }, }, ), ], span: Span { start: Position { line: 118, column: 37, }, end: Position { line: 118, column: 41, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "hub", span: Span { start: Position { line: 118, column: 43, }, end: Position { line: 118, column: 46, }, }, }, ), ], span: Span { start: Position { line: 118, column: 42, }, end: Position { line: 118, column: 47, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "lists", span: Span { start: Position { line: 118, column: 49, }, end: Position { line: 118, column: 54, }, }, }, ), ], span: Span { start: Position { line: 118, column: 48, }, end: Position { line: 118, column: 55, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "man", span: Span { start: Position { line: 118, column: 57, }, end: Position { line: 118, column: 60, }, }, }, ), ], span: Span { start: Position { line: 118, column: 56, }, end: Position { line: 118, column: 61, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "meta", span: Span { start: Position { line: 118, column: 63, }, end: Position { line: 118, column: 67, }, }, }, ), ], span: Span { start: Position { line: 118, column: 62, }, end: Position { line: 118, column: 68, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "pages", span: Span { start: Position { line: 118, column: 70, }, end: Position { line: 118, column: 75, }, }, }, ), ], span: Span { start: Position { line: 118, column: 69, }, end: Position { line: 118, column: 76, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "paste", span: Span { start: Position { line: 118, column: 78, }, end: Position { line: 118, column: 83, }, }, }, ), ], span: Span { start: Position { line: 118, column: 77, }, end: Position { line: 118, column: 84, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "todo", span: Span { start: Position { line: 118, column: 86, }, end: Position { line: 118, column: 90, }, }, }, ), ], span: Span { start: Position { line: 118, column: 85, }, end: Position { line: 118, column: 91, }, }, }, ), ], span: Span { start: Position { line: 118, column: 9, }, end: Position { line: 118, column: 93, }, }, }, ), ], }, ), ], }, ), span: Span { start: Position { line: 117, column: 14, }, end: Position { line: 118, column: 94, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 119, column: 7, }, end: Position { line: 119, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "locally enabled services", span: Span { start: Position { line: 119, column: 22, }, end: Position { line: 119, column: 46, }, }, }, ), ], span: Span { start: Position { line: 119, column: 21, }, end: Position { line: 119, column: 47, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 120, column: 7, }, end: Position { line: 120, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 120, column: 21, }, end: Position { line: 120, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 120, column: 25, }, end: Position { line: 120, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Services that may be displayed as links in the title bar of the Web interface.\n", span: Span { start: Position { line: 121, column: 1, }, end: Position { line: 122, column: 7, }, }, }, ), ], span: Span { start: Position { line: 120, column: 31, }, end: Position { line: 122, column: 9, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 116, column: 25, }, end: Position { line: 123, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "listenAddress", span: Span { start: Position { line: 125, column: 5, }, end: Position { line: 125, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 125, column: 21, }, end: Position { line: 125, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 126, column: 7, }, end: Position { line: 126, column: 11, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 126, column: 14, }, end: Position { line: 126, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 126, column: 20, }, end: Position { line: 126, column: 23, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 127, column: 7, }, end: Position { line: 127, column: 14, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "localhost", span: Span { start: Position { line: 127, column: 18, }, end: Position { line: 127, column: 27, }, }, }, ), ], span: Span { start: Position { line: 127, column: 17, }, end: Position { line: 127, column: 28, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 128, column: 7, }, end: Position { line: 128, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 128, column: 21, }, end: Position { line: 128, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 128, column: 25, }, end: Position { line: 128, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Address to bind to.", span: Span { start: Position { line: 128, column: 32, }, end: Position { line: 128, column: 51, }, }, }, ), ], span: Span { start: Position { line: 128, column: 31, }, end: Position { line: 128, column: 52, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 125, column: 30, }, end: Position { line: 129, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "python", span: Span { start: Position { line: 131, column: 5, }, end: Position { line: 131, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 131, column: 14, }, end: Position { line: 131, column: 22, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "internal", span: Span { start: Position { line: 132, column: 7, }, end: Position { line: 132, column: 15, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 132, column: 18, }, end: Position { line: 132, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 133, column: 7, }, end: Position { line: 133, column: 11, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 133, column: 14, }, end: Position { line: 133, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "package", span: Span { start: Position { line: 133, column: 20, }, end: Position { line: 133, column: 27, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 134, column: 7, }, end: Position { line: 134, column: 14, }, }, }, ), ], to: Identifier( Identifier { id: "python", span: Span { start: Position { line: 134, column: 17, }, end: Position { line: 134, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 135, column: 7, }, end: Position { line: 135, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 135, column: 21, }, end: Position { line: 135, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 135, column: 25, }, end: Position { line: 135, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "The python package to use. It should contain references to the *srht modules and also\ngunicorn.\n", span: Span { start: Position { line: 136, column: 1, }, end: Position { line: 138, column: 7, }, }, }, ), ], span: Span { start: Position { line: 135, column: 31, }, end: Position { line: 138, column: 9, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 131, column: 23, }, end: Position { line: 139, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "minio", span: Span { start: Position { line: 141, column: 5, }, end: Position { line: 141, column: 10, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 142, column: 7, }, end: Position { line: 142, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 142, column: 16, }, end: Position { line: 142, column: 30, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 142, column: 32, }, end: Position { line: 142, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 142, column: 36, }, end: Position { line: 142, column: 41, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "local minio integration", span: Span { start: Position { line: 142, column: 44, }, end: Position { line: 142, column: 67, }, }, }, ), ], span: Span { start: Position { line: 142, column: 42, }, end: Position { line: 142, column: 69, }, }, }, ), ], }, ), ], }, ), }, ), ], span: Span { start: Position { line: 141, column: 13, }, end: Position { line: 143, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 145, column: 5, }, end: Position { line: 145, column: 10, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 146, column: 7, }, end: Position { line: 146, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 146, column: 16, }, end: Position { line: 146, column: 30, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 146, column: 32, }, end: Position { line: 146, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 146, column: 36, }, end: Position { line: 146, column: 41, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "local nginx integration", span: Span { start: Position { line: 146, column: 44, }, end: Position { line: 146, column: 67, }, }, }, ), ], span: Span { start: Position { line: 146, column: 42, }, end: Position { line: 146, column: 69, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "virtualHost", span: Span { start: Position { line: 147, column: 7, }, end: Position { line: 147, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 147, column: 21, }, end: Position { line: 147, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 148, column: 9, }, end: Position { line: 148, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 148, column: 16, }, end: Position { line: 148, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "attrs", span: Span { start: Position { line: 148, column: 22, }, end: Position { line: 148, column: 27, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 149, column: 9, }, end: Position { line: 149, column: 16, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 149, column: 19, }, end: Position { line: 149, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 150, column: 9, }, end: Position { line: 150, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 150, column: 23, }, end: Position { line: 150, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 150, column: 27, }, end: Position { line: 150, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Virtual-host configuration merged with all Sourcehut's virtual-hosts.", span: Span { start: Position { line: 150, column: 34, }, end: Position { line: 150, column: 103, }, }, }, ), ], span: Span { start: Position { line: 150, column: 33, }, end: Position { line: 150, column: 104, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 147, column: 30, }, end: Position { line: 151, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 145, column: 13, }, end: Position { line: 152, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "postfix", span: Span { start: Position { line: 154, column: 5, }, end: Position { line: 154, column: 12, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 155, column: 7, }, end: Position { line: 155, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 155, column: 16, }, end: Position { line: 155, column: 30, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 155, column: 32, }, end: Position { line: 155, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 155, column: 36, }, end: Position { line: 155, column: 41, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "local postfix integration", span: Span { start: Position { line: 155, column: 44, }, end: Position { line: 155, column: 69, }, }, }, ), ], span: Span { start: Position { line: 155, column: 42, }, end: Position { line: 155, column: 71, }, }, }, ), ], }, ), ], }, ), }, ), ], span: Span { start: Position { line: 154, column: 15, }, end: Position { line: 156, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "postgresql", span: Span { start: Position { line: 158, column: 5, }, end: Position { line: 158, column: 15, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 159, column: 7, }, end: Position { line: 159, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 159, column: 16, }, end: Position { line: 159, column: 30, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 159, column: 32, }, end: Position { line: 159, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 159, column: 36, }, end: Position { line: 159, column: 41, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "local postgresql integration", span: Span { start: Position { line: 159, column: 44, }, end: Position { line: 159, column: 72, }, }, }, ), ], span: Span { start: Position { line: 159, column: 42, }, end: Position { line: 159, column: 74, }, }, }, ), ], }, ), ], }, ), }, ), ], span: Span { start: Position { line: 158, column: 18, }, end: Position { line: 160, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "redis", span: Span { start: Position { line: 162, column: 5, }, end: Position { line: 162, column: 10, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 163, column: 7, }, end: Position { line: 163, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 163, column: 16, }, end: Position { line: 163, column: 30, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 163, column: 32, }, end: Position { line: 163, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 163, column: 36, }, end: Position { line: 163, column: 41, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "local redis integration in a dedicated redis-server", span: Span { start: Position { line: 163, column: 44, }, end: Position { line: 163, column: 95, }, }, }, ), ], span: Span { start: Position { line: 163, column: 42, }, end: Position { line: 163, column: 97, }, }, }, ), ], }, ), ], }, ), }, ), ], span: Span { start: Position { line: 162, column: 13, }, end: Position { line: 164, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 166, column: 5, }, end: Position { line: 166, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 166, column: 16, }, end: Position { line: 166, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 167, column: 7, }, end: Position { line: 167, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 167, column: 14, }, end: Position { line: 167, column: 17, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "types", span: Span { start: Position { line: 167, column: 18, }, end: Position { line: 167, column: 23, }, }, }, ), Raw( PartRaw { content: "submodule", span: Span { start: Position { line: 167, column: 24, }, end: Position { line: 167, column: 33, }, }, }, ), ], default: None, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "freeformType", span: Span { start: Position { line: 168, column: 9, }, end: Position { line: 168, column: 21, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "settingsFormat", span: Span { start: Position { line: 168, column: 24, }, end: Position { line: 168, column: 38, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 168, column: 39, }, end: Position { line: 168, column: 43, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 169, column: 9, }, end: Position { line: 169, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "sr.ht", span: Span { start: Position { line: 169, column: 18, }, end: Position { line: 169, column: 23, }, }, }, ), ], span: Span { start: Position { line: 169, column: 17, }, end: Position { line: 169, column: 24, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "global-domain", span: Span { start: Position { line: 170, column: 11, }, end: Position { line: 170, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 170, column: 27, }, end: Position { line: 170, column: 35, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 171, column: 13, }, end: Position { line: 171, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 171, column: 27, }, end: Position { line: 171, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 171, column: 31, }, end: Position { line: 171, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Global domain name.", span: Span { start: Position { line: 171, column: 38, }, end: Position { line: 171, column: 57, }, }, }, ), ], span: Span { start: Position { line: 171, column: 37, }, end: Position { line: 171, column: 58, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 172, column: 13, }, end: Position { line: 172, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 172, column: 20, }, end: Position { line: 172, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 172, column: 26, }, end: Position { line: 172, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 173, column: 13, }, end: Position { line: 173, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "example.com", span: Span { start: Position { line: 173, column: 24, }, end: Position { line: 173, column: 35, }, }, }, ), ], span: Span { start: Position { line: 173, column: 23, }, end: Position { line: 173, column: 36, }, }, }, ), }, ), ], span: Span { start: Position { line: 170, column: 36, }, end: Position { line: 174, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "environment", span: Span { start: Position { line: 175, column: 11, }, end: Position { line: 175, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 175, column: 25, }, end: Position { line: 175, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 176, column: 13, }, end: Position { line: 176, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 176, column: 27, }, end: Position { line: 176, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 176, column: 31, }, end: Position { line: 176, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Values other than \"production\" adds a banner to each page.", span: Span { start: Position { line: 176, column: 38, }, end: Position { line: 176, column: 98, }, }, }, ), ], span: Span { start: Position { line: 176, column: 37, }, end: Position { line: 176, column: 99, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 177, column: 13, }, end: Position { line: 177, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 177, column: 20, }, end: Position { line: 177, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enum", span: Span { start: Position { line: 177, column: 26, }, end: Position { line: 177, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "development", span: Span { start: Position { line: 177, column: 34, }, end: Position { line: 177, column: 45, }, }, }, ), ], span: Span { start: Position { line: 177, column: 33, }, end: Position { line: 177, column: 46, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "production", span: Span { start: Position { line: 177, column: 48, }, end: Position { line: 177, column: 58, }, }, }, ), ], span: Span { start: Position { line: 177, column: 47, }, end: Position { line: 177, column: 59, }, }, }, ), ], span: Span { start: Position { line: 177, column: 31, }, end: Position { line: 177, column: 61, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 178, column: 13, }, end: Position { line: 178, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "development", span: Span { start: Position { line: 178, column: 24, }, end: Position { line: 178, column: 35, }, }, }, ), ], span: Span { start: Position { line: 178, column: 23, }, end: Position { line: 178, column: 36, }, }, }, ), }, ), ], span: Span { start: Position { line: 175, column: 34, }, end: Position { line: 179, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "network-key", span: Span { start: Position { line: 180, column: 11, }, end: Position { line: 180, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 180, column: 25, }, end: Position { line: 180, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 181, column: 13, }, end: Position { line: 181, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 181, column: 27, }, end: Position { line: 181, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 181, column: 31, }, end: Position { line: 181, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "An absolute file path (which should be outside the Nix-store)\nto a secret key to encrypt internal messages with. Use `srht-keygen network` to\ngenerate this key. It must be consistent between all services and nodes.\n", span: Span { start: Position { line: 182, column: 1, }, end: Position { line: 185, column: 13, }, }, }, ), ], span: Span { start: Position { line: 181, column: 37, }, end: Position { line: 185, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 186, column: 13, }, end: Position { line: 186, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 186, column: 20, }, end: Position { line: 186, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 186, column: 26, }, end: Position { line: 186, column: 30, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "apply", span: Span { start: Position { line: 187, column: 13, }, end: Position { line: 187, column: 18, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "s", }, ), body: BinaryOperation( BinaryOperation { left: String( String_ { parts: [ Raw( PartRaw { content: "<", span: Span { start: Position { line: 187, column: 25, }, end: Position { line: 187, column: 26, }, }, }, ), ], span: Span { start: Position { line: 187, column: 24, }, end: Position { line: 187, column: 27, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 187, column: 30, }, end: Position { line: 187, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "s", span: Span { start: Position { line: 187, column: 39, }, end: Position { line: 187, column: 40, }, }, }, ), ], }, ), }, ), span: Span { start: Position { line: 187, column: 21, }, end: Position { line: 187, column: 40, }, }, }, ), }, ), ], span: Span { start: Position { line: 180, column: 34, }, end: Position { line: 188, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "owner-email", span: Span { start: Position { line: 189, column: 11, }, end: Position { line: 189, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 189, column: 25, }, end: Position { line: 189, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 190, column: 13, }, end: Position { line: 190, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 190, column: 27, }, end: Position { line: 190, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 190, column: 31, }, end: Position { line: 190, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Owner's email.", span: Span { start: Position { line: 190, column: 38, }, end: Position { line: 190, column: 52, }, }, }, ), ], span: Span { start: Position { line: 190, column: 37, }, end: Position { line: 190, column: 53, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 191, column: 13, }, end: Position { line: 191, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 191, column: 20, }, end: Position { line: 191, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 191, column: 26, }, end: Position { line: 191, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 192, column: 13, }, end: Position { line: 192, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "contact@example.com", span: Span { start: Position { line: 192, column: 24, }, end: Position { line: 192, column: 43, }, }, }, ), ], span: Span { start: Position { line: 192, column: 23, }, end: Position { line: 192, column: 44, }, }, }, ), }, ), ], span: Span { start: Position { line: 189, column: 34, }, end: Position { line: 193, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "owner-name", span: Span { start: Position { line: 194, column: 11, }, end: Position { line: 194, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 194, column: 24, }, end: Position { line: 194, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 195, column: 13, }, end: Position { line: 195, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 195, column: 27, }, end: Position { line: 195, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 195, column: 31, }, end: Position { line: 195, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Owner's name.", span: Span { start: Position { line: 195, column: 38, }, end: Position { line: 195, column: 51, }, }, }, ), ], span: Span { start: Position { line: 195, column: 37, }, end: Position { line: 195, column: 52, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 196, column: 13, }, end: Position { line: 196, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 196, column: 20, }, end: Position { line: 196, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 196, column: 26, }, end: Position { line: 196, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 197, column: 13, }, end: Position { line: 197, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "John Doe", span: Span { start: Position { line: 197, column: 24, }, end: Position { line: 197, column: 32, }, }, }, ), ], span: Span { start: Position { line: 197, column: 23, }, end: Position { line: 197, column: 33, }, }, }, ), }, ), ], span: Span { start: Position { line: 194, column: 33, }, end: Position { line: 198, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "site-blurb", span: Span { start: Position { line: 199, column: 11, }, end: Position { line: 199, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 199, column: 24, }, end: Position { line: 199, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 200, column: 13, }, end: Position { line: 200, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 200, column: 27, }, end: Position { line: 200, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 200, column: 31, }, end: Position { line: 200, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Blurb for your site.", span: Span { start: Position { line: 200, column: 38, }, end: Position { line: 200, column: 58, }, }, }, ), ], span: Span { start: Position { line: 200, column: 37, }, end: Position { line: 200, column: 59, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 201, column: 13, }, end: Position { line: 201, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 201, column: 20, }, end: Position { line: 201, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 201, column: 26, }, end: Position { line: 201, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 202, column: 13, }, end: Position { line: 202, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "the hacker's forge", span: Span { start: Position { line: 202, column: 24, }, end: Position { line: 202, column: 42, }, }, }, ), ], span: Span { start: Position { line: 202, column: 23, }, end: Position { line: 202, column: 43, }, }, }, ), }, ), ], span: Span { start: Position { line: 199, column: 33, }, end: Position { line: 203, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "site-info", span: Span { start: Position { line: 204, column: 11, }, end: Position { line: 204, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 204, column: 23, }, end: Position { line: 204, column: 31, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 205, column: 13, }, end: Position { line: 205, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 205, column: 27, }, end: Position { line: 205, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 205, column: 31, }, end: Position { line: 205, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "The top-level info page for your site.", span: Span { start: Position { line: 205, column: 38, }, end: Position { line: 205, column: 76, }, }, }, ), ], span: Span { start: Position { line: 205, column: 37, }, end: Position { line: 205, column: 77, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 206, column: 13, }, end: Position { line: 206, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 206, column: 20, }, end: Position { line: 206, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 206, column: 26, }, end: Position { line: 206, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 207, column: 13, }, end: Position { line: 207, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "https://sourcehut.org", span: Span { start: Position { line: 207, column: 24, }, end: Position { line: 207, column: 45, }, }, }, ), ], span: Span { start: Position { line: 207, column: 23, }, end: Position { line: 207, column: 46, }, }, }, ), }, ), ], span: Span { start: Position { line: 204, column: 32, }, end: Position { line: 208, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "service-key", span: Span { start: Position { line: 209, column: 11, }, end: Position { line: 209, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 209, column: 25, }, end: Position { line: 209, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 210, column: 13, }, end: Position { line: 210, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 210, column: 27, }, end: Position { line: 210, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 210, column: 31, }, end: Position { line: 210, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "An absolute file path (which should be outside the Nix-store)\nto a key used for encrypting session cookies. Use `srht-keygen service` to\ngenerate the service key. This must be shared between each node of the same\nservice (e.g. git1.sr.ht and git2.sr.ht), but different services may use\ndifferent keys. If you configure all of your services with the same\nconfig.ini, you may use the same service-key for all of them.\n", span: Span { start: Position { line: 211, column: 1, }, end: Position { line: 217, column: 13, }, }, }, ), ], span: Span { start: Position { line: 210, column: 37, }, end: Position { line: 217, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 218, column: 13, }, end: Position { line: 218, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 218, column: 20, }, end: Position { line: 218, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 218, column: 26, }, end: Position { line: 218, column: 30, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "apply", span: Span { start: Position { line: 219, column: 13, }, end: Position { line: 219, column: 18, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "s", }, ), body: BinaryOperation( BinaryOperation { left: String( String_ { parts: [ Raw( PartRaw { content: "<", span: Span { start: Position { line: 219, column: 25, }, end: Position { line: 219, column: 26, }, }, }, ), ], span: Span { start: Position { line: 219, column: 24, }, end: Position { line: 219, column: 27, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 219, column: 30, }, end: Position { line: 219, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "s", span: Span { start: Position { line: 219, column: 39, }, end: Position { line: 219, column: 40, }, }, }, ), ], }, ), }, ), span: Span { start: Position { line: 219, column: 21, }, end: Position { line: 219, column: 40, }, }, }, ), }, ), ], span: Span { start: Position { line: 209, column: 34, }, end: Position { line: 220, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "site-name", span: Span { start: Position { line: 221, column: 11, }, end: Position { line: 221, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 221, column: 23, }, end: Position { line: 221, column: 31, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 222, column: 13, }, end: Position { line: 222, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 222, column: 27, }, end: Position { line: 222, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 222, column: 31, }, end: Position { line: 222, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "The name of your network of sr.ht-based sites.", span: Span { start: Position { line: 222, column: 38, }, end: Position { line: 222, column: 84, }, }, }, ), ], span: Span { start: Position { line: 222, column: 37, }, end: Position { line: 222, column: 85, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 223, column: 13, }, end: Position { line: 223, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 223, column: 20, }, end: Position { line: 223, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 223, column: 26, }, end: Position { line: 223, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 224, column: 13, }, end: Position { line: 224, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 224, column: 24, }, end: Position { line: 224, column: 33, }, }, }, ), ], span: Span { start: Position { line: 224, column: 23, }, end: Position { line: 224, column: 34, }, }, }, ), }, ), ], span: Span { start: Position { line: 221, column: 32, }, end: Position { line: 225, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "source-url", span: Span { start: Position { line: 226, column: 11, }, end: Position { line: 226, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 226, column: 24, }, end: Position { line: 226, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 227, column: 13, }, end: Position { line: 227, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 227, column: 27, }, end: Position { line: 227, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 227, column: 31, }, end: Position { line: 227, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "The source code for your fork of sr.ht.", span: Span { start: Position { line: 227, column: 38, }, end: Position { line: 227, column: 77, }, }, }, ), ], span: Span { start: Position { line: 227, column: 37, }, end: Position { line: 227, column: 78, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 228, column: 13, }, end: Position { line: 228, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 228, column: 20, }, end: Position { line: 228, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 228, column: 26, }, end: Position { line: 228, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 229, column: 13, }, end: Position { line: 229, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "https://git.sr.ht/~sircmpwn/srht", span: Span { start: Position { line: 229, column: 24, }, end: Position { line: 229, column: 56, }, }, }, ), ], span: Span { start: Position { line: 229, column: 23, }, end: Position { line: 229, column: 57, }, }, }, ), }, ), ], span: Span { start: Position { line: 226, column: 33, }, end: Position { line: 230, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 169, column: 27, }, end: Position { line: 231, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 232, column: 9, }, end: Position { line: 232, column: 16, }, }, }, ), Raw( PartRaw { content: "mail", span: Span { start: Position { line: 232, column: 17, }, end: Position { line: 232, column: 21, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "smtp-host", span: Span { start: Position { line: 233, column: 11, }, end: Position { line: 233, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOptionNullOrStr", span: Span { start: Position { line: 233, column: 23, }, end: Position { line: 233, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Outgoing SMTP host.", span: Span { start: Position { line: 233, column: 42, }, end: Position { line: 233, column: 61, }, }, }, ), ], span: Span { start: Position { line: 233, column: 41, }, end: Position { line: 233, column: 62, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "smtp-port", span: Span { start: Position { line: 234, column: 11, }, end: Position { line: 234, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 234, column: 23, }, end: Position { line: 234, column: 31, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 235, column: 13, }, end: Position { line: 235, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 235, column: 27, }, end: Position { line: 235, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 235, column: 31, }, end: Position { line: 235, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Outgoing SMTP port.", span: Span { start: Position { line: 235, column: 38, }, end: Position { line: 235, column: 57, }, }, }, ), ], span: Span { start: Position { line: 235, column: 37, }, end: Position { line: 235, column: 58, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 236, column: 13, }, end: Position { line: 236, column: 17, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 236, column: 25, }, end: Position { line: 236, column: 30, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 236, column: 32, }, end: Position { line: 236, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "port", span: Span { start: Position { line: 236, column: 39, }, end: Position { line: 236, column: 43, }, }, }, ), ], }, ), span: Span { start: Position { line: 236, column: 20, }, end: Position { line: 236, column: 43, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 237, column: 13, }, end: Position { line: 237, column: 20, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 237, column: 23, }, end: Position { line: 237, column: 27, }, }, }, ), }, ), ], span: Span { start: Position { line: 234, column: 32, }, end: Position { line: 238, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "smtp-user", span: Span { start: Position { line: 239, column: 11, }, end: Position { line: 239, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOptionNullOrStr", span: Span { start: Position { line: 239, column: 23, }, end: Position { line: 239, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Outgoing SMTP user.", span: Span { start: Position { line: 239, column: 42, }, end: Position { line: 239, column: 61, }, }, }, ), ], span: Span { start: Position { line: 239, column: 41, }, end: Position { line: 239, column: 62, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "smtp-password", span: Span { start: Position { line: 240, column: 11, }, end: Position { line: 240, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOptionNullOrStr", span: Span { start: Position { line: 240, column: 27, }, end: Position { line: 240, column: 44, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Outgoing SMTP password.", span: Span { start: Position { line: 240, column: 46, }, end: Position { line: 240, column: 69, }, }, }, ), ], span: Span { start: Position { line: 240, column: 45, }, end: Position { line: 240, column: 70, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "smtp-from", span: Span { start: Position { line: 241, column: 11, }, end: Position { line: 241, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 241, column: 23, }, end: Position { line: 241, column: 31, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 242, column: 13, }, end: Position { line: 242, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 242, column: 20, }, end: Position { line: 242, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 242, column: 26, }, end: Position { line: 242, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 243, column: 13, }, end: Position { line: 243, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 243, column: 27, }, end: Position { line: 243, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 243, column: 31, }, end: Position { line: 243, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Outgoing SMTP FROM.", span: Span { start: Position { line: 243, column: 38, }, end: Position { line: 243, column: 57, }, }, }, ), ], span: Span { start: Position { line: 243, column: 37, }, end: Position { line: 243, column: 58, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 241, column: 32, }, end: Position { line: 244, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "error-to", span: Span { start: Position { line: 245, column: 11, }, end: Position { line: 245, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOptionNullOrStr", span: Span { start: Position { line: 245, column: 22, }, end: Position { line: 245, column: 39, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Address receiving application exceptions", span: Span { start: Position { line: 245, column: 41, }, end: Position { line: 245, column: 81, }, }, }, ), ], span: Span { start: Position { line: 245, column: 40, }, end: Position { line: 245, column: 82, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "error-from", span: Span { start: Position { line: 246, column: 11, }, end: Position { line: 246, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOptionNullOrStr", span: Span { start: Position { line: 246, column: 24, }, end: Position { line: 246, column: 41, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Address sending application exceptions", span: Span { start: Position { line: 246, column: 43, }, end: Position { line: 246, column: 81, }, }, }, ), ], span: Span { start: Position { line: 246, column: 42, }, end: Position { line: 246, column: 82, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "pgp-privkey", span: Span { start: Position { line: 247, column: 11, }, end: Position { line: 247, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 247, column: 25, }, end: Position { line: 247, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 248, column: 13, }, end: Position { line: 248, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 248, column: 20, }, end: Position { line: 248, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 248, column: 26, }, end: Position { line: 248, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 249, column: 13, }, end: Position { line: 249, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 249, column: 27, }, end: Position { line: 249, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 249, column: 31, }, end: Position { line: 249, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "An absolute file path (which should be outside the Nix-store)\nto an OpenPGP private key.\n\nYour PGP key information (DO NOT mix up pub and priv here)\nYou must remove the password from your secret key, if present.\nYou can do this with `gpg --edit-key [key-id]`,\nthen use the `passwd` command and do not enter a new password.\n", span: Span { start: Position { line: 250, column: 1, }, end: Position { line: 257, column: 13, }, }, }, ), ], span: Span { start: Position { line: 249, column: 37, }, end: Position { line: 257, column: 15, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 247, column: 34, }, end: Position { line: 258, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "pgp-pubkey", span: Span { start: Position { line: 259, column: 11, }, end: Position { line: 259, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 259, column: 24, }, end: Position { line: 259, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 260, column: 13, }, end: Position { line: 260, column: 17, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 260, column: 25, }, end: Position { line: 260, column: 30, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "either", span: Span { start: Position { line: 260, column: 32, }, end: Position { line: 260, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "path", span: Span { start: Position { line: 260, column: 39, }, end: Position { line: 260, column: 43, }, }, }, ), Identifier( Identifier { id: "str", span: Span { start: Position { line: 260, column: 44, }, end: Position { line: 260, column: 47, }, }, }, ), ], }, ), span: Span { start: Position { line: 260, column: 20, }, end: Position { line: 260, column: 47, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 261, column: 13, }, end: Position { line: 261, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 261, column: 27, }, end: Position { line: 261, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 261, column: 31, }, end: Position { line: 261, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "OpenPGP public key.", span: Span { start: Position { line: 261, column: 38, }, end: Position { line: 261, column: 57, }, }, }, ), ], span: Span { start: Position { line: 261, column: 37, }, end: Position { line: 261, column: 58, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 259, column: 33, }, end: Position { line: 262, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "pgp-key-id", span: Span { start: Position { line: 263, column: 11, }, end: Position { line: 263, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 263, column: 24, }, end: Position { line: 263, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 264, column: 13, }, end: Position { line: 264, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 264, column: 20, }, end: Position { line: 264, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 264, column: 26, }, end: Position { line: 264, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 265, column: 13, }, end: Position { line: 265, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 265, column: 27, }, end: Position { line: 265, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 265, column: 31, }, end: Position { line: 265, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "OpenPGP key identifier.", span: Span { start: Position { line: 265, column: 38, }, end: Position { line: 265, column: 61, }, }, }, ), ], span: Span { start: Position { line: 265, column: 37, }, end: Position { line: 265, column: 62, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 263, column: 33, }, end: Position { line: 266, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 232, column: 24, }, end: Position { line: 267, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 268, column: 9, }, end: Position { line: 268, column: 16, }, }, }, ), Raw( PartRaw { content: "objects", span: Span { start: Position { line: 268, column: 17, }, end: Position { line: 268, column: 24, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "s3-upstream", span: Span { start: Position { line: 269, column: 11, }, end: Position { line: 269, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 269, column: 25, }, end: Position { line: 269, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 270, column: 13, }, end: Position { line: 270, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 270, column: 27, }, end: Position { line: 270, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 270, column: 31, }, end: Position { line: 270, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Configure the S3-compatible object storage service.", span: Span { start: Position { line: 270, column: 38, }, end: Position { line: 270, column: 89, }, }, }, ), ], span: Span { start: Position { line: 270, column: 37, }, end: Position { line: 270, column: 90, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 271, column: 13, }, end: Position { line: 271, column: 17, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 271, column: 25, }, end: Position { line: 271, column: 30, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 271, column: 32, }, end: Position { line: 271, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 271, column: 39, }, end: Position { line: 271, column: 42, }, }, }, ), ], }, ), span: Span { start: Position { line: 271, column: 20, }, end: Position { line: 271, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 272, column: 13, }, end: Position { line: 272, column: 20, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 272, column: 23, }, end: Position { line: 272, column: 27, }, }, }, ), }, ), ], span: Span { start: Position { line: 269, column: 34, }, end: Position { line: 273, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "s3-access-key", span: Span { start: Position { line: 274, column: 11, }, end: Position { line: 274, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 274, column: 27, }, end: Position { line: 274, column: 35, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 275, column: 13, }, end: Position { line: 275, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 275, column: 27, }, end: Position { line: 275, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 275, column: 31, }, end: Position { line: 275, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Access key to the S3-compatible object storage service", span: Span { start: Position { line: 275, column: 38, }, end: Position { line: 275, column: 92, }, }, }, ), ], span: Span { start: Position { line: 275, column: 37, }, end: Position { line: 275, column: 93, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 276, column: 13, }, end: Position { line: 276, column: 17, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 276, column: 25, }, end: Position { line: 276, column: 30, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 276, column: 32, }, end: Position { line: 276, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 276, column: 39, }, end: Position { line: 276, column: 42, }, }, }, ), ], }, ), span: Span { start: Position { line: 276, column: 20, }, end: Position { line: 276, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 277, column: 13, }, end: Position { line: 277, column: 20, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 277, column: 23, }, end: Position { line: 277, column: 27, }, }, }, ), }, ), ], span: Span { start: Position { line: 274, column: 36, }, end: Position { line: 278, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "s3-secret-key", span: Span { start: Position { line: 279, column: 11, }, end: Position { line: 279, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 279, column: 27, }, end: Position { line: 279, column: 35, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 280, column: 13, }, end: Position { line: 280, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 280, column: 27, }, end: Position { line: 280, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 280, column: 31, }, end: Position { line: 280, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "An absolute file path (which should be outside the Nix-store)\nto the secret key of the S3-compatible object storage service.\n", span: Span { start: Position { line: 281, column: 1, }, end: Position { line: 283, column: 13, }, }, }, ), ], span: Span { start: Position { line: 280, column: 37, }, end: Position { line: 283, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 284, column: 13, }, end: Position { line: 284, column: 17, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 284, column: 25, }, end: Position { line: 284, column: 30, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 284, column: 32, }, end: Position { line: 284, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "path", span: Span { start: Position { line: 284, column: 39, }, end: Position { line: 284, column: 43, }, }, }, ), ], }, ), span: Span { start: Position { line: 284, column: 20, }, end: Position { line: 284, column: 43, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 285, column: 13, }, end: Position { line: 285, column: 20, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 285, column: 23, }, end: Position { line: 285, column: 27, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "apply", span: Span { start: Position { line: 286, column: 13, }, end: Position { line: 286, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapNullable", span: Span { start: Position { line: 286, column: 21, }, end: Position { line: 286, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "s", }, ), body: BinaryOperation( BinaryOperation { left: String( String_ { parts: [ Raw( PartRaw { content: "<", span: Span { start: Position { line: 286, column: 38, }, end: Position { line: 286, column: 39, }, }, }, ), ], span: Span { start: Position { line: 286, column: 37, }, end: Position { line: 286, column: 40, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 286, column: 43, }, end: Position { line: 286, column: 51, }, }, }, ), arguments: [ Identifier( Identifier { id: "s", span: Span { start: Position { line: 286, column: 52, }, end: Position { line: 286, column: 53, }, }, }, ), ], }, ), }, ), span: Span { start: Position { line: 286, column: 34, }, end: Position { line: 286, column: 53, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 279, column: 36, }, end: Position { line: 287, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 268, column: 27, }, end: Position { line: 288, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 289, column: 9, }, end: Position { line: 289, column: 16, }, }, }, ), Raw( PartRaw { content: "webhooks", span: Span { start: Position { line: 289, column: 17, }, end: Position { line: 289, column: 25, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "private-key", span: Span { start: Position { line: 290, column: 11, }, end: Position { line: 290, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 290, column: 25, }, end: Position { line: 290, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 291, column: 13, }, end: Position { line: 291, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 291, column: 27, }, end: Position { line: 291, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 291, column: 31, }, end: Position { line: 291, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "An absolute file path (which should be outside the Nix-store)\nto a base64-encoded Ed25519 key for signing webhook payloads.\nThis should be consistent for all *.sr.ht sites,\nas this key will be used to verify signatures\nfrom other sites in your network.\nUse the `srht-keygen webhook` command to generate a key.\n", span: Span { start: Position { line: 292, column: 1, }, end: Position { line: 298, column: 13, }, }, }, ), ], span: Span { start: Position { line: 291, column: 37, }, end: Position { line: 298, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 299, column: 13, }, end: Position { line: 299, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 299, column: 20, }, end: Position { line: 299, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 299, column: 26, }, end: Position { line: 299, column: 30, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "apply", span: Span { start: Position { line: 300, column: 13, }, end: Position { line: 300, column: 18, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "s", }, ), body: BinaryOperation( BinaryOperation { left: String( String_ { parts: [ Raw( PartRaw { content: "<", span: Span { start: Position { line: 300, column: 25, }, end: Position { line: 300, column: 26, }, }, }, ), ], span: Span { start: Position { line: 300, column: 24, }, end: Position { line: 300, column: 27, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 300, column: 30, }, end: Position { line: 300, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "s", span: Span { start: Position { line: 300, column: 39, }, end: Position { line: 300, column: 40, }, }, }, ), ], }, ), }, ), span: Span { start: Position { line: 300, column: 21, }, end: Position { line: 300, column: 40, }, }, }, ), }, ), ], span: Span { start: Position { line: 290, column: 34, }, end: Position { line: 301, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 289, column: 28, }, end: Position { line: 302, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 304, column: 9, }, end: Position { line: 304, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "dispatch.sr.ht", span: Span { start: Position { line: 304, column: 18, }, end: Position { line: 304, column: 32, }, }, }, ), ], span: Span { start: Position { line: 304, column: 17, }, end: Position { line: 304, column: 33, }, }, }, ), }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "commonServiceSettings", span: Span { start: Position { line: 304, column: 36, }, end: Position { line: 304, column: 57, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "dispatch", span: Span { start: Position { line: 304, column: 59, }, end: Position { line: 304, column: 67, }, }, }, ), ], span: Span { start: Position { line: 304, column: 58, }, end: Position { line: 304, column: 68, }, }, }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 304, column: 72, }, end: Position { line: 305, column: 10, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 306, column: 9, }, end: Position { line: 306, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "dispatch.sr.ht::github", span: Span { start: Position { line: 306, column: 18, }, end: Position { line: 306, column: 40, }, }, }, ), ], span: Span { start: Position { line: 306, column: 17, }, end: Position { line: 306, column: 41, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "oauth-client-id", span: Span { start: Position { line: 307, column: 11, }, end: Position { line: 307, column: 26, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOptionNullOrStr", span: Span { start: Position { line: 307, column: 29, }, end: Position { line: 307, column: 46, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "OAuth client id.", span: Span { start: Position { line: 307, column: 48, }, end: Position { line: 307, column: 64, }, }, }, ), ], span: Span { start: Position { line: 307, column: 47, }, end: Position { line: 307, column: 65, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "oauth-client-secret", span: Span { start: Position { line: 308, column: 11, }, end: Position { line: 308, column: 30, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOptionNullOrStr", span: Span { start: Position { line: 308, column: 33, }, end: Position { line: 308, column: 50, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "OAuth client secret.", span: Span { start: Position { line: 308, column: 52, }, end: Position { line: 308, column: 72, }, }, }, ), ], span: Span { start: Position { line: 308, column: 51, }, end: Position { line: 308, column: 73, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 306, column: 44, }, end: Position { line: 309, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 310, column: 9, }, end: Position { line: 310, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "dispatch.sr.ht::gitlab", span: Span { start: Position { line: 310, column: 18, }, end: Position { line: 310, column: 40, }, }, }, ), ], span: Span { start: Position { line: 310, column: 17, }, end: Position { line: 310, column: 41, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enabled", span: Span { start: Position { line: 311, column: 11, }, end: Position { line: 311, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 311, column: 21, }, end: Position { line: 311, column: 35, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 311, column: 37, }, end: Position { line: 311, column: 40, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 311, column: 41, }, end: Position { line: 311, column: 46, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "GitLab integration", span: Span { start: Position { line: 311, column: 48, }, end: Position { line: 311, column: 66, }, }, }, ), ], span: Span { start: Position { line: 311, column: 47, }, end: Position { line: 311, column: 67, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "canonical-upstream", span: Span { start: Position { line: 312, column: 11, }, end: Position { line: 312, column: 29, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 312, column: 32, }, end: Position { line: 312, column: 40, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 313, column: 13, }, end: Position { line: 313, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 313, column: 20, }, end: Position { line: 313, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 313, column: 26, }, end: Position { line: 313, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 314, column: 13, }, end: Position { line: 314, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 314, column: 27, }, end: Position { line: 314, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 314, column: 31, }, end: Position { line: 314, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Canonical upstream.", span: Span { start: Position { line: 314, column: 38, }, end: Position { line: 314, column: 57, }, }, }, ), ], span: Span { start: Position { line: 314, column: 37, }, end: Position { line: 314, column: 58, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 315, column: 13, }, end: Position { line: 315, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "gitlab.com", span: Span { start: Position { line: 315, column: 24, }, end: Position { line: 315, column: 34, }, }, }, ), ], span: Span { start: Position { line: 315, column: 23, }, end: Position { line: 315, column: 35, }, }, }, ), }, ), ], span: Span { start: Position { line: 312, column: 41, }, end: Position { line: 316, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "repo-cache", span: Span { start: Position { line: 317, column: 11, }, end: Position { line: 317, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 317, column: 24, }, end: Position { line: 317, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 318, column: 13, }, end: Position { line: 318, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 318, column: 20, }, end: Position { line: 318, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 318, column: 26, }, end: Position { line: 318, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 319, column: 13, }, end: Position { line: 319, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 319, column: 27, }, end: Position { line: 319, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 319, column: 31, }, end: Position { line: 319, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Repository cache directory.", span: Span { start: Position { line: 319, column: 38, }, end: Position { line: 319, column: 65, }, }, }, ), ], span: Span { start: Position { line: 319, column: 37, }, end: Position { line: 319, column: 66, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 320, column: 13, }, end: Position { line: 320, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "./repo-cache", span: Span { start: Position { line: 320, column: 24, }, end: Position { line: 320, column: 36, }, }, }, ), ], span: Span { start: Position { line: 320, column: 23, }, end: Position { line: 320, column: 37, }, }, }, ), }, ), ], span: Span { start: Position { line: 317, column: 33, }, end: Position { line: 321, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "gitlab.com", span: Span { start: Position { line: 322, column: 12, }, end: Position { line: 322, column: 22, }, }, }, ), ], span: Span { start: Position { line: 322, column: 11, }, end: Position { line: 322, column: 23, }, }, }, ), }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 322, column: 26, }, end: Position { line: 322, column: 34, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 323, column: 13, }, end: Position { line: 323, column: 17, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 323, column: 25, }, end: Position { line: 323, column: 30, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 323, column: 32, }, end: Position { line: 323, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 323, column: 39, }, end: Position { line: 323, column: 42, }, }, }, ), ], }, ), span: Span { start: Position { line: 323, column: 20, }, end: Position { line: 323, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 324, column: 13, }, end: Position { line: 324, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 324, column: 27, }, end: Position { line: 324, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 324, column: 31, }, end: Position { line: 324, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "GitLab id and secret.", span: Span { start: Position { line: 324, column: 38, }, end: Position { line: 324, column: 59, }, }, }, ), ], span: Span { start: Position { line: 324, column: 37, }, end: Position { line: 324, column: 60, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 325, column: 13, }, end: Position { line: 325, column: 20, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 325, column: 23, }, end: Position { line: 325, column: 27, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 326, column: 13, }, end: Position { line: 326, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "GitLab:application id:secret", span: Span { start: Position { line: 326, column: 24, }, end: Position { line: 326, column: 52, }, }, }, ), ], span: Span { start: Position { line: 326, column: 23, }, end: Position { line: 326, column: 53, }, }, }, ), }, ), ], span: Span { start: Position { line: 322, column: 35, }, end: Position { line: 327, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 310, column: 44, }, end: Position { line: 328, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 330, column: 9, }, end: Position { line: 330, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "builds.sr.ht", span: Span { start: Position { line: 330, column: 18, }, end: Position { line: 330, column: 30, }, }, }, ), ], span: Span { start: Position { line: 330, column: 17, }, end: Position { line: 330, column: 31, }, }, }, ), }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "commonServiceSettings", span: Span { start: Position { line: 330, column: 34, }, end: Position { line: 330, column: 55, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 330, column: 57, }, end: Position { line: 330, column: 63, }, }, }, ), ], span: Span { start: Position { line: 330, column: 56, }, end: Position { line: 330, column: 64, }, }, }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "allow-free", span: Span { start: Position { line: 331, column: 11, }, end: Position { line: 331, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 331, column: 24, }, end: Position { line: 331, column: 38, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 331, column: 40, }, end: Position { line: 331, column: 43, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 331, column: 44, }, end: Position { line: 331, column: 49, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "nonpaying users to submit builds", span: Span { start: Position { line: 331, column: 51, }, end: Position { line: 331, column: 83, }, }, }, ), ], span: Span { start: Position { line: 331, column: 50, }, end: Position { line: 331, column: 84, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "redis", span: Span { start: Position { line: 332, column: 11, }, end: Position { line: 332, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 332, column: 19, }, end: Position { line: 332, column: 27, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 333, column: 13, }, end: Position { line: 333, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 333, column: 27, }, end: Position { line: 333, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 333, column: 31, }, end: Position { line: 333, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "The Redis connection used for the Celery worker.", span: Span { start: Position { line: 333, column: 38, }, end: Position { line: 333, column: 86, }, }, }, ), ], span: Span { start: Position { line: 333, column: 37, }, end: Position { line: 333, column: 87, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 334, column: 13, }, end: Position { line: 334, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 334, column: 20, }, end: Position { line: 334, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 334, column: 26, }, end: Position { line: 334, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 335, column: 13, }, end: Position { line: 335, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "redis+socket:///run/redis-sourcehut-buildsrht/redis.sock?virtual_host=2", span: Span { start: Position { line: 335, column: 24, }, end: Position { line: 335, column: 95, }, }, }, ), ], span: Span { start: Position { line: 335, column: 23, }, end: Position { line: 335, column: 96, }, }, }, ), }, ), ], span: Span { start: Position { line: 332, column: 28, }, end: Position { line: 336, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "shell", span: Span { start: Position { line: 337, column: 11, }, end: Position { line: 337, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 337, column: 19, }, end: Position { line: 337, column: 27, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 338, column: 13, }, end: Position { line: 338, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 338, column: 27, }, end: Position { line: 338, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 338, column: 31, }, end: Position { line: 338, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Scripts used to launch on SSH connection.\n`/usr/bin/master-shell` on master,\n`/usr/bin/runner-shell` on runner.\nIf master and worker are on the same system\nset to `/usr/bin/runner-shell`.\n", span: Span { start: Position { line: 339, column: 1, }, end: Position { line: 344, column: 13, }, }, }, ), ], span: Span { start: Position { line: 338, column: 37, }, end: Position { line: 344, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 345, column: 13, }, end: Position { line: 345, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 345, column: 20, }, end: Position { line: 345, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enum", span: Span { start: Position { line: 345, column: 26, }, end: Position { line: 345, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "/usr/bin/master-shell", span: Span { start: Position { line: 345, column: 33, }, end: Position { line: 345, column: 54, }, }, }, ), ], span: Span { start: Position { line: 345, column: 32, }, end: Position { line: 345, column: 55, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "/usr/bin/runner-shell", span: Span { start: Position { line: 345, column: 57, }, end: Position { line: 345, column: 78, }, }, }, ), ], span: Span { start: Position { line: 345, column: 56, }, end: Position { line: 345, column: 79, }, }, }, ), ], span: Span { start: Position { line: 345, column: 31, }, end: Position { line: 345, column: 80, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 346, column: 13, }, end: Position { line: 346, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/usr/bin/master-shell", span: Span { start: Position { line: 346, column: 24, }, end: Position { line: 346, column: 45, }, }, }, ), ], span: Span { start: Position { line: 346, column: 23, }, end: Position { line: 346, column: 46, }, }, }, ), }, ), ], span: Span { start: Position { line: 337, column: 28, }, end: Position { line: 347, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 330, column: 68, }, end: Position { line: 348, column: 10, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 349, column: 9, }, end: Position { line: 349, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "builds.sr.ht::worker", span: Span { start: Position { line: 349, column: 18, }, end: Position { line: 349, column: 38, }, }, }, ), ], span: Span { start: Position { line: 349, column: 17, }, end: Position { line: 349, column: 39, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "bind-address", span: Span { start: Position { line: 350, column: 11, }, end: Position { line: 350, column: 23, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 350, column: 26, }, end: Position { line: 350, column: 34, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 351, column: 13, }, end: Position { line: 351, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 351, column: 27, }, end: Position { line: 351, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 351, column: 31, }, end: Position { line: 351, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "HTTP bind address for serving local build information/monitoring.\n", span: Span { start: Position { line: 352, column: 1, }, end: Position { line: 353, column: 13, }, }, }, ), ], span: Span { start: Position { line: 351, column: 37, }, end: Position { line: 353, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 354, column: 13, }, end: Position { line: 354, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 354, column: 20, }, end: Position { line: 354, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 354, column: 26, }, end: Position { line: 354, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 355, column: 13, }, end: Position { line: 355, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "localhost:8080", span: Span { start: Position { line: 355, column: 24, }, end: Position { line: 355, column: 38, }, }, }, ), ], span: Span { start: Position { line: 355, column: 23, }, end: Position { line: 355, column: 39, }, }, }, ), }, ), ], span: Span { start: Position { line: 350, column: 35, }, end: Position { line: 356, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "buildlogs", span: Span { start: Position { line: 357, column: 11, }, end: Position { line: 357, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 357, column: 23, }, end: Position { line: 357, column: 31, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 358, column: 13, }, end: Position { line: 358, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 358, column: 27, }, end: Position { line: 358, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 358, column: 31, }, end: Position { line: 358, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Path to write build logs.", span: Span { start: Position { line: 358, column: 38, }, end: Position { line: 358, column: 63, }, }, }, ), ], span: Span { start: Position { line: 358, column: 37, }, end: Position { line: 358, column: 64, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 359, column: 13, }, end: Position { line: 359, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 359, column: 20, }, end: Position { line: 359, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 359, column: 26, }, end: Position { line: 359, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 360, column: 13, }, end: Position { line: 360, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/log/sourcehut/buildsrht-worker", span: Span { start: Position { line: 360, column: 24, }, end: Position { line: 360, column: 59, }, }, }, ), ], span: Span { start: Position { line: 360, column: 23, }, end: Position { line: 360, column: 60, }, }, }, ), }, ), ], span: Span { start: Position { line: 357, column: 32, }, end: Position { line: 361, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 362, column: 11, }, end: Position { line: 362, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 362, column: 18, }, end: Position { line: 362, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 363, column: 13, }, end: Position { line: 363, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 363, column: 27, }, end: Position { line: 363, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 363, column: 31, }, end: Position { line: 363, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Listening address and listening port\nof the build runner (with HTTP port if not 80).\n", span: Span { start: Position { line: 364, column: 1, }, end: Position { line: 366, column: 13, }, }, }, ), ], span: Span { start: Position { line: 363, column: 37, }, end: Position { line: 366, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 367, column: 13, }, end: Position { line: 367, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 367, column: 20, }, end: Position { line: 367, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 367, column: 26, }, end: Position { line: 367, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 368, column: 13, }, end: Position { line: 368, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "localhost:5020", span: Span { start: Position { line: 368, column: 24, }, end: Position { line: 368, column: 38, }, }, }, ), ], span: Span { start: Position { line: 368, column: 23, }, end: Position { line: 368, column: 39, }, }, }, ), }, ), ], span: Span { start: Position { line: 362, column: 27, }, end: Position { line: 369, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "timeout", span: Span { start: Position { line: 370, column: 11, }, end: Position { line: 370, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 370, column: 21, }, end: Position { line: 370, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 371, column: 13, }, end: Position { line: 371, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 371, column: 27, }, end: Position { line: 371, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 371, column: 31, }, end: Position { line: 371, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Max build duration.\nSee .\n", span: Span { start: Position { line: 372, column: 1, }, end: Position { line: 374, column: 13, }, }, }, ), ], span: Span { start: Position { line: 371, column: 37, }, end: Position { line: 374, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 375, column: 13, }, end: Position { line: 375, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 375, column: 20, }, end: Position { line: 375, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 375, column: 26, }, end: Position { line: 375, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 376, column: 13, }, end: Position { line: 376, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "3m", span: Span { start: Position { line: 376, column: 24, }, end: Position { line: 376, column: 26, }, }, }, ), ], span: Span { start: Position { line: 376, column: 23, }, end: Position { line: 376, column: 27, }, }, }, ), }, ), ], span: Span { start: Position { line: 370, column: 30, }, end: Position { line: 377, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 349, column: 42, }, end: Position { line: 378, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 380, column: 9, }, end: Position { line: 380, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "git.sr.ht", span: Span { start: Position { line: 380, column: 18, }, end: Position { line: 380, column: 27, }, }, }, ), ], span: Span { start: Position { line: 380, column: 17, }, end: Position { line: 380, column: 28, }, }, }, ), }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "commonServiceSettings", span: Span { start: Position { line: 380, column: 31, }, end: Position { line: 380, column: 52, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 380, column: 54, }, end: Position { line: 380, column: 57, }, }, }, ), ], span: Span { start: Position { line: 380, column: 53, }, end: Position { line: 380, column: 58, }, }, }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "outgoing-domain", span: Span { start: Position { line: 381, column: 11, }, end: Position { line: 381, column: 26, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 381, column: 29, }, end: Position { line: 381, column: 37, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 382, column: 13, }, end: Position { line: 382, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 382, column: 27, }, end: Position { line: 382, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 382, column: 31, }, end: Position { line: 382, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Outgoing domain.", span: Span { start: Position { line: 382, column: 38, }, end: Position { line: 382, column: 54, }, }, }, ), ], span: Span { start: Position { line: 382, column: 37, }, end: Position { line: 382, column: 55, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 383, column: 13, }, end: Position { line: 383, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 383, column: 20, }, end: Position { line: 383, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 383, column: 26, }, end: Position { line: 383, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 384, column: 13, }, end: Position { line: 384, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "https://git.localhost.localdomain", span: Span { start: Position { line: 384, column: 24, }, end: Position { line: 384, column: 57, }, }, }, ), ], span: Span { start: Position { line: 384, column: 23, }, end: Position { line: 384, column: 58, }, }, }, ), }, ), ], span: Span { start: Position { line: 381, column: 38, }, end: Position { line: 385, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "post-update-script", span: Span { start: Position { line: 386, column: 11, }, end: Position { line: 386, column: 29, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 386, column: 32, }, end: Position { line: 386, column: 40, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 387, column: 13, }, end: Position { line: 387, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 387, column: 27, }, end: Position { line: 387, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 387, column: 31, }, end: Position { line: 387, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "A post-update script which is installed in every git repo.\nThis setting is propagated to newer and existing repositories.\n", span: Span { start: Position { line: 388, column: 1, }, end: Position { line: 390, column: 13, }, }, }, ), ], span: Span { start: Position { line: 387, column: 37, }, end: Position { line: 390, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 391, column: 13, }, end: Position { line: 391, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 391, column: 20, }, end: Position { line: 391, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 391, column: 26, }, end: Position { line: 391, column: 30, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 392, column: 13, }, end: Position { line: 392, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 392, column: 26, }, end: Position { line: 392, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 392, column: 31, }, end: Position { line: 392, column: 40, }, }, }, ), Raw( PartRaw { content: "gitsrht", span: Span { start: Position { line: 392, column: 41, }, end: Position { line: 392, column: 48, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/gitsrht-update-hook", span: Span { start: Position { line: 392, column: 24, }, end: Position { line: 392, column: 73, }, }, }, ), ], span: Span { start: Position { line: 392, column: 23, }, end: Position { line: 392, column: 74, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 393, column: 13, }, end: Position { line: 393, column: 24, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "${pkgs.sourcehut.gitsrht}/bin/gitsrht-update-hook", span: Span { start: Position { line: 393, column: 28, }, end: Position { line: 393, column: 78, }, }, }, ), ], span: Span { start: Position { line: 393, column: 27, }, end: Position { line: 393, column: 79, }, }, }, ), }, ), ], span: Span { start: Position { line: 386, column: 41, }, end: Position { line: 394, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "repos", span: Span { start: Position { line: 395, column: 11, }, end: Position { line: 395, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 395, column: 19, }, end: Position { line: 395, column: 27, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 396, column: 13, }, end: Position { line: 396, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 396, column: 27, }, end: Position { line: 396, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 396, column: 31, }, end: Position { line: 396, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Path to git repositories on disk.\nIf changing the default, you must ensure that\nthe gitsrht's user as read and write access to it.\n", span: Span { start: Position { line: 397, column: 1, }, end: Position { line: 400, column: 13, }, }, }, ), ], span: Span { start: Position { line: 396, column: 37, }, end: Position { line: 400, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 401, column: 13, }, end: Position { line: 401, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 401, column: 20, }, end: Position { line: 401, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 401, column: 26, }, end: Position { line: 401, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 402, column: 13, }, end: Position { line: 402, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/sourcehut/gitsrht/repos", span: Span { start: Position { line: 402, column: 24, }, end: Position { line: 402, column: 56, }, }, }, ), ], span: Span { start: Position { line: 402, column: 23, }, end: Position { line: 402, column: 57, }, }, }, ), }, ), ], span: Span { start: Position { line: 395, column: 28, }, end: Position { line: 403, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "webhooks", span: Span { start: Position { line: 404, column: 11, }, end: Position { line: 404, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 404, column: 22, }, end: Position { line: 404, column: 30, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 405, column: 13, }, end: Position { line: 405, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 405, column: 27, }, end: Position { line: 405, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 405, column: 31, }, end: Position { line: 405, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "The Redis connection used for the webhooks worker.", span: Span { start: Position { line: 405, column: 38, }, end: Position { line: 405, column: 88, }, }, }, ), ], span: Span { start: Position { line: 405, column: 37, }, end: Position { line: 405, column: 89, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 406, column: 13, }, end: Position { line: 406, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 406, column: 20, }, end: Position { line: 406, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 406, column: 26, }, end: Position { line: 406, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 407, column: 13, }, end: Position { line: 407, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "redis+socket:///run/redis-sourcehut-gitsrht/redis.sock?virtual_host=1", span: Span { start: Position { line: 407, column: 24, }, end: Position { line: 407, column: 93, }, }, }, ), ], span: Span { start: Position { line: 407, column: 23, }, end: Position { line: 407, column: 94, }, }, }, ), }, ), ], span: Span { start: Position { line: 404, column: 31, }, end: Position { line: 408, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 380, column: 62, }, end: Position { line: 409, column: 10, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 410, column: 9, }, end: Position { line: 410, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "git.sr.ht::api", span: Span { start: Position { line: 410, column: 18, }, end: Position { line: 410, column: 32, }, }, }, ), ], span: Span { start: Position { line: 410, column: 17, }, end: Position { line: 410, column: 33, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "internal-ipnet", span: Span { start: Position { line: 411, column: 11, }, end: Position { line: 411, column: 25, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 411, column: 28, }, end: Position { line: 411, column: 36, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 412, column: 13, }, end: Position { line: 412, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 412, column: 27, }, end: Position { line: 412, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 412, column: 31, }, end: Position { line: 412, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Set of IP subnets which are permitted to utilize internal API\nauthentication. This should be limited to the subnets\nfrom which your *.sr.ht services are running.\nSee [](#opt-services.sourcehut.listenAddress).\n", span: Span { start: Position { line: 413, column: 1, }, end: Position { line: 417, column: 13, }, }, }, ), ], span: Span { start: Position { line: 412, column: 37, }, end: Position { line: 417, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 418, column: 13, }, end: Position { line: 418, column: 17, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 418, column: 25, }, end: Position { line: 418, column: 30, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "listOf", span: Span { start: Position { line: 418, column: 32, }, end: Position { line: 418, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 418, column: 39, }, end: Position { line: 418, column: 42, }, }, }, ), ], }, ), span: Span { start: Position { line: 418, column: 20, }, end: Position { line: 418, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 419, column: 13, }, end: Position { line: 419, column: 20, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "127.0.0.0/8", span: Span { start: Position { line: 419, column: 26, }, end: Position { line: 419, column: 37, }, }, }, ), ], span: Span { start: Position { line: 419, column: 25, }, end: Position { line: 419, column: 38, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "::1/128", span: Span { start: Position { line: 419, column: 40, }, end: Position { line: 419, column: 47, }, }, }, ), ], span: Span { start: Position { line: 419, column: 39, }, end: Position { line: 419, column: 48, }, }, }, ), ], span: Span { start: Position { line: 419, column: 23, }, end: Position { line: 419, column: 50, }, }, }, ), }, ), ], span: Span { start: Position { line: 411, column: 37, }, end: Position { line: 420, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 410, column: 36, }, end: Position { line: 421, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 423, column: 9, }, end: Position { line: 423, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "hg.sr.ht", span: Span { start: Position { line: 423, column: 18, }, end: Position { line: 423, column: 26, }, }, }, ), ], span: Span { start: Position { line: 423, column: 17, }, end: Position { line: 423, column: 27, }, }, }, ), }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "commonServiceSettings", span: Span { start: Position { line: 423, column: 30, }, end: Position { line: 423, column: 51, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 423, column: 53, }, end: Position { line: 423, column: 55, }, }, }, ), ], span: Span { start: Position { line: 423, column: 52, }, end: Position { line: 423, column: 56, }, }, }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "changegroup-script", span: Span { start: Position { line: 424, column: 11, }, end: Position { line: 424, column: 29, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 424, column: 32, }, end: Position { line: 424, column: 40, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 425, column: 13, }, end: Position { line: 425, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 425, column: 27, }, end: Position { line: 425, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 425, column: 31, }, end: Position { line: 425, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "A changegroup script which is installed in every mercurial repo.\nThis setting is propagated to newer and existing repositories.\n", span: Span { start: Position { line: 426, column: 1, }, end: Position { line: 428, column: 13, }, }, }, ), ], span: Span { start: Position { line: 425, column: 37, }, end: Position { line: 428, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 429, column: 13, }, end: Position { line: 429, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 429, column: 20, }, end: Position { line: 429, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 429, column: 26, }, end: Position { line: 429, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 430, column: 13, }, end: Position { line: 430, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 430, column: 26, }, end: Position { line: 430, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "python", span: Span { start: Position { line: 430, column: 30, }, end: Position { line: 430, column: 36, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/hgsrht-hook-changegroup", span: Span { start: Position { line: 430, column: 24, }, end: Position { line: 430, column: 65, }, }, }, ), ], span: Span { start: Position { line: 430, column: 23, }, end: Position { line: 430, column: 66, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 431, column: 13, }, end: Position { line: 431, column: 24, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "${cfg.python}/bin/hgsrht-hook-changegroup", span: Span { start: Position { line: 431, column: 28, }, end: Position { line: 431, column: 70, }, }, }, ), ], span: Span { start: Position { line: 431, column: 27, }, end: Position { line: 431, column: 71, }, }, }, ), }, ), ], span: Span { start: Position { line: 424, column: 41, }, end: Position { line: 432, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "repos", span: Span { start: Position { line: 433, column: 11, }, end: Position { line: 433, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 433, column: 19, }, end: Position { line: 433, column: 27, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 434, column: 13, }, end: Position { line: 434, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 434, column: 27, }, end: Position { line: 434, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 434, column: 31, }, end: Position { line: 434, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Path to mercurial repositories on disk.\nIf changing the default, you must ensure that\nthe hgsrht's user as read and write access to it.\n", span: Span { start: Position { line: 435, column: 1, }, end: Position { line: 438, column: 13, }, }, }, ), ], span: Span { start: Position { line: 434, column: 37, }, end: Position { line: 438, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 439, column: 13, }, end: Position { line: 439, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 439, column: 20, }, end: Position { line: 439, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 439, column: 26, }, end: Position { line: 439, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 440, column: 13, }, end: Position { line: 440, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/sourcehut/hgsrht/repos", span: Span { start: Position { line: 440, column: 24, }, end: Position { line: 440, column: 55, }, }, }, ), ], span: Span { start: Position { line: 440, column: 23, }, end: Position { line: 440, column: 56, }, }, }, ), }, ), ], span: Span { start: Position { line: 433, column: 28, }, end: Position { line: 441, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "srhtext", span: Span { start: Position { line: 442, column: 11, }, end: Position { line: 442, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOptionNullOrStr", span: Span { start: Position { line: 442, column: 21, }, end: Position { line: 442, column: 38, }, }, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Path to the srht mercurial extension\n(defaults to where the hgsrht code is)\n", span: Span { start: Position { line: 443, column: 1, }, end: Position { line: 445, column: 11, }, }, }, ), ], span: Span { start: Position { line: 442, column: 39, }, end: Position { line: 445, column: 13, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "clone_bundle_threshold", span: Span { start: Position { line: 446, column: 11, }, end: Position { line: 446, column: 33, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 446, column: 36, }, end: Position { line: 446, column: 44, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 447, column: 13, }, end: Position { line: 447, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 447, column: 27, }, end: Position { line: 447, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 447, column: 31, }, end: Position { line: 447, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: ".hg/store size (in MB) past which the nightly job generates clone bundles.", span: Span { start: Position { line: 447, column: 38, }, end: Position { line: 447, column: 112, }, }, }, ), ], span: Span { start: Position { line: 447, column: 37, }, end: Position { line: 447, column: 113, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 448, column: 13, }, end: Position { line: 448, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 448, column: 20, }, end: Position { line: 448, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ints", span: Span { start: Position { line: 448, column: 26, }, end: Position { line: 448, column: 30, }, }, }, ), Raw( PartRaw { content: "unsigned", span: Span { start: Position { line: 448, column: 31, }, end: Position { line: 448, column: 39, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 449, column: 13, }, end: Position { line: 449, column: 20, }, }, }, ), ], to: Integer( Integer { value: "50", span: Span { start: Position { line: 449, column: 23, }, end: Position { line: 449, column: 25, }, }, }, ), }, ), ], span: Span { start: Position { line: 446, column: 45, }, end: Position { line: 450, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "hg_ssh", span: Span { start: Position { line: 451, column: 11, }, end: Position { line: 451, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 451, column: 20, }, end: Position { line: 451, column: 28, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 452, column: 13, }, end: Position { line: 452, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 452, column: 27, }, end: Position { line: 452, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 452, column: 31, }, end: Position { line: 452, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Path to hg-ssh (if not in $PATH).", span: Span { start: Position { line: 452, column: 38, }, end: Position { line: 452, column: 71, }, }, }, ), ], span: Span { start: Position { line: 452, column: 37, }, end: Position { line: 452, column: 72, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 453, column: 13, }, end: Position { line: 453, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 453, column: 20, }, end: Position { line: 453, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 453, column: 26, }, end: Position { line: 453, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 454, column: 13, }, end: Position { line: 454, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 454, column: 26, }, end: Position { line: 454, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mercurial", span: Span { start: Position { line: 454, column: 31, }, end: Position { line: 454, column: 40, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/hg-ssh", span: Span { start: Position { line: 454, column: 24, }, end: Position { line: 454, column: 52, }, }, }, ), ], span: Span { start: Position { line: 454, column: 23, }, end: Position { line: 454, column: 53, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 455, column: 13, }, end: Position { line: 455, column: 24, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "${pkgs.mercurial}/bin/hg-ssh", span: Span { start: Position { line: 455, column: 28, }, end: Position { line: 455, column: 57, }, }, }, ), ], span: Span { start: Position { line: 455, column: 27, }, end: Position { line: 455, column: 58, }, }, }, ), }, ), ], span: Span { start: Position { line: 451, column: 29, }, end: Position { line: 456, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "webhooks", span: Span { start: Position { line: 457, column: 11, }, end: Position { line: 457, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 457, column: 22, }, end: Position { line: 457, column: 30, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 458, column: 13, }, end: Position { line: 458, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 458, column: 27, }, end: Position { line: 458, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 458, column: 31, }, end: Position { line: 458, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "The Redis connection used for the webhooks worker.", span: Span { start: Position { line: 458, column: 38, }, end: Position { line: 458, column: 88, }, }, }, ), ], span: Span { start: Position { line: 458, column: 37, }, end: Position { line: 458, column: 89, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 459, column: 13, }, end: Position { line: 459, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 459, column: 20, }, end: Position { line: 459, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 459, column: 26, }, end: Position { line: 459, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 460, column: 13, }, end: Position { line: 460, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "redis+socket:///run/redis-sourcehut-hgsrht/redis.sock?virtual_host=1", span: Span { start: Position { line: 460, column: 24, }, end: Position { line: 460, column: 92, }, }, }, ), ], span: Span { start: Position { line: 460, column: 23, }, end: Position { line: 460, column: 93, }, }, }, ), }, ), ], span: Span { start: Position { line: 457, column: 31, }, end: Position { line: 461, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 423, column: 60, }, end: Position { line: 462, column: 10, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 464, column: 9, }, end: Position { line: 464, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "hub.sr.ht", span: Span { start: Position { line: 464, column: 18, }, end: Position { line: 464, column: 27, }, }, }, ), ], span: Span { start: Position { line: 464, column: 17, }, end: Position { line: 464, column: 28, }, }, }, ), }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "commonServiceSettings", span: Span { start: Position { line: 464, column: 31, }, end: Position { line: 464, column: 52, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "hub", span: Span { start: Position { line: 464, column: 54, }, end: Position { line: 464, column: 57, }, }, }, ), ], span: Span { start: Position { line: 464, column: 53, }, end: Position { line: 464, column: 58, }, }, }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 464, column: 62, }, end: Position { line: 465, column: 10, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 467, column: 9, }, end: Position { line: 467, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "lists.sr.ht", span: Span { start: Position { line: 467, column: 18, }, end: Position { line: 467, column: 29, }, }, }, ), ], span: Span { start: Position { line: 467, column: 17, }, end: Position { line: 467, column: 30, }, }, }, ), }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "commonServiceSettings", span: Span { start: Position { line: 467, column: 33, }, end: Position { line: 467, column: 54, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "lists", span: Span { start: Position { line: 467, column: 56, }, end: Position { line: 467, column: 61, }, }, }, ), ], span: Span { start: Position { line: 467, column: 55, }, end: Position { line: 467, column: 62, }, }, }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "allow-new-lists", span: Span { start: Position { line: 468, column: 11, }, end: Position { line: 468, column: 26, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 468, column: 29, }, end: Position { line: 468, column: 43, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 468, column: 45, }, end: Position { line: 468, column: 48, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 468, column: 49, }, end: Position { line: 468, column: 54, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Allow creation of new lists.", span: Span { start: Position { line: 468, column: 56, }, end: Position { line: 468, column: 84, }, }, }, ), ], span: Span { start: Position { line: 468, column: 55, }, end: Position { line: 468, column: 85, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "notify-from", span: Span { start: Position { line: 469, column: 11, }, end: Position { line: 469, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 469, column: 25, }, end: Position { line: 469, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 470, column: 13, }, end: Position { line: 470, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 470, column: 27, }, end: Position { line: 470, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 470, column: 31, }, end: Position { line: 470, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Outgoing email for notifications generated by users.", span: Span { start: Position { line: 470, column: 38, }, end: Position { line: 470, column: 90, }, }, }, ), ], span: Span { start: Position { line: 470, column: 37, }, end: Position { line: 470, column: 91, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 471, column: 13, }, end: Position { line: 471, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 471, column: 20, }, end: Position { line: 471, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 471, column: 26, }, end: Position { line: 471, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 472, column: 13, }, end: Position { line: 472, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "lists-notify@localhost.localdomain", span: Span { start: Position { line: 472, column: 24, }, end: Position { line: 472, column: 58, }, }, }, ), ], span: Span { start: Position { line: 472, column: 23, }, end: Position { line: 472, column: 59, }, }, }, ), }, ), ], span: Span { start: Position { line: 469, column: 34, }, end: Position { line: 473, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "posting-domain", span: Span { start: Position { line: 474, column: 11, }, end: Position { line: 474, column: 25, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 474, column: 28, }, end: Position { line: 474, column: 36, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 475, column: 13, }, end: Position { line: 475, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 475, column: 27, }, end: Position { line: 475, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 475, column: 31, }, end: Position { line: 475, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Posting domain.", span: Span { start: Position { line: 475, column: 38, }, end: Position { line: 475, column: 53, }, }, }, ), ], span: Span { start: Position { line: 475, column: 37, }, end: Position { line: 475, column: 54, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 476, column: 13, }, end: Position { line: 476, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 476, column: 20, }, end: Position { line: 476, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 476, column: 26, }, end: Position { line: 476, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 477, column: 13, }, end: Position { line: 477, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "lists.localhost.localdomain", span: Span { start: Position { line: 477, column: 24, }, end: Position { line: 477, column: 51, }, }, }, ), ], span: Span { start: Position { line: 477, column: 23, }, end: Position { line: 477, column: 52, }, }, }, ), }, ), ], span: Span { start: Position { line: 474, column: 37, }, end: Position { line: 478, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "redis", span: Span { start: Position { line: 479, column: 11, }, end: Position { line: 479, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 479, column: 19, }, end: Position { line: 479, column: 27, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 480, column: 13, }, end: Position { line: 480, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 480, column: 27, }, end: Position { line: 480, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 480, column: 31, }, end: Position { line: 480, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "The Redis connection used for the Celery worker.", span: Span { start: Position { line: 480, column: 38, }, end: Position { line: 480, column: 86, }, }, }, ), ], span: Span { start: Position { line: 480, column: 37, }, end: Position { line: 480, column: 87, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 481, column: 13, }, end: Position { line: 481, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 481, column: 20, }, end: Position { line: 481, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 481, column: 26, }, end: Position { line: 481, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 482, column: 13, }, end: Position { line: 482, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "redis+socket:///run/redis-sourcehut-listssrht/redis.sock?virtual_host=2", span: Span { start: Position { line: 482, column: 24, }, end: Position { line: 482, column: 95, }, }, }, ), ], span: Span { start: Position { line: 482, column: 23, }, end: Position { line: 482, column: 96, }, }, }, ), }, ), ], span: Span { start: Position { line: 479, column: 28, }, end: Position { line: 483, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "webhooks", span: Span { start: Position { line: 484, column: 11, }, end: Position { line: 484, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 484, column: 22, }, end: Position { line: 484, column: 30, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 485, column: 13, }, end: Position { line: 485, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 485, column: 27, }, end: Position { line: 485, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 485, column: 31, }, end: Position { line: 485, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "The Redis connection used for the webhooks worker.", span: Span { start: Position { line: 485, column: 38, }, end: Position { line: 485, column: 88, }, }, }, ), ], span: Span { start: Position { line: 485, column: 37, }, end: Position { line: 485, column: 89, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 486, column: 13, }, end: Position { line: 486, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 486, column: 20, }, end: Position { line: 486, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 486, column: 26, }, end: Position { line: 486, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 487, column: 13, }, end: Position { line: 487, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "redis+socket:///run/redis-sourcehut-listssrht/redis.sock?virtual_host=1", span: Span { start: Position { line: 487, column: 24, }, end: Position { line: 487, column: 95, }, }, }, ), ], span: Span { start: Position { line: 487, column: 23, }, end: Position { line: 487, column: 96, }, }, }, ), }, ), ], span: Span { start: Position { line: 484, column: 31, }, end: Position { line: 488, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 467, column: 66, }, end: Position { line: 489, column: 10, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 490, column: 9, }, end: Position { line: 490, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "lists.sr.ht::worker", span: Span { start: Position { line: 490, column: 18, }, end: Position { line: 490, column: 37, }, }, }, ), ], span: Span { start: Position { line: 490, column: 17, }, end: Position { line: 490, column: 38, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "reject-mimetypes", span: Span { start: Position { line: 491, column: 11, }, end: Position { line: 491, column: 27, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 491, column: 30, }, end: Position { line: 491, column: 38, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 492, column: 13, }, end: Position { line: 492, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 492, column: 27, }, end: Position { line: 492, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 492, column: 31, }, end: Position { line: 492, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Comma-delimited list of Content-Types to reject. Messages with Content-Types\nincluded in this list are rejected. Multipart messages are always supported,\nand each part is checked against this list.\n\nUses fnmatch for wildcard expansion.\n", span: Span { start: Position { line: 493, column: 1, }, end: Position { line: 498, column: 13, }, }, }, ), ], span: Span { start: Position { line: 492, column: 37, }, end: Position { line: 498, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 499, column: 13, }, end: Position { line: 499, column: 17, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 499, column: 25, }, end: Position { line: 499, column: 30, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "listOf", span: Span { start: Position { line: 499, column: 32, }, end: Position { line: 499, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 499, column: 39, }, end: Position { line: 499, column: 42, }, }, }, ), ], }, ), span: Span { start: Position { line: 499, column: 20, }, end: Position { line: 499, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 500, column: 13, }, end: Position { line: 500, column: 20, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "text/html", span: Span { start: Position { line: 500, column: 25, }, end: Position { line: 500, column: 34, }, }, }, ), ], span: Span { start: Position { line: 500, column: 24, }, end: Position { line: 500, column: 35, }, }, }, ), ], span: Span { start: Position { line: 500, column: 23, }, end: Position { line: 500, column: 36, }, }, }, ), }, ), ], span: Span { start: Position { line: 491, column: 39, }, end: Position { line: 501, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "reject-url", span: Span { start: Position { line: 502, column: 11, }, end: Position { line: 502, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 502, column: 24, }, end: Position { line: 502, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 503, column: 13, }, end: Position { line: 503, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 503, column: 27, }, end: Position { line: 503, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 503, column: 31, }, end: Position { line: 503, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Reject URL.", span: Span { start: Position { line: 503, column: 38, }, end: Position { line: 503, column: 49, }, }, }, ), ], span: Span { start: Position { line: 503, column: 37, }, end: Position { line: 503, column: 50, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 504, column: 13, }, end: Position { line: 504, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 504, column: 20, }, end: Position { line: 504, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 504, column: 26, }, end: Position { line: 504, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 505, column: 13, }, end: Position { line: 505, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "https://man.sr.ht/lists.sr.ht/etiquette.md", span: Span { start: Position { line: 505, column: 24, }, end: Position { line: 505, column: 66, }, }, }, ), ], span: Span { start: Position { line: 505, column: 23, }, end: Position { line: 505, column: 67, }, }, }, ), }, ), ], span: Span { start: Position { line: 502, column: 33, }, end: Position { line: 506, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "sock", span: Span { start: Position { line: 507, column: 11, }, end: Position { line: 507, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 507, column: 18, }, end: Position { line: 507, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 508, column: 13, }, end: Position { line: 508, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 508, column: 27, }, end: Position { line: 508, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 508, column: 31, }, end: Position { line: 508, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Path for the lmtp daemon's unix socket. Direct incoming mail to this socket.\nAlternatively, specify IP:PORT and an SMTP server will be run instead.\n", span: Span { start: Position { line: 509, column: 1, }, end: Position { line: 511, column: 13, }, }, }, ), ], span: Span { start: Position { line: 508, column: 37, }, end: Position { line: 511, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 512, column: 13, }, end: Position { line: 512, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 512, column: 20, }, end: Position { line: 512, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 512, column: 26, }, end: Position { line: 512, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 513, column: 13, }, end: Position { line: 513, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/tmp/lists.sr.ht-lmtp.sock", span: Span { start: Position { line: 513, column: 24, }, end: Position { line: 513, column: 50, }, }, }, ), ], span: Span { start: Position { line: 513, column: 23, }, end: Position { line: 513, column: 51, }, }, }, ), }, ), ], span: Span { start: Position { line: 507, column: 27, }, end: Position { line: 514, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "sock-group", span: Span { start: Position { line: 515, column: 11, }, end: Position { line: 515, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 515, column: 24, }, end: Position { line: 515, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 516, column: 13, }, end: Position { line: 516, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 516, column: 27, }, end: Position { line: 516, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 516, column: 31, }, end: Position { line: 516, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "The lmtp daemon will make the unix socket group-read/write\nfor users in this group.\n", span: Span { start: Position { line: 517, column: 1, }, end: Position { line: 519, column: 13, }, }, }, ), ], span: Span { start: Position { line: 516, column: 37, }, end: Position { line: 519, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 520, column: 13, }, end: Position { line: 520, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 520, column: 20, }, end: Position { line: 520, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 520, column: 26, }, end: Position { line: 520, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 521, column: 13, }, end: Position { line: 521, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "postfix", span: Span { start: Position { line: 521, column: 24, }, end: Position { line: 521, column: 31, }, }, }, ), ], span: Span { start: Position { line: 521, column: 23, }, end: Position { line: 521, column: 32, }, }, }, ), }, ), ], span: Span { start: Position { line: 515, column: 33, }, end: Position { line: 522, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 490, column: 41, }, end: Position { line: 523, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 525, column: 9, }, end: Position { line: 525, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "man.sr.ht", span: Span { start: Position { line: 525, column: 18, }, end: Position { line: 525, column: 27, }, }, }, ), ], span: Span { start: Position { line: 525, column: 17, }, end: Position { line: 525, column: 28, }, }, }, ), }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "commonServiceSettings", span: Span { start: Position { line: 525, column: 31, }, end: Position { line: 525, column: 52, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "man", span: Span { start: Position { line: 525, column: 54, }, end: Position { line: 525, column: 57, }, }, }, ), ], span: Span { start: Position { line: 525, column: 53, }, end: Position { line: 525, column: 58, }, }, }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 525, column: 62, }, end: Position { line: 526, column: 10, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 528, column: 9, }, end: Position { line: 528, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "meta.sr.ht", span: Span { start: Position { line: 528, column: 18, }, end: Position { line: 528, column: 28, }, }, }, ), ], span: Span { start: Position { line: 528, column: 17, }, end: Position { line: 528, column: 29, }, }, }, ), }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "removeAttrs", span: Span { start: Position { line: 529, column: 11, }, end: Position { line: 529, column: 22, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "commonServiceSettings", span: Span { start: Position { line: 529, column: 24, }, end: Position { line: 529, column: 45, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "meta", span: Span { start: Position { line: 529, column: 47, }, end: Position { line: 529, column: 51, }, }, }, ), ], span: Span { start: Position { line: 529, column: 46, }, end: Position { line: 529, column: 52, }, }, }, ), ], }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "oauth-client-id", span: Span { start: Position { line: 530, column: 15, }, end: Position { line: 530, column: 30, }, }, }, ), ], span: Span { start: Position { line: 530, column: 14, }, end: Position { line: 530, column: 31, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "oauth-client-secret", span: Span { start: Position { line: 530, column: 33, }, end: Position { line: 530, column: 52, }, }, }, ), ], span: Span { start: Position { line: 530, column: 32, }, end: Position { line: 530, column: 53, }, }, }, ), ], span: Span { start: Position { line: 530, column: 13, }, end: Position { line: 530, column: 54, }, }, }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "api-origin", span: Span { start: Position { line: 531, column: 11, }, end: Position { line: 531, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 531, column: 24, }, end: Position { line: 531, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 532, column: 13, }, end: Position { line: 532, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 532, column: 27, }, end: Position { line: 532, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 532, column: 31, }, end: Position { line: 532, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Origin URL for API, 100 more than web.", span: Span { start: Position { line: 532, column: 38, }, end: Position { line: 532, column: 76, }, }, }, ), ], span: Span { start: Position { line: 532, column: 37, }, end: Position { line: 532, column: 77, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 533, column: 13, }, end: Position { line: 533, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 533, column: 20, }, end: Position { line: 533, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 533, column: 26, }, end: Position { line: 533, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 534, column: 13, }, end: Position { line: 534, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "http://", span: Span { start: Position { line: 534, column: 24, }, end: Position { line: 534, column: 51, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 534, column: 33, }, end: Position { line: 534, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenAddress", span: Span { start: Position { line: 534, column: 37, }, end: Position { line: 534, column: 50, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 534, column: 24, }, end: Position { line: 534, column: 52, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 534, column: 54, }, end: Position { line: 534, column: 62, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 534, column: 64, }, end: Position { line: 534, column: 67, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "meta", span: Span { start: Position { line: 534, column: 68, }, end: Position { line: 534, column: 72, }, }, }, ), Raw( PartRaw { content: "port", span: Span { start: Position { line: 534, column: 73, }, end: Position { line: 534, column: 77, }, }, }, ), ], default: None, }, ), operator: Addition, right: Integer( Integer { value: "100", span: Span { start: Position { line: 534, column: 80, }, end: Position { line: 534, column: 83, }, }, }, ), }, ), ], }, ), }, ), ], span: Span { start: Position { line: 534, column: 23, }, end: Position { line: 534, column: 86, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 535, column: 13, }, end: Position { line: 535, column: 24, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "http://:", span: Span { start: Position { line: 535, column: 29, }, end: Position { line: 535, column: 91, }, }, }, ), Raw( PartRaw { content: "$", span: Span { start: Position { line: 535, column: 29, }, end: Position { line: 535, column: 94, }, }, }, ), Raw( PartRaw { content: "{toString ( + 100)}", span: Span { start: Position { line: 535, column: 29, }, end: Position { line: 535, column: 163, }, }, }, ), ], span: Span { start: Position { line: 535, column: 27, }, end: Position { line: 535, column: 165, }, }, }, ), }, ), ], span: Span { start: Position { line: 531, column: 33, }, end: Position { line: 536, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "webhooks", span: Span { start: Position { line: 537, column: 11, }, end: Position { line: 537, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 537, column: 22, }, end: Position { line: 537, column: 30, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 538, column: 13, }, end: Position { line: 538, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 538, column: 27, }, end: Position { line: 538, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 538, column: 31, }, end: Position { line: 538, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "The Redis connection used for the webhooks worker.", span: Span { start: Position { line: 538, column: 38, }, end: Position { line: 538, column: 88, }, }, }, ), ], span: Span { start: Position { line: 538, column: 37, }, end: Position { line: 538, column: 89, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 539, column: 13, }, end: Position { line: 539, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 539, column: 20, }, end: Position { line: 539, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 539, column: 26, }, end: Position { line: 539, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 540, column: 13, }, end: Position { line: 540, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "redis+socket:///run/redis-sourcehut-metasrht/redis.sock?virtual_host=1", span: Span { start: Position { line: 540, column: 24, }, end: Position { line: 540, column: 94, }, }, }, ), ], span: Span { start: Position { line: 540, column: 23, }, end: Position { line: 540, column: 95, }, }, }, ), }, ), ], span: Span { start: Position { line: 537, column: 31, }, end: Position { line: 541, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "welcome-emails", span: Span { start: Position { line: 542, column: 11, }, end: Position { line: 542, column: 25, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 542, column: 28, }, end: Position { line: 542, column: 42, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 542, column: 44, }, end: Position { line: 542, column: 47, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 542, column: 48, }, end: Position { line: 542, column: 53, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "sending stock sourcehut welcome emails after signup", span: Span { start: Position { line: 542, column: 55, }, end: Position { line: 542, column: 106, }, }, }, ), ], span: Span { start: Position { line: 542, column: 54, }, end: Position { line: 542, column: 107, }, }, }, ), ], }, ), ], }, ), }, ), ], span: Span { start: Position { line: 530, column: 58, }, end: Position { line: 543, column: 10, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 544, column: 9, }, end: Position { line: 544, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "meta.sr.ht::api", span: Span { start: Position { line: 544, column: 18, }, end: Position { line: 544, column: 33, }, }, }, ), ], span: Span { start: Position { line: 544, column: 17, }, end: Position { line: 544, column: 34, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "internal-ipnet", span: Span { start: Position { line: 545, column: 11, }, end: Position { line: 545, column: 25, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 545, column: 28, }, end: Position { line: 545, column: 36, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 546, column: 13, }, end: Position { line: 546, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 546, column: 27, }, end: Position { line: 546, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 546, column: 31, }, end: Position { line: 546, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Set of IP subnets which are permitted to utilize internal API\nauthentication. This should be limited to the subnets\nfrom which your *.sr.ht services are running.\nSee [](#opt-services.sourcehut.listenAddress).\n", span: Span { start: Position { line: 547, column: 1, }, end: Position { line: 551, column: 13, }, }, }, ), ], span: Span { start: Position { line: 546, column: 37, }, end: Position { line: 551, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 552, column: 13, }, end: Position { line: 552, column: 17, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 552, column: 25, }, end: Position { line: 552, column: 30, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "listOf", span: Span { start: Position { line: 552, column: 32, }, end: Position { line: 552, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 552, column: 39, }, end: Position { line: 552, column: 42, }, }, }, ), ], }, ), span: Span { start: Position { line: 552, column: 20, }, end: Position { line: 552, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 553, column: 13, }, end: Position { line: 553, column: 20, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "127.0.0.0/8", span: Span { start: Position { line: 553, column: 26, }, end: Position { line: 553, column: 37, }, }, }, ), ], span: Span { start: Position { line: 553, column: 25, }, end: Position { line: 553, column: 38, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "::1/128", span: Span { start: Position { line: 553, column: 40, }, end: Position { line: 553, column: 47, }, }, }, ), ], span: Span { start: Position { line: 553, column: 39, }, end: Position { line: 553, column: 48, }, }, }, ), ], span: Span { start: Position { line: 553, column: 23, }, end: Position { line: 553, column: 50, }, }, }, ), }, ), ], span: Span { start: Position { line: 545, column: 37, }, end: Position { line: 554, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 544, column: 37, }, end: Position { line: 555, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 556, column: 9, }, end: Position { line: 556, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "meta.sr.ht::aliases", span: Span { start: Position { line: 556, column: 18, }, end: Position { line: 556, column: 37, }, }, }, ), ], span: Span { start: Position { line: 556, column: 17, }, end: Position { line: 556, column: 38, }, }, }, ), }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 556, column: 41, }, end: Position { line: 556, column: 49, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 557, column: 11, }, end: Position { line: 557, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 557, column: 25, }, end: Position { line: 557, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 557, column: 29, }, end: Position { line: 557, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Aliases for the client IDs of commonly used OAuth clients.", span: Span { start: Position { line: 557, column: 36, }, end: Position { line: 557, column: 94, }, }, }, ), ], span: Span { start: Position { line: 557, column: 35, }, end: Position { line: 557, column: 95, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 558, column: 11, }, end: Position { line: 558, column: 15, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 558, column: 23, }, end: Position { line: 558, column: 28, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "attrsOf", span: Span { start: Position { line: 558, column: 30, }, end: Position { line: 558, column: 37, }, }, }, ), arguments: [ Identifier( Identifier { id: "int", span: Span { start: Position { line: 558, column: 38, }, end: Position { line: 558, column: 41, }, }, }, ), ], }, ), span: Span { start: Position { line: 558, column: 18, }, end: Position { line: 558, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 559, column: 11, }, end: Position { line: 559, column: 18, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 559, column: 21, }, end: Position { line: 559, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 560, column: 11, }, end: Position { line: 560, column: 18, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "git.sr.ht", span: Span { start: Position { line: 560, column: 24, }, end: Position { line: 560, column: 33, }, }, }, ), ], span: Span { start: Position { line: 560, column: 23, }, end: Position { line: 560, column: 34, }, }, }, ), }, ), ], to: Integer( Integer { value: "12345", span: Span { start: Position { line: 560, column: 37, }, end: Position { line: 560, column: 42, }, }, }, ), }, ), ], span: Span { start: Position { line: 560, column: 21, }, end: Position { line: 560, column: 45, }, }, }, ), }, ), ], span: Span { start: Position { line: 556, column: 50, }, end: Position { line: 561, column: 10, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 562, column: 9, }, end: Position { line: 562, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "meta.sr.ht::billing", span: Span { start: Position { line: 562, column: 18, }, end: Position { line: 562, column: 37, }, }, }, ), ], span: Span { start: Position { line: 562, column: 17, }, end: Position { line: 562, column: 38, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enabled", span: Span { start: Position { line: 563, column: 11, }, end: Position { line: 563, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 563, column: 21, }, end: Position { line: 563, column: 35, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 563, column: 37, }, end: Position { line: 563, column: 40, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 563, column: 41, }, end: Position { line: 563, column: 46, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "the billing system", span: Span { start: Position { line: 563, column: 48, }, end: Position { line: 563, column: 66, }, }, }, ), ], span: Span { start: Position { line: 563, column: 47, }, end: Position { line: 563, column: 67, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "stripe-public-key", span: Span { start: Position { line: 564, column: 11, }, end: Position { line: 564, column: 28, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOptionNullOrStr", span: Span { start: Position { line: 564, column: 31, }, end: Position { line: 564, column: 48, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Public key for Stripe. Get your keys at https://dashboard.stripe.com/account/apikeys", span: Span { start: Position { line: 564, column: 50, }, end: Position { line: 564, column: 134, }, }, }, ), ], span: Span { start: Position { line: 564, column: 49, }, end: Position { line: 564, column: 135, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "stripe-secret-key", span: Span { start: Position { line: 565, column: 11, }, end: Position { line: 565, column: 28, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOptionNullOrStr", span: Span { start: Position { line: 565, column: 31, }, end: Position { line: 565, column: 48, }, }, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "An absolute file path (which should be outside the Nix-store)\nto a secret key for Stripe. Get your keys at https://dashboard.stripe.com/account/apikeys\n", span: Span { start: Position { line: 566, column: 1, }, end: Position { line: 568, column: 11, }, }, }, ), ], span: Span { start: Position { line: 565, column: 49, }, end: Position { line: 568, column: 13, }, }, }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "apply", span: Span { start: Position { line: 569, column: 13, }, end: Position { line: 569, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapNullable", span: Span { start: Position { line: 569, column: 21, }, end: Position { line: 569, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "s", }, ), body: BinaryOperation( BinaryOperation { left: String( String_ { parts: [ Raw( PartRaw { content: "<", span: Span { start: Position { line: 569, column: 38, }, end: Position { line: 569, column: 39, }, }, }, ), ], span: Span { start: Position { line: 569, column: 37, }, end: Position { line: 569, column: 40, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 569, column: 43, }, end: Position { line: 569, column: 51, }, }, }, ), arguments: [ Identifier( Identifier { id: "s", span: Span { start: Position { line: 569, column: 52, }, end: Position { line: 569, column: 53, }, }, }, ), ], }, ), }, ), span: Span { start: Position { line: 569, column: 34, }, end: Position { line: 569, column: 53, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 568, column: 17, }, end: Position { line: 570, column: 12, }, }, }, ), }, ), }, ), ], span: Span { start: Position { line: 562, column: 41, }, end: Position { line: 571, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 572, column: 9, }, end: Position { line: 572, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "meta.sr.ht::settings", span: Span { start: Position { line: 572, column: 18, }, end: Position { line: 572, column: 38, }, }, }, ), ], span: Span { start: Position { line: 572, column: 17, }, end: Position { line: 572, column: 39, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "registration", span: Span { start: Position { line: 573, column: 11, }, end: Position { line: 573, column: 23, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 573, column: 26, }, end: Position { line: 573, column: 40, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 573, column: 42, }, end: Position { line: 573, column: 45, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 573, column: 46, }, end: Position { line: 573, column: 51, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "public registration", span: Span { start: Position { line: 573, column: 53, }, end: Position { line: 573, column: 72, }, }, }, ), ], span: Span { start: Position { line: 573, column: 52, }, end: Position { line: 573, column: 73, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "onboarding-redirect", span: Span { start: Position { line: 574, column: 11, }, end: Position { line: 574, column: 30, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 574, column: 33, }, end: Position { line: 574, column: 41, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 575, column: 13, }, end: Position { line: 575, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 575, column: 27, }, end: Position { line: 575, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 575, column: 31, }, end: Position { line: 575, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Where to redirect new users upon registration.", span: Span { start: Position { line: 575, column: 38, }, end: Position { line: 575, column: 84, }, }, }, ), ], span: Span { start: Position { line: 575, column: 37, }, end: Position { line: 575, column: 85, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 576, column: 13, }, end: Position { line: 576, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 576, column: 20, }, end: Position { line: 576, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 576, column: 26, }, end: Position { line: 576, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 577, column: 13, }, end: Position { line: 577, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "https://meta.localhost.localdomain", span: Span { start: Position { line: 577, column: 24, }, end: Position { line: 577, column: 58, }, }, }, ), ], span: Span { start: Position { line: 577, column: 23, }, end: Position { line: 577, column: 59, }, }, }, ), }, ), ], span: Span { start: Position { line: 574, column: 42, }, end: Position { line: 578, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "user-invites", span: Span { start: Position { line: 579, column: 11, }, end: Position { line: 579, column: 23, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 579, column: 26, }, end: Position { line: 579, column: 34, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 580, column: 13, }, end: Position { line: 580, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 580, column: 27, }, end: Position { line: 580, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 580, column: 31, }, end: Position { line: 580, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "How many invites each user is issued upon registration\n(only applicable if open registration is disabled).\n", span: Span { start: Position { line: 581, column: 1, }, end: Position { line: 583, column: 13, }, }, }, ), ], span: Span { start: Position { line: 580, column: 37, }, end: Position { line: 583, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 584, column: 13, }, end: Position { line: 584, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 584, column: 20, }, end: Position { line: 584, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ints", span: Span { start: Position { line: 584, column: 26, }, end: Position { line: 584, column: 30, }, }, }, ), Raw( PartRaw { content: "unsigned", span: Span { start: Position { line: 584, column: 31, }, end: Position { line: 584, column: 39, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 585, column: 13, }, end: Position { line: 585, column: 20, }, }, }, ), ], to: Integer( Integer { value: "5", span: Span { start: Position { line: 585, column: 23, }, end: Position { line: 585, column: 24, }, }, }, ), }, ), ], span: Span { start: Position { line: 579, column: 35, }, end: Position { line: 586, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 572, column: 42, }, end: Position { line: 587, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 589, column: 9, }, end: Position { line: 589, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "pages.sr.ht", span: Span { start: Position { line: 589, column: 18, }, end: Position { line: 589, column: 29, }, }, }, ), ], span: Span { start: Position { line: 589, column: 17, }, end: Position { line: 589, column: 30, }, }, }, ), }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "commonServiceSettings", span: Span { start: Position { line: 589, column: 33, }, end: Position { line: 589, column: 54, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "pages", span: Span { start: Position { line: 589, column: 56, }, end: Position { line: 589, column: 61, }, }, }, ), ], span: Span { start: Position { line: 589, column: 55, }, end: Position { line: 589, column: 62, }, }, }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "gemini-certs", span: Span { start: Position { line: 590, column: 11, }, end: Position { line: 590, column: 23, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 590, column: 26, }, end: Position { line: 590, column: 34, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 591, column: 13, }, end: Position { line: 591, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 591, column: 27, }, end: Position { line: 591, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 591, column: 31, }, end: Position { line: 591, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "An absolute file path (which should be outside the Nix-store)\nto Gemini certificates.\n", span: Span { start: Position { line: 592, column: 1, }, end: Position { line: 594, column: 13, }, }, }, ), ], span: Span { start: Position { line: 591, column: 37, }, end: Position { line: 594, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 595, column: 13, }, end: Position { line: 595, column: 17, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 595, column: 25, }, end: Position { line: 595, column: 30, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 595, column: 32, }, end: Position { line: 595, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "path", span: Span { start: Position { line: 595, column: 39, }, end: Position { line: 595, column: 43, }, }, }, ), ], }, ), span: Span { start: Position { line: 595, column: 20, }, end: Position { line: 595, column: 43, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 596, column: 13, }, end: Position { line: 596, column: 20, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 596, column: 23, }, end: Position { line: 596, column: 27, }, }, }, ), }, ), ], span: Span { start: Position { line: 590, column: 35, }, end: Position { line: 597, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "max-site-size", span: Span { start: Position { line: 598, column: 11, }, end: Position { line: 598, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 598, column: 27, }, end: Position { line: 598, column: 35, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 599, column: 13, }, end: Position { line: 599, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 599, column: 27, }, end: Position { line: 599, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 599, column: 31, }, end: Position { line: 599, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Maximum size of any given site (post-gunzip), in MiB.", span: Span { start: Position { line: 599, column: 38, }, end: Position { line: 599, column: 91, }, }, }, ), ], span: Span { start: Position { line: 599, column: 37, }, end: Position { line: 599, column: 92, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 600, column: 13, }, end: Position { line: 600, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 600, column: 20, }, end: Position { line: 600, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "int", span: Span { start: Position { line: 600, column: 26, }, end: Position { line: 600, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 601, column: 13, }, end: Position { line: 601, column: 20, }, }, }, ), ], to: Integer( Integer { value: "1024", span: Span { start: Position { line: 601, column: 23, }, end: Position { line: 601, column: 27, }, }, }, ), }, ), ], span: Span { start: Position { line: 598, column: 36, }, end: Position { line: 602, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "user-domain", span: Span { start: Position { line: 603, column: 11, }, end: Position { line: 603, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 603, column: 25, }, end: Position { line: 603, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 604, column: 13, }, end: Position { line: 604, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 604, column: 27, }, end: Position { line: 604, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 604, column: 31, }, end: Position { line: 604, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Configures the user domain, if enabled.\nAll users are given \\.this.domain.\n", span: Span { start: Position { line: 605, column: 1, }, end: Position { line: 607, column: 13, }, }, }, ), ], span: Span { start: Position { line: 604, column: 37, }, end: Position { line: 607, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 608, column: 13, }, end: Position { line: 608, column: 17, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 608, column: 25, }, end: Position { line: 608, column: 30, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 608, column: 32, }, end: Position { line: 608, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 608, column: 39, }, end: Position { line: 608, column: 42, }, }, }, ), ], }, ), span: Span { start: Position { line: 608, column: 20, }, end: Position { line: 608, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 609, column: 13, }, end: Position { line: 609, column: 20, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 609, column: 23, }, end: Position { line: 609, column: 27, }, }, }, ), }, ), ], span: Span { start: Position { line: 603, column: 34, }, end: Position { line: 610, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 589, column: 66, }, end: Position { line: 611, column: 10, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 612, column: 9, }, end: Position { line: 612, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "pages.sr.ht::api", span: Span { start: Position { line: 612, column: 18, }, end: Position { line: 612, column: 34, }, }, }, ), ], span: Span { start: Position { line: 612, column: 17, }, end: Position { line: 612, column: 35, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "internal-ipnet", span: Span { start: Position { line: 613, column: 11, }, end: Position { line: 613, column: 25, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 613, column: 28, }, end: Position { line: 613, column: 36, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 614, column: 13, }, end: Position { line: 614, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 614, column: 27, }, end: Position { line: 614, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 614, column: 31, }, end: Position { line: 614, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Set of IP subnets which are permitted to utilize internal API\nauthentication. This should be limited to the subnets\nfrom which your *.sr.ht services are running.\nSee [](#opt-services.sourcehut.listenAddress).\n", span: Span { start: Position { line: 615, column: 1, }, end: Position { line: 619, column: 13, }, }, }, ), ], span: Span { start: Position { line: 614, column: 37, }, end: Position { line: 619, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 620, column: 13, }, end: Position { line: 620, column: 17, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 620, column: 25, }, end: Position { line: 620, column: 30, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "listOf", span: Span { start: Position { line: 620, column: 32, }, end: Position { line: 620, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 620, column: 39, }, end: Position { line: 620, column: 42, }, }, }, ), ], }, ), span: Span { start: Position { line: 620, column: 20, }, end: Position { line: 620, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 621, column: 13, }, end: Position { line: 621, column: 20, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "127.0.0.0/8", span: Span { start: Position { line: 621, column: 26, }, end: Position { line: 621, column: 37, }, }, }, ), ], span: Span { start: Position { line: 621, column: 25, }, end: Position { line: 621, column: 38, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "::1/128", span: Span { start: Position { line: 621, column: 40, }, end: Position { line: 621, column: 47, }, }, }, ), ], span: Span { start: Position { line: 621, column: 39, }, end: Position { line: 621, column: 48, }, }, }, ), ], span: Span { start: Position { line: 621, column: 23, }, end: Position { line: 621, column: 50, }, }, }, ), }, ), ], span: Span { start: Position { line: 613, column: 37, }, end: Position { line: 622, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 612, column: 38, }, end: Position { line: 623, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 625, column: 9, }, end: Position { line: 625, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "paste.sr.ht", span: Span { start: Position { line: 625, column: 18, }, end: Position { line: 625, column: 29, }, }, }, ), ], span: Span { start: Position { line: 625, column: 17, }, end: Position { line: 625, column: 30, }, }, }, ), }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "commonServiceSettings", span: Span { start: Position { line: 625, column: 33, }, end: Position { line: 625, column: 54, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "paste", span: Span { start: Position { line: 625, column: 56, }, end: Position { line: 625, column: 61, }, }, }, ), ], span: Span { start: Position { line: 625, column: 55, }, end: Position { line: 625, column: 62, }, }, }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 625, column: 66, }, end: Position { line: 626, column: 10, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 628, column: 9, }, end: Position { line: 628, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "todo.sr.ht", span: Span { start: Position { line: 628, column: 18, }, end: Position { line: 628, column: 28, }, }, }, ), ], span: Span { start: Position { line: 628, column: 17, }, end: Position { line: 628, column: 29, }, }, }, ), }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "commonServiceSettings", span: Span { start: Position { line: 628, column: 32, }, end: Position { line: 628, column: 53, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "todo", span: Span { start: Position { line: 628, column: 55, }, end: Position { line: 628, column: 59, }, }, }, ), ], span: Span { start: Position { line: 628, column: 54, }, end: Position { line: 628, column: 60, }, }, }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "notify-from", span: Span { start: Position { line: 629, column: 11, }, end: Position { line: 629, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 629, column: 25, }, end: Position { line: 629, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 630, column: 13, }, end: Position { line: 630, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 630, column: 27, }, end: Position { line: 630, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 630, column: 31, }, end: Position { line: 630, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Outgoing email for notifications generated by users.", span: Span { start: Position { line: 630, column: 38, }, end: Position { line: 630, column: 90, }, }, }, ), ], span: Span { start: Position { line: 630, column: 37, }, end: Position { line: 630, column: 91, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 631, column: 13, }, end: Position { line: 631, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 631, column: 20, }, end: Position { line: 631, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 631, column: 26, }, end: Position { line: 631, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 632, column: 13, }, end: Position { line: 632, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "todo-notify@localhost.localdomain", span: Span { start: Position { line: 632, column: 24, }, end: Position { line: 632, column: 57, }, }, }, ), ], span: Span { start: Position { line: 632, column: 23, }, end: Position { line: 632, column: 58, }, }, }, ), }, ), ], span: Span { start: Position { line: 629, column: 34, }, end: Position { line: 633, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "webhooks", span: Span { start: Position { line: 634, column: 11, }, end: Position { line: 634, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 634, column: 22, }, end: Position { line: 634, column: 30, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 635, column: 13, }, end: Position { line: 635, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 635, column: 27, }, end: Position { line: 635, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 635, column: 31, }, end: Position { line: 635, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "The Redis connection used for the webhooks worker.", span: Span { start: Position { line: 635, column: 38, }, end: Position { line: 635, column: 88, }, }, }, ), ], span: Span { start: Position { line: 635, column: 37, }, end: Position { line: 635, column: 89, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 636, column: 13, }, end: Position { line: 636, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 636, column: 20, }, end: Position { line: 636, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 636, column: 26, }, end: Position { line: 636, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 637, column: 13, }, end: Position { line: 637, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "redis+socket:///run/redis-sourcehut-todosrht/redis.sock?virtual_host=1", span: Span { start: Position { line: 637, column: 24, }, end: Position { line: 637, column: 94, }, }, }, ), ], span: Span { start: Position { line: 637, column: 23, }, end: Position { line: 637, column: 95, }, }, }, ), }, ), ], span: Span { start: Position { line: 634, column: 31, }, end: Position { line: 638, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 628, column: 64, }, end: Position { line: 639, column: 10, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 640, column: 9, }, end: Position { line: 640, column: 16, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "todo.sr.ht::mail", span: Span { start: Position { line: 640, column: 18, }, end: Position { line: 640, column: 34, }, }, }, ), ], span: Span { start: Position { line: 640, column: 17, }, end: Position { line: 640, column: 35, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "posting-domain", span: Span { start: Position { line: 641, column: 11, }, end: Position { line: 641, column: 25, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 641, column: 28, }, end: Position { line: 641, column: 36, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 642, column: 13, }, end: Position { line: 642, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 642, column: 27, }, end: Position { line: 642, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 642, column: 31, }, end: Position { line: 642, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Posting domain.", span: Span { start: Position { line: 642, column: 38, }, end: Position { line: 642, column: 53, }, }, }, ), ], span: Span { start: Position { line: 642, column: 37, }, end: Position { line: 642, column: 54, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 643, column: 13, }, end: Position { line: 643, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 643, column: 20, }, end: Position { line: 643, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 643, column: 26, }, end: Position { line: 643, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 644, column: 13, }, end: Position { line: 644, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "todo.localhost.localdomain", span: Span { start: Position { line: 644, column: 24, }, end: Position { line: 644, column: 50, }, }, }, ), ], span: Span { start: Position { line: 644, column: 23, }, end: Position { line: 644, column: 51, }, }, }, ), }, ), ], span: Span { start: Position { line: 641, column: 37, }, end: Position { line: 645, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "sock", span: Span { start: Position { line: 646, column: 11, }, end: Position { line: 646, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 646, column: 18, }, end: Position { line: 646, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 647, column: 13, }, end: Position { line: 647, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 647, column: 27, }, end: Position { line: 647, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 647, column: 31, }, end: Position { line: 647, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Path for the lmtp daemon's unix socket. Direct incoming mail to this socket.\nAlternatively, specify IP:PORT and an SMTP server will be run instead.\n", span: Span { start: Position { line: 648, column: 1, }, end: Position { line: 650, column: 13, }, }, }, ), ], span: Span { start: Position { line: 647, column: 37, }, end: Position { line: 650, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 651, column: 13, }, end: Position { line: 651, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 651, column: 20, }, end: Position { line: 651, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 651, column: 26, }, end: Position { line: 651, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 652, column: 13, }, end: Position { line: 652, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/tmp/todo.sr.ht-lmtp.sock", span: Span { start: Position { line: 652, column: 24, }, end: Position { line: 652, column: 49, }, }, }, ), ], span: Span { start: Position { line: 652, column: 23, }, end: Position { line: 652, column: 50, }, }, }, ), }, ), ], span: Span { start: Position { line: 646, column: 27, }, end: Position { line: 653, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "sock-group", span: Span { start: Position { line: 654, column: 11, }, end: Position { line: 654, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 654, column: 24, }, end: Position { line: 654, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 655, column: 13, }, end: Position { line: 655, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 655, column: 27, }, end: Position { line: 655, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 655, column: 31, }, end: Position { line: 655, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "The lmtp daemon will make the unix socket group-read/write\nfor users in this group.\n", span: Span { start: Position { line: 656, column: 1, }, end: Position { line: 658, column: 13, }, }, }, ), ], span: Span { start: Position { line: 655, column: 37, }, end: Position { line: 658, column: 15, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 659, column: 13, }, end: Position { line: 659, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 659, column: 20, }, end: Position { line: 659, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 659, column: 26, }, end: Position { line: 659, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 660, column: 13, }, end: Position { line: 660, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "postfix", span: Span { start: Position { line: 660, column: 24, }, end: Position { line: 660, column: 31, }, }, }, ), ], span: Span { start: Position { line: 660, column: 23, }, end: Position { line: 660, column: 32, }, }, }, ), }, ), ], span: Span { start: Position { line: 654, column: 33, }, end: Position { line: 661, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 640, column: 38, }, end: Position { line: 662, column: 10, }, }, }, ), }, ), ], span: Span { start: Position { line: 167, column: 34, }, end: Position { line: 663, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 664, column: 7, }, end: Position { line: 664, column: 14, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 664, column: 17, }, end: Position { line: 664, column: 20, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 665, column: 7, }, end: Position { line: 665, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 665, column: 21, }, end: Position { line: 665, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 665, column: 25, }, end: Position { line: 665, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "The configuration for the sourcehut network.\n", span: Span { start: Position { line: 666, column: 1, }, end: Position { line: 667, column: 7, }, }, }, ), ], span: Span { start: Position { line: 665, column: 31, }, end: Position { line: 667, column: 9, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 166, column: 25, }, end: Position { line: 668, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 670, column: 5, }, end: Position { line: 670, column: 11, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enableWorker", span: Span { start: Position { line: 671, column: 7, }, end: Position { line: 671, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 671, column: 22, }, end: Position { line: 671, column: 36, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 671, column: 38, }, end: Position { line: 671, column: 41, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 671, column: 42, }, end: Position { line: 671, column: 47, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "worker for builds.sr.ht\n\n::: {.warning}\nFor smaller deployments, job runners can be installed alongside the master server\nbut even if you only build your own software, integration with other services\nmay cause you to run untrusted builds\n(e.g. automatic testing of patches via listssrht).\nSee .\n:::\n", span: Span { start: Position { line: 672, column: 1, }, end: Position { line: 681, column: 7, }, }, }, ), ], span: Span { start: Position { line: 671, column: 48, }, end: Position { line: 681, column: 9, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "images", span: Span { start: Position { line: 683, column: 7, }, end: Position { line: 683, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 683, column: 16, }, end: Position { line: 683, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 684, column: 9, }, end: Position { line: 684, column: 13, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 684, column: 21, }, end: Position { line: 684, column: 26, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "attrsOf", span: Span { start: Position { line: 684, column: 28, }, end: Position { line: 684, column: 35, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "attrsOf", span: Span { start: Position { line: 684, column: 37, }, end: Position { line: 684, column: 44, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "attrsOf", span: Span { start: Position { line: 684, column: 46, }, end: Position { line: 684, column: 53, }, }, }, ), arguments: [ Identifier( Identifier { id: "package", span: Span { start: Position { line: 684, column: 54, }, end: Position { line: 684, column: 61, }, }, }, ), ], }, ), ], }, ), ], }, ), span: Span { start: Position { line: 684, column: 16, }, end: Position { line: 684, column: 63, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 685, column: 9, }, end: Position { line: 685, column: 16, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 685, column: 19, }, end: Position { line: 685, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 686, column: 9, }, end: Position { line: 686, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 686, column: 19, }, end: Position { line: 686, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "literalExpression", span: Span { start: Position { line: 686, column: 23, }, end: Position { line: 686, column: 40, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "(let\n # Pinning unstable to allow usage with flakes and limit rebuilds.\n pkgs_unstable = builtins.fetchGit {\n url = \"https://github.com/NixOS/nixpkgs\";\n rev = \"ff96a0fa5635770390b184ae74debea75c3fd534\";\n ref = \"nixos-unstable\";\n };\n image_from_nixpkgs = (import (\"", span: Span { start: Position { line: 686, column: 43, }, end: Position { line: 693, column: 44, }, }, }, ), Raw( PartRaw { content: "$", span: Span { start: Position { line: 686, column: 43, }, end: Position { line: 693, column: 47, }, }, }, ), Raw( PartRaw { content: "{pkgs.sourcehut.buildsrht}/lib/images/nixos/image.nix\") {\n pkgs = (import pkgs_unstable {});\n });\n in\n {\n nixos.unstable.x86_64 = image_from_nixpkgs;\n }\n )", span: Span { start: Position { line: 686, column: 43, }, end: Position { line: 700, column: 10, }, }, }, ), ], span: Span { start: Position { line: 686, column: 41, }, end: Position { line: 700, column: 12, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 701, column: 9, }, end: Position { line: 701, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 701, column: 23, }, end: Position { line: 701, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 701, column: 27, }, end: Position { line: 701, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Images for builds.sr.ht. Each package should be distro.release.arch and point to a /nix/store/package/root.img.qcow2.\n", span: Span { start: Position { line: 702, column: 1, }, end: Position { line: 703, column: 9, }, }, }, ), ], span: Span { start: Position { line: 701, column: 33, }, end: Position { line: 703, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 683, column: 25, }, end: Position { line: 704, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 670, column: 14, }, end: Position { line: 705, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 707, column: 5, }, end: Position { line: 707, column: 8, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "package", span: Span { start: Position { line: 708, column: 7, }, end: Position { line: 708, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 708, column: 17, }, end: Position { line: 708, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 709, column: 9, }, end: Position { line: 709, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 709, column: 16, }, end: Position { line: 709, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "package", span: Span { start: Position { line: 709, column: 22, }, end: Position { line: 709, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 710, column: 9, }, end: Position { line: 710, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 710, column: 19, }, end: Position { line: 710, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 710, column: 24, }, end: Position { line: 710, column: 27, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 711, column: 9, }, end: Position { line: 711, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 711, column: 23, }, end: Position { line: 711, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "pkgs.git", span: Span { start: Position { line: 711, column: 42, }, end: Position { line: 711, column: 50, }, }, }, ), ], span: Span { start: Position { line: 711, column: 41, }, end: Position { line: 711, column: 51, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 712, column: 9, }, end: Position { line: 712, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 712, column: 19, }, end: Position { line: 712, column: 36, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "pkgs.gitFull", span: Span { start: Position { line: 712, column: 38, }, end: Position { line: 712, column: 50, }, }, }, ), ], span: Span { start: Position { line: 712, column: 37, }, end: Position { line: 712, column: 51, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 713, column: 9, }, end: Position { line: 713, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 713, column: 23, }, end: Position { line: 713, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 713, column: 27, }, end: Position { line: 713, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Git package for git.sr.ht. This can help silence collisions.\n", span: Span { start: Position { line: 714, column: 1, }, end: Position { line: 715, column: 9, }, }, }, ), ], span: Span { start: Position { line: 713, column: 33, }, end: Position { line: 715, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 708, column: 26, }, end: Position { line: 716, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "fcgiwrap", span: Span { start: Position { line: 717, column: 7, }, end: Position { line: 717, column: 15, }, }, }, ), Raw( PartRaw { content: "preforkProcess", span: Span { start: Position { line: 717, column: 16, }, end: Position { line: 717, column: 30, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 717, column: 33, }, end: Position { line: 717, column: 41, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 718, column: 9, }, end: Position { line: 718, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 718, column: 23, }, end: Position { line: 718, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 718, column: 27, }, end: Position { line: 718, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Number of fcgiwrap processes to prefork.", span: Span { start: Position { line: 718, column: 34, }, end: Position { line: 718, column: 74, }, }, }, ), ], span: Span { start: Position { line: 718, column: 33, }, end: Position { line: 718, column: 75, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 719, column: 9, }, end: Position { line: 719, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 719, column: 16, }, end: Position { line: 719, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "int", span: Span { start: Position { line: 719, column: 22, }, end: Position { line: 719, column: 25, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 720, column: 9, }, end: Position { line: 720, column: 16, }, }, }, ), ], to: Integer( Integer { value: "4", span: Span { start: Position { line: 720, column: 19, }, end: Position { line: 720, column: 20, }, }, }, ), }, ), ], span: Span { start: Position { line: 717, column: 42, }, end: Position { line: 721, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 707, column: 11, }, end: Position { line: 722, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 724, column: 5, }, end: Position { line: 724, column: 7, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "package", span: Span { start: Position { line: 725, column: 7, }, end: Position { line: 725, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 725, column: 17, }, end: Position { line: 725, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 726, column: 9, }, end: Position { line: 726, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 726, column: 16, }, end: Position { line: 726, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "package", span: Span { start: Position { line: 726, column: 22, }, end: Position { line: 726, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 727, column: 9, }, end: Position { line: 727, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 727, column: 19, }, end: Position { line: 727, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mercurial", span: Span { start: Position { line: 727, column: 24, }, end: Position { line: 727, column: 33, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 728, column: 9, }, end: Position { line: 728, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 728, column: 23, }, end: Position { line: 728, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "pkgs.mercurial", span: Span { start: Position { line: 728, column: 42, }, end: Position { line: 728, column: 56, }, }, }, ), ], span: Span { start: Position { line: 728, column: 41, }, end: Position { line: 728, column: 57, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 729, column: 9, }, end: Position { line: 729, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 729, column: 23, }, end: Position { line: 729, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 729, column: 27, }, end: Position { line: 729, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Mercurial package for hg.sr.ht. This can help silence collisions.\n", span: Span { start: Position { line: 730, column: 1, }, end: Position { line: 731, column: 9, }, }, }, ), ], span: Span { start: Position { line: 729, column: 33, }, end: Position { line: 731, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 725, column: 26, }, end: Position { line: 732, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "cloneBundles", span: Span { start: Position { line: 733, column: 7, }, end: Position { line: 733, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 733, column: 22, }, end: Position { line: 733, column: 30, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 734, column: 9, }, end: Position { line: 734, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 734, column: 16, }, end: Position { line: 734, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 734, column: 22, }, end: Position { line: 734, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 735, column: 9, }, end: Position { line: 735, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 735, column: 19, }, end: Position { line: 735, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 736, column: 9, }, end: Position { line: 736, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 736, column: 23, }, end: Position { line: 736, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 736, column: 27, }, end: Position { line: 736, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Generate clonebundles (which require more disk space but dramatically speed up cloning large repositories).\n", span: Span { start: Position { line: 737, column: 1, }, end: Position { line: 738, column: 9, }, }, }, ), ], span: Span { start: Position { line: 736, column: 33, }, end: Position { line: 738, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 733, column: 31, }, end: Position { line: 739, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 724, column: 10, }, end: Position { line: 740, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "lists", span: Span { start: Position { line: 742, column: 5, }, end: Position { line: 742, column: 10, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "process", span: Span { start: Position { line: 743, column: 7, }, end: Position { line: 743, column: 14, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraArgs", span: Span { start: Position { line: 744, column: 9, }, end: Position { line: 744, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 744, column: 21, }, end: Position { line: 744, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 745, column: 11, }, end: Position { line: 745, column: 15, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 745, column: 23, }, end: Position { line: 745, column: 28, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "listOf", span: Span { start: Position { line: 745, column: 30, }, end: Position { line: 745, column: 36, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 745, column: 37, }, end: Position { line: 745, column: 40, }, }, }, ), ], }, ), span: Span { start: Position { line: 745, column: 18, }, end: Position { line: 745, column: 40, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 746, column: 11, }, end: Position { line: 746, column: 18, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "--loglevel DEBUG", span: Span { start: Position { line: 746, column: 24, }, end: Position { line: 746, column: 40, }, }, }, ), ], span: Span { start: Position { line: 746, column: 23, }, end: Position { line: 746, column: 41, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "--pool eventlet", span: Span { start: Position { line: 746, column: 43, }, end: Position { line: 746, column: 58, }, }, }, ), ], span: Span { start: Position { line: 746, column: 42, }, end: Position { line: 746, column: 59, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "--without-heartbeat", span: Span { start: Position { line: 746, column: 61, }, end: Position { line: 746, column: 80, }, }, }, ), ], span: Span { start: Position { line: 746, column: 60, }, end: Position { line: 746, column: 81, }, }, }, ), ], span: Span { start: Position { line: 746, column: 21, }, end: Position { line: 746, column: 83, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 747, column: 11, }, end: Position { line: 747, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 747, column: 25, }, end: Position { line: 747, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 747, column: 29, }, end: Position { line: 747, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Extra arguments passed to the Celery responsible for processing mails.", span: Span { start: Position { line: 747, column: 36, }, end: Position { line: 747, column: 106, }, }, }, ), ], span: Span { start: Position { line: 747, column: 35, }, end: Position { line: 747, column: 107, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 744, column: 30, }, end: Position { line: 748, column: 10, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "celeryConfig", span: Span { start: Position { line: 749, column: 9, }, end: Position { line: 749, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 749, column: 24, }, end: Position { line: 749, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 750, column: 11, }, end: Position { line: 750, column: 15, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 750, column: 18, }, end: Position { line: 750, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lines", span: Span { start: Position { line: 750, column: 24, }, end: Position { line: 750, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 751, column: 11, }, end: Position { line: 751, column: 18, }, }, }, ), ], to: String( String_ { parts: [], span: Span { start: Position { line: 751, column: 21, }, end: Position { line: 751, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 752, column: 11, }, end: Position { line: 752, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 752, column: 25, }, end: Position { line: 752, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 752, column: 29, }, end: Position { line: 752, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Content of the `celeryconfig.py` used by the Celery of `listssrht-process`.", span: Span { start: Position { line: 752, column: 36, }, end: Position { line: 752, column: 111, }, }, }, ), ], span: Span { start: Position { line: 752, column: 35, }, end: Position { line: 752, column: 112, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 749, column: 33, }, end: Position { line: 753, column: 10, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 743, column: 17, }, end: Position { line: 754, column: 8, }, }, }, ), }, ), ], span: Span { start: Position { line: 742, column: 13, }, end: Position { line: 755, column: 6, }, }, }, ), }, ), ], span: Span { start: Position { line: 110, column: 32, }, end: Position { line: 756, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "config", span: Span { start: Position { line: 758, column: 3, }, end: Position { line: 758, column: 9, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 758, column: 12, }, end: Position { line: 758, column: 16, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 758, column: 17, }, end: Position { line: 758, column: 20, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 758, column: 21, }, end: Position { line: 758, column: 27, }, }, }, ), ], default: None, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkMerge", span: Span { start: Position { line: 758, column: 29, }, end: Position { line: 758, column: 36, }, }, }, ), arguments: [ List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "environment", span: Span { start: Position { line: 760, column: 7, }, end: Position { line: 760, column: 18, }, }, }, ), Raw( PartRaw { content: "systemPackages", span: Span { start: Position { line: 760, column: 19, }, end: Position { line: 760, column: 33, }, }, }, ), ], to: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 760, column: 38, }, end: Position { line: 760, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 760, column: 43, }, end: Position { line: 760, column: 52, }, }, }, ), Raw( PartRaw { content: "coresrht", span: Span { start: Position { line: 760, column: 53, }, end: Position { line: 760, column: 61, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 760, column: 36, }, end: Position { line: 760, column: 63, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 762, column: 7, }, end: Position { line: 762, column: 15, }, }, }, ), Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 762, column: 16, }, end: Position { line: 762, column: 25, }, }, }, ), Raw( PartRaw { content: "settings", span: Span { start: Position { line: 762, column: 26, }, end: Position { line: 762, column: 34, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "git.sr.ht", span: Span { start: Position { line: 763, column: 10, }, end: Position { line: 763, column: 19, }, }, }, ), ], span: Span { start: Position { line: 763, column: 9, }, end: Position { line: 763, column: 20, }, }, }, ), }, ), Raw( PartRaw { content: "outgoing-domain", span: Span { start: Position { line: 763, column: 21, }, end: Position { line: 763, column: 36, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 763, column: 39, }, end: Position { line: 763, column: 48, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "https://git.", span: Span { start: Position { line: 763, column: 50, }, end: Position { line: 763, column: 71, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 763, column: 64, }, end: Position { line: 763, column: 70, }, }, }, ), }, ), ], span: Span { start: Position { line: 763, column: 49, }, end: Position { line: 763, column: 72, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "lists.sr.ht", span: Span { start: Position { line: 764, column: 10, }, end: Position { line: 764, column: 21, }, }, }, ), ], span: Span { start: Position { line: 764, column: 9, }, end: Position { line: 764, column: 22, }, }, }, ), }, ), Raw( PartRaw { content: "notify-from", span: Span { start: Position { line: 764, column: 23, }, end: Position { line: 764, column: 34, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 764, column: 37, }, end: Position { line: 764, column: 46, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "lists-notify@", span: Span { start: Position { line: 764, column: 48, }, end: Position { line: 764, column: 70, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 764, column: 63, }, end: Position { line: 764, column: 69, }, }, }, ), }, ), ], span: Span { start: Position { line: 764, column: 47, }, end: Position { line: 764, column: 71, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "lists.sr.ht", span: Span { start: Position { line: 765, column: 10, }, end: Position { line: 765, column: 21, }, }, }, ), ], span: Span { start: Position { line: 765, column: 9, }, end: Position { line: 765, column: 22, }, }, }, ), }, ), Raw( PartRaw { content: "posting-domain", span: Span { start: Position { line: 765, column: 23, }, end: Position { line: 765, column: 37, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 765, column: 40, }, end: Position { line: 765, column: 49, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "lists.", span: Span { start: Position { line: 765, column: 51, }, end: Position { line: 765, column: 66, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 765, column: 59, }, end: Position { line: 765, column: 65, }, }, }, ), }, ), ], span: Span { start: Position { line: 765, column: 50, }, end: Position { line: 765, column: 67, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "meta.sr.ht::settings", span: Span { start: Position { line: 766, column: 10, }, end: Position { line: 766, column: 30, }, }, }, ), ], span: Span { start: Position { line: 766, column: 9, }, end: Position { line: 766, column: 31, }, }, }, ), }, ), Raw( PartRaw { content: "onboarding-redirect", span: Span { start: Position { line: 766, column: 32, }, end: Position { line: 766, column: 51, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 766, column: 54, }, end: Position { line: 766, column: 63, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "https://meta.", span: Span { start: Position { line: 766, column: 65, }, end: Position { line: 766, column: 87, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 766, column: 80, }, end: Position { line: 766, column: 86, }, }, }, ), }, ), ], span: Span { start: Position { line: 766, column: 64, }, end: Position { line: 766, column: 88, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "todo.sr.ht", span: Span { start: Position { line: 767, column: 10, }, end: Position { line: 767, column: 20, }, }, }, ), ], span: Span { start: Position { line: 767, column: 9, }, end: Position { line: 767, column: 21, }, }, }, ), }, ), Raw( PartRaw { content: "notify-from", span: Span { start: Position { line: 767, column: 22, }, end: Position { line: 767, column: 33, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 767, column: 36, }, end: Position { line: 767, column: 45, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "todo-notify@", span: Span { start: Position { line: 767, column: 47, }, end: Position { line: 767, column: 68, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 767, column: 61, }, end: Position { line: 767, column: 67, }, }, }, ), }, ), ], span: Span { start: Position { line: 767, column: 46, }, end: Position { line: 767, column: 69, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "todo.sr.ht::mail", span: Span { start: Position { line: 768, column: 10, }, end: Position { line: 768, column: 26, }, }, }, ), ], span: Span { start: Position { line: 768, column: 9, }, end: Position { line: 768, column: 27, }, }, }, ), }, ), Raw( PartRaw { content: "posting-domain", span: Span { start: Position { line: 768, column: 28, }, end: Position { line: 768, column: 42, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 768, column: 45, }, end: Position { line: 768, column: 54, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "todo.", span: Span { start: Position { line: 768, column: 56, }, end: Position { line: 768, column: 70, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 768, column: 63, }, end: Position { line: 768, column: 69, }, }, }, ), }, ), ], span: Span { start: Position { line: 768, column: 55, }, end: Position { line: 768, column: 71, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 762, column: 37, }, end: Position { line: 769, column: 8, }, }, }, ), }, ), ], span: Span { start: Position { line: 759, column: 5, }, end: Position { line: 770, column: 6, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 771, column: 6, }, end: Position { line: 771, column: 10, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 771, column: 11, }, end: Position { line: 771, column: 14, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "postgresql", span: Span { start: Position { line: 771, column: 15, }, end: Position { line: 771, column: 25, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 771, column: 26, }, end: Position { line: 771, column: 32, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertions", span: Span { start: Position { line: 772, column: 7, }, end: Position { line: 772, column: 17, }, }, }, ), ], to: List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 773, column: 11, }, end: Position { line: 773, column: 20, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "postgresql", span: Span { start: Position { line: 773, column: 23, }, end: Position { line: 773, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 773, column: 34, }, end: Position { line: 773, column: 40, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 774, column: 11, }, end: Position { line: 774, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "postgresql must be enabled and configured", span: Span { start: Position { line: 774, column: 22, }, end: Position { line: 774, column: 63, }, }, }, ), ], span: Span { start: Position { line: 774, column: 21, }, end: Position { line: 774, column: 64, }, }, }, ), }, ), ], span: Span { start: Position { line: 773, column: 9, }, end: Position { line: 775, column: 10, }, }, }, ), ], span: Span { start: Position { line: 772, column: 20, }, end: Position { line: 776, column: 8, }, }, }, ), }, ), ], span: Span { start: Position { line: 771, column: 33, }, end: Position { line: 777, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 778, column: 6, }, end: Position { line: 778, column: 10, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 778, column: 11, }, end: Position { line: 778, column: 14, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "postfix", span: Span { start: Position { line: 778, column: 15, }, end: Position { line: 778, column: 22, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 778, column: 23, }, end: Position { line: 778, column: 29, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertions", span: Span { start: Position { line: 779, column: 7, }, end: Position { line: 779, column: 17, }, }, }, ), ], to: List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 780, column: 11, }, end: Position { line: 780, column: 20, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "postfix", span: Span { start: Position { line: 780, column: 23, }, end: Position { line: 780, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 780, column: 31, }, end: Position { line: 780, column: 37, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 781, column: 11, }, end: Position { line: 781, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "postfix must be enabled and configured", span: Span { start: Position { line: 781, column: 22, }, end: Position { line: 781, column: 60, }, }, }, ), ], span: Span { start: Position { line: 781, column: 21, }, end: Position { line: 781, column: 61, }, }, }, ), }, ), ], span: Span { start: Position { line: 780, column: 9, }, end: Position { line: 782, column: 10, }, }, }, ), ], span: Span { start: Position { line: 779, column: 20, }, end: Position { line: 783, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 785, column: 7, }, end: Position { line: 785, column: 14, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 785, column: 15, }, end: Position { line: 785, column: 23, }, }, }, ), Raw( PartRaw { content: "postfix", span: Span { start: Position { line: 785, column: 24, }, end: Position { line: 785, column: 31, }, }, }, ), Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 785, column: 32, }, end: Position { line: 785, column: 45, }, }, }, ), Raw( PartRaw { content: "PrivateTmp", span: Span { start: Position { line: 785, column: 46, }, end: Position { line: 785, column: 56, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 785, column: 59, }, end: Position { line: 785, column: 63, }, }, }, ), }, ), ], span: Span { start: Position { line: 778, column: 30, }, end: Position { line: 786, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 787, column: 6, }, end: Position { line: 787, column: 10, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 787, column: 11, }, end: Position { line: 787, column: 14, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "redis", span: Span { start: Position { line: 787, column: 15, }, end: Position { line: 787, column: 20, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 787, column: 21, }, end: Position { line: 787, column: 27, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 788, column: 7, }, end: Position { line: 788, column: 15, }, }, }, ), Raw( PartRaw { content: "redis", span: Span { start: Position { line: 788, column: 16, }, end: Position { line: 788, column: 21, }, }, }, ), Raw( PartRaw { content: "vmOverCommit", span: Span { start: Position { line: 788, column: 22, }, end: Position { line: 788, column: 34, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 788, column: 37, }, end: Position { line: 788, column: 46, }, }, }, ), arguments: [ Identifier( Identifier { id: "true", span: Span { start: Position { line: 788, column: 47, }, end: Position { line: 788, column: 51, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 787, column: 28, }, end: Position { line: 789, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 790, column: 6, }, end: Position { line: 790, column: 10, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 790, column: 11, }, end: Position { line: 790, column: 14, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 790, column: 15, }, end: Position { line: 790, column: 20, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 790, column: 21, }, end: Position { line: 790, column: 27, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertions", span: Span { start: Position { line: 791, column: 7, }, end: Position { line: 791, column: 17, }, }, }, ), ], to: List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 792, column: 11, }, end: Position { line: 792, column: 20, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "nginx", span: Span { start: Position { line: 792, column: 23, }, end: Position { line: 792, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 792, column: 29, }, end: Position { line: 792, column: 35, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 793, column: 11, }, end: Position { line: 793, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "nginx must be enabled and configured", span: Span { start: Position { line: 793, column: 22, }, end: Position { line: 793, column: 58, }, }, }, ), ], span: Span { start: Position { line: 793, column: 21, }, end: Position { line: 793, column: 59, }, }, }, ), }, ), ], span: Span { start: Position { line: 792, column: 9, }, end: Position { line: 794, column: 10, }, }, }, ), ], span: Span { start: Position { line: 791, column: 20, }, end: Position { line: 795, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 797, column: 7, }, end: Position { line: 797, column: 15, }, }, }, ), Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 797, column: 16, }, end: Position { line: 797, column: 21, }, }, }, ), Raw( PartRaw { content: "recommendedProxySettings", span: Span { start: Position { line: 797, column: 22, }, end: Position { line: 797, column: 46, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 797, column: 49, }, end: Position { line: 797, column: 58, }, }, }, ), arguments: [ Identifier( Identifier { id: "true", span: Span { start: Position { line: 797, column: 59, }, end: Position { line: 797, column: 63, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 790, column: 28, }, end: Position { line: 798, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 799, column: 6, }, end: Position { line: 799, column: 10, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 799, column: 12, }, end: Position { line: 799, column: 15, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 799, column: 16, }, end: Position { line: 799, column: 22, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 799, column: 23, }, end: Position { line: 799, column: 29, }, }, }, ), ], default: None, }, ), operator: LogicalOr, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 799, column: 33, }, end: Position { line: 799, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 799, column: 37, }, end: Position { line: 799, column: 40, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 799, column: 41, }, end: Position { line: 799, column: 47, }, }, }, ), ], default: None, }, ), }, ), operator: LogicalOr, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 799, column: 51, }, end: Position { line: 799, column: 54, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 799, column: 55, }, end: Position { line: 799, column: 57, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 799, column: 58, }, end: Position { line: 799, column: 64, }, }, }, ), ], default: None, }, ), }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 800, column: 7, }, end: Position { line: 800, column: 15, }, }, }, ), Raw( PartRaw { content: "openssh", span: Span { start: Position { line: 800, column: 16, }, end: Position { line: 800, column: 23, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "authorizedKeysCommand", span: Span { start: Position { line: 808, column: 9, }, end: Position { line: 808, column: 30, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "/etc/ssh/sourcehut/subdir/srht-dispatch \"%u\" \"%h\" \"%t\" \"%k\"", span: Span { start: Position { line: 808, column: 35, }, end: Position { line: 808, column: 94, }, }, }, ), ], span: Span { start: Position { line: 808, column: 33, }, end: Position { line: 808, column: 96, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "authorizedKeysCommandUser", span: Span { start: Position { line: 810, column: 9, }, end: Position { line: 810, column: 34, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "root", span: Span { start: Position { line: 810, column: 38, }, end: Position { line: 810, column: 42, }, }, }, ), ], span: Span { start: Position { line: 810, column: 37, }, end: Position { line: 810, column: 43, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraConfig", span: Span { start: Position { line: 811, column: 9, }, end: Position { line: 811, column: 20, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "PermitUserEnvironment SRHT_*\n", span: Span { start: Position { line: 812, column: 1, }, end: Position { line: 813, column: 9, }, }, }, ), ], span: Span { start: Position { line: 811, column: 23, }, end: Position { line: 813, column: 11, }, }, }, ), }, ), ], span: Span { start: Position { line: 800, column: 26, }, end: Position { line: 814, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "environment", span: Span { start: Position { line: 815, column: 7, }, end: Position { line: 815, column: 18, }, }, }, ), Raw( PartRaw { content: "etc", span: Span { start: Position { line: 815, column: 19, }, end: Position { line: 815, column: 22, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "ssh/sourcehut/config.ini", span: Span { start: Position { line: 815, column: 24, }, end: Position { line: 815, column: 48, }, }, }, ), ], span: Span { start: Position { line: 815, column: 23, }, end: Position { line: 815, column: 49, }, }, }, ), }, ), Raw( PartRaw { content: "source", span: Span { start: Position { line: 815, column: 50, }, end: Position { line: 815, column: 56, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "settingsFormat", span: Span { start: Position { line: 816, column: 9, }, end: Position { line: 816, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "generate", span: Span { start: Position { line: 816, column: 24, }, end: Position { line: 816, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "sourcehut-dispatch-config.ini", span: Span { start: Position { line: 816, column: 34, }, end: Position { line: 816, column: 63, }, }, }, ), ], span: Span { start: Position { line: 816, column: 33, }, end: Position { line: 816, column: 64, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "filterAttrs", span: Span { start: Position { line: 817, column: 12, }, end: Position { line: 817, column: 23, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "k", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "v", }, ), body: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "k", span: Span { start: Position { line: 817, column: 31, }, end: Position { line: 817, column: 32, }, }, }, ), operator: EqualTo, right: String( String_ { parts: [ Raw( PartRaw { content: "git.sr.ht::dispatch", span: Span { start: Position { line: 817, column: 37, }, end: Position { line: 817, column: 56, }, }, }, ), ], span: Span { start: Position { line: 817, column: 36, }, end: Position { line: 817, column: 57, }, }, }, ), }, ), span: Span { start: Position { line: 817, column: 28, }, end: Position { line: 817, column: 57, }, }, }, ), span: Span { start: Position { line: 817, column: 25, }, end: Position { line: 817, column: 57, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 818, column: 11, }, end: Position { line: 818, column: 14, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 818, column: 15, }, end: Position { line: 818, column: 23, }, }, }, ), ], default: None, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "environment", span: Span { start: Position { line: 819, column: 7, }, end: Position { line: 819, column: 18, }, }, }, ), Raw( PartRaw { content: "etc", span: Span { start: Position { line: 819, column: 19, }, end: Position { line: 819, column: 22, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "ssh/sourcehut/subdir/srht-dispatch", span: Span { start: Position { line: 819, column: 24, }, end: Position { line: 819, column: 58, }, }, }, ), ], span: Span { start: Position { line: 819, column: 23, }, end: Position { line: 819, column: 59, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "mode", span: Span { start: Position { line: 821, column: 9, }, end: Position { line: 821, column: 13, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "0755", span: Span { start: Position { line: 821, column: 17, }, end: Position { line: 821, column: 21, }, }, }, ), ], span: Span { start: Position { line: 821, column: 16, }, end: Position { line: 821, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "source", span: Span { start: Position { line: 822, column: 9, }, end: Position { line: 822, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 822, column: 18, }, end: Position { line: 822, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeShellScript", span: Span { start: Position { line: 822, column: 23, }, end: Position { line: 822, column: 39, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "srht-dispatch", span: Span { start: Position { line: 822, column: 41, }, end: Position { line: 822, column: 54, }, }, }, ), ], span: Span { start: Position { line: 822, column: 40, }, end: Position { line: 822, column: 55, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "set -e\ncd /etc/ssh/sourcehut/subdir\n", span: Span { start: Position { line: 823, column: 1, }, end: Position { line: 825, column: 11, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 825, column: 13, }, end: Position { line: 825, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "python", span: Span { start: Position { line: 825, column: 17, }, end: Position { line: 825, column: 23, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/gitsrht-dispatch \"$@\"\n", span: Span { start: Position { line: 823, column: 1, }, end: Position { line: 826, column: 9, }, }, }, ), ], span: Span { start: Position { line: 822, column: 56, }, end: Position { line: 826, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 819, column: 62, }, end: Position { line: 827, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 828, column: 7, }, end: Position { line: 828, column: 14, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 828, column: 15, }, end: Position { line: 828, column: 23, }, }, }, ), Raw( PartRaw { content: "sshd", span: Span { start: Position { line: 828, column: 24, }, end: Position { line: 828, column: 28, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 830, column: 9, }, end: Position { line: 830, column: 22, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "BindReadOnlyPaths", span: Span { start: Position { line: 831, column: 11, }, end: Position { line: 831, column: 28, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 839, column: 13, }, end: Position { line: 839, column: 22, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 839, column: 23, }, end: Position { line: 839, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 839, column: 27, }, end: Position { line: 839, column: 33, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 839, column: 34, }, end: Position { line: 839, column: 40, }, }, }, ), ], default: None, }, ), List( List { elements: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 840, column: 18, }, end: Position { line: 840, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeShellScript", span: Span { start: Position { line: 840, column: 23, }, end: Position { line: 840, column: 39, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "buildsrht-keys-wrapper", span: Span { start: Position { line: 840, column: 41, }, end: Position { line: 840, column: 63, }, }, }, ), ], span: Span { start: Position { line: 840, column: 40, }, end: Position { line: 840, column: 64, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "set -e\ncd /run/sourcehut/buildsrht/subdir\nset -x\nexec -a \"$0\" ", span: Span { start: Position { line: 841, column: 1, }, end: Position { line: 844, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 844, column: 32, }, end: Position { line: 844, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 844, column: 37, }, end: Position { line: 844, column: 46, }, }, }, ), Raw( PartRaw { content: "buildsrht", span: Span { start: Position { line: 844, column: 47, }, end: Position { line: 844, column: 56, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/buildsrht-keys \"$@\"\n", span: Span { start: Position { line: 841, column: 1, }, end: Position { line: 845, column: 15, }, }, }, ), ], span: Span { start: Position { line: 840, column: 65, }, end: Position { line: 845, column: 17, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: ":/usr/bin/buildsrht-keys", span: Span { start: Position { line: 840, column: 16, }, end: Position { line: 845, column: 42, }, }, }, ), ], span: Span { start: Position { line: 840, column: 15, }, end: Position { line: 845, column: 43, }, }, }, ), String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 846, column: 18, }, end: Position { line: 846, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 846, column: 23, }, end: Position { line: 846, column: 32, }, }, }, ), Raw( PartRaw { content: "buildsrht", span: Span { start: Position { line: 846, column: 33, }, end: Position { line: 846, column: 42, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/master-shell:/usr/bin/master-shell", span: Span { start: Position { line: 846, column: 16, }, end: Position { line: 846, column: 82, }, }, }, ), ], span: Span { start: Position { line: 846, column: 15, }, end: Position { line: 846, column: 83, }, }, }, ), String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 847, column: 18, }, end: Position { line: 847, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 847, column: 23, }, end: Position { line: 847, column: 32, }, }, }, ), Raw( PartRaw { content: "buildsrht", span: Span { start: Position { line: 847, column: 33, }, end: Position { line: 847, column: 42, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/runner-shell:/usr/bin/runner-shell", span: Span { start: Position { line: 847, column: 16, }, end: Position { line: 847, column: 82, }, }, }, ), ], span: Span { start: Position { line: 847, column: 15, }, end: Position { line: 847, column: 83, }, }, }, ), ], span: Span { start: Position { line: 839, column: 41, }, end: Position { line: 848, column: 14, }, }, }, ), ], }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 849, column: 13, }, end: Position { line: 849, column: 22, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 849, column: 23, }, end: Position { line: 849, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 849, column: 27, }, end: Position { line: 849, column: 30, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 849, column: 31, }, end: Position { line: 849, column: 37, }, }, }, ), ], default: None, }, ), List( List { elements: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 852, column: 18, }, end: Position { line: 852, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeShellScript", span: Span { start: Position { line: 852, column: 23, }, end: Position { line: 852, column: 39, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "gitsrht-keys-wrapper", span: Span { start: Position { line: 852, column: 41, }, end: Position { line: 852, column: 61, }, }, }, ), ], span: Span { start: Position { line: 852, column: 40, }, end: Position { line: 852, column: 62, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "set -e\ncd /run/sourcehut/gitsrht/subdir\nset -x\nexec -a \"$0\" ", span: Span { start: Position { line: 853, column: 1, }, end: Position { line: 856, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 856, column: 32, }, end: Position { line: 856, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 856, column: 37, }, end: Position { line: 856, column: 46, }, }, }, ), Raw( PartRaw { content: "gitsrht", span: Span { start: Position { line: 856, column: 47, }, end: Position { line: 856, column: 54, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/gitsrht-keys \"$@\"\n", span: Span { start: Position { line: 853, column: 1, }, end: Position { line: 857, column: 15, }, }, }, ), ], span: Span { start: Position { line: 852, column: 63, }, end: Position { line: 857, column: 17, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: ":/usr/bin/gitsrht-keys", span: Span { start: Position { line: 852, column: 16, }, end: Position { line: 857, column: 40, }, }, }, ), ], span: Span { start: Position { line: 852, column: 15, }, end: Position { line: 857, column: 41, }, }, }, ), String( String_ { parts: [ Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 858, column: 18, }, end: Position { line: 858, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeShellScript", span: Span { start: Position { line: 858, column: 23, }, end: Position { line: 858, column: 39, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "gitsrht-shell-wrapper", span: Span { start: Position { line: 858, column: 41, }, end: Position { line: 858, column: 62, }, }, }, ), ], span: Span { start: Position { line: 858, column: 40, }, end: Position { line: 858, column: 63, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "set -e\ncd /run/sourcehut/gitsrht/subdir\nset -x\nexec -a \"$0\" ", span: Span { start: Position { line: 859, column: 1, }, end: Position { line: 862, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 862, column: 32, }, end: Position { line: 862, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 862, column: 37, }, end: Position { line: 862, column: 46, }, }, }, ), Raw( PartRaw { content: "gitsrht", span: Span { start: Position { line: 862, column: 47, }, end: Position { line: 862, column: 54, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/gitsrht-shell \"$@\"\n", span: Span { start: Position { line: 859, column: 1, }, end: Position { line: 863, column: 15, }, }, }, ), ], span: Span { start: Position { line: 858, column: 64, }, end: Position { line: 863, column: 17, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: ":/usr/bin/gitsrht-shell", span: Span { start: Position { line: 858, column: 16, }, end: Position { line: 863, column: 41, }, }, }, ), ], span: Span { start: Position { line: 858, column: 15, }, end: Position { line: 863, column: 42, }, }, }, ), String( String_ { parts: [ Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 864, column: 18, }, end: Position { line: 864, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeShellScript", span: Span { start: Position { line: 864, column: 23, }, end: Position { line: 864, column: 39, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "gitsrht-update-hook", span: Span { start: Position { line: 864, column: 41, }, end: Position { line: 864, column: 60, }, }, }, ), ], span: Span { start: Position { line: 864, column: 40, }, end: Position { line: 864, column: 61, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "set -e\ntest -e \"", span: Span { start: Position { line: 865, column: 1, }, end: Position { line: 866, column: 26, }, }, }, ), Raw( PartRaw { content: "$", span: Span { start: Position { line: 865, column: 1, }, end: Position { line: 866, column: 29, }, }, }, ), Raw( PartRaw { content: "{PWD%/*}\"/config.ini ||\n# Git hooks are run relative to their repository's directory,\n# but gitsrht-update-hook looks up ../config.ini\nln -s /run/sourcehut/gitsrht/config.ini \"", span: Span { start: Position { line: 865, column: 1, }, end: Position { line: 869, column: 58, }, }, }, ), Raw( PartRaw { content: "$", span: Span { start: Position { line: 865, column: 1, }, end: Position { line: 869, column: 61, }, }, }, ), Raw( PartRaw { content: "{PWD%/*}\"/config.ini\n# hooks/post-update calls /usr/bin/gitsrht-update-hook as hooks/stage-3\n# but this wrapper being a bash script, it overrides $0 with /usr/bin/gitsrht-update-hook\n# hence this hack to put hooks/stage-3 back into gitsrht-update-hook's $0\nif test \"", span: Span { start: Position { line: 865, column: 1, }, end: Position { line: 873, column: 26, }, }, }, ), Raw( PartRaw { content: "$", span: Span { start: Position { line: 865, column: 1, }, end: Position { line: 873, column: 29, }, }, }, ), Raw( PartRaw { content: "{STAGE3:+set}\"\nthen\n set -x\n exec -a hooks/stage-3 ", span: Span { start: Position { line: 865, column: 1, }, end: Position { line: 876, column: 41, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 876, column: 43, }, end: Position { line: 876, column: 47, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 876, column: 48, }, end: Position { line: 876, column: 57, }, }, }, ), Raw( PartRaw { content: "gitsrht", span: Span { start: Position { line: 876, column: 58, }, end: Position { line: 876, column: 65, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/gitsrht-update-hook \"$@\"\nelse\n export STAGE3=set\n set -x\n exec -a \"$0\" ", span: Span { start: Position { line: 865, column: 1, }, end: Position { line: 880, column: 32, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 880, column: 34, }, end: Position { line: 880, column: 38, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 880, column: 39, }, end: Position { line: 880, column: 48, }, }, }, ), Raw( PartRaw { content: "gitsrht", span: Span { start: Position { line: 880, column: 49, }, end: Position { line: 880, column: 56, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/gitsrht-update-hook \"$@\"\nfi\n", span: Span { start: Position { line: 865, column: 1, }, end: Position { line: 882, column: 15, }, }, }, ), ], span: Span { start: Position { line: 864, column: 62, }, end: Position { line: 882, column: 17, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: ":/usr/bin/gitsrht-update-hook", span: Span { start: Position { line: 864, column: 16, }, end: Position { line: 882, column: 47, }, }, }, ), ], span: Span { start: Position { line: 864, column: 15, }, end: Position { line: 882, column: 48, }, }, }, ), ], span: Span { start: Position { line: 849, column: 38, }, end: Position { line: 883, column: 14, }, }, }, ), ], }, ), operator: Concatenation, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 884, column: 13, }, end: Position { line: 884, column: 22, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 884, column: 23, }, end: Position { line: 884, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 884, column: 27, }, end: Position { line: 884, column: 29, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 884, column: 30, }, end: Position { line: 884, column: 36, }, }, }, ), ], default: None, }, ), List( List { elements: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 887, column: 18, }, end: Position { line: 887, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeShellScript", span: Span { start: Position { line: 887, column: 23, }, end: Position { line: 887, column: 39, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "hgsrht-keys-wrapper", span: Span { start: Position { line: 887, column: 41, }, end: Position { line: 887, column: 60, }, }, }, ), ], span: Span { start: Position { line: 887, column: 40, }, end: Position { line: 887, column: 61, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "set -e\ncd /run/sourcehut/hgsrht/subdir\nset -x\nexec -a \"$0\" ", span: Span { start: Position { line: 888, column: 1, }, end: Position { line: 891, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 891, column: 32, }, end: Position { line: 891, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 891, column: 37, }, end: Position { line: 891, column: 46, }, }, }, ), Raw( PartRaw { content: "hgsrht", span: Span { start: Position { line: 891, column: 47, }, end: Position { line: 891, column: 53, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/hgsrht-keys \"$@\"\n", span: Span { start: Position { line: 888, column: 1, }, end: Position { line: 892, column: 15, }, }, }, ), ], span: Span { start: Position { line: 887, column: 62, }, end: Position { line: 892, column: 17, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: ":/usr/bin/hgsrht-keys", span: Span { start: Position { line: 887, column: 16, }, end: Position { line: 892, column: 39, }, }, }, ), ], span: Span { start: Position { line: 887, column: 15, }, end: Position { line: 892, column: 40, }, }, }, ), String( String_ { parts: [ Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 893, column: 18, }, end: Position { line: 893, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeShellScript", span: Span { start: Position { line: 893, column: 23, }, end: Position { line: 893, column: 39, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "hgsrht-shell-wrapper", span: Span { start: Position { line: 893, column: 41, }, end: Position { line: 893, column: 61, }, }, }, ), ], span: Span { start: Position { line: 893, column: 40, }, end: Position { line: 893, column: 62, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "set -e\ncd /run/sourcehut/hgsrht/subdir\nset -x\nexec -a \"$0\" ", span: Span { start: Position { line: 894, column: 1, }, end: Position { line: 897, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 897, column: 32, }, end: Position { line: 897, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 897, column: 37, }, end: Position { line: 897, column: 46, }, }, }, ), Raw( PartRaw { content: "hgsrht", span: Span { start: Position { line: 897, column: 47, }, end: Position { line: 897, column: 53, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/hgsrht-shell \"$@\"\n", span: Span { start: Position { line: 894, column: 1, }, end: Position { line: 898, column: 15, }, }, }, ), ], span: Span { start: Position { line: 893, column: 63, }, end: Position { line: 898, column: 17, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: ":/usr/bin/hgsrht-shell", span: Span { start: Position { line: 893, column: 16, }, end: Position { line: 898, column: 40, }, }, }, ), ], span: Span { start: Position { line: 893, column: 15, }, end: Position { line: 898, column: 41, }, }, }, ), String( String_ { parts: [ Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 901, column: 18, }, end: Position { line: 901, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeShellScript", span: Span { start: Position { line: 901, column: 23, }, end: Position { line: 901, column: 39, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "hgsrht-hook-changegroup", span: Span { start: Position { line: 901, column: 41, }, end: Position { line: 901, column: 64, }, }, }, ), ], span: Span { start: Position { line: 901, column: 40, }, end: Position { line: 901, column: 65, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "set -e\ntest -e \"", span: Span { start: Position { line: 902, column: 1, }, end: Position { line: 903, column: 26, }, }, }, ), Raw( PartRaw { content: "$", span: Span { start: Position { line: 902, column: 1, }, end: Position { line: 903, column: 29, }, }, }, ), Raw( PartRaw { content: "PWD\"/config.ini ||\nln -s /run/sourcehut/hgsrht/config.ini \"", span: Span { start: Position { line: 902, column: 1, }, end: Position { line: 904, column: 57, }, }, }, ), Raw( PartRaw { content: "$", span: Span { start: Position { line: 902, column: 1, }, end: Position { line: 904, column: 60, }, }, }, ), Raw( PartRaw { content: "PWD\"/config.ini\nset -x\nexec -a \"$0\" ", span: Span { start: Position { line: 902, column: 1, }, end: Position { line: 906, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 906, column: 32, }, end: Position { line: 906, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "python", span: Span { start: Position { line: 906, column: 36, }, end: Position { line: 906, column: 42, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/hgsrht-hook-changegroup \"$@\"\n", span: Span { start: Position { line: 902, column: 1, }, end: Position { line: 907, column: 15, }, }, }, ), ], span: Span { start: Position { line: 901, column: 66, }, end: Position { line: 907, column: 17, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: ":/usr/bin/hgsrht-hook-changegroup", span: Span { start: Position { line: 901, column: 16, }, end: Position { line: 907, column: 51, }, }, }, ), ], span: Span { start: Position { line: 901, column: 15, }, end: Position { line: 907, column: 52, }, }, }, ), ], span: Span { start: Position { line: 884, column: 37, }, end: Position { line: 908, column: 14, }, }, }, ), ], }, ), }, ), }, ), }, ), ], span: Span { start: Position { line: 830, column: 25, }, end: Position { line: 909, column: 10, }, }, }, ), }, ), ], span: Span { start: Position { line: 828, column: 31, }, end: Position { line: 910, column: 8, }, }, }, ), }, ), ], span: Span { start: Position { line: 799, column: 66, }, end: Position { line: 911, column: 6, }, }, }, ), ], }, ), ], span: Span { start: Position { line: 758, column: 37, }, end: Position { line: 912, column: 4, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "imports", span: Span { start: Position { line: 914, column: 3, }, end: Position { line: 914, column: 10, }, }, }, ), ], to: List( List { elements: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "import", span: Span { start: Position { line: 916, column: 6, }, end: Position { line: 916, column: 12, }, }, }, ), arguments: [ Path( Path { parts: [ Raw( PartRaw { content: "./service.nix", span: Span { start: Position { line: 916, column: 13, }, end: Position { line: 916, column: 26, }, }, }, ), ], span: Span { start: Position { line: 916, column: 13, }, end: Position { line: 916, column: 26, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 916, column: 28, }, end: Position { line: 916, column: 34, }, }, }, ), ], span: Span { start: Position { line: 916, column: 27, }, end: Position { line: 916, column: 35, }, }, }, ), Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: None, attributes: [ Raw( PartRaw { content: "configIniOfService", span: Span { start: Position { line: 917, column: 15, }, end: Position { line: 917, column: 33, }, }, }, ), ], span: Span { start: Position { line: 916, column: 37, }, end: Position { line: 917, column: 34, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "srvsrht", span: Span { start: Position { line: 918, column: 7, }, end: Position { line: 918, column: 14, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "buildsrht", span: Span { start: Position { line: 918, column: 18, }, end: Position { line: 918, column: 27, }, }, }, ), ], span: Span { start: Position { line: 918, column: 17, }, end: Position { line: 918, column: 28, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "port", span: Span { start: Position { line: 919, column: 7, }, end: Position { line: 919, column: 11, }, }, }, ), ], to: Integer( Integer { value: "5002", span: Span { start: Position { line: 919, column: 14, }, end: Position { line: 919, column: 18, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraServices", span: Span { start: Position { line: 920, column: 7, }, end: Position { line: 920, column: 20, }, }, }, ), Raw( PartRaw { content: "buildsrht-api", span: Span { start: Position { line: 920, column: 21, }, end: Position { line: 920, column: 34, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 921, column: 9, }, end: Position { line: 921, column: 22, }, }, }, ), Raw( PartRaw { content: "Restart", span: Span { start: Position { line: 921, column: 23, }, end: Position { line: 921, column: 30, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "always", span: Span { start: Position { line: 921, column: 34, }, end: Position { line: 921, column: 40, }, }, }, ), ], span: Span { start: Position { line: 921, column: 33, }, end: Position { line: 921, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 922, column: 9, }, end: Position { line: 922, column: 22, }, }, }, ), Raw( PartRaw { content: "RestartSec", span: Span { start: Position { line: 922, column: 23, }, end: Position { line: 922, column: 33, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "5s", span: Span { start: Position { line: 922, column: 37, }, end: Position { line: 922, column: 39, }, }, }, ), ], span: Span { start: Position { line: 922, column: 36, }, end: Position { line: 922, column: 40, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 923, column: 9, }, end: Position { line: 923, column: 22, }, }, }, ), Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 923, column: 23, }, end: Position { line: 923, column: 32, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 923, column: 38, }, end: Position { line: 923, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 923, column: 43, }, end: Position { line: 923, column: 52, }, }, }, ), Raw( PartRaw { content: "buildsrht", span: Span { start: Position { line: 923, column: 53, }, end: Position { line: 923, column: 62, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/buildsrht-api -b ", span: Span { start: Position { line: 923, column: 36, }, end: Position { line: 923, column: 85, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 923, column: 87, }, end: Position { line: 923, column: 90, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenAddress", span: Span { start: Position { line: 923, column: 91, }, end: Position { line: 923, column: 104, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 923, column: 36, }, end: Position { line: 923, column: 106, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 923, column: 108, }, end: Position { line: 923, column: 116, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 923, column: 118, }, end: Position { line: 923, column: 121, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 923, column: 122, }, end: Position { line: 923, column: 128, }, }, }, ), Raw( PartRaw { content: "port", span: Span { start: Position { line: 923, column: 129, }, end: Position { line: 923, column: 133, }, }, }, ), ], default: None, }, ), operator: Addition, right: Integer( Integer { value: "100", span: Span { start: Position { line: 923, column: 136, }, end: Position { line: 923, column: 139, }, }, }, ), }, ), ], }, ), }, ), ], span: Span { start: Position { line: 923, column: 35, }, end: Position { line: 923, column: 142, }, }, }, ), }, ), ], span: Span { start: Position { line: 920, column: 37, }, end: Position { line: 924, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraServices", span: Span { start: Position { line: 926, column: 7, }, end: Position { line: 926, column: 20, }, }, }, ), Raw( PartRaw { content: "buildsrht-worker", span: Span { start: Position { line: 926, column: 21, }, end: Position { line: 926, column: 37, }, }, }, ), ], to: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "qemuPackage", span: Span { start: Position { line: 927, column: 9, }, end: Position { line: 927, column: 20, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 927, column: 23, }, end: Position { line: 927, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "qemu_kvm", span: Span { start: Position { line: 927, column: 28, }, end: Position { line: 927, column: 36, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceName", span: Span { start: Position { line: 928, column: 9, }, end: Position { line: 928, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "buildsrht-worker", span: Span { start: Position { line: 928, column: 24, }, end: Position { line: 928, column: 40, }, }, }, ), ], span: Span { start: Position { line: 928, column: 23, }, end: Position { line: 928, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "statePath", span: Span { start: Position { line: 929, column: 9, }, end: Position { line: 929, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/sourcehut/", span: Span { start: Position { line: 929, column: 22, }, end: Position { line: 929, column: 55, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "serviceName", span: Span { start: Position { line: 929, column: 43, }, end: Position { line: 929, column: 54, }, }, }, ), }, ), ], span: Span { start: Position { line: 929, column: 21, }, end: Position { line: 929, column: 56, }, }, }, ), }, ), ], target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 930, column: 12, }, end: Position { line: 930, column: 16, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 930, column: 17, }, end: Position { line: 930, column: 20, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 930, column: 21, }, end: Position { line: 930, column: 27, }, }, }, ), Raw( PartRaw { content: "enableWorker", span: Span { start: Position { line: 930, column: 28, }, end: Position { line: 930, column: 40, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 931, column: 9, }, end: Position { line: 931, column: 13, }, }, }, ), ], to: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 931, column: 18, }, end: Position { line: 931, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "openssh", span: Span { start: Position { line: 931, column: 23, }, end: Position { line: 931, column: 30, }, }, }, ), ], default: None, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 931, column: 31, }, end: Position { line: 931, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "docker", span: Span { start: Position { line: 931, column: 36, }, end: Position { line: 931, column: 42, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 931, column: 16, }, end: Position { line: 931, column: 44, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "preStart", span: Span { start: Position { line: 932, column: 9, }, end: Position { line: 932, column: 17, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "set -x\nif test -z \"$(docker images -q qemu:latest 2>/dev/null)\" \\\n|| test \"$(cat ", span: Span { start: Position { line: 933, column: 1, }, end: Position { line: 935, column: 26, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "statePath", span: Span { start: Position { line: 935, column: 28, }, end: Position { line: 935, column: 37, }, }, }, ), }, ), Raw( PartRaw { content: "/docker-image-qemu)\" != \"", span: Span { start: Position { line: 933, column: 1, }, end: Position { line: 935, column: 63, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "qemuPackage", span: Span { start: Position { line: 935, column: 65, }, end: Position { line: 935, column: 76, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "version", span: Span { start: Position { line: 935, column: 77, }, end: Position { line: 935, column: 84, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "\"\nthen\n # Create and import qemu:latest image for docker\n ", span: Span { start: Position { line: 933, column: 1, }, end: Position { line: 938, column: 13, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 938, column: 15, }, end: Position { line: 938, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "dockerTools", span: Span { start: Position { line: 938, column: 20, }, end: Position { line: 938, column: 31, }, }, }, ), Raw( PartRaw { content: "streamLayeredImage", span: Span { start: Position { line: 938, column: 32, }, end: Position { line: 938, column: 50, }, }, }, ), ], default: None, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 939, column: 15, }, end: Position { line: 939, column: 19, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "qemu", span: Span { start: Position { line: 939, column: 23, }, end: Position { line: 939, column: 27, }, }, }, ), ], span: Span { start: Position { line: 939, column: 22, }, end: Position { line: 939, column: 28, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "tag", span: Span { start: Position { line: 940, column: 15, }, end: Position { line: 940, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "latest", span: Span { start: Position { line: 940, column: 22, }, end: Position { line: 940, column: 28, }, }, }, ), ], span: Span { start: Position { line: 940, column: 21, }, end: Position { line: 940, column: 29, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "contents", span: Span { start: Position { line: 941, column: 15, }, end: Position { line: 941, column: 23, }, }, }, ), ], to: List( List { elements: [ Identifier( Identifier { id: "qemuPackage", span: Span { start: Position { line: 941, column: 28, }, end: Position { line: 941, column: 39, }, }, }, ), ], span: Span { start: Position { line: 941, column: 26, }, end: Position { line: 941, column: 41, }, }, }, ), }, ), ], span: Span { start: Position { line: 938, column: 51, }, end: Position { line: 942, column: 14, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " | docker load\n # Mark down current package version\n echo ", span: Span { start: Position { line: 933, column: 1, }, end: Position { line: 944, column: 18, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 933, column: 1, }, end: Position { line: 944, column: 19, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "qemuPackage", span: Span { start: Position { line: 944, column: 21, }, end: Position { line: 944, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "version", span: Span { start: Position { line: 944, column: 33, }, end: Position { line: 944, column: 40, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "' >", span: Span { start: Position { line: 933, column: 1, }, end: Position { line: 944, column: 44, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "statePath", span: Span { start: Position { line: 944, column: 46, }, end: Position { line: 944, column: 55, }, }, }, ), }, ), Raw( PartRaw { content: "/docker-image-qemu\nfi\n", span: Span { start: Position { line: 933, column: 1, }, end: Position { line: 946, column: 9, }, }, }, ), ], span: Span { start: Position { line: 932, column: 20, }, end: Position { line: 946, column: 11, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 947, column: 9, }, end: Position { line: 947, column: 22, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 948, column: 11, }, end: Position { line: 948, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 948, column: 26, }, end: Position { line: 948, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 948, column: 31, }, end: Position { line: 948, column: 40, }, }, }, ), Raw( PartRaw { content: "buildsrht", span: Span { start: Position { line: 948, column: 41, }, end: Position { line: 948, column: 50, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/buildsrht-worker", span: Span { start: Position { line: 948, column: 24, }, end: Position { line: 948, column: 72, }, }, }, ), ], span: Span { start: Position { line: 948, column: 23, }, end: Position { line: 948, column: 73, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "BindPaths", span: Span { start: Position { line: 949, column: 11, }, end: Position { line: 949, column: 20, }, }, }, ), ], to: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 949, column: 25, }, end: Position { line: 949, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 949, column: 29, }, end: Position { line: 949, column: 37, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "builds.sr.ht::worker", span: Span { start: Position { line: 949, column: 39, }, end: Position { line: 949, column: 59, }, }, }, ), ], span: Span { start: Position { line: 949, column: 38, }, end: Position { line: 949, column: 60, }, }, }, ), }, ), Raw( PartRaw { content: "buildlogs", span: Span { start: Position { line: 949, column: 61, }, end: Position { line: 949, column: 70, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 949, column: 23, }, end: Position { line: 949, column: 72, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "LogsDirectory", span: Span { start: Position { line: 950, column: 11, }, end: Position { line: 950, column: 24, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "sourcehut/", span: Span { start: Position { line: 950, column: 30, }, end: Position { line: 950, column: 54, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "serviceName", span: Span { start: Position { line: 950, column: 42, }, end: Position { line: 950, column: 53, }, }, }, ), }, ), ], span: Span { start: Position { line: 950, column: 29, }, end: Position { line: 950, column: 55, }, }, }, ), ], span: Span { start: Position { line: 950, column: 27, }, end: Position { line: 950, column: 57, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "RuntimeDirectory", span: Span { start: Position { line: 951, column: 11, }, end: Position { line: 951, column: 27, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "sourcehut/", span: Span { start: Position { line: 951, column: 33, }, end: Position { line: 951, column: 57, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "serviceName", span: Span { start: Position { line: 951, column: 45, }, end: Position { line: 951, column: 56, }, }, }, ), }, ), Raw( PartRaw { content: "/subdir", span: Span { start: Position { line: 951, column: 33, }, end: Position { line: 951, column: 64, }, }, }, ), ], span: Span { start: Position { line: 951, column: 32, }, end: Position { line: 951, column: 65, }, }, }, ), ], span: Span { start: Position { line: 951, column: 30, }, end: Position { line: 951, column: 67, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "StateDirectory", span: Span { start: Position { line: 952, column: 11, }, end: Position { line: 952, column: 25, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "sourcehut/", span: Span { start: Position { line: 952, column: 31, }, end: Position { line: 952, column: 55, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "serviceName", span: Span { start: Position { line: 952, column: 43, }, end: Position { line: 952, column: 54, }, }, }, ), }, ), ], span: Span { start: Position { line: 952, column: 30, }, end: Position { line: 952, column: 56, }, }, }, ), ], span: Span { start: Position { line: 952, column: 28, }, end: Position { line: 952, column: 58, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "TimeoutStartSec", span: Span { start: Position { line: 953, column: 11, }, end: Position { line: 953, column: 26, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "1800s", span: Span { start: Position { line: 953, column: 30, }, end: Position { line: 953, column: 35, }, }, }, ), ], span: Span { start: Position { line: 953, column: 29, }, end: Position { line: 953, column: 36, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "WorkingDirectory", span: Span { start: Position { line: 955, column: 11, }, end: Position { line: 955, column: 27, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: String( String_ { parts: [ Raw( PartRaw { content: "-", span: Span { start: Position { line: 955, column: 31, }, end: Position { line: 955, column: 32, }, }, }, ), ], span: Span { start: Position { line: 955, column: 30, }, end: Position { line: 955, column: 33, }, }, }, ), operator: Addition, right: String( String_ { parts: [ Raw( PartRaw { content: "/run/sourcehut/", span: Span { start: Position { line: 955, column: 35, }, end: Position { line: 955, column: 64, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "serviceName", span: Span { start: Position { line: 955, column: 52, }, end: Position { line: 955, column: 63, }, }, }, ), }, ), Raw( PartRaw { content: "/subdir", span: Span { start: Position { line: 955, column: 35, }, end: Position { line: 955, column: 71, }, }, }, ), ], span: Span { start: Position { line: 955, column: 34, }, end: Position { line: 955, column: 72, }, }, }, ), }, ), }, ), ], span: Span { start: Position { line: 947, column: 25, }, end: Position { line: 956, column: 10, }, }, }, ), }, ), ], span: Span { start: Position { line: 930, column: 41, }, end: Position { line: 957, column: 8, }, }, }, ), ], }, ), span: Span { start: Position { line: 926, column: 40, }, end: Position { line: 957, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraConfig", span: Span { start: Position { line: 958, column: 7, }, end: Position { line: 958, column: 18, }, }, }, ), ], to: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "image_dirs", span: Span { start: Position { line: 959, column: 9, }, end: Position { line: 959, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "flatten", span: Span { start: Position { line: 959, column: 22, }, end: Position { line: 959, column: 29, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrsToList", span: Span { start: Position { line: 960, column: 11, }, end: Position { line: 960, column: 25, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "distro", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "revs", }, ), body: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrsToList", span: Span { start: Position { line: 961, column: 13, }, end: Position { line: 961, column: 27, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "rev", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "archs", }, ), body: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrsToList", span: Span { start: Position { line: 962, column: 15, }, end: Position { line: 962, column: 29, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "arch", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "image", }, ), body: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 963, column: 17, }, end: Position { line: 963, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "runCommand", span: Span { start: Position { line: 963, column: 22, }, end: Position { line: 963, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "buildsrht-images", span: Span { start: Position { line: 963, column: 34, }, end: Position { line: 963, column: 50, }, }, }, ), ], span: Span { start: Position { line: 963, column: 33, }, end: Position { line: 963, column: 51, }, }, }, ), Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 963, column: 52, }, end: Position { line: 963, column: 55, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mkdir -p $out/", span: Span { start: Position { line: 964, column: 1, }, end: Position { line: 964, column: 33, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "distro", span: Span { start: Position { line: 964, column: 35, }, end: Position { line: 964, column: 41, }, }, }, ), }, ), Raw( PartRaw { content: "/", span: Span { start: Position { line: 964, column: 1, }, end: Position { line: 964, column: 43, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "rev", span: Span { start: Position { line: 964, column: 45, }, end: Position { line: 964, column: 48, }, }, }, ), }, ), Raw( PartRaw { content: "/", span: Span { start: Position { line: 964, column: 1, }, end: Position { line: 964, column: 50, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "arch", span: Span { start: Position { line: 964, column: 52, }, end: Position { line: 964, column: 56, }, }, }, ), }, ), Raw( PartRaw { content: "\nln -s ", span: Span { start: Position { line: 964, column: 1, }, end: Position { line: 965, column: 25, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "image", span: Span { start: Position { line: 965, column: 27, }, end: Position { line: 965, column: 32, }, }, }, ), }, ), Raw( PartRaw { content: "/*.qcow2 $out/", span: Span { start: Position { line: 964, column: 1, }, end: Position { line: 965, column: 47, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "distro", span: Span { start: Position { line: 965, column: 49, }, end: Position { line: 965, column: 55, }, }, }, ), }, ), Raw( PartRaw { content: "/", span: Span { start: Position { line: 964, column: 1, }, end: Position { line: 965, column: 57, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "rev", span: Span { start: Position { line: 965, column: 59, }, end: Position { line: 965, column: 62, }, }, }, ), }, ), Raw( PartRaw { content: "/", span: Span { start: Position { line: 964, column: 1, }, end: Position { line: 965, column: 64, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "arch", span: Span { start: Position { line: 965, column: 66, }, end: Position { line: 965, column: 70, }, }, }, ), }, ), Raw( PartRaw { content: "/root.img.qcow2\n", span: Span { start: Position { line: 964, column: 1, }, end: Position { line: 966, column: 17, }, }, }, ), ], span: Span { start: Position { line: 963, column: 56, }, end: Position { line: 966, column: 19, }, }, }, ), ], }, ), span: Span { start: Position { line: 962, column: 37, }, end: Position { line: 966, column: 19, }, }, }, ), span: Span { start: Position { line: 962, column: 31, }, end: Position { line: 966, column: 19, }, }, }, ), Identifier( Identifier { id: "archs", span: Span { start: Position { line: 967, column: 17, }, end: Position { line: 967, column: 22, }, }, }, ), ], }, ), span: Span { start: Position { line: 961, column: 34, }, end: Position { line: 967, column: 22, }, }, }, ), span: Span { start: Position { line: 961, column: 29, }, end: Position { line: 967, column: 22, }, }, }, ), Identifier( Identifier { id: "revs", span: Span { start: Position { line: 968, column: 15, }, end: Position { line: 968, column: 19, }, }, }, ), ], }, ), span: Span { start: Position { line: 960, column: 35, }, end: Position { line: 968, column: 19, }, }, }, ), span: Span { start: Position { line: 960, column: 27, }, end: Position { line: 968, column: 19, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 969, column: 13, }, end: Position { line: 969, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 969, column: 17, }, end: Position { line: 969, column: 23, }, }, }, ), Raw( PartRaw { content: "images", span: Span { start: Position { line: 969, column: 24, }, end: Position { line: 969, column: 30, }, }, }, ), ], default: None, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "image_dir_pre", span: Span { start: Position { line: 971, column: 9, }, end: Position { line: 971, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 971, column: 25, }, end: Position { line: 971, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "symlinkJoin", span: Span { start: Position { line: 971, column: 30, }, end: Position { line: 971, column: 41, }, }, }, ), ], default: None, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 972, column: 11, }, end: Position { line: 972, column: 15, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "buildsrht-worker-images-pre", span: Span { start: Position { line: 972, column: 19, }, end: Position { line: 972, column: 46, }, }, }, ), ], span: Span { start: Position { line: 972, column: 18, }, end: Position { line: 972, column: 47, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "paths", span: Span { start: Position { line: 973, column: 11, }, end: Position { line: 973, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "image_dirs", span: Span { start: Position { line: 973, column: 19, }, end: Position { line: 973, column: 29, }, }, }, ), }, ), ], span: Span { start: Position { line: 971, column: 42, }, end: Position { line: 976, column: 10, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "image_dir", span: Span { start: Position { line: 977, column: 9, }, end: Position { line: 977, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 977, column: 21, }, end: Position { line: 977, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "runCommand", span: Span { start: Position { line: 977, column: 26, }, end: Position { line: 977, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "buildsrht-worker-images", span: Span { start: Position { line: 977, column: 38, }, end: Position { line: 977, column: 61, }, }, }, ), ], span: Span { start: Position { line: 977, column: 37, }, end: Position { line: 977, column: 62, }, }, }, ), Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 977, column: 63, }, end: Position { line: 977, column: 66, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mkdir -p $out/images\ncp -Lr ", span: Span { start: Position { line: 978, column: 1, }, end: Position { line: 979, column: 18, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "image_dir_pre", span: Span { start: Position { line: 979, column: 20, }, end: Position { line: 979, column: 33, }, }, }, ), }, ), Raw( PartRaw { content: "/* $out/images\n", span: Span { start: Position { line: 978, column: 1, }, end: Position { line: 980, column: 9, }, }, }, ), ], span: Span { start: Position { line: 977, column: 67, }, end: Position { line: 980, column: 11, }, }, }, ), ], }, ), }, ), ], target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkMerge", span: Span { start: Position { line: 981, column: 12, }, end: Position { line: 981, column: 19, }, }, }, ), arguments: [ List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 983, column: 11, }, end: Position { line: 983, column: 16, }, }, }, ), Raw( PartRaw { content: "users", span: Span { start: Position { line: 983, column: 17, }, end: Position { line: 983, column: 22, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 983, column: 25, }, end: Position { line: 983, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 983, column: 29, }, end: Position { line: 983, column: 35, }, }, }, ), Raw( PartRaw { content: "user", span: Span { start: Position { line: 983, column: 36, }, end: Position { line: 983, column: 40, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "shell", span: Span { start: Position { line: 983, column: 42, }, end: Position { line: 983, column: 47, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 983, column: 50, }, end: Position { line: 983, column: 54, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bash", span: Span { start: Position { line: 983, column: 55, }, end: Position { line: 983, column: 59, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "virtualisation", span: Span { start: Position { line: 985, column: 11, }, end: Position { line: 985, column: 25, }, }, }, ), Raw( PartRaw { content: "docker", span: Span { start: Position { line: 985, column: 26, }, end: Position { line: 985, column: 32, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 985, column: 33, }, end: Position { line: 985, column: 39, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 985, column: 42, }, end: Position { line: 985, column: 46, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 987, column: 11, }, end: Position { line: 987, column: 19, }, }, }, ), Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 987, column: 20, }, end: Position { line: 987, column: 29, }, }, }, ), Raw( PartRaw { content: "settings", span: Span { start: Position { line: 987, column: 30, }, end: Position { line: 987, column: 38, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkMerge", span: Span { start: Position { line: 987, column: 41, }, end: Position { line: 987, column: 48, }, }, }, ), arguments: [ List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "git.sr.ht::dispatch", span: Span { start: Position { line: 990, column: 16, }, end: Position { line: 990, column: 35, }, }, }, ), ], span: Span { start: Position { line: 990, column: 15, }, end: Position { line: 990, column: 36, }, }, }, ), }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "/usr/bin/buildsrht-keys", span: Span { start: Position { line: 990, column: 38, }, end: Position { line: 990, column: 61, }, }, }, ), ], span: Span { start: Position { line: 990, column: 37, }, end: Position { line: 990, column: 62, }, }, }, ), }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 991, column: 17, }, end: Position { line: 991, column: 26, }, }, }, ), arguments: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 991, column: 30, }, end: Position { line: 991, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 991, column: 34, }, end: Position { line: 991, column: 40, }, }, }, ), Raw( PartRaw { content: "user", span: Span { start: Position { line: 991, column: 41, }, end: Position { line: 991, column: 45, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 991, column: 28, }, end: Position { line: 991, column: 47, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 991, column: 49, }, end: Position { line: 991, column: 52, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 991, column: 53, }, end: Position { line: 991, column: 59, }, }, }, ), Raw( PartRaw { content: "group", span: Span { start: Position { line: 991, column: 60, }, end: Position { line: 991, column: 65, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 991, column: 27, }, end: Position { line: 991, column: 67, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 988, column: 13, }, end: Position { line: 992, column: 14, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 993, column: 14, }, end: Position { line: 993, column: 18, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 993, column: 19, }, end: Position { line: 993, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 993, column: 23, }, end: Position { line: 993, column: 29, }, }, }, ), Raw( PartRaw { content: "enableWorker", span: Span { start: Position { line: 993, column: 30, }, end: Position { line: 993, column: 42, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "builds.sr.ht::worker", span: Span { start: Position { line: 994, column: 16, }, end: Position { line: 994, column: 36, }, }, }, ), ], span: Span { start: Position { line: 994, column: 15, }, end: Position { line: 994, column: 37, }, }, }, ), }, ), Raw( PartRaw { content: "shell", span: Span { start: Position { line: 994, column: 38, }, end: Position { line: 994, column: 43, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/usr/bin/runner-shell", span: Span { start: Position { line: 994, column: 47, }, end: Position { line: 994, column: 68, }, }, }, ), ], span: Span { start: Position { line: 994, column: 46, }, end: Position { line: 994, column: 69, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "builds.sr.ht::worker", span: Span { start: Position { line: 995, column: 16, }, end: Position { line: 995, column: 36, }, }, }, ), ], span: Span { start: Position { line: 995, column: 15, }, end: Position { line: 995, column: 37, }, }, }, ), }, ), Raw( PartRaw { content: "images", span: Span { start: Position { line: 995, column: 38, }, end: Position { line: 995, column: 44, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 995, column: 47, }, end: Position { line: 995, column: 56, }, }, }, ), arguments: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "image_dir", span: Span { start: Position { line: 995, column: 60, }, end: Position { line: 995, column: 69, }, }, }, ), }, ), Raw( PartRaw { content: "/images", span: Span { start: Position { line: 995, column: 58, }, end: Position { line: 995, column: 77, }, }, }, ), ], span: Span { start: Position { line: 995, column: 57, }, end: Position { line: 995, column: 78, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "builds.sr.ht::worker", span: Span { start: Position { line: 996, column: 16, }, end: Position { line: 996, column: 36, }, }, }, ), ], span: Span { start: Position { line: 996, column: 15, }, end: Position { line: 996, column: 37, }, }, }, ), }, ), Raw( PartRaw { content: "controlcmd", span: Span { start: Position { line: 996, column: 38, }, end: Position { line: 996, column: 48, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 996, column: 51, }, end: Position { line: 996, column: 60, }, }, }, ), arguments: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "image_dir", span: Span { start: Position { line: 996, column: 64, }, end: Position { line: 996, column: 73, }, }, }, ), }, ), Raw( PartRaw { content: "/images/control", span: Span { start: Position { line: 996, column: 62, }, end: Position { line: 996, column: 89, }, }, }, ), ], span: Span { start: Position { line: 996, column: 61, }, end: Position { line: 996, column: 90, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 993, column: 43, }, end: Position { line: 997, column: 14, }, }, }, ), ], }, ), ], span: Span { start: Position { line: 987, column: 49, }, end: Position { line: 998, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 982, column: 9, }, end: Position { line: 999, column: 10, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 1000, column: 10, }, end: Position { line: 1000, column: 14, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1000, column: 15, }, end: Position { line: 1000, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 1000, column: 19, }, end: Position { line: 1000, column: 25, }, }, }, ), Raw( PartRaw { content: "enableWorker", span: Span { start: Position { line: 1000, column: 26, }, end: Position { line: 1000, column: 38, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 1001, column: 11, }, end: Position { line: 1001, column: 16, }, }, }, ), Raw( PartRaw { content: "groups", span: Span { start: Position { line: 1001, column: 17, }, end: Position { line: 1001, column: 23, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "docker", span: Span { start: Position { line: 1002, column: 13, }, end: Position { line: 1002, column: 19, }, }, }, ), Raw( PartRaw { content: "members", span: Span { start: Position { line: 1002, column: 20, }, end: Position { line: 1002, column: 27, }, }, }, ), ], to: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1002, column: 32, }, end: Position { line: 1002, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 1002, column: 36, }, end: Position { line: 1002, column: 42, }, }, }, ), Raw( PartRaw { content: "user", span: Span { start: Position { line: 1002, column: 43, }, end: Position { line: 1002, column: 47, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1002, column: 30, }, end: Position { line: 1002, column: 49, }, }, }, ), }, ), ], span: Span { start: Position { line: 1001, column: 26, }, end: Position { line: 1003, column: 12, }, }, }, ), }, ), ], span: Span { start: Position { line: 1000, column: 39, }, end: Position { line: 1004, column: 10, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 1005, column: 10, }, end: Position { line: 1005, column: 14, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1005, column: 16, }, end: Position { line: 1005, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 1005, column: 20, }, end: Position { line: 1005, column: 26, }, }, }, ), Raw( PartRaw { content: "enableWorker", span: Span { start: Position { line: 1005, column: 27, }, end: Position { line: 1005, column: 39, }, }, }, ), ], default: None, }, ), operator: LogicalAnd, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1005, column: 43, }, end: Position { line: 1005, column: 46, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1005, column: 47, }, end: Position { line: 1005, column: 52, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1005, column: 53, }, end: Position { line: 1005, column: 59, }, }, }, ), ], default: None, }, ), }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 1007, column: 11, }, end: Position { line: 1007, column: 16, }, }, }, ), Raw( PartRaw { content: "users", span: Span { start: Position { line: 1007, column: 17, }, end: Position { line: 1007, column: 22, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "nginx", span: Span { start: Position { line: 1007, column: 25, }, end: Position { line: 1007, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "user", span: Span { start: Position { line: 1007, column: 31, }, end: Position { line: 1007, column: 35, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "extraGroups", span: Span { start: Position { line: 1007, column: 37, }, end: Position { line: 1007, column: 48, }, }, }, ), ], to: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1007, column: 53, }, end: Position { line: 1007, column: 56, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "builds", span: Span { start: Position { line: 1007, column: 57, }, end: Position { line: 1007, column: 63, }, }, }, ), Raw( PartRaw { content: "group", span: Span { start: Position { line: 1007, column: 64, }, end: Position { line: 1007, column: 69, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1007, column: 51, }, end: Position { line: 1007, column: 71, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 1008, column: 11, }, end: Position { line: 1008, column: 18, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 1008, column: 19, }, end: Position { line: 1008, column: 27, }, }, }, ), Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1008, column: 28, }, end: Position { line: 1008, column: 33, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1009, column: 13, }, end: Position { line: 1009, column: 26, }, }, }, ), Raw( PartRaw { content: "BindReadOnlyPaths", span: Span { start: Position { line: 1009, column: 27, }, end: Position { line: 1009, column: 44, }, }, }, ), ], to: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1009, column: 49, }, end: Position { line: 1009, column: 52, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1009, column: 53, }, end: Position { line: 1009, column: 61, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "builds.sr.ht::worker", span: Span { start: Position { line: 1009, column: 63, }, end: Position { line: 1009, column: 83, }, }, }, ), ], span: Span { start: Position { line: 1009, column: 62, }, end: Position { line: 1009, column: 84, }, }, }, ), }, ), Raw( PartRaw { content: "buildlogs", span: Span { start: Position { line: 1009, column: 85, }, end: Position { line: 1009, column: 94, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1009, column: 47, }, end: Position { line: 1009, column: 96, }, }, }, ), }, ), ], span: Span { start: Position { line: 1008, column: 36, }, end: Position { line: 1010, column: 12, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1011, column: 11, }, end: Position { line: 1011, column: 19, }, }, }, ), Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1011, column: 20, }, end: Position { line: 1011, column: 25, }, }, }, ), Raw( PartRaw { content: "virtualHosts", span: Span { start: Position { line: 1011, column: 26, }, end: Position { line: 1011, column: 38, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "logs.", span: Span { start: Position { line: 1011, column: 40, }, end: Position { line: 1011, column: 54, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 1011, column: 47, }, end: Position { line: 1011, column: 53, }, }, }, ), }, ), ], span: Span { start: Position { line: 1011, column: 39, }, end: Position { line: 1011, column: 55, }, }, }, ), }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkMerge", span: Span { start: Position { line: 1011, column: 58, }, end: Position { line: 1011, column: 65, }, }, }, ), arguments: [ List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "locations", span: Span { start: Position { line: 1018, column: 13, }, end: Position { line: 1018, column: 22, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "/logs/", span: Span { start: Position { line: 1018, column: 24, }, end: Position { line: 1018, column: 30, }, }, }, ), ], span: Span { start: Position { line: 1018, column: 23, }, end: Position { line: 1018, column: 31, }, }, }, ), }, ), Raw( PartRaw { content: "alias", span: Span { start: Position { line: 1018, column: 32, }, end: Position { line: 1018, column: 37, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1018, column: 40, }, end: Position { line: 1018, column: 43, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1018, column: 44, }, end: Position { line: 1018, column: 52, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "builds.sr.ht::worker", span: Span { start: Position { line: 1018, column: 54, }, end: Position { line: 1018, column: 74, }, }, }, ), ], span: Span { start: Position { line: 1018, column: 53, }, end: Position { line: 1018, column: 75, }, }, }, ), }, ), Raw( PartRaw { content: "buildlogs", span: Span { start: Position { line: 1018, column: 76, }, end: Position { line: 1018, column: 85, }, }, }, ), ], default: None, }, ), operator: Addition, right: String( String_ { parts: [ Raw( PartRaw { content: "/", span: Span { start: Position { line: 1018, column: 89, }, end: Position { line: 1018, column: 90, }, }, }, ), ], span: Span { start: Position { line: 1018, column: 88, }, end: Position { line: 1018, column: 91, }, }, }, ), }, ), }, ), ], span: Span { start: Position { line: 1011, column: 68, }, end: Position { line: 1019, column: 12, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1019, column: 13, }, end: Position { line: 1019, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1019, column: 17, }, end: Position { line: 1019, column: 22, }, }, }, ), Raw( PartRaw { content: "virtualHost", span: Span { start: Position { line: 1019, column: 23, }, end: Position { line: 1019, column: 34, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1011, column: 66, }, end: Position { line: 1019, column: 36, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1005, column: 61, }, end: Position { line: 1020, column: 10, }, }, }, ), ], }, ), ], span: Span { start: Position { line: 981, column: 20, }, end: Position { line: 1021, column: 8, }, }, }, ), ], }, ), span: Span { start: Position { line: 958, column: 21, }, end: Position { line: 1021, column: 8, }, }, }, ), }, ), ], span: Span { start: Position { line: 916, column: 36, }, end: Position { line: 1022, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "import", span: Span { start: Position { line: 1024, column: 6, }, end: Position { line: 1024, column: 12, }, }, }, ), arguments: [ Path( Path { parts: [ Raw( PartRaw { content: "./service.nix", span: Span { start: Position { line: 1024, column: 13, }, end: Position { line: 1024, column: 26, }, }, }, ), ], span: Span { start: Position { line: 1024, column: 13, }, end: Position { line: 1024, column: 26, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "dispatch", span: Span { start: Position { line: 1024, column: 28, }, end: Position { line: 1024, column: 36, }, }, }, ), ], span: Span { start: Position { line: 1024, column: 27, }, end: Position { line: 1024, column: 37, }, }, }, ), Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: None, attributes: [ Raw( PartRaw { content: "configIniOfService", span: Span { start: Position { line: 1025, column: 15, }, end: Position { line: 1025, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1024, column: 39, }, end: Position { line: 1025, column: 34, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "port", span: Span { start: Position { line: 1026, column: 7, }, end: Position { line: 1026, column: 11, }, }, }, ), ], to: Integer( Integer { value: "5005", span: Span { start: Position { line: 1026, column: 14, }, end: Position { line: 1026, column: 18, }, }, }, ), }, ), ], span: Span { start: Position { line: 1024, column: 38, }, end: Position { line: 1027, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "import", span: Span { start: Position { line: 1029, column: 6, }, end: Position { line: 1029, column: 12, }, }, }, ), arguments: [ Path( Path { parts: [ Raw( PartRaw { content: "./service.nix", span: Span { start: Position { line: 1029, column: 13, }, end: Position { line: 1029, column: 26, }, }, }, ), ], span: Span { start: Position { line: 1029, column: 13, }, end: Position { line: 1029, column: 26, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 1029, column: 28, }, end: Position { line: 1029, column: 31, }, }, }, ), ], span: Span { start: Position { line: 1029, column: 27, }, end: Position { line: 1029, column: 32, }, }, }, ), LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "baseService", span: Span { start: Position { line: 1030, column: 7, }, end: Position { line: 1030, column: 18, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 1031, column: 9, }, end: Position { line: 1031, column: 13, }, }, }, ), ], to: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1031, column: 18, }, end: Position { line: 1031, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 1031, column: 22, }, end: Position { line: 1031, column: 25, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 1031, column: 26, }, end: Position { line: 1031, column: 33, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1031, column: 16, }, end: Position { line: 1031, column: 35, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1032, column: 9, }, end: Position { line: 1032, column: 22, }, }, }, ), Raw( PartRaw { content: "BindPaths", span: Span { start: Position { line: 1032, column: 23, }, end: Position { line: 1032, column: 32, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1032, column: 40, }, end: Position { line: 1032, column: 43, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1032, column: 44, }, end: Position { line: 1032, column: 52, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "git.sr.ht", span: Span { start: Position { line: 1032, column: 54, }, end: Position { line: 1032, column: 63, }, }, }, ), ], span: Span { start: Position { line: 1032, column: 53, }, end: Position { line: 1032, column: 64, }, }, }, ), }, ), Raw( PartRaw { content: "repos", span: Span { start: Position { line: 1032, column: 65, }, end: Position { line: 1032, column: 70, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":/var/lib/sourcehut/gitsrht/repos", span: Span { start: Position { line: 1032, column: 38, }, end: Position { line: 1032, column: 104, }, }, }, ), ], span: Span { start: Position { line: 1032, column: 37, }, end: Position { line: 1032, column: 105, }, }, }, ), ], span: Span { start: Position { line: 1032, column: 35, }, end: Position { line: 1032, column: 107, }, }, }, ), }, ), ], span: Span { start: Position { line: 1030, column: 21, }, end: Position { line: 1033, column: 8, }, }, }, ), }, ), ], target: Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: None, attributes: [ Raw( PartRaw { content: "configIniOfService", span: Span { start: Position { line: 1035, column: 15, }, end: Position { line: 1035, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1034, column: 11, }, end: Position { line: 1035, column: 34, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "mainService", span: Span { start: Position { line: 1036, column: 7, }, end: Position { line: 1036, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkMerge", span: Span { start: Position { line: 1036, column: 21, }, end: Position { line: 1036, column: 28, }, }, }, ), arguments: [ List( List { elements: [ Identifier( Identifier { id: "baseService", span: Span { start: Position { line: 1036, column: 31, }, end: Position { line: 1036, column: 42, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1037, column: 9, }, end: Position { line: 1037, column: 22, }, }, }, ), Raw( PartRaw { content: "StateDirectory", span: Span { start: Position { line: 1037, column: 23, }, end: Position { line: 1037, column: 37, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "sourcehut/gitsrht", span: Span { start: Position { line: 1037, column: 43, }, end: Position { line: 1037, column: 60, }, }, }, ), ], span: Span { start: Position { line: 1037, column: 42, }, end: Position { line: 1037, column: 61, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "sourcehut/gitsrht/repos", span: Span { start: Position { line: 1037, column: 63, }, end: Position { line: 1037, column: 86, }, }, }, ), ], span: Span { start: Position { line: 1037, column: 62, }, end: Position { line: 1037, column: 87, }, }, }, ), ], span: Span { start: Position { line: 1037, column: 40, }, end: Position { line: 1037, column: 89, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "preStart", span: Span { start: Position { line: 1038, column: 9, }, end: Position { line: 1038, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 1038, column: 20, }, end: Position { line: 1038, column: 24, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "versionOlder", span: Span { start: Position { line: 1038, column: 26, }, end: Position { line: 1038, column: 38, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1038, column: 39, }, end: Position { line: 1038, column: 45, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "system", span: Span { start: Position { line: 1038, column: 46, }, end: Position { line: 1038, column: 52, }, }, }, ), Raw( PartRaw { content: "stateVersion", span: Span { start: Position { line: 1038, column: 53, }, end: Position { line: 1038, column: 65, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "22.05", span: Span { start: Position { line: 1038, column: 67, }, end: Position { line: 1038, column: 72, }, }, }, ), ], span: Span { start: Position { line: 1038, column: 66, }, end: Position { line: 1038, column: 73, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkBefore", span: Span { start: Position { line: 1038, column: 76, }, end: Position { line: 1038, column: 84, }, }, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "# Fix Git hooks of repositories pre-dating https://github.com/NixOS/nixpkgs/pull/133984\n(\nset +f\nshopt -s nullglob\nfor h in /var/lib/sourcehut/gitsrht/repos/~*/*/hooks/{pre-receive,update,post-update}\ndo ln -fnsv /usr/bin/gitsrht-update-hook \"$h\"; done\n)\n", span: Span { start: Position { line: 1039, column: 1, }, end: Position { line: 1046, column: 9, }, }, }, ), ], span: Span { start: Position { line: 1038, column: 85, }, end: Position { line: 1046, column: 11, }, }, }, ), ], }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1036, column: 43, }, end: Position { line: 1047, column: 8, }, }, }, ), ], span: Span { start: Position { line: 1036, column: 29, }, end: Position { line: 1047, column: 10, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "port", span: Span { start: Position { line: 1048, column: 7, }, end: Position { line: 1048, column: 11, }, }, }, ), ], to: Integer( Integer { value: "5001", span: Span { start: Position { line: 1048, column: 14, }, end: Position { line: 1048, column: 18, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "webhooks", span: Span { start: Position { line: 1049, column: 7, }, end: Position { line: 1049, column: 15, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 1049, column: 18, }, end: Position { line: 1049, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraTimers", span: Span { start: Position { line: 1050, column: 7, }, end: Position { line: 1050, column: 18, }, }, }, ), Raw( PartRaw { content: "gitsrht-periodic", span: Span { start: Position { line: 1050, column: 19, }, end: Position { line: 1050, column: 35, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "service", span: Span { start: Position { line: 1051, column: 9, }, end: Position { line: 1051, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "baseService", span: Span { start: Position { line: 1051, column: 19, }, end: Position { line: 1051, column: 30, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "timerConfig", span: Span { start: Position { line: 1052, column: 9, }, end: Position { line: 1052, column: 20, }, }, }, ), Raw( PartRaw { content: "OnCalendar", span: Span { start: Position { line: 1052, column: 21, }, end: Position { line: 1052, column: 31, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "*:0/20", span: Span { start: Position { line: 1052, column: 36, }, end: Position { line: 1052, column: 42, }, }, }, ), ], span: Span { start: Position { line: 1052, column: 35, }, end: Position { line: 1052, column: 43, }, }, }, ), ], span: Span { start: Position { line: 1052, column: 34, }, end: Position { line: 1052, column: 44, }, }, }, ), }, ), ], span: Span { start: Position { line: 1050, column: 38, }, end: Position { line: 1053, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraConfig", span: Span { start: Position { line: 1054, column: 7, }, end: Position { line: 1054, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkMerge", span: Span { start: Position { line: 1054, column: 21, }, end: Position { line: 1054, column: 28, }, }, }, ), arguments: [ List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 1058, column: 11, }, end: Position { line: 1058, column: 16, }, }, }, ), Raw( PartRaw { content: "users", span: Span { start: Position { line: 1058, column: 17, }, end: Position { line: 1058, column: 22, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1058, column: 25, }, end: Position { line: 1058, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 1058, column: 29, }, end: Position { line: 1058, column: 32, }, }, }, ), Raw( PartRaw { content: "user", span: Span { start: Position { line: 1058, column: 33, }, end: Position { line: 1058, column: 37, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "shell", span: Span { start: Position { line: 1058, column: 39, }, end: Position { line: 1058, column: 44, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1058, column: 47, }, end: Position { line: 1058, column: 51, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bash", span: Span { start: Position { line: 1058, column: 52, }, end: Position { line: 1058, column: 56, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1059, column: 11, }, end: Position { line: 1059, column: 19, }, }, }, ), Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1059, column: 20, }, end: Position { line: 1059, column: 29, }, }, }, ), Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1059, column: 30, }, end: Position { line: 1059, column: 38, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "git.sr.ht::dispatch", span: Span { start: Position { line: 1060, column: 14, }, end: Position { line: 1060, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1060, column: 13, }, end: Position { line: 1060, column: 34, }, }, }, ), }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "/usr/bin/gitsrht-keys", span: Span { start: Position { line: 1060, column: 36, }, end: Position { line: 1060, column: 57, }, }, }, ), ], span: Span { start: Position { line: 1060, column: 35, }, end: Position { line: 1060, column: 58, }, }, }, ), }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 1061, column: 15, }, end: Position { line: 1061, column: 24, }, }, }, ), arguments: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1061, column: 28, }, end: Position { line: 1061, column: 31, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 1061, column: 32, }, end: Position { line: 1061, column: 35, }, }, }, ), Raw( PartRaw { content: "user", span: Span { start: Position { line: 1061, column: 36, }, end: Position { line: 1061, column: 40, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 1061, column: 26, }, end: Position { line: 1061, column: 42, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1061, column: 44, }, end: Position { line: 1061, column: 47, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 1061, column: 48, }, end: Position { line: 1061, column: 51, }, }, }, ), Raw( PartRaw { content: "group", span: Span { start: Position { line: 1061, column: 52, }, end: Position { line: 1061, column: 57, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 1061, column: 25, }, end: Position { line: 1061, column: 59, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1059, column: 41, }, end: Position { line: 1062, column: 12, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 1063, column: 11, }, end: Position { line: 1063, column: 18, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 1063, column: 19, }, end: Position { line: 1063, column: 27, }, }, }, ), Raw( PartRaw { content: "sshd", span: Span { start: Position { line: 1063, column: 28, }, end: Position { line: 1063, column: 32, }, }, }, ), ], to: Identifier( Identifier { id: "baseService", span: Span { start: Position { line: 1063, column: 35, }, end: Position { line: 1063, column: 46, }, }, }, ), }, ), ], span: Span { start: Position { line: 1055, column: 9, }, end: Position { line: 1064, column: 10, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 1065, column: 10, }, end: Position { line: 1065, column: 14, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1065, column: 15, }, end: Position { line: 1065, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1065, column: 19, }, end: Position { line: 1065, column: 24, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1065, column: 25, }, end: Position { line: 1065, column: 31, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1066, column: 11, }, end: Position { line: 1066, column: 19, }, }, }, ), Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1066, column: 20, }, end: Position { line: 1066, column: 25, }, }, }, ), Raw( PartRaw { content: "virtualHosts", span: Span { start: Position { line: 1066, column: 26, }, end: Position { line: 1066, column: 38, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "git.", span: Span { start: Position { line: 1066, column: 40, }, end: Position { line: 1066, column: 53, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 1066, column: 46, }, end: Position { line: 1066, column: 52, }, }, }, ), }, ), ], span: Span { start: Position { line: 1066, column: 39, }, end: Position { line: 1066, column: 54, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "locations", span: Span { start: Position { line: 1067, column: 13, }, end: Position { line: 1067, column: 22, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "/authorize", span: Span { start: Position { line: 1067, column: 24, }, end: Position { line: 1067, column: 34, }, }, }, ), ], span: Span { start: Position { line: 1067, column: 23, }, end: Position { line: 1067, column: 35, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "proxyPass", span: Span { start: Position { line: 1068, column: 15, }, end: Position { line: 1068, column: 24, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "http://", span: Span { start: Position { line: 1068, column: 28, }, end: Position { line: 1068, column: 55, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1068, column: 37, }, end: Position { line: 1068, column: 40, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenAddress", span: Span { start: Position { line: 1068, column: 41, }, end: Position { line: 1068, column: 54, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 1068, column: 28, }, end: Position { line: 1068, column: 56, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 1068, column: 58, }, end: Position { line: 1068, column: 66, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1068, column: 67, }, end: Position { line: 1068, column: 70, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 1068, column: 71, }, end: Position { line: 1068, column: 74, }, }, }, ), Raw( PartRaw { content: "port", span: Span { start: Position { line: 1068, column: 75, }, end: Position { line: 1068, column: 79, }, }, }, ), ], default: None, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1068, column: 27, }, end: Position { line: 1068, column: 81, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraConfig", span: Span { start: Position { line: 1069, column: 15, }, end: Position { line: 1069, column: 26, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "proxy_pass_request_body off;\nproxy_set_header Content-Length \"\";\nproxy_set_header X-Original-URI $request_uri;\n", span: Span { start: Position { line: 1070, column: 1, }, end: Position { line: 1073, column: 15, }, }, }, ), ], span: Span { start: Position { line: 1069, column: 29, }, end: Position { line: 1073, column: 17, }, }, }, ), }, ), ], span: Span { start: Position { line: 1067, column: 38, }, end: Position { line: 1074, column: 14, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "locations", span: Span { start: Position { line: 1075, column: 13, }, end: Position { line: 1075, column: 22, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "~ ^/([^/]+)/([^/]+)/(HEAD|info/refs|objects/info/.*|git-upload-pack).*$", span: Span { start: Position { line: 1075, column: 24, }, end: Position { line: 1075, column: 95, }, }, }, ), ], span: Span { start: Position { line: 1075, column: 23, }, end: Position { line: 1075, column: 96, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "root", span: Span { start: Position { line: 1076, column: 15, }, end: Position { line: 1076, column: 19, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/sourcehut/gitsrht/repos", span: Span { start: Position { line: 1076, column: 23, }, end: Position { line: 1076, column: 55, }, }, }, ), ], span: Span { start: Position { line: 1076, column: 22, }, end: Position { line: 1076, column: 56, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "fastcgiParams", span: Span { start: Position { line: 1077, column: 15, }, end: Position { line: 1077, column: 28, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "GIT_HTTP_EXPORT_ALL", span: Span { start: Position { line: 1078, column: 17, }, end: Position { line: 1078, column: 36, }, }, }, ), ], to: String( String_ { parts: [], span: Span { start: Position { line: 1078, column: 39, }, end: Position { line: 1078, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "GIT_PROJECT_ROOT", span: Span { start: Position { line: 1079, column: 17, }, end: Position { line: 1079, column: 33, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "$document_root", span: Span { start: Position { line: 1079, column: 37, }, end: Position { line: 1079, column: 51, }, }, }, ), ], span: Span { start: Position { line: 1079, column: 36, }, end: Position { line: 1079, column: 52, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "PATH_INFO", span: Span { start: Position { line: 1080, column: 17, }, end: Position { line: 1080, column: 26, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "$uri", span: Span { start: Position { line: 1080, column: 30, }, end: Position { line: 1080, column: 34, }, }, }, ), ], span: Span { start: Position { line: 1080, column: 29, }, end: Position { line: 1080, column: 35, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "SCRIPT_FILENAME", span: Span { start: Position { line: 1081, column: 17, }, end: Position { line: 1081, column: 32, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1081, column: 38, }, end: Position { line: 1081, column: 41, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 1081, column: 42, }, end: Position { line: 1081, column: 45, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 1081, column: 46, }, end: Position { line: 1081, column: 53, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/git-http-backend", span: Span { start: Position { line: 1081, column: 36, }, end: Position { line: 1081, column: 75, }, }, }, ), ], span: Span { start: Position { line: 1081, column: 35, }, end: Position { line: 1081, column: 76, }, }, }, ), }, ), ], span: Span { start: Position { line: 1077, column: 31, }, end: Position { line: 1082, column: 16, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraConfig", span: Span { start: Position { line: 1083, column: 15, }, end: Position { line: 1083, column: 26, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth_request /authorize;\nfastcgi_read_timeout 500s;\nfastcgi_pass unix:/run/gitsrht-fcgiwrap.sock;\ngzip off;\n", span: Span { start: Position { line: 1084, column: 1, }, end: Position { line: 1088, column: 15, }, }, }, ), ], span: Span { start: Position { line: 1083, column: 29, }, end: Position { line: 1088, column: 17, }, }, }, ), }, ), ], span: Span { start: Position { line: 1075, column: 99, }, end: Position { line: 1089, column: 14, }, }, }, ), }, ), ], span: Span { start: Position { line: 1066, column: 57, }, end: Position { line: 1090, column: 12, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 1091, column: 11, }, end: Position { line: 1091, column: 18, }, }, }, ), Raw( PartRaw { content: "sockets", span: Span { start: Position { line: 1091, column: 19, }, end: Position { line: 1091, column: 26, }, }, }, ), Raw( PartRaw { content: "gitsrht-fcgiwrap", span: Span { start: Position { line: 1091, column: 27, }, end: Position { line: 1091, column: 43, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "before", span: Span { start: Position { line: 1092, column: 13, }, end: Position { line: 1092, column: 19, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "nginx.service", span: Span { start: Position { line: 1092, column: 25, }, end: Position { line: 1092, column: 38, }, }, }, ), ], span: Span { start: Position { line: 1092, column: 24, }, end: Position { line: 1092, column: 39, }, }, }, ), ], span: Span { start: Position { line: 1092, column: 22, }, end: Position { line: 1092, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "wantedBy", span: Span { start: Position { line: 1093, column: 13, }, end: Position { line: 1093, column: 21, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "sockets.target", span: Span { start: Position { line: 1093, column: 27, }, end: Position { line: 1093, column: 41, }, }, }, ), ], span: Span { start: Position { line: 1093, column: 26, }, end: Position { line: 1093, column: 42, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "gitsrht.service", span: Span { start: Position { line: 1093, column: 44, }, end: Position { line: 1093, column: 59, }, }, }, ), ], span: Span { start: Position { line: 1093, column: 43, }, end: Position { line: 1093, column: 60, }, }, }, ), ], span: Span { start: Position { line: 1093, column: 24, }, end: Position { line: 1093, column: 62, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "socketConfig", span: Span { start: Position { line: 1095, column: 13, }, end: Position { line: 1095, column: 25, }, }, }, ), Raw( PartRaw { content: "ListenStream", span: Span { start: Position { line: 1095, column: 26, }, end: Position { line: 1095, column: 38, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/run/gitsrht-fcgiwrap.sock", span: Span { start: Position { line: 1095, column: 42, }, end: Position { line: 1095, column: 68, }, }, }, ), ], span: Span { start: Position { line: 1095, column: 41, }, end: Position { line: 1095, column: 69, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "socketConfig", span: Span { start: Position { line: 1096, column: 13, }, end: Position { line: 1096, column: 25, }, }, }, ), Raw( PartRaw { content: "SocketUser", span: Span { start: Position { line: 1096, column: 26, }, end: Position { line: 1096, column: 36, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "nginx", span: Span { start: Position { line: 1096, column: 39, }, end: Position { line: 1096, column: 44, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "user", span: Span { start: Position { line: 1096, column: 45, }, end: Position { line: 1096, column: 49, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "socketConfig", span: Span { start: Position { line: 1097, column: 13, }, end: Position { line: 1097, column: 25, }, }, }, ), Raw( PartRaw { content: "SocketMode", span: Span { start: Position { line: 1097, column: 26, }, end: Position { line: 1097, column: 36, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "600", span: Span { start: Position { line: 1097, column: 40, }, end: Position { line: 1097, column: 43, }, }, }, ), ], span: Span { start: Position { line: 1097, column: 39, }, end: Position { line: 1097, column: 44, }, }, }, ), }, ), ], span: Span { start: Position { line: 1091, column: 46, }, end: Position { line: 1098, column: 12, }, }, }, ), }, ), ], span: Span { start: Position { line: 1065, column: 32, }, end: Position { line: 1099, column: 10, }, }, }, ), ], }, ), ], span: Span { start: Position { line: 1054, column: 29, }, end: Position { line: 1100, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraServices", span: Span { start: Position { line: 1101, column: 7, }, end: Position { line: 1101, column: 20, }, }, }, ), Raw( PartRaw { content: "gitsrht-api", span: Span { start: Position { line: 1101, column: 21, }, end: Position { line: 1101, column: 32, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1102, column: 9, }, end: Position { line: 1102, column: 22, }, }, }, ), Raw( PartRaw { content: "Restart", span: Span { start: Position { line: 1102, column: 23, }, end: Position { line: 1102, column: 30, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "always", span: Span { start: Position { line: 1102, column: 34, }, end: Position { line: 1102, column: 40, }, }, }, ), ], span: Span { start: Position { line: 1102, column: 33, }, end: Position { line: 1102, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1103, column: 9, }, end: Position { line: 1103, column: 22, }, }, }, ), Raw( PartRaw { content: "RestartSec", span: Span { start: Position { line: 1103, column: 23, }, end: Position { line: 1103, column: 33, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "5s", span: Span { start: Position { line: 1103, column: 37, }, end: Position { line: 1103, column: 39, }, }, }, ), ], span: Span { start: Position { line: 1103, column: 36, }, end: Position { line: 1103, column: 40, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1104, column: 9, }, end: Position { line: 1104, column: 22, }, }, }, ), Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 1104, column: 23, }, end: Position { line: 1104, column: 32, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1104, column: 38, }, end: Position { line: 1104, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1104, column: 43, }, end: Position { line: 1104, column: 52, }, }, }, ), Raw( PartRaw { content: "gitsrht", span: Span { start: Position { line: 1104, column: 53, }, end: Position { line: 1104, column: 60, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/gitsrht-api -b ", span: Span { start: Position { line: 1104, column: 36, }, end: Position { line: 1104, column: 81, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1104, column: 83, }, end: Position { line: 1104, column: 86, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenAddress", span: Span { start: Position { line: 1104, column: 87, }, end: Position { line: 1104, column: 100, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 1104, column: 36, }, end: Position { line: 1104, column: 102, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 1104, column: 104, }, end: Position { line: 1104, column: 112, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1104, column: 114, }, end: Position { line: 1104, column: 117, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 1104, column: 118, }, end: Position { line: 1104, column: 121, }, }, }, ), Raw( PartRaw { content: "port", span: Span { start: Position { line: 1104, column: 122, }, end: Position { line: 1104, column: 126, }, }, }, ), ], default: None, }, ), operator: Addition, right: Integer( Integer { value: "100", span: Span { start: Position { line: 1104, column: 129, }, end: Position { line: 1104, column: 132, }, }, }, ), }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1104, column: 35, }, end: Position { line: 1104, column: 135, }, }, }, ), }, ), ], span: Span { start: Position { line: 1101, column: 35, }, end: Position { line: 1105, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraServices", span: Span { start: Position { line: 1106, column: 7, }, end: Position { line: 1106, column: 20, }, }, }, ), Raw( PartRaw { content: "gitsrht-fcgiwrap", span: Span { start: Position { line: 1106, column: 21, }, end: Position { line: 1106, column: 37, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 1106, column: 40, }, end: Position { line: 1106, column: 44, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1106, column: 45, }, end: Position { line: 1106, column: 48, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1106, column: 49, }, end: Position { line: 1106, column: 54, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1106, column: 55, }, end: Position { line: 1106, column: 61, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1107, column: 9, }, end: Position { line: 1107, column: 22, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 1109, column: 11, }, end: Position { line: 1109, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1109, column: 26, }, end: Position { line: 1109, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "fcgiwrap", span: Span { start: Position { line: 1109, column: 31, }, end: Position { line: 1109, column: 39, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/sbin/fcgiwrap -c ", span: Span { start: Position { line: 1109, column: 24, }, end: Position { line: 1109, column: 58, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 1109, column: 60, }, end: Position { line: 1109, column: 68, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1109, column: 69, }, end: Position { line: 1109, column: 72, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "git", span: Span { start: Position { line: 1109, column: 73, }, end: Position { line: 1109, column: 76, }, }, }, ), Raw( PartRaw { content: "fcgiwrap", span: Span { start: Position { line: 1109, column: 77, }, end: Position { line: 1109, column: 85, }, }, }, ), Raw( PartRaw { content: "preforkProcess", span: Span { start: Position { line: 1109, column: 86, }, end: Position { line: 1109, column: 100, }, }, }, ), ], default: None, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1109, column: 23, }, end: Position { line: 1109, column: 102, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ExecStartPre", span: Span { start: Position { line: 1111, column: 11, }, end: Position { line: 1111, column: 23, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkForce", span: Span { start: Position { line: 1111, column: 26, }, end: Position { line: 1111, column: 33, }, }, }, ), arguments: [ List( List { elements: [], span: Span { start: Position { line: 1111, column: 34, }, end: Position { line: 1111, column: 36, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "User", span: Span { start: Position { line: 1112, column: 11, }, end: Position { line: 1112, column: 15, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 1112, column: 18, }, end: Position { line: 1112, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "DynamicUser", span: Span { start: Position { line: 1113, column: 11, }, end: Position { line: 1113, column: 22, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 1113, column: 25, }, end: Position { line: 1113, column: 29, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "BindReadOnlyPaths", span: Span { start: Position { line: 1114, column: 11, }, end: Position { line: 1114, column: 28, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1114, column: 36, }, end: Position { line: 1114, column: 39, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1114, column: 40, }, end: Position { line: 1114, column: 48, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "git.sr.ht", span: Span { start: Position { line: 1114, column: 50, }, end: Position { line: 1114, column: 59, }, }, }, ), ], span: Span { start: Position { line: 1114, column: 49, }, end: Position { line: 1114, column: 60, }, }, }, ), }, ), Raw( PartRaw { content: "repos", span: Span { start: Position { line: 1114, column: 61, }, end: Position { line: 1114, column: 66, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":/var/lib/sourcehut/gitsrht/repos", span: Span { start: Position { line: 1114, column: 34, }, end: Position { line: 1114, column: 100, }, }, }, ), ], span: Span { start: Position { line: 1114, column: 33, }, end: Position { line: 1114, column: 101, }, }, }, ), ], span: Span { start: Position { line: 1114, column: 31, }, end: Position { line: 1114, column: 103, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "IPAddressDeny", span: Span { start: Position { line: 1115, column: 11, }, end: Position { line: 1115, column: 24, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "any", span: Span { start: Position { line: 1115, column: 28, }, end: Position { line: 1115, column: 31, }, }, }, ), ], span: Span { start: Position { line: 1115, column: 27, }, end: Position { line: 1115, column: 32, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "InaccessiblePaths", span: Span { start: Position { line: 1116, column: 11, }, end: Position { line: 1116, column: 28, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "-+/run/postgresql", span: Span { start: Position { line: 1116, column: 34, }, end: Position { line: 1116, column: 51, }, }, }, ), ], span: Span { start: Position { line: 1116, column: 33, }, end: Position { line: 1116, column: 52, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "-+/run/redis-sourcehut", span: Span { start: Position { line: 1116, column: 54, }, end: Position { line: 1116, column: 76, }, }, }, ), ], span: Span { start: Position { line: 1116, column: 53, }, end: Position { line: 1116, column: 77, }, }, }, ), ], span: Span { start: Position { line: 1116, column: 31, }, end: Position { line: 1116, column: 79, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "PrivateNetwork", span: Span { start: Position { line: 1117, column: 11, }, end: Position { line: 1117, column: 25, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 1117, column: 28, }, end: Position { line: 1117, column: 32, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "RestrictAddressFamilies", span: Span { start: Position { line: 1118, column: 11, }, end: Position { line: 1118, column: 34, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkForce", span: Span { start: Position { line: 1118, column: 37, }, end: Position { line: 1118, column: 44, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "none", span: Span { start: Position { line: 1118, column: 48, }, end: Position { line: 1118, column: 52, }, }, }, ), ], span: Span { start: Position { line: 1118, column: 47, }, end: Position { line: 1118, column: 53, }, }, }, ), ], span: Span { start: Position { line: 1118, column: 45, }, end: Position { line: 1118, column: 55, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "SystemCallFilter", span: Span { start: Position { line: 1119, column: 11, }, end: Position { line: 1119, column: 27, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkForce", span: Span { start: Position { line: 1119, column: 30, }, end: Position { line: 1119, column: 37, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "@system-service", span: Span { start: Position { line: 1120, column: 14, }, end: Position { line: 1120, column: 29, }, }, }, ), ], span: Span { start: Position { line: 1120, column: 13, }, end: Position { line: 1120, column: 30, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "~@aio", span: Span { start: Position { line: 1121, column: 14, }, end: Position { line: 1121, column: 19, }, }, }, ), ], span: Span { start: Position { line: 1121, column: 13, }, end: Position { line: 1121, column: 20, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "~@keyring", span: Span { start: Position { line: 1121, column: 22, }, end: Position { line: 1121, column: 31, }, }, }, ), ], span: Span { start: Position { line: 1121, column: 21, }, end: Position { line: 1121, column: 32, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "~@memlock", span: Span { start: Position { line: 1121, column: 34, }, end: Position { line: 1121, column: 43, }, }, }, ), ], span: Span { start: Position { line: 1121, column: 33, }, end: Position { line: 1121, column: 44, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "~@privileged", span: Span { start: Position { line: 1121, column: 46, }, end: Position { line: 1121, column: 58, }, }, }, ), ], span: Span { start: Position { line: 1121, column: 45, }, end: Position { line: 1121, column: 59, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "~@resources", span: Span { start: Position { line: 1121, column: 61, }, end: Position { line: 1121, column: 72, }, }, }, ), ], span: Span { start: Position { line: 1121, column: 60, }, end: Position { line: 1121, column: 73, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "~@setuid", span: Span { start: Position { line: 1121, column: 75, }, end: Position { line: 1121, column: 83, }, }, }, ), ], span: Span { start: Position { line: 1121, column: 74, }, end: Position { line: 1121, column: 84, }, }, }, ), ], span: Span { start: Position { line: 1119, column: 38, }, end: Position { line: 1123, column: 12, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1107, column: 25, }, end: Position { line: 1124, column: 10, }, }, }, ), }, ), ], span: Span { start: Position { line: 1106, column: 62, }, end: Position { line: 1125, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1034, column: 10, }, end: Position { line: 1126, column: 6, }, }, }, ), span: Span { start: Position { line: 1029, column: 34, }, end: Position { line: 1126, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "import", span: Span { start: Position { line: 1128, column: 6, }, end: Position { line: 1128, column: 12, }, }, }, ), arguments: [ Path( Path { parts: [ Raw( PartRaw { content: "./service.nix", span: Span { start: Position { line: 1128, column: 13, }, end: Position { line: 1128, column: 26, }, }, }, ), ], span: Span { start: Position { line: 1128, column: 13, }, end: Position { line: 1128, column: 26, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 1128, column: 28, }, end: Position { line: 1128, column: 30, }, }, }, ), ], span: Span { start: Position { line: 1128, column: 27, }, end: Position { line: 1128, column: 31, }, }, }, ), LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "baseService", span: Span { start: Position { line: 1129, column: 7, }, end: Position { line: 1129, column: 18, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 1130, column: 9, }, end: Position { line: 1130, column: 13, }, }, }, ), ], to: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1130, column: 18, }, end: Position { line: 1130, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 1130, column: 22, }, end: Position { line: 1130, column: 24, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 1130, column: 25, }, end: Position { line: 1130, column: 32, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1130, column: 16, }, end: Position { line: 1130, column: 34, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1131, column: 9, }, end: Position { line: 1131, column: 22, }, }, }, ), Raw( PartRaw { content: "BindPaths", span: Span { start: Position { line: 1131, column: 23, }, end: Position { line: 1131, column: 32, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1131, column: 40, }, end: Position { line: 1131, column: 43, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1131, column: 44, }, end: Position { line: 1131, column: 52, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "hg.sr.ht", span: Span { start: Position { line: 1131, column: 54, }, end: Position { line: 1131, column: 62, }, }, }, ), ], span: Span { start: Position { line: 1131, column: 53, }, end: Position { line: 1131, column: 63, }, }, }, ), }, ), Raw( PartRaw { content: "repos", span: Span { start: Position { line: 1131, column: 64, }, end: Position { line: 1131, column: 69, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":/var/lib/sourcehut/hgsrht/repos", span: Span { start: Position { line: 1131, column: 38, }, end: Position { line: 1131, column: 102, }, }, }, ), ], span: Span { start: Position { line: 1131, column: 37, }, end: Position { line: 1131, column: 103, }, }, }, ), ], span: Span { start: Position { line: 1131, column: 35, }, end: Position { line: 1131, column: 105, }, }, }, ), }, ), ], span: Span { start: Position { line: 1129, column: 21, }, end: Position { line: 1132, column: 8, }, }, }, ), }, ), ], target: Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: None, attributes: [ Raw( PartRaw { content: "configIniOfService", span: Span { start: Position { line: 1134, column: 15, }, end: Position { line: 1134, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1133, column: 11, }, end: Position { line: 1134, column: 34, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "mainService", span: Span { start: Position { line: 1135, column: 7, }, end: Position { line: 1135, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkMerge", span: Span { start: Position { line: 1135, column: 21, }, end: Position { line: 1135, column: 28, }, }, }, ), arguments: [ List( List { elements: [ Identifier( Identifier { id: "baseService", span: Span { start: Position { line: 1135, column: 31, }, end: Position { line: 1135, column: 42, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1136, column: 9, }, end: Position { line: 1136, column: 22, }, }, }, ), Raw( PartRaw { content: "StateDirectory", span: Span { start: Position { line: 1136, column: 23, }, end: Position { line: 1136, column: 37, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "sourcehut/hgsrht", span: Span { start: Position { line: 1136, column: 43, }, end: Position { line: 1136, column: 59, }, }, }, ), ], span: Span { start: Position { line: 1136, column: 42, }, end: Position { line: 1136, column: 60, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "sourcehut/hgsrht/repos", span: Span { start: Position { line: 1136, column: 62, }, end: Position { line: 1136, column: 84, }, }, }, ), ], span: Span { start: Position { line: 1136, column: 61, }, end: Position { line: 1136, column: 85, }, }, }, ), ], span: Span { start: Position { line: 1136, column: 40, }, end: Position { line: 1136, column: 87, }, }, }, ), }, ), ], span: Span { start: Position { line: 1135, column: 43, }, end: Position { line: 1137, column: 8, }, }, }, ), ], span: Span { start: Position { line: 1135, column: 29, }, end: Position { line: 1137, column: 10, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "port", span: Span { start: Position { line: 1138, column: 7, }, end: Position { line: 1138, column: 11, }, }, }, ), ], to: Integer( Integer { value: "5010", span: Span { start: Position { line: 1138, column: 14, }, end: Position { line: 1138, column: 18, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "webhooks", span: Span { start: Position { line: 1139, column: 7, }, end: Position { line: 1139, column: 15, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 1139, column: 18, }, end: Position { line: 1139, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraTimers", span: Span { start: Position { line: 1140, column: 7, }, end: Position { line: 1140, column: 18, }, }, }, ), Raw( PartRaw { content: "hgsrht-periodic", span: Span { start: Position { line: 1140, column: 19, }, end: Position { line: 1140, column: 34, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "service", span: Span { start: Position { line: 1141, column: 9, }, end: Position { line: 1141, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "baseService", span: Span { start: Position { line: 1141, column: 19, }, end: Position { line: 1141, column: 30, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "timerConfig", span: Span { start: Position { line: 1142, column: 9, }, end: Position { line: 1142, column: 20, }, }, }, ), Raw( PartRaw { content: "OnCalendar", span: Span { start: Position { line: 1142, column: 21, }, end: Position { line: 1142, column: 31, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "*:0/20", span: Span { start: Position { line: 1142, column: 36, }, end: Position { line: 1142, column: 42, }, }, }, ), ], span: Span { start: Position { line: 1142, column: 35, }, end: Position { line: 1142, column: 43, }, }, }, ), ], span: Span { start: Position { line: 1142, column: 34, }, end: Position { line: 1142, column: 44, }, }, }, ), }, ), ], span: Span { start: Position { line: 1140, column: 37, }, end: Position { line: 1143, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraTimers", span: Span { start: Position { line: 1144, column: 7, }, end: Position { line: 1144, column: 18, }, }, }, ), Raw( PartRaw { content: "hgsrht-clonebundles", span: Span { start: Position { line: 1144, column: 19, }, end: Position { line: 1144, column: 38, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 1144, column: 41, }, end: Position { line: 1144, column: 45, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1144, column: 46, }, end: Position { line: 1144, column: 49, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 1144, column: 50, }, end: Position { line: 1144, column: 52, }, }, }, ), Raw( PartRaw { content: "cloneBundles", span: Span { start: Position { line: 1144, column: 53, }, end: Position { line: 1144, column: 65, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "service", span: Span { start: Position { line: 1145, column: 9, }, end: Position { line: 1145, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "baseService", span: Span { start: Position { line: 1145, column: 19, }, end: Position { line: 1145, column: 30, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "timerConfig", span: Span { start: Position { line: 1146, column: 9, }, end: Position { line: 1146, column: 20, }, }, }, ), Raw( PartRaw { content: "OnCalendar", span: Span { start: Position { line: 1146, column: 21, }, end: Position { line: 1146, column: 31, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "daily", span: Span { start: Position { line: 1146, column: 36, }, end: Position { line: 1146, column: 41, }, }, }, ), ], span: Span { start: Position { line: 1146, column: 35, }, end: Position { line: 1146, column: 42, }, }, }, ), ], span: Span { start: Position { line: 1146, column: 34, }, end: Position { line: 1146, column: 43, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "timerConfig", span: Span { start: Position { line: 1147, column: 9, }, end: Position { line: 1147, column: 20, }, }, }, ), Raw( PartRaw { content: "AccuracySec", span: Span { start: Position { line: 1147, column: 21, }, end: Position { line: 1147, column: 32, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "1h", span: Span { start: Position { line: 1147, column: 36, }, end: Position { line: 1147, column: 38, }, }, }, ), ], span: Span { start: Position { line: 1147, column: 35, }, end: Position { line: 1147, column: 39, }, }, }, ), }, ), ], span: Span { start: Position { line: 1144, column: 66, }, end: Position { line: 1148, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraServices", span: Span { start: Position { line: 1149, column: 7, }, end: Position { line: 1149, column: 20, }, }, }, ), Raw( PartRaw { content: "hgsrht-api", span: Span { start: Position { line: 1149, column: 21, }, end: Position { line: 1149, column: 31, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1150, column: 9, }, end: Position { line: 1150, column: 22, }, }, }, ), Raw( PartRaw { content: "Restart", span: Span { start: Position { line: 1150, column: 23, }, end: Position { line: 1150, column: 30, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "always", span: Span { start: Position { line: 1150, column: 34, }, end: Position { line: 1150, column: 40, }, }, }, ), ], span: Span { start: Position { line: 1150, column: 33, }, end: Position { line: 1150, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1151, column: 9, }, end: Position { line: 1151, column: 22, }, }, }, ), Raw( PartRaw { content: "RestartSec", span: Span { start: Position { line: 1151, column: 23, }, end: Position { line: 1151, column: 33, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "5s", span: Span { start: Position { line: 1151, column: 37, }, end: Position { line: 1151, column: 39, }, }, }, ), ], span: Span { start: Position { line: 1151, column: 36, }, end: Position { line: 1151, column: 40, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1152, column: 9, }, end: Position { line: 1152, column: 22, }, }, }, ), Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 1152, column: 23, }, end: Position { line: 1152, column: 32, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1152, column: 38, }, end: Position { line: 1152, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1152, column: 43, }, end: Position { line: 1152, column: 52, }, }, }, ), Raw( PartRaw { content: "hgsrht", span: Span { start: Position { line: 1152, column: 53, }, end: Position { line: 1152, column: 59, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/hgsrht-api -b ", span: Span { start: Position { line: 1152, column: 36, }, end: Position { line: 1152, column: 79, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1152, column: 81, }, end: Position { line: 1152, column: 84, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenAddress", span: Span { start: Position { line: 1152, column: 85, }, end: Position { line: 1152, column: 98, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 1152, column: 36, }, end: Position { line: 1152, column: 100, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 1152, column: 102, }, end: Position { line: 1152, column: 110, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1152, column: 112, }, end: Position { line: 1152, column: 115, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 1152, column: 116, }, end: Position { line: 1152, column: 118, }, }, }, ), Raw( PartRaw { content: "port", span: Span { start: Position { line: 1152, column: 119, }, end: Position { line: 1152, column: 123, }, }, }, ), ], default: None, }, ), operator: Addition, right: Integer( Integer { value: "100", span: Span { start: Position { line: 1152, column: 126, }, end: Position { line: 1152, column: 129, }, }, }, ), }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1152, column: 35, }, end: Position { line: 1152, column: 132, }, }, }, ), }, ), ], span: Span { start: Position { line: 1149, column: 34, }, end: Position { line: 1153, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraConfig", span: Span { start: Position { line: 1154, column: 7, }, end: Position { line: 1154, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkMerge", span: Span { start: Position { line: 1154, column: 21, }, end: Position { line: 1154, column: 28, }, }, }, ), arguments: [ List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 1156, column: 11, }, end: Position { line: 1156, column: 16, }, }, }, ), Raw( PartRaw { content: "users", span: Span { start: Position { line: 1156, column: 17, }, end: Position { line: 1156, column: 22, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1156, column: 25, }, end: Position { line: 1156, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 1156, column: 29, }, end: Position { line: 1156, column: 31, }, }, }, ), Raw( PartRaw { content: "user", span: Span { start: Position { line: 1156, column: 32, }, end: Position { line: 1156, column: 36, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "shell", span: Span { start: Position { line: 1156, column: 38, }, end: Position { line: 1156, column: 43, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1156, column: 46, }, end: Position { line: 1156, column: 50, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bash", span: Span { start: Position { line: 1156, column: 51, }, end: Position { line: 1156, column: 55, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1157, column: 11, }, end: Position { line: 1157, column: 19, }, }, }, ), Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1157, column: 20, }, end: Position { line: 1157, column: 29, }, }, }, ), Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1157, column: 30, }, end: Position { line: 1157, column: 38, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "git.sr.ht::dispatch", span: Span { start: Position { line: 1160, column: 14, }, end: Position { line: 1160, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1160, column: 13, }, end: Position { line: 1160, column: 34, }, }, }, ), }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "/usr/bin/hgsrht-keys", span: Span { start: Position { line: 1160, column: 36, }, end: Position { line: 1160, column: 56, }, }, }, ), ], span: Span { start: Position { line: 1160, column: 35, }, end: Position { line: 1160, column: 57, }, }, }, ), }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 1161, column: 15, }, end: Position { line: 1161, column: 24, }, }, }, ), arguments: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1161, column: 28, }, end: Position { line: 1161, column: 31, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 1161, column: 32, }, end: Position { line: 1161, column: 34, }, }, }, ), Raw( PartRaw { content: "user", span: Span { start: Position { line: 1161, column: 35, }, end: Position { line: 1161, column: 39, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 1161, column: 26, }, end: Position { line: 1161, column: 41, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1161, column: 43, }, end: Position { line: 1161, column: 46, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 1161, column: 47, }, end: Position { line: 1161, column: 49, }, }, }, ), Raw( PartRaw { content: "group", span: Span { start: Position { line: 1161, column: 50, }, end: Position { line: 1161, column: 55, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 1161, column: 25, }, end: Position { line: 1161, column: 57, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1157, column: 41, }, end: Position { line: 1162, column: 12, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 1163, column: 11, }, end: Position { line: 1163, column: 18, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 1163, column: 19, }, end: Position { line: 1163, column: 27, }, }, }, ), Raw( PartRaw { content: "sshd", span: Span { start: Position { line: 1163, column: 28, }, end: Position { line: 1163, column: 32, }, }, }, ), ], to: Identifier( Identifier { id: "baseService", span: Span { start: Position { line: 1163, column: 35, }, end: Position { line: 1163, column: 46, }, }, }, ), }, ), ], span: Span { start: Position { line: 1155, column: 9, }, end: Position { line: 1164, column: 10, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 1165, column: 10, }, end: Position { line: 1165, column: 14, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1165, column: 15, }, end: Position { line: 1165, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1165, column: 19, }, end: Position { line: 1165, column: 24, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1165, column: 25, }, end: Position { line: 1165, column: 31, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 1167, column: 11, }, end: Position { line: 1167, column: 16, }, }, }, ), Raw( PartRaw { content: "users", span: Span { start: Position { line: 1167, column: 17, }, end: Position { line: 1167, column: 22, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "nginx", span: Span { start: Position { line: 1167, column: 25, }, end: Position { line: 1167, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "user", span: Span { start: Position { line: 1167, column: 31, }, end: Position { line: 1167, column: 35, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "extraGroups", span: Span { start: Position { line: 1167, column: 37, }, end: Position { line: 1167, column: 48, }, }, }, ), ], to: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1167, column: 53, }, end: Position { line: 1167, column: 56, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 1167, column: 57, }, end: Position { line: 1167, column: 59, }, }, }, ), Raw( PartRaw { content: "group", span: Span { start: Position { line: 1167, column: 60, }, end: Position { line: 1167, column: 65, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1167, column: 51, }, end: Position { line: 1167, column: 67, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1168, column: 11, }, end: Position { line: 1168, column: 19, }, }, }, ), Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1168, column: 20, }, end: Position { line: 1168, column: 25, }, }, }, ), Raw( PartRaw { content: "virtualHosts", span: Span { start: Position { line: 1168, column: 26, }, end: Position { line: 1168, column: 38, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "hg.", span: Span { start: Position { line: 1168, column: 40, }, end: Position { line: 1168, column: 52, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 1168, column: 45, }, end: Position { line: 1168, column: 51, }, }, }, ), }, ), ], span: Span { start: Position { line: 1168, column: 39, }, end: Position { line: 1168, column: 53, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "locations", span: Span { start: Position { line: 1169, column: 13, }, end: Position { line: 1169, column: 22, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "/authorize", span: Span { start: Position { line: 1169, column: 24, }, end: Position { line: 1169, column: 34, }, }, }, ), ], span: Span { start: Position { line: 1169, column: 23, }, end: Position { line: 1169, column: 35, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "proxyPass", span: Span { start: Position { line: 1170, column: 15, }, end: Position { line: 1170, column: 24, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "http://", span: Span { start: Position { line: 1170, column: 28, }, end: Position { line: 1170, column: 55, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1170, column: 37, }, end: Position { line: 1170, column: 40, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenAddress", span: Span { start: Position { line: 1170, column: 41, }, end: Position { line: 1170, column: 54, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 1170, column: 28, }, end: Position { line: 1170, column: 56, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 1170, column: 58, }, end: Position { line: 1170, column: 66, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1170, column: 67, }, end: Position { line: 1170, column: 70, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "hg", span: Span { start: Position { line: 1170, column: 71, }, end: Position { line: 1170, column: 73, }, }, }, ), Raw( PartRaw { content: "port", span: Span { start: Position { line: 1170, column: 74, }, end: Position { line: 1170, column: 78, }, }, }, ), ], default: None, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1170, column: 27, }, end: Position { line: 1170, column: 80, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraConfig", span: Span { start: Position { line: 1171, column: 15, }, end: Position { line: 1171, column: 26, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "proxy_pass_request_body off;\nproxy_set_header Content-Length \"\";\nproxy_set_header X-Original-URI $request_uri;\n", span: Span { start: Position { line: 1172, column: 1, }, end: Position { line: 1175, column: 15, }, }, }, ), ], span: Span { start: Position { line: 1171, column: 29, }, end: Position { line: 1175, column: 17, }, }, }, ), }, ), ], span: Span { start: Position { line: 1169, column: 38, }, end: Position { line: 1176, column: 14, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "locations", span: Span { start: Position { line: 1181, column: 13, }, end: Position { line: 1181, column: 22, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "~ ^/[~^][a-z0-9_]+/[a-zA-Z0-9_.-]+/\\.hg/bundles/.*$", span: Span { start: Position { line: 1181, column: 24, }, end: Position { line: 1181, column: 76, }, }, }, ), ], span: Span { start: Position { line: 1181, column: 23, }, end: Position { line: 1181, column: 77, }, }, }, ), }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "root", span: Span { start: Position { line: 1182, column: 15, }, end: Position { line: 1182, column: 19, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/nginx/hgsrht/repos", span: Span { start: Position { line: 1182, column: 23, }, end: Position { line: 1182, column: 50, }, }, }, ), ], span: Span { start: Position { line: 1182, column: 22, }, end: Position { line: 1182, column: 51, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraConfig", span: Span { start: Position { line: 1183, column: 15, }, end: Position { line: 1183, column: 26, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth_request /authorize;\ngzip off;\n", span: Span { start: Position { line: 1184, column: 1, }, end: Position { line: 1186, column: 15, }, }, }, ), ], span: Span { start: Position { line: 1183, column: 29, }, end: Position { line: 1186, column: 17, }, }, }, ), }, ), ], span: Span { start: Position { line: 1181, column: 80, }, end: Position { line: 1187, column: 14, }, }, }, ), }, ), ], span: Span { start: Position { line: 1168, column: 56, }, end: Position { line: 1188, column: 12, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 1189, column: 11, }, end: Position { line: 1189, column: 18, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 1189, column: 19, }, end: Position { line: 1189, column: 27, }, }, }, ), Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1189, column: 28, }, end: Position { line: 1189, column: 33, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1190, column: 13, }, end: Position { line: 1190, column: 26, }, }, }, ), Raw( PartRaw { content: "BindReadOnlyPaths", span: Span { start: Position { line: 1190, column: 27, }, end: Position { line: 1190, column: 44, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1190, column: 52, }, end: Position { line: 1190, column: 55, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1190, column: 56, }, end: Position { line: 1190, column: 64, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "hg.sr.ht", span: Span { start: Position { line: 1190, column: 66, }, end: Position { line: 1190, column: 74, }, }, }, ), ], span: Span { start: Position { line: 1190, column: 65, }, end: Position { line: 1190, column: 75, }, }, }, ), }, ), Raw( PartRaw { content: "repos", span: Span { start: Position { line: 1190, column: 76, }, end: Position { line: 1190, column: 81, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":/var/lib/nginx/hgsrht/repos", span: Span { start: Position { line: 1190, column: 50, }, end: Position { line: 1190, column: 110, }, }, }, ), ], span: Span { start: Position { line: 1190, column: 49, }, end: Position { line: 1190, column: 111, }, }, }, ), ], span: Span { start: Position { line: 1190, column: 47, }, end: Position { line: 1190, column: 113, }, }, }, ), }, ), ], span: Span { start: Position { line: 1189, column: 36, }, end: Position { line: 1191, column: 12, }, }, }, ), }, ), ], span: Span { start: Position { line: 1165, column: 32, }, end: Position { line: 1192, column: 10, }, }, }, ), ], }, ), ], span: Span { start: Position { line: 1154, column: 29, }, end: Position { line: 1193, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1133, column: 10, }, end: Position { line: 1194, column: 6, }, }, }, ), span: Span { start: Position { line: 1128, column: 33, }, end: Position { line: 1194, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "import", span: Span { start: Position { line: 1196, column: 6, }, end: Position { line: 1196, column: 12, }, }, }, ), arguments: [ Path( Path { parts: [ Raw( PartRaw { content: "./service.nix", span: Span { start: Position { line: 1196, column: 13, }, end: Position { line: 1196, column: 26, }, }, }, ), ], span: Span { start: Position { line: 1196, column: 13, }, end: Position { line: 1196, column: 26, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "hub", span: Span { start: Position { line: 1196, column: 28, }, end: Position { line: 1196, column: 31, }, }, }, ), ], span: Span { start: Position { line: 1196, column: 27, }, end: Position { line: 1196, column: 32, }, }, }, ), Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: None, attributes: [ Raw( PartRaw { content: "configIniOfService", span: Span { start: Position { line: 1197, column: 15, }, end: Position { line: 1197, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1196, column: 34, }, end: Position { line: 1197, column: 34, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "port", span: Span { start: Position { line: 1198, column: 7, }, end: Position { line: 1198, column: 11, }, }, }, ), ], to: Integer( Integer { value: "5014", span: Span { start: Position { line: 1198, column: 14, }, end: Position { line: 1198, column: 18, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraConfig", span: Span { start: Position { line: 1199, column: 7, }, end: Position { line: 1199, column: 18, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1200, column: 9, }, end: Position { line: 1200, column: 17, }, }, }, ), Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1200, column: 18, }, end: Position { line: 1200, column: 23, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 1200, column: 26, }, end: Position { line: 1200, column: 30, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1200, column: 31, }, end: Position { line: 1200, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1200, column: 35, }, end: Position { line: 1200, column: 40, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1200, column: 41, }, end: Position { line: 1200, column: 47, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "virtualHosts", span: Span { start: Position { line: 1201, column: 11, }, end: Position { line: 1201, column: 23, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "hub.", span: Span { start: Position { line: 1201, column: 25, }, end: Position { line: 1201, column: 38, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 1201, column: 31, }, end: Position { line: 1201, column: 37, }, }, }, ), }, ), ], span: Span { start: Position { line: 1201, column: 24, }, end: Position { line: 1201, column: 39, }, }, }, ), }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkMerge", span: Span { start: Position { line: 1201, column: 42, }, end: Position { line: 1201, column: 49, }, }, }, ), arguments: [ List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serverAliases", span: Span { start: Position { line: 1202, column: 13, }, end: Position { line: 1202, column: 26, }, }, }, ), ], to: List( List { elements: [ Identifier( Identifier { id: "domain", span: Span { start: Position { line: 1202, column: 31, }, end: Position { line: 1202, column: 37, }, }, }, ), ], span: Span { start: Position { line: 1202, column: 29, }, end: Position { line: 1202, column: 39, }, }, }, ), }, ), ], span: Span { start: Position { line: 1201, column: 52, }, end: Position { line: 1203, column: 12, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1203, column: 13, }, end: Position { line: 1203, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nginx", span: Span { start: Position { line: 1203, column: 17, }, end: Position { line: 1203, column: 22, }, }, }, ), Raw( PartRaw { content: "virtualHost", span: Span { start: Position { line: 1203, column: 23, }, end: Position { line: 1203, column: 34, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1201, column: 50, }, end: Position { line: 1203, column: 36, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1200, column: 48, }, end: Position { line: 1204, column: 10, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1199, column: 21, }, end: Position { line: 1205, column: 8, }, }, }, ), }, ), ], span: Span { start: Position { line: 1196, column: 33, }, end: Position { line: 1206, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "import", span: Span { start: Position { line: 1208, column: 6, }, end: Position { line: 1208, column: 12, }, }, }, ), arguments: [ Path( Path { parts: [ Raw( PartRaw { content: "./service.nix", span: Span { start: Position { line: 1208, column: 13, }, end: Position { line: 1208, column: 26, }, }, }, ), ], span: Span { start: Position { line: 1208, column: 13, }, end: Position { line: 1208, column: 26, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "lists", span: Span { start: Position { line: 1208, column: 28, }, end: Position { line: 1208, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1208, column: 27, }, end: Position { line: 1208, column: 34, }, }, }, ), LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "srvsrht", span: Span { start: Position { line: 1209, column: 7, }, end: Position { line: 1209, column: 14, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "listssrht", span: Span { start: Position { line: 1209, column: 18, }, end: Position { line: 1209, column: 27, }, }, }, ), ], span: Span { start: Position { line: 1209, column: 17, }, end: Position { line: 1209, column: 28, }, }, }, ), }, ), ], target: Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: None, attributes: [ Raw( PartRaw { content: "configIniOfService", span: Span { start: Position { line: 1211, column: 15, }, end: Position { line: 1211, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1210, column: 11, }, end: Position { line: 1211, column: 34, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "port", span: Span { start: Position { line: 1212, column: 7, }, end: Position { line: 1212, column: 11, }, }, }, ), ], to: Integer( Integer { value: "5006", span: Span { start: Position { line: 1212, column: 14, }, end: Position { line: 1212, column: 18, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "webhooks", span: Span { start: Position { line: 1213, column: 7, }, end: Position { line: 1213, column: 15, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 1213, column: 18, }, end: Position { line: 1213, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraServices", span: Span { start: Position { line: 1214, column: 7, }, end: Position { line: 1214, column: 20, }, }, }, ), Raw( PartRaw { content: "listssrht-api", span: Span { start: Position { line: 1214, column: 21, }, end: Position { line: 1214, column: 34, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1215, column: 9, }, end: Position { line: 1215, column: 22, }, }, }, ), Raw( PartRaw { content: "Restart", span: Span { start: Position { line: 1215, column: 23, }, end: Position { line: 1215, column: 30, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "always", span: Span { start: Position { line: 1215, column: 34, }, end: Position { line: 1215, column: 40, }, }, }, ), ], span: Span { start: Position { line: 1215, column: 33, }, end: Position { line: 1215, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1216, column: 9, }, end: Position { line: 1216, column: 22, }, }, }, ), Raw( PartRaw { content: "RestartSec", span: Span { start: Position { line: 1216, column: 23, }, end: Position { line: 1216, column: 33, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "5s", span: Span { start: Position { line: 1216, column: 37, }, end: Position { line: 1216, column: 39, }, }, }, ), ], span: Span { start: Position { line: 1216, column: 36, }, end: Position { line: 1216, column: 40, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1217, column: 9, }, end: Position { line: 1217, column: 22, }, }, }, ), Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 1217, column: 23, }, end: Position { line: 1217, column: 32, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1217, column: 38, }, end: Position { line: 1217, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1217, column: 43, }, end: Position { line: 1217, column: 52, }, }, }, ), Raw( PartRaw { content: "listssrht", span: Span { start: Position { line: 1217, column: 53, }, end: Position { line: 1217, column: 62, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/listssrht-api -b ", span: Span { start: Position { line: 1217, column: 36, }, end: Position { line: 1217, column: 85, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1217, column: 87, }, end: Position { line: 1217, column: 90, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenAddress", span: Span { start: Position { line: 1217, column: 91, }, end: Position { line: 1217, column: 104, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 1217, column: 36, }, end: Position { line: 1217, column: 106, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 1217, column: 108, }, end: Position { line: 1217, column: 116, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1217, column: 118, }, end: Position { line: 1217, column: 121, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lists", span: Span { start: Position { line: 1217, column: 122, }, end: Position { line: 1217, column: 127, }, }, }, ), Raw( PartRaw { content: "port", span: Span { start: Position { line: 1217, column: 128, }, end: Position { line: 1217, column: 132, }, }, }, ), ], default: None, }, ), operator: Addition, right: Integer( Integer { value: "100", span: Span { start: Position { line: 1217, column: 135, }, end: Position { line: 1217, column: 138, }, }, }, ), }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1217, column: 35, }, end: Position { line: 1217, column: 141, }, }, }, ), }, ), ], span: Span { start: Position { line: 1214, column: 37, }, end: Position { line: 1218, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraServices", span: Span { start: Position { line: 1220, column: 7, }, end: Position { line: 1220, column: 20, }, }, }, ), Raw( PartRaw { content: "listssrht-lmtp", span: Span { start: Position { line: 1220, column: 21, }, end: Position { line: 1220, column: 35, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "wants", span: Span { start: Position { line: 1221, column: 9, }, end: Position { line: 1221, column: 14, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "postfix.service", span: Span { start: Position { line: 1221, column: 20, }, end: Position { line: 1221, column: 35, }, }, }, ), ], span: Span { start: Position { line: 1221, column: 19, }, end: Position { line: 1221, column: 36, }, }, }, ), ], span: Span { start: Position { line: 1221, column: 17, }, end: Position { line: 1221, column: 38, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "unitConfig", span: Span { start: Position { line: 1222, column: 9, }, end: Position { line: 1222, column: 19, }, }, }, ), Raw( PartRaw { content: "JoinsNamespaceOf", span: Span { start: Position { line: 1222, column: 20, }, end: Position { line: 1222, column: 36, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optional", span: Span { start: Position { line: 1222, column: 39, }, end: Position { line: 1222, column: 47, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1222, column: 48, }, end: Position { line: 1222, column: 51, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "postfix", span: Span { start: Position { line: 1222, column: 52, }, end: Position { line: 1222, column: 59, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1222, column: 60, }, end: Position { line: 1222, column: 66, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "postfix.service", span: Span { start: Position { line: 1222, column: 68, }, end: Position { line: 1222, column: 83, }, }, }, ), ], span: Span { start: Position { line: 1222, column: 67, }, end: Position { line: 1222, column: 84, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1223, column: 9, }, end: Position { line: 1223, column: 22, }, }, }, ), Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 1223, column: 23, }, end: Position { line: 1223, column: 32, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1223, column: 38, }, end: Position { line: 1223, column: 41, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "python", span: Span { start: Position { line: 1223, column: 42, }, end: Position { line: 1223, column: 48, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/listssrht-lmtp", span: Span { start: Position { line: 1223, column: 36, }, end: Position { line: 1223, column: 68, }, }, }, ), ], span: Span { start: Position { line: 1223, column: 35, }, end: Position { line: 1223, column: 69, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1225, column: 9, }, end: Position { line: 1225, column: 22, }, }, }, ), Raw( PartRaw { content: "PrivateUsers", span: Span { start: Position { line: 1225, column: 23, }, end: Position { line: 1225, column: 35, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkForce", span: Span { start: Position { line: 1225, column: 38, }, end: Position { line: 1225, column: 45, }, }, }, ), arguments: [ Identifier( Identifier { id: "false", span: Span { start: Position { line: 1225, column: 46, }, end: Position { line: 1225, column: 51, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1220, column: 38, }, end: Position { line: 1226, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraServices", span: Span { start: Position { line: 1228, column: 7, }, end: Position { line: 1228, column: 20, }, }, }, ), Raw( PartRaw { content: "listssrht-process", span: Span { start: Position { line: 1228, column: 21, }, end: Position { line: 1228, column: 38, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1229, column: 9, }, end: Position { line: 1229, column: 22, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "preStart", span: Span { start: Position { line: 1230, column: 11, }, end: Position { line: 1230, column: 19, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "cp ", span: Span { start: Position { line: 1231, column: 1, }, end: Position { line: 1231, column: 16, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1231, column: 18, }, end: Position { line: 1231, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeText", span: Span { start: Position { line: 1231, column: 23, }, end: Position { line: 1231, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "srvsrht", span: Span { start: Position { line: 1231, column: 36, }, end: Position { line: 1231, column: 43, }, }, }, ), }, ), Raw( PartRaw { content: "-webhooks-celeryconfig.py", span: Span { start: Position { line: 1231, column: 34, }, end: Position { line: 1231, column: 69, }, }, }, ), ], span: Span { start: Position { line: 1231, column: 33, }, end: Position { line: 1231, column: 70, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1231, column: 71, }, end: Position { line: 1231, column: 74, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lists", span: Span { start: Position { line: 1231, column: 75, }, end: Position { line: 1231, column: 80, }, }, }, ), Raw( PartRaw { content: "process", span: Span { start: Position { line: 1231, column: 81, }, end: Position { line: 1231, column: 88, }, }, }, ), Raw( PartRaw { content: "celeryConfig", span: Span { start: Position { line: 1231, column: 89, }, end: Position { line: 1231, column: 101, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: " \\\n /run/sourcehut/", span: Span { start: Position { line: 1231, column: 1, }, end: Position { line: 1232, column: 31, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "srvsrht", span: Span { start: Position { line: 1232, column: 33, }, end: Position { line: 1232, column: 40, }, }, }, ), }, ), Raw( PartRaw { content: "-webhooks/celeryconfig.py\n", span: Span { start: Position { line: 1231, column: 1, }, end: Position { line: 1233, column: 11, }, }, }, ), ], span: Span { start: Position { line: 1230, column: 22, }, end: Position { line: 1233, column: 13, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 1234, column: 11, }, end: Position { line: 1234, column: 20, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1234, column: 26, }, end: Position { line: 1234, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "python", span: Span { start: Position { line: 1234, column: 30, }, end: Position { line: 1234, column: 36, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/celery --app listssrht.process worker --hostname listssrht-process@%%h ", span: Span { start: Position { line: 1234, column: 24, }, end: Position { line: 1234, column: 113, }, }, }, ), ], span: Span { start: Position { line: 1234, column: 23, }, end: Position { line: 1234, column: 114, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "concatStringsSep", span: Span { start: Position { line: 1234, column: 117, }, end: Position { line: 1234, column: 133, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: " ", span: Span { start: Position { line: 1234, column: 135, }, end: Position { line: 1234, column: 136, }, }, }, ), ], span: Span { start: Position { line: 1234, column: 134, }, end: Position { line: 1234, column: 137, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1234, column: 138, }, end: Position { line: 1234, column: 141, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lists", span: Span { start: Position { line: 1234, column: 142, }, end: Position { line: 1234, column: 147, }, }, }, ), Raw( PartRaw { content: "process", span: Span { start: Position { line: 1234, column: 148, }, end: Position { line: 1234, column: 155, }, }, }, ), Raw( PartRaw { content: "extraArgs", span: Span { start: Position { line: 1234, column: 156, }, end: Position { line: 1234, column: 165, }, }, }, ), ], default: None, }, ), ], }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ProcSubset", span: Span { start: Position { line: 1236, column: 11, }, end: Position { line: 1236, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkForce", span: Span { start: Position { line: 1236, column: 24, }, end: Position { line: 1236, column: 31, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "all", span: Span { start: Position { line: 1236, column: 33, }, end: Position { line: 1236, column: 36, }, }, }, ), ], span: Span { start: Position { line: 1236, column: 32, }, end: Position { line: 1236, column: 37, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1229, column: 25, }, end: Position { line: 1237, column: 10, }, }, }, ), }, ), ], span: Span { start: Position { line: 1228, column: 41, }, end: Position { line: 1238, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraConfig", span: Span { start: Position { line: 1239, column: 7, }, end: Position { line: 1239, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 1239, column: 21, }, end: Position { line: 1239, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1239, column: 26, }, end: Position { line: 1239, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "postfix", span: Span { start: Position { line: 1239, column: 30, }, end: Position { line: 1239, column: 37, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1239, column: 38, }, end: Position { line: 1239, column: 44, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 1240, column: 9, }, end: Position { line: 1240, column: 14, }, }, }, ), Raw( PartRaw { content: "groups", span: Span { start: Position { line: 1240, column: 15, }, end: Position { line: 1240, column: 21, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "postfix", span: Span { start: Position { line: 1240, column: 24, }, end: Position { line: 1240, column: 31, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 1240, column: 32, }, end: Position { line: 1240, column: 37, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "members", span: Span { start: Position { line: 1240, column: 39, }, end: Position { line: 1240, column: 46, }, }, }, ), ], to: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1240, column: 51, }, end: Position { line: 1240, column: 54, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lists", span: Span { start: Position { line: 1240, column: 55, }, end: Position { line: 1240, column: 60, }, }, }, ), Raw( PartRaw { content: "user", span: Span { start: Position { line: 1240, column: 61, }, end: Position { line: 1240, column: 65, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1240, column: 49, }, end: Position { line: 1240, column: 67, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1241, column: 9, }, end: Position { line: 1241, column: 17, }, }, }, ), Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1241, column: 18, }, end: Position { line: 1241, column: 27, }, }, }, ), Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1241, column: 28, }, end: Position { line: 1241, column: 36, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "lists.sr.ht::mail", span: Span { start: Position { line: 1241, column: 38, }, end: Position { line: 1241, column: 55, }, }, }, ), ], span: Span { start: Position { line: 1241, column: 37, }, end: Position { line: 1241, column: 56, }, }, }, ), }, ), Raw( PartRaw { content: "sock-group", span: Span { start: Position { line: 1241, column: 57, }, end: Position { line: 1241, column: 67, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "postfix", span: Span { start: Position { line: 1241, column: 70, }, end: Position { line: 1241, column: 77, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 1241, column: 78, }, end: Position { line: 1241, column: 83, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1242, column: 9, }, end: Position { line: 1242, column: 17, }, }, }, ), Raw( PartRaw { content: "postfix", span: Span { start: Position { line: 1242, column: 18, }, end: Position { line: 1242, column: 25, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "destination", span: Span { start: Position { line: 1243, column: 11, }, end: Position { line: 1243, column: 22, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "lists.", span: Span { start: Position { line: 1243, column: 28, }, end: Position { line: 1243, column: 43, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 1243, column: 36, }, end: Position { line: 1243, column: 42, }, }, }, ), }, ), ], span: Span { start: Position { line: 1243, column: 27, }, end: Position { line: 1243, column: 44, }, }, }, ), ], span: Span { start: Position { line: 1243, column: 25, }, end: Position { line: 1243, column: 46, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "localRecipients", span: Span { start: Position { line: 1250, column: 11, }, end: Position { line: 1250, column: 26, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "@lists.", span: Span { start: Position { line: 1250, column: 32, }, end: Position { line: 1250, column: 48, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 1250, column: 41, }, end: Position { line: 1250, column: 47, }, }, }, ), }, ), ], span: Span { start: Position { line: 1250, column: 31, }, end: Position { line: 1250, column: 49, }, }, }, ), ], span: Span { start: Position { line: 1250, column: 29, }, end: Position { line: 1250, column: 51, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "transport", span: Span { start: Position { line: 1251, column: 11, }, end: Position { line: 1251, column: 20, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "lists.", span: Span { start: Position { line: 1252, column: 1, }, end: Position { line: 1252, column: 19, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 1252, column: 21, }, end: Position { line: 1252, column: 27, }, }, }, ), }, ), Raw( PartRaw { content: " lmtp:unix:", span: Span { start: Position { line: 1252, column: 1, }, end: Position { line: 1252, column: 39, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1252, column: 41, }, end: Position { line: 1252, column: 44, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1252, column: 45, }, end: Position { line: 1252, column: 53, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "lists.sr.ht::worker", span: Span { start: Position { line: 1252, column: 55, }, end: Position { line: 1252, column: 74, }, }, }, ), ], span: Span { start: Position { line: 1252, column: 54, }, end: Position { line: 1252, column: 75, }, }, }, ), }, ), Raw( PartRaw { content: "sock", span: Span { start: Position { line: 1252, column: 76, }, end: Position { line: 1252, column: 80, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 1252, column: 1, }, end: Position { line: 1253, column: 11, }, }, }, ), ], span: Span { start: Position { line: 1251, column: 23, }, end: Position { line: 1253, column: 13, }, }, }, ), }, ), ], span: Span { start: Position { line: 1242, column: 28, }, end: Position { line: 1254, column: 10, }, }, }, ), }, ), ], span: Span { start: Position { line: 1239, column: 45, }, end: Position { line: 1255, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1210, column: 10, }, end: Position { line: 1256, column: 6, }, }, }, ), span: Span { start: Position { line: 1208, column: 36, }, end: Position { line: 1256, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "import", span: Span { start: Position { line: 1258, column: 6, }, end: Position { line: 1258, column: 12, }, }, }, ), arguments: [ Path( Path { parts: [ Raw( PartRaw { content: "./service.nix", span: Span { start: Position { line: 1258, column: 13, }, end: Position { line: 1258, column: 26, }, }, }, ), ], span: Span { start: Position { line: 1258, column: 13, }, end: Position { line: 1258, column: 26, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "man", span: Span { start: Position { line: 1258, column: 28, }, end: Position { line: 1258, column: 31, }, }, }, ), ], span: Span { start: Position { line: 1258, column: 27, }, end: Position { line: 1258, column: 32, }, }, }, ), Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: None, attributes: [ Raw( PartRaw { content: "configIniOfService", span: Span { start: Position { line: 1259, column: 15, }, end: Position { line: 1259, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1258, column: 34, }, end: Position { line: 1259, column: 34, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "port", span: Span { start: Position { line: 1260, column: 7, }, end: Position { line: 1260, column: 11, }, }, }, ), ], to: Integer( Integer { value: "5004", span: Span { start: Position { line: 1260, column: 14, }, end: Position { line: 1260, column: 18, }, }, }, ), }, ), ], span: Span { start: Position { line: 1258, column: 33, }, end: Position { line: 1261, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "import", span: Span { start: Position { line: 1263, column: 6, }, end: Position { line: 1263, column: 12, }, }, }, ), arguments: [ Path( Path { parts: [ Raw( PartRaw { content: "./service.nix", span: Span { start: Position { line: 1263, column: 13, }, end: Position { line: 1263, column: 26, }, }, }, ), ], span: Span { start: Position { line: 1263, column: 13, }, end: Position { line: 1263, column: 26, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "meta", span: Span { start: Position { line: 1263, column: 28, }, end: Position { line: 1263, column: 32, }, }, }, ), ], span: Span { start: Position { line: 1263, column: 27, }, end: Position { line: 1263, column: 33, }, }, }, ), Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: None, attributes: [ Raw( PartRaw { content: "configIniOfService", span: Span { start: Position { line: 1264, column: 15, }, end: Position { line: 1264, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1263, column: 35, }, end: Position { line: 1264, column: 34, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "port", span: Span { start: Position { line: 1265, column: 7, }, end: Position { line: 1265, column: 11, }, }, }, ), ], to: Integer( Integer { value: "5000", span: Span { start: Position { line: 1265, column: 14, }, end: Position { line: 1265, column: 18, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "webhooks", span: Span { start: Position { line: 1266, column: 7, }, end: Position { line: 1266, column: 15, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 1266, column: 18, }, end: Position { line: 1266, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraTimers", span: Span { start: Position { line: 1267, column: 7, }, end: Position { line: 1267, column: 18, }, }, }, ), Raw( PartRaw { content: "metasrht-daily", span: Span { start: Position { line: 1267, column: 19, }, end: Position { line: 1267, column: 33, }, }, }, ), Raw( PartRaw { content: "timerConfig", span: Span { start: Position { line: 1267, column: 34, }, end: Position { line: 1267, column: 45, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "OnCalendar", span: Span { start: Position { line: 1268, column: 9, }, end: Position { line: 1268, column: 19, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "daily", span: Span { start: Position { line: 1268, column: 24, }, end: Position { line: 1268, column: 29, }, }, }, ), ], span: Span { start: Position { line: 1268, column: 23, }, end: Position { line: 1268, column: 30, }, }, }, ), ], span: Span { start: Position { line: 1268, column: 22, }, end: Position { line: 1268, column: 31, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "AccuracySec", span: Span { start: Position { line: 1269, column: 9, }, end: Position { line: 1269, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "1h", span: Span { start: Position { line: 1269, column: 24, }, end: Position { line: 1269, column: 26, }, }, }, ), ], span: Span { start: Position { line: 1269, column: 23, }, end: Position { line: 1269, column: 27, }, }, }, ), }, ), ], span: Span { start: Position { line: 1267, column: 48, }, end: Position { line: 1270, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraServices", span: Span { start: Position { line: 1271, column: 7, }, end: Position { line: 1271, column: 20, }, }, }, ), Raw( PartRaw { content: "metasrht-api", span: Span { start: Position { line: 1271, column: 21, }, end: Position { line: 1271, column: 33, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1272, column: 9, }, end: Position { line: 1272, column: 22, }, }, }, ), Raw( PartRaw { content: "Restart", span: Span { start: Position { line: 1272, column: 23, }, end: Position { line: 1272, column: 30, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "always", span: Span { start: Position { line: 1272, column: 34, }, end: Position { line: 1272, column: 40, }, }, }, ), ], span: Span { start: Position { line: 1272, column: 33, }, end: Position { line: 1272, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1273, column: 9, }, end: Position { line: 1273, column: 22, }, }, }, ), Raw( PartRaw { content: "RestartSec", span: Span { start: Position { line: 1273, column: 23, }, end: Position { line: 1273, column: 33, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "5s", span: Span { start: Position { line: 1273, column: 37, }, end: Position { line: 1273, column: 39, }, }, }, ), ], span: Span { start: Position { line: 1273, column: 36, }, end: Position { line: 1273, column: 40, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "preStart", span: Span { start: Position { line: 1274, column: 9, }, end: Position { line: 1274, column: 17, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: String( String_ { parts: [ Raw( PartRaw { content: "set -x\n", span: Span { start: Position { line: 1274, column: 21, }, end: Position { line: 1274, column: 29, }, }, }, ), ], span: Span { start: Position { line: 1274, column: 20, }, end: Position { line: 1274, column: 30, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "concatStringsSep", span: Span { start: Position { line: 1274, column: 33, }, end: Position { line: 1274, column: 49, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "\n\n", span: Span { start: Position { line: 1274, column: 51, }, end: Position { line: 1274, column: 55, }, }, }, ), ], span: Span { start: Position { line: 1274, column: 50, }, end: Position { line: 1274, column: 56, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "attrValues", span: Span { start: Position { line: 1274, column: 58, }, end: Position { line: 1274, column: 68, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrs", span: Span { start: Position { line: 1274, column: 70, }, end: Position { line: 1274, column: 78, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "k", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "s", }, ), body: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "srvMatch", span: Span { start: Position { line: 1275, column: 15, }, end: Position { line: 1275, column: 23, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 1275, column: 26, }, end: Position { line: 1275, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "match", span: Span { start: Position { line: 1275, column: 35, }, end: Position { line: 1275, column: 40, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "^([a-z]*)\\.sr\\.ht$", span: Span { start: Position { line: 1275, column: 42, }, end: Position { line: 1275, column: 62, }, }, }, ), ], span: Span { start: Position { line: 1275, column: 41, }, end: Position { line: 1275, column: 63, }, }, }, ), Identifier( Identifier { id: "k", span: Span { start: Position { line: 1275, column: 64, }, end: Position { line: 1275, column: 65, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "srv", span: Span { start: Position { line: 1276, column: 15, }, end: Position { line: 1276, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "head", span: Span { start: Position { line: 1276, column: 21, }, end: Position { line: 1276, column: 25, }, }, }, ), arguments: [ Identifier( Identifier { id: "srvMatch", span: Span { start: Position { line: 1276, column: 26, }, end: Position { line: 1276, column: 34, }, }, }, ), ], }, ), }, ), ], target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1279, column: 11, }, end: Position { line: 1279, column: 25, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "srvMatch", span: Span { start: Position { line: 1279, column: 27, }, end: Position { line: 1279, column: 35, }, }, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 1279, column: 39, }, end: Position { line: 1279, column: 43, }, }, }, ), }, ), operator: LogicalAnd, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1279, column: 47, }, end: Position { line: 1279, column: 50, }, }, }, ), attribute_path: [ Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "srv", span: Span { start: Position { line: 1279, column: 53, }, end: Position { line: 1279, column: 56, }, }, }, ), }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1279, column: 58, }, end: Position { line: 1279, column: 64, }, }, }, ), ], default: None, }, ), }, ), operator: LogicalAnd, right: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "s", span: Span { start: Position { line: 1279, column: 70, }, end: Position { line: 1279, column: 71, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "oauth-client-id", span: Span { start: Position { line: 1279, column: 72, }, end: Position { line: 1279, column: 87, }, }, }, ), ], default: Some( Identifier( Identifier { id: "null", span: Span { start: Position { line: 1279, column: 91, }, end: Position { line: 1279, column: 95, }, }, }, ), ), }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 1279, column: 100, }, end: Position { line: 1279, column: 104, }, }, }, ), }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "# Configure ", span: Span { start: Position { line: 1280, column: 1, }, end: Position { line: 1280, column: 25, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "srv", span: Span { start: Position { line: 1280, column: 27, }, end: Position { line: 1280, column: 30, }, }, }, ), }, ), Raw( PartRaw { content: "'s OAuth client as \"preauthorized\"\n", span: Span { start: Position { line: 1280, column: 1, }, end: Position { line: 1281, column: 13, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "postgresql", span: Span { start: Position { line: 1281, column: 15, }, end: Position { line: 1281, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "package", span: Span { start: Position { line: 1281, column: 26, }, end: Position { line: 1281, column: 33, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/psql ", span: Span { start: Position { line: 1280, column: 1, }, end: Position { line: 1281, column: 44, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 1280, column: 1, }, end: Position { line: 1281, column: 45, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1281, column: 47, }, end: Position { line: 1281, column: 50, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1281, column: 51, }, end: Position { line: 1281, column: 59, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "meta.sr.ht", span: Span { start: Position { line: 1281, column: 61, }, end: Position { line: 1281, column: 71, }, }, }, ), ], span: Span { start: Position { line: 1281, column: 60, }, end: Position { line: 1281, column: 72, }, }, }, ), }, ), Raw( PartRaw { content: "connection-string", span: Span { start: Position { line: 1281, column: 73, }, end: Position { line: 1281, column: 90, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "' \\\n -c \"UPDATE oauthclient SET preauthorized = true WHERE client_id = ", span: Span { start: Position { line: 1280, column: 1, }, end: Position { line: 1282, column: 81, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 1280, column: 1, }, end: Position { line: 1282, column: 82, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "s", span: Span { start: Position { line: 1282, column: 84, }, end: Position { line: 1282, column: 85, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "oauth-client-id", span: Span { start: Position { line: 1282, column: 86, }, end: Position { line: 1282, column: 101, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "'\"\n", span: Span { start: Position { line: 1280, column: 1, }, end: Position { line: 1283, column: 11, }, }, }, ), ], span: Span { start: Position { line: 1279, column: 107, }, end: Position { line: 1283, column: 13, }, }, }, ), ], }, ), span: Span { start: Position { line: 1275, column: 11, }, end: Position { line: 1283, column: 13, }, }, }, ), span: Span { start: Position { line: 1274, column: 83, }, end: Position { line: 1283, column: 13, }, }, }, ), span: Span { start: Position { line: 1274, column: 80, }, end: Position { line: 1283, column: 13, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1284, column: 13, }, end: Position { line: 1284, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1284, column: 17, }, end: Position { line: 1284, column: 25, }, }, }, ), ], default: None, }, ), ], }, ), ], }, ), ], }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1285, column: 9, }, end: Position { line: 1285, column: 22, }, }, }, ), Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 1285, column: 23, }, end: Position { line: 1285, column: 32, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1285, column: 38, }, end: Position { line: 1285, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1285, column: 43, }, end: Position { line: 1285, column: 52, }, }, }, ), Raw( PartRaw { content: "metasrht", span: Span { start: Position { line: 1285, column: 53, }, end: Position { line: 1285, column: 61, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/metasrht-api -b ", span: Span { start: Position { line: 1285, column: 36, }, end: Position { line: 1285, column: 83, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1285, column: 85, }, end: Position { line: 1285, column: 88, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenAddress", span: Span { start: Position { line: 1285, column: 89, }, end: Position { line: 1285, column: 102, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 1285, column: 36, }, end: Position { line: 1285, column: 104, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 1285, column: 106, }, end: Position { line: 1285, column: 114, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1285, column: 116, }, end: Position { line: 1285, column: 119, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "meta", span: Span { start: Position { line: 1285, column: 120, }, end: Position { line: 1285, column: 124, }, }, }, ), Raw( PartRaw { content: "port", span: Span { start: Position { line: 1285, column: 125, }, end: Position { line: 1285, column: 129, }, }, }, ), ], default: None, }, ), operator: Addition, right: Integer( Integer { value: "100", span: Span { start: Position { line: 1285, column: 132, }, end: Position { line: 1285, column: 135, }, }, }, ), }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1285, column: 35, }, end: Position { line: 1285, column: 138, }, }, }, ), }, ), ], span: Span { start: Position { line: 1271, column: 36, }, end: Position { line: 1286, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraConfig", span: Span { start: Position { line: 1287, column: 7, }, end: Position { line: 1287, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkMerge", span: Span { start: Position { line: 1287, column: 21, }, end: Position { line: 1287, column: 28, }, }, }, ), arguments: [ List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertions", span: Span { start: Position { line: 1289, column: 11, }, end: Position { line: 1289, column: 21, }, }, }, ), ], to: List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 1290, column: 15, }, end: Position { line: 1290, column: 24, }, }, }, ), ], to: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "s", span: Span { start: Position { line: 1290, column: 31, }, end: Position { line: 1290, column: 32, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1290, column: 35, }, end: Position { line: 1290, column: 38, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1290, column: 39, }, end: Position { line: 1290, column: 47, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "meta.sr.ht::billing", span: Span { start: Position { line: 1290, column: 49, }, end: Position { line: 1290, column: 68, }, }, }, ), ], span: Span { start: Position { line: 1290, column: 48, }, end: Position { line: 1290, column: 69, }, }, }, ), }, ), ], default: None, }, ), }, ), ], target: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "s", span: Span { start: Position { line: 1291, column: 27, }, end: Position { line: 1291, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enabled", span: Span { start: Position { line: 1291, column: 29, }, end: Position { line: 1291, column: 36, }, }, }, ), ], default: None, }, ), operator: EqualTo, right: String( String_ { parts: [ Raw( PartRaw { content: "yes", span: Span { start: Position { line: 1291, column: 41, }, end: Position { line: 1291, column: 44, }, }, }, ), ], span: Span { start: Position { line: 1291, column: 40, }, end: Position { line: 1291, column: 45, }, }, }, ), }, ), operator: Implication, right: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "s", span: Span { start: Position { line: 1291, column: 50, }, end: Position { line: 1291, column: 51, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "stripe-public-key", span: Span { start: Position { line: 1291, column: 52, }, end: Position { line: 1291, column: 69, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 1291, column: 73, }, end: Position { line: 1291, column: 77, }, }, }, ), }, ), operator: LogicalAnd, right: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "s", span: Span { start: Position { line: 1291, column: 81, }, end: Position { line: 1291, column: 82, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "stripe-secret-key", span: Span { start: Position { line: 1291, column: 83, }, end: Position { line: 1291, column: 100, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 1291, column: 104, }, end: Position { line: 1291, column: 108, }, }, }, ), }, ), }, ), }, ), span: Span { start: Position { line: 1290, column: 27, }, end: Position { line: 1291, column: 109, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 1292, column: 15, }, end: Position { line: 1292, column: 22, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "If meta.sr.ht::billing is enabled, the keys must be defined.", span: Span { start: Position { line: 1292, column: 26, }, end: Position { line: 1292, column: 86, }, }, }, ), ], span: Span { start: Position { line: 1292, column: 25, }, end: Position { line: 1292, column: 87, }, }, }, ), }, ), ], span: Span { start: Position { line: 1290, column: 13, }, end: Position { line: 1293, column: 14, }, }, }, ), ], span: Span { start: Position { line: 1289, column: 24, }, end: Position { line: 1294, column: 12, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "environment", span: Span { start: Position { line: 1295, column: 11, }, end: Position { line: 1295, column: 22, }, }, }, ), Raw( PartRaw { content: "systemPackages", span: Span { start: Position { line: 1295, column: 23, }, end: Position { line: 1295, column: 37, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optional", span: Span { start: Position { line: 1295, column: 40, }, end: Position { line: 1295, column: 48, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1295, column: 49, }, end: Position { line: 1295, column: 52, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "meta", span: Span { start: Position { line: 1295, column: 53, }, end: Position { line: 1295, column: 57, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1295, column: 58, }, end: Position { line: 1295, column: 64, }, }, }, ), ], default: None, }, ), FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1296, column: 14, }, end: Position { line: 1296, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeShellScriptBin", span: Span { start: Position { line: 1296, column: 19, }, end: Position { line: 1296, column: 38, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "metasrht-manageuser", span: Span { start: Position { line: 1296, column: 40, }, end: Position { line: 1296, column: 59, }, }, }, ), ], span: Span { start: Position { line: 1296, column: 39, }, end: Position { line: 1296, column: 60, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "set -eux\nif test \"$(", span: Span { start: Position { line: 1297, column: 1, }, end: Position { line: 1298, column: 26, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1298, column: 28, }, end: Position { line: 1298, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "coreutils", span: Span { start: Position { line: 1298, column: 33, }, end: Position { line: 1298, column: 42, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/id -n -u)\" != ", span: Span { start: Position { line: 1297, column: 1, }, end: Position { line: 1298, column: 62, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 1297, column: 1, }, end: Position { line: 1298, column: 63, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1298, column: 65, }, end: Position { line: 1298, column: 68, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "meta", span: Span { start: Position { line: 1298, column: 69, }, end: Position { line: 1298, column: 73, }, }, }, ), Raw( PartRaw { content: "user", span: Span { start: Position { line: 1298, column: 74, }, end: Position { line: 1298, column: 78, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "'\nthen exec sudo -u ", span: Span { start: Position { line: 1297, column: 1, }, end: Position { line: 1299, column: 33, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 1297, column: 1, }, end: Position { line: 1299, column: 34, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1299, column: 36, }, end: Position { line: 1299, column: 39, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "meta", span: Span { start: Position { line: 1299, column: 40, }, end: Position { line: 1299, column: 44, }, }, }, ), Raw( PartRaw { content: "user", span: Span { start: Position { line: 1299, column: 45, }, end: Position { line: 1299, column: 49, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "' \"$0\" \"$@\"\nelse\n # In order to load config.ini\n if cd /run/sourcehut/metasrht\n then exec ", span: Span { start: Position { line: 1297, column: 1, }, end: Position { line: 1303, column: 27, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1303, column: 29, }, end: Position { line: 1303, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "python", span: Span { start: Position { line: 1303, column: 33, }, end: Position { line: 1303, column: 39, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/metasrht-manageuser \"$@\"\n else cat <", span: Span { start: Position { line: 1348, column: 1, }, end: Position { line: 1355, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "stateDir", span: Span { start: Position { line: 1355, column: 32, }, end: Position { line: 1355, column: 40, }, }, }, ), }, ), Raw( PartRaw { content: "/db\nfi\n\n", span: Span { start: Position { line: 1348, column: 1, }, end: Position { line: 1358, column: 11, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1358, column: 13, }, end: Position { line: 1358, column: 27, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1358, column: 28, }, end: Position { line: 1358, column: 31, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1358, column: 32, }, end: Position { line: 1358, column: 40, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "iniKey", span: Span { start: Position { line: 1358, column: 43, }, end: Position { line: 1358, column: 49, }, }, }, ), }, ), Raw( PartRaw { content: "migrate-on-upgrade", span: Span { start: Position { line: 1358, column: 51, }, end: Position { line: 1358, column: 69, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "# Just try all the migrations because they're not linked to the version\nfor sql in ", span: Span { start: Position { line: 1359, column: 1, }, end: Position { line: 1360, column: 24, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1360, column: 26, }, end: Position { line: 1360, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1360, column: 31, }, end: Position { line: 1360, column: 40, }, }, }, ), Raw( PartRaw { content: "pagessrht", span: Span { start: Position { line: 1360, column: 41, }, end: Position { line: 1360, column: 50, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/share/sql/migrations/*.sql; do\n ", span: Span { start: Position { line: 1359, column: 1, }, end: Position { line: 1361, column: 15, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "postgresql", span: Span { start: Position { line: 1361, column: 17, }, end: Position { line: 1361, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "package", span: Span { start: Position { line: 1361, column: 28, }, end: Position { line: 1361, column: 35, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/psql ", span: Span { start: Position { line: 1359, column: 1, }, end: Position { line: 1361, column: 46, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 1359, column: 1, }, end: Position { line: 1361, column: 47, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1361, column: 49, }, end: Position { line: 1361, column: 52, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1361, column: 53, }, end: Position { line: 1361, column: 61, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "iniKey", span: Span { start: Position { line: 1361, column: 64, }, end: Position { line: 1361, column: 70, }, }, }, ), }, ), Raw( PartRaw { content: "connection-string", span: Span { start: Position { line: 1361, column: 72, }, end: Position { line: 1361, column: 89, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "' -f \"$sql\" || true\ndone\n", span: Span { start: Position { line: 1359, column: 1, }, end: Position { line: 1363, column: 11, }, }, }, ), ], span: Span { start: Position { line: 1358, column: 70, }, end: Position { line: 1363, column: 13, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n\n# Disable webhook\ntouch ", span: Span { start: Position { line: 1348, column: 1, }, end: Position { line: 1366, column: 17, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "stateDir", span: Span { start: Position { line: 1366, column: 19, }, end: Position { line: 1366, column: 27, }, }, }, ), }, ), Raw( PartRaw { content: "/webhook\n", span: Span { start: Position { line: 1348, column: 1, }, end: Position { line: 1367, column: 9, }, }, }, ), ], span: Span { start: Position { line: 1347, column: 29, }, end: Position { line: 1367, column: 11, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1368, column: 9, }, end: Position { line: 1368, column: 22, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 1369, column: 11, }, end: Position { line: 1369, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkForce", span: Span { start: Position { line: 1369, column: 23, }, end: Position { line: 1369, column: 30, }, }, }, ), arguments: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1369, column: 34, }, end: Position { line: 1369, column: 38, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1369, column: 39, }, end: Position { line: 1369, column: 48, }, }, }, ), Raw( PartRaw { content: "pagessrht", span: Span { start: Position { line: 1369, column: 49, }, end: Position { line: 1369, column: 58, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/pages.sr.ht -b ", span: Span { start: Position { line: 1369, column: 32, }, end: Position { line: 1369, column: 79, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1369, column: 81, }, end: Position { line: 1369, column: 84, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenAddress", span: Span { start: Position { line: 1369, column: 85, }, end: Position { line: 1369, column: 98, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 1369, column: 32, }, end: Position { line: 1369, column: 100, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 1369, column: 102, }, end: Position { line: 1369, column: 110, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1369, column: 111, }, end: Position { line: 1369, column: 114, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pages", span: Span { start: Position { line: 1369, column: 115, }, end: Position { line: 1369, column: 120, }, }, }, ), Raw( PartRaw { content: "port", span: Span { start: Position { line: 1369, column: 121, }, end: Position { line: 1369, column: 125, }, }, }, ), ], default: None, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1369, column: 31, }, end: Position { line: 1369, column: 127, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1368, column: 25, }, end: Position { line: 1370, column: 10, }, }, }, ), }, ), ], span: Span { start: Position { line: 1346, column: 12, }, end: Position { line: 1371, column: 8, }, }, }, ), span: Span { start: Position { line: 1341, column: 21, }, end: Position { line: 1371, column: 8, }, }, }, ), }, ), ], span: Span { start: Position { line: 1338, column: 35, }, end: Position { line: 1372, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "import", span: Span { start: Position { line: 1374, column: 6, }, end: Position { line: 1374, column: 12, }, }, }, ), arguments: [ Path( Path { parts: [ Raw( PartRaw { content: "./service.nix", span: Span { start: Position { line: 1374, column: 13, }, end: Position { line: 1374, column: 26, }, }, }, ), ], span: Span { start: Position { line: 1374, column: 13, }, end: Position { line: 1374, column: 26, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "paste", span: Span { start: Position { line: 1374, column: 28, }, end: Position { line: 1374, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1374, column: 27, }, end: Position { line: 1374, column: 34, }, }, }, ), Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: None, attributes: [ Raw( PartRaw { content: "configIniOfService", span: Span { start: Position { line: 1375, column: 15, }, end: Position { line: 1375, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1374, column: 36, }, end: Position { line: 1375, column: 34, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "port", span: Span { start: Position { line: 1376, column: 7, }, end: Position { line: 1376, column: 11, }, }, }, ), ], to: Integer( Integer { value: "5011", span: Span { start: Position { line: 1376, column: 14, }, end: Position { line: 1376, column: 18, }, }, }, ), }, ), ], span: Span { start: Position { line: 1374, column: 35, }, end: Position { line: 1377, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "import", span: Span { start: Position { line: 1379, column: 6, }, end: Position { line: 1379, column: 12, }, }, }, ), arguments: [ Path( Path { parts: [ Raw( PartRaw { content: "./service.nix", span: Span { start: Position { line: 1379, column: 13, }, end: Position { line: 1379, column: 26, }, }, }, ), ], span: Span { start: Position { line: 1379, column: 13, }, end: Position { line: 1379, column: 26, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "todo", span: Span { start: Position { line: 1379, column: 28, }, end: Position { line: 1379, column: 32, }, }, }, ), ], span: Span { start: Position { line: 1379, column: 27, }, end: Position { line: 1379, column: 33, }, }, }, ), Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: None, attributes: [ Raw( PartRaw { content: "configIniOfService", span: Span { start: Position { line: 1380, column: 15, }, end: Position { line: 1380, column: 33, }, }, }, ), ], span: Span { start: Position { line: 1379, column: 35, }, end: Position { line: 1380, column: 34, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "port", span: Span { start: Position { line: 1381, column: 7, }, end: Position { line: 1381, column: 11, }, }, }, ), ], to: Integer( Integer { value: "5003", span: Span { start: Position { line: 1381, column: 14, }, end: Position { line: 1381, column: 18, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "webhooks", span: Span { start: Position { line: 1382, column: 7, }, end: Position { line: 1382, column: 15, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 1382, column: 18, }, end: Position { line: 1382, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraServices", span: Span { start: Position { line: 1383, column: 7, }, end: Position { line: 1383, column: 20, }, }, }, ), Raw( PartRaw { content: "todosrht-api", span: Span { start: Position { line: 1383, column: 21, }, end: Position { line: 1383, column: 33, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1384, column: 9, }, end: Position { line: 1384, column: 22, }, }, }, ), Raw( PartRaw { content: "Restart", span: Span { start: Position { line: 1384, column: 23, }, end: Position { line: 1384, column: 30, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "always", span: Span { start: Position { line: 1384, column: 34, }, end: Position { line: 1384, column: 40, }, }, }, ), ], span: Span { start: Position { line: 1384, column: 33, }, end: Position { line: 1384, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1385, column: 9, }, end: Position { line: 1385, column: 22, }, }, }, ), Raw( PartRaw { content: "RestartSec", span: Span { start: Position { line: 1385, column: 23, }, end: Position { line: 1385, column: 33, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "5s", span: Span { start: Position { line: 1385, column: 37, }, end: Position { line: 1385, column: 39, }, }, }, ), ], span: Span { start: Position { line: 1385, column: 36, }, end: Position { line: 1385, column: 40, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1386, column: 9, }, end: Position { line: 1386, column: 22, }, }, }, ), Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 1386, column: 23, }, end: Position { line: 1386, column: 32, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1386, column: 38, }, end: Position { line: 1386, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1386, column: 43, }, end: Position { line: 1386, column: 52, }, }, }, ), Raw( PartRaw { content: "todosrht", span: Span { start: Position { line: 1386, column: 53, }, end: Position { line: 1386, column: 61, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/todosrht-api -b ", span: Span { start: Position { line: 1386, column: 36, }, end: Position { line: 1386, column: 83, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1386, column: 85, }, end: Position { line: 1386, column: 88, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenAddress", span: Span { start: Position { line: 1386, column: 89, }, end: Position { line: 1386, column: 102, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 1386, column: 36, }, end: Position { line: 1386, column: 104, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 1386, column: 106, }, end: Position { line: 1386, column: 114, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1386, column: 116, }, end: Position { line: 1386, column: 119, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "todo", span: Span { start: Position { line: 1386, column: 120, }, end: Position { line: 1386, column: 124, }, }, }, ), Raw( PartRaw { content: "port", span: Span { start: Position { line: 1386, column: 125, }, end: Position { line: 1386, column: 129, }, }, }, ), ], default: None, }, ), operator: Addition, right: Integer( Integer { value: "100", span: Span { start: Position { line: 1386, column: 132, }, end: Position { line: 1386, column: 135, }, }, }, ), }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1386, column: 35, }, end: Position { line: 1386, column: 138, }, }, }, ), }, ), ], span: Span { start: Position { line: 1383, column: 36, }, end: Position { line: 1387, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraServices", span: Span { start: Position { line: 1388, column: 7, }, end: Position { line: 1388, column: 20, }, }, }, ), Raw( PartRaw { content: "todosrht-lmtp", span: Span { start: Position { line: 1388, column: 21, }, end: Position { line: 1388, column: 34, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "wants", span: Span { start: Position { line: 1389, column: 9, }, end: Position { line: 1389, column: 14, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "postfix.service", span: Span { start: Position { line: 1389, column: 20, }, end: Position { line: 1389, column: 35, }, }, }, ), ], span: Span { start: Position { line: 1389, column: 19, }, end: Position { line: 1389, column: 36, }, }, }, ), ], span: Span { start: Position { line: 1389, column: 17, }, end: Position { line: 1389, column: 38, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "unitConfig", span: Span { start: Position { line: 1390, column: 9, }, end: Position { line: 1390, column: 19, }, }, }, ), Raw( PartRaw { content: "JoinsNamespaceOf", span: Span { start: Position { line: 1390, column: 20, }, end: Position { line: 1390, column: 36, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optional", span: Span { start: Position { line: 1390, column: 39, }, end: Position { line: 1390, column: 47, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1390, column: 48, }, end: Position { line: 1390, column: 51, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "postfix", span: Span { start: Position { line: 1390, column: 52, }, end: Position { line: 1390, column: 59, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1390, column: 60, }, end: Position { line: 1390, column: 66, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "postfix.service", span: Span { start: Position { line: 1390, column: 68, }, end: Position { line: 1390, column: 83, }, }, }, ), ], span: Span { start: Position { line: 1390, column: 67, }, end: Position { line: 1390, column: 84, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1391, column: 9, }, end: Position { line: 1391, column: 22, }, }, }, ), Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 1391, column: 23, }, end: Position { line: 1391, column: 32, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1391, column: 38, }, end: Position { line: 1391, column: 41, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "python", span: Span { start: Position { line: 1391, column: 42, }, end: Position { line: 1391, column: 48, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/todosrht-lmtp", span: Span { start: Position { line: 1391, column: 36, }, end: Position { line: 1391, column: 67, }, }, }, ), ], span: Span { start: Position { line: 1391, column: 35, }, end: Position { line: 1391, column: 68, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 1393, column: 9, }, end: Position { line: 1393, column: 22, }, }, }, ), Raw( PartRaw { content: "PrivateUsers", span: Span { start: Position { line: 1393, column: 23, }, end: Position { line: 1393, column: 35, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkForce", span: Span { start: Position { line: 1393, column: 38, }, end: Position { line: 1393, column: 45, }, }, }, ), arguments: [ Identifier( Identifier { id: "false", span: Span { start: Position { line: 1393, column: 46, }, end: Position { line: 1393, column: 51, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1388, column: 37, }, end: Position { line: 1394, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraConfig", span: Span { start: Position { line: 1395, column: 7, }, end: Position { line: 1395, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 1395, column: 21, }, end: Position { line: 1395, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1395, column: 26, }, end: Position { line: 1395, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "postfix", span: Span { start: Position { line: 1395, column: 30, }, end: Position { line: 1395, column: 37, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1395, column: 38, }, end: Position { line: 1395, column: 44, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 1396, column: 9, }, end: Position { line: 1396, column: 14, }, }, }, ), Raw( PartRaw { content: "groups", span: Span { start: Position { line: 1396, column: 15, }, end: Position { line: 1396, column: 21, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "postfix", span: Span { start: Position { line: 1396, column: 24, }, end: Position { line: 1396, column: 31, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 1396, column: 32, }, end: Position { line: 1396, column: 37, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "members", span: Span { start: Position { line: 1396, column: 39, }, end: Position { line: 1396, column: 46, }, }, }, ), ], to: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1396, column: 51, }, end: Position { line: 1396, column: 54, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "todo", span: Span { start: Position { line: 1396, column: 55, }, end: Position { line: 1396, column: 59, }, }, }, ), Raw( PartRaw { content: "user", span: Span { start: Position { line: 1396, column: 60, }, end: Position { line: 1396, column: 64, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1396, column: 49, }, end: Position { line: 1396, column: 66, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1397, column: 9, }, end: Position { line: 1397, column: 17, }, }, }, ), Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1397, column: 18, }, end: Position { line: 1397, column: 27, }, }, }, ), Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1397, column: 28, }, end: Position { line: 1397, column: 36, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "todo.sr.ht::mail", span: Span { start: Position { line: 1397, column: 38, }, end: Position { line: 1397, column: 54, }, }, }, ), ], span: Span { start: Position { line: 1397, column: 37, }, end: Position { line: 1397, column: 55, }, }, }, ), }, ), Raw( PartRaw { content: "sock-group", span: Span { start: Position { line: 1397, column: 56, }, end: Position { line: 1397, column: 66, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "postfix", span: Span { start: Position { line: 1397, column: 69, }, end: Position { line: 1397, column: 76, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 1397, column: 77, }, end: Position { line: 1397, column: 82, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1398, column: 9, }, end: Position { line: 1398, column: 17, }, }, }, ), Raw( PartRaw { content: "postfix", span: Span { start: Position { line: 1398, column: 18, }, end: Position { line: 1398, column: 25, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "destination", span: Span { start: Position { line: 1399, column: 11, }, end: Position { line: 1399, column: 22, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "todo.", span: Span { start: Position { line: 1399, column: 28, }, end: Position { line: 1399, column: 42, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 1399, column: 35, }, end: Position { line: 1399, column: 41, }, }, }, ), }, ), ], span: Span { start: Position { line: 1399, column: 27, }, end: Position { line: 1399, column: 43, }, }, }, ), ], span: Span { start: Position { line: 1399, column: 25, }, end: Position { line: 1399, column: 45, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "localRecipients", span: Span { start: Position { line: 1406, column: 11, }, end: Position { line: 1406, column: 26, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "@todo.", span: Span { start: Position { line: 1406, column: 32, }, end: Position { line: 1406, column: 47, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 1406, column: 40, }, end: Position { line: 1406, column: 46, }, }, }, ), }, ), ], span: Span { start: Position { line: 1406, column: 31, }, end: Position { line: 1406, column: 48, }, }, }, ), ], span: Span { start: Position { line: 1406, column: 29, }, end: Position { line: 1406, column: 50, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "transport", span: Span { start: Position { line: 1407, column: 11, }, end: Position { line: 1407, column: 20, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "todo.", span: Span { start: Position { line: 1408, column: 1, }, end: Position { line: 1408, column: 18, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 1408, column: 20, }, end: Position { line: 1408, column: 26, }, }, }, ), }, ), Raw( PartRaw { content: " lmtp:unix:", span: Span { start: Position { line: 1408, column: 1, }, end: Position { line: 1408, column: 38, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1408, column: 40, }, end: Position { line: 1408, column: 43, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1408, column: 44, }, end: Position { line: 1408, column: 52, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "todo.sr.ht::mail", span: Span { start: Position { line: 1408, column: 54, }, end: Position { line: 1408, column: 70, }, }, }, ), ], span: Span { start: Position { line: 1408, column: 53, }, end: Position { line: 1408, column: 71, }, }, }, ), }, ), Raw( PartRaw { content: "sock", span: Span { start: Position { line: 1408, column: 72, }, end: Position { line: 1408, column: 76, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 1408, column: 1, }, end: Position { line: 1409, column: 11, }, }, }, ), ], span: Span { start: Position { line: 1407, column: 23, }, end: Position { line: 1409, column: 13, }, }, }, ), }, ), ], span: Span { start: Position { line: 1398, column: 28, }, end: Position { line: 1410, column: 10, }, }, }, ), }, ), ], span: Span { start: Position { line: 1395, column: 45, }, end: Position { line: 1411, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1379, column: 34, }, end: Position { line: 1412, column: 6, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkRenamedOptionModule", span: Span { start: Position { line: 1414, column: 6, }, end: Position { line: 1414, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1414, column: 31, }, end: Position { line: 1414, column: 39, }, }, }, ), ], span: Span { start: Position { line: 1414, column: 30, }, end: Position { line: 1414, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1414, column: 42, }, end: Position { line: 1414, column: 51, }, }, }, ), ], span: Span { start: Position { line: 1414, column: 41, }, end: Position { line: 1414, column: 52, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "originBase", span: Span { start: Position { line: 1414, column: 54, }, end: Position { line: 1414, column: 64, }, }, }, ), ], span: Span { start: Position { line: 1414, column: 53, }, end: Position { line: 1414, column: 65, }, }, }, ), ], span: Span { start: Position { line: 1414, column: 28, }, end: Position { line: 1414, column: 67, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1415, column: 31, }, end: Position { line: 1415, column: 39, }, }, }, ), ], span: Span { start: Position { line: 1415, column: 30, }, end: Position { line: 1415, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1415, column: 42, }, end: Position { line: 1415, column: 51, }, }, }, ), ], span: Span { start: Position { line: 1415, column: 41, }, end: Position { line: 1415, column: 52, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "settings", span: Span { start: Position { line: 1415, column: 54, }, end: Position { line: 1415, column: 62, }, }, }, ), ], span: Span { start: Position { line: 1415, column: 53, }, end: Position { line: 1415, column: 63, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "sr.ht", span: Span { start: Position { line: 1415, column: 65, }, end: Position { line: 1415, column: 70, }, }, }, ), ], span: Span { start: Position { line: 1415, column: 64, }, end: Position { line: 1415, column: 71, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "global-domain", span: Span { start: Position { line: 1415, column: 73, }, end: Position { line: 1415, column: 86, }, }, }, ), ], span: Span { start: Position { line: 1415, column: 72, }, end: Position { line: 1415, column: 87, }, }, }, ), ], span: Span { start: Position { line: 1415, column: 28, }, end: Position { line: 1415, column: 89, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkRenamedOptionModule", span: Span { start: Position { line: 1416, column: 6, }, end: Position { line: 1416, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1416, column: 31, }, end: Position { line: 1416, column: 39, }, }, }, ), ], span: Span { start: Position { line: 1416, column: 30, }, end: Position { line: 1416, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1416, column: 42, }, end: Position { line: 1416, column: 51, }, }, }, ), ], span: Span { start: Position { line: 1416, column: 41, }, end: Position { line: 1416, column: 52, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "address", span: Span { start: Position { line: 1416, column: 54, }, end: Position { line: 1416, column: 61, }, }, }, ), ], span: Span { start: Position { line: 1416, column: 53, }, end: Position { line: 1416, column: 62, }, }, }, ), ], span: Span { start: Position { line: 1416, column: 28, }, end: Position { line: 1416, column: 64, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1417, column: 31, }, end: Position { line: 1417, column: 39, }, }, }, ), ], span: Span { start: Position { line: 1417, column: 30, }, end: Position { line: 1417, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "sourcehut", span: Span { start: Position { line: 1417, column: 42, }, end: Position { line: 1417, column: 51, }, }, }, ), ], span: Span { start: Position { line: 1417, column: 41, }, end: Position { line: 1417, column: 52, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "listenAddress", span: Span { start: Position { line: 1417, column: 54, }, end: Position { line: 1417, column: 67, }, }, }, ), ], span: Span { start: Position { line: 1417, column: 53, }, end: Position { line: 1417, column: 68, }, }, }, ), ], span: Span { start: Position { line: 1417, column: 28, }, end: Position { line: 1417, column: 70, }, }, }, ), ], }, ), ], span: Span { start: Position { line: 914, column: 13, }, end: Position { line: 1419, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "meta", span: Span { start: Position { line: 1421, column: 3, }, end: Position { line: 1421, column: 7, }, }, }, ), Raw( PartRaw { content: "doc", span: Span { start: Position { line: 1421, column: 8, }, end: Position { line: 1421, column: 11, }, }, }, ), ], to: Path( Path { parts: [ Raw( PartRaw { content: "./sourcehut.xml", span: Span { start: Position { line: 1421, column: 14, }, end: Position { line: 1421, column: 29, }, }, }, ), ], span: Span { start: Position { line: 1421, column: 14, }, end: Position { line: 1421, column: 29, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "meta", span: Span { start: Position { line: 1422, column: 3, }, end: Position { line: 1422, column: 7, }, }, }, ), Raw( PartRaw { content: "maintainers", span: Span { start: Position { line: 1422, column: 8, }, end: Position { line: 1422, column: 19, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "maintainers", span: Span { start: Position { line: 1422, column: 27, }, end: Position { line: 1422, column: 38, }, }, }, ), target: List( List { elements: [ Identifier( Identifier { id: "tomberek", span: Span { start: Position { line: 1422, column: 42, }, end: Position { line: 1422, column: 50, }, }, }, ), ], span: Span { start: Position { line: 1422, column: 40, }, end: Position { line: 1422, column: 52, }, }, }, ), span: Span { start: Position { line: 1422, column: 22, }, end: Position { line: 1422, column: 52, }, }, }, ), }, ), ], span: Span { start: Position { line: 109, column: 1, }, end: Position { line: 1423, column: 2, }, }, }, ), span: Span { start: Position { line: 3, column: 1, }, end: Position { line: 1423, column: 2, }, }, }, ), span: Span { start: Position { line: 2, column: 1, }, end: Position { line: 1423, column: 2, }, }, }, ), span: Span { start: Position { line: 1, column: 1, }, end: Position { line: 1423, column: 2, }, }, }, )