Function( Function { head: Destructured( FunctionHeadDestructured { ellipsis: true, identifier: None, arguments: [ FunctionHeadDestructuredArgument { identifier: "config", default: None, }, FunctionHeadDestructuredArgument { identifier: "lib", default: None, }, FunctionHeadDestructuredArgument { identifier: "pkgs", default: None, }, ], }, ), body: With( With { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 3, column: 6, }, end: Position { line: 3, column: 9, }, }, }, ), target: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "udev", span: Span { start: Position { line: 7, column: 3, }, end: Position { line: 7, column: 7, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 7, column: 10, }, end: Position { line: 7, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 7, column: 17, }, end: Position { line: 7, column: 24, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 7, column: 25, }, end: Position { line: 7, column: 32, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "cfg", span: Span { start: Position { line: 9, column: 3, }, end: Position { line: 9, column: 6, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 9, column: 9, }, end: Position { line: 9, column: 15, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 9, column: 16, }, end: Position { line: 9, column: 24, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 9, column: 25, }, end: Position { line: 9, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "initrdUdevRules", span: Span { start: Position { line: 11, column: 3, }, end: Position { line: 11, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 11, column: 21, }, end: Position { line: 11, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "runCommand", span: Span { start: Position { line: 11, column: 26, }, end: Position { line: 11, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "initrd-udev-rules", span: Span { start: Position { line: 11, column: 38, }, end: Position { line: 11, column: 55, }, }, }, ), ], span: Span { start: Position { line: 11, column: 37, }, end: Position { line: 11, column: 56, }, }, }, ), Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 11, column: 57, }, end: Position { line: 11, column: 59, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mkdir -p $out/etc/udev/rules.d\nfor f in 60-cdrom_id 60-persistent-storage 75-net-description 80-drivers 80-net-setup-link; do\n ln -s ", span: Span { start: Position { line: 12, column: 1, }, end: Position { line: 14, column: 13, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 14, column: 15, }, end: Position { line: 14, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 14, column: 22, }, end: Position { line: 14, column: 26, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 14, column: 27, }, end: Position { line: 14, column: 33, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 14, column: 34, }, end: Position { line: 14, column: 41, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 14, column: 42, }, end: Position { line: 14, column: 49, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/udev/rules.d/$f.rules $out/etc/udev/rules.d\ndone\n", span: Span { start: Position { line: 12, column: 1, }, end: Position { line: 16, column: 3, }, }, }, ), ], span: Span { start: Position { line: 11, column: 60, }, end: Position { line: 16, column: 5, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "initrdLinkUnits", span: Span { start: Position { line: 23, column: 3, }, end: Position { line: 23, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 23, column: 21, }, end: Position { line: 23, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "runCommand", span: Span { start: Position { line: 23, column: 26, }, end: Position { line: 23, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "initrd-link-units", span: Span { start: Position { line: 23, column: 38, }, end: Position { line: 23, column: 55, }, }, }, ), ], span: Span { start: Position { line: 23, column: 37, }, end: Position { line: 23, column: 56, }, }, }, ), Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 23, column: 57, }, end: Position { line: 23, column: 59, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mkdir -p $out\nln -s ", span: Span { start: Position { line: 24, column: 1, }, end: Position { line: 25, column: 11, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "udev", span: Span { start: Position { line: 25, column: 13, }, end: Position { line: 25, column: 17, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/systemd/network/*.link $out/\n", span: Span { start: Position { line: 24, column: 1, }, end: Position { line: 26, column: 5, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 26, column: 7, }, end: Position { line: 26, column: 10, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "concatMapStringsSep", span: Span { start: Position { line: 26, column: 11, }, end: Position { line: 26, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "\n", span: Span { start: Position { line: 26, column: 32, }, end: Position { line: 26, column: 34, }, }, }, ), ], span: Span { start: Position { line: 26, column: 31, }, end: Position { line: 26, column: 35, }, }, }, ), Function( Function { head: Simple( FunctionHeadSimple { identifier: "file", }, ), body: String( String_ { parts: [ Raw( PartRaw { content: "ln -s ", span: Span { start: Position { line: 26, column: 44, }, end: Position { line: 26, column: 57, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "file", span: Span { start: Position { line: 26, column: 52, }, end: Position { line: 26, column: 56, }, }, }, ), }, ), Raw( PartRaw { content: " $out/", span: Span { start: Position { line: 26, column: 44, }, end: Position { line: 26, column: 63, }, }, }, ), ], span: Span { start: Position { line: 26, column: 43, }, end: Position { line: 26, column: 64, }, }, }, ), span: Span { start: Position { line: 26, column: 37, }, end: Position { line: 26, column: 64, }, }, }, ), FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 26, column: 67, }, end: Position { line: 26, column: 70, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mapAttrsToList", span: Span { start: Position { line: 26, column: 71, }, end: Position { line: 26, column: 85, }, }, }, ), ], default: None, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "n", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "v", }, ), body: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "v", span: Span { start: Position { line: 26, column: 96, }, end: Position { line: 26, column: 97, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "unit", span: Span { start: Position { line: 26, column: 98, }, end: Position { line: 26, column: 102, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/", span: Span { start: Position { line: 26, column: 94, }, end: Position { line: 26, column: 104, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "n", span: Span { start: Position { line: 26, column: 106, }, end: Position { line: 26, column: 107, }, }, }, ), }, ), ], span: Span { start: Position { line: 26, column: 93, }, end: Position { line: 26, column: 109, }, }, }, ), span: Span { start: Position { line: 26, column: 90, }, end: Position { line: 26, column: 109, }, }, }, ), span: Span { start: Position { line: 26, column: 87, }, end: Position { line: 26, column: 109, }, }, }, ), FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 26, column: 112, }, end: Position { line: 26, column: 115, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "filterAttrs", span: Span { start: Position { line: 26, column: 116, }, end: Position { line: 26, column: 127, }, }, }, ), ], default: None, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "n", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "_", }, ), body: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "hasSuffix", span: Span { start: Position { line: 26, column: 135, }, end: Position { line: 26, column: 144, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: ".link", span: Span { start: Position { line: 26, column: 146, }, end: Position { line: 26, column: 151, }, }, }, ), ], span: Span { start: Position { line: 26, column: 145, }, end: Position { line: 26, column: 152, }, }, }, ), Identifier( Identifier { id: "n", span: Span { start: Position { line: 26, column: 153, }, end: Position { line: 26, column: 154, }, }, }, ), ], }, ), span: Span { start: Position { line: 26, column: 132, }, end: Position { line: 26, column: 154, }, }, }, ), span: Span { start: Position { line: 26, column: 129, }, end: Position { line: 26, column: 154, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 26, column: 156, }, end: Position { line: 26, column: 162, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 26, column: 163, }, end: Position { line: 26, column: 170, }, }, }, ), Raw( PartRaw { content: "network", span: Span { start: Position { line: 26, column: 171, }, end: Position { line: 26, column: 178, }, }, }, ), Raw( PartRaw { content: "units", span: Span { start: Position { line: 26, column: 179, }, end: Position { line: 26, column: 184, }, }, }, ), ], default: None, }, ), ], }, ), ], }, ), ], }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 24, column: 1, }, end: Position { line: 27, column: 3, }, }, }, ), ], span: Span { start: Position { line: 23, column: 60, }, end: Position { line: 27, column: 5, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraUdevRules", span: Span { start: Position { line: 29, column: 3, }, end: Position { line: 29, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 29, column: 20, }, end: Position { line: 29, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeTextFile", span: Span { start: Position { line: 29, column: 25, }, end: Position { line: 29, column: 38, }, }, }, ), ], default: None, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 30, column: 5, }, end: Position { line: 30, column: 9, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "extra-udev-rules", span: Span { start: Position { line: 30, column: 13, }, end: Position { line: 30, column: 29, }, }, }, ), ], span: Span { start: Position { line: 30, column: 12, }, end: Position { line: 30, column: 30, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "text", span: Span { start: Position { line: 31, column: 5, }, end: Position { line: 31, column: 9, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 31, column: 12, }, end: Position { line: 31, column: 15, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "extraRules", span: Span { start: Position { line: 31, column: 16, }, end: Position { line: 31, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "destination", span: Span { start: Position { line: 32, column: 5, }, end: Position { line: 32, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/etc/udev/rules.d/99-local.rules", span: Span { start: Position { line: 32, column: 20, }, end: Position { line: 32, column: 52, }, }, }, ), ], span: Span { start: Position { line: 32, column: 19, }, end: Position { line: 32, column: 53, }, }, }, ), }, ), ], span: Span { start: Position { line: 29, column: 39, }, end: Position { line: 33, column: 4, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraHwdbFile", span: Span { start: Position { line: 35, column: 3, }, end: Position { line: 35, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 35, column: 19, }, end: Position { line: 35, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeTextFile", span: Span { start: Position { line: 35, column: 24, }, end: Position { line: 35, column: 37, }, }, }, ), ], default: None, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 36, column: 5, }, end: Position { line: 36, column: 9, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "extra-hwdb-file", span: Span { start: Position { line: 36, column: 13, }, end: Position { line: 36, column: 28, }, }, }, ), ], span: Span { start: Position { line: 36, column: 12, }, end: Position { line: 36, column: 29, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "text", span: Span { start: Position { line: 37, column: 5, }, end: Position { line: 37, column: 9, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 37, column: 12, }, end: Position { line: 37, column: 15, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "extraHwdb", span: Span { start: Position { line: 37, column: 16, }, end: Position { line: 37, column: 25, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "destination", span: Span { start: Position { line: 38, column: 5, }, end: Position { line: 38, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/etc/udev/hwdb.d/99-local.hwdb", span: Span { start: Position { line: 38, column: 20, }, end: Position { line: 38, column: 50, }, }, }, ), ], span: Span { start: Position { line: 38, column: 19, }, end: Position { line: 38, column: 51, }, }, }, ), }, ), ], span: Span { start: Position { line: 35, column: 38, }, end: Position { line: 39, column: 4, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "nixosRules", span: Span { start: Position { line: 41, column: 3, }, end: Position { line: 41, column: 13, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "# Miscellaneous devices.\nKERNEL==\"kvm\", MODE=\"0666\"\n\n# Needed for gpm.\nSUBSYSTEM==\"input\", KERNEL==\"mice\", TAG+=\"systemd\"\n", span: Span { start: Position { line: 42, column: 1, }, end: Position { line: 47, column: 3, }, }, }, ), ], span: Span { start: Position { line: 41, column: 16, }, end: Position { line: 47, column: 5, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "udevRulesFor", span: Span { start: Position { line: 50, column: 3, }, end: Position { line: 50, column: 15, }, }, }, ), ], to: Function( Function { head: Destructured( FunctionHeadDestructured { ellipsis: false, identifier: None, arguments: [ FunctionHeadDestructuredArgument { identifier: "name", default: None, }, FunctionHeadDestructuredArgument { identifier: "udevPackages", default: None, }, FunctionHeadDestructuredArgument { identifier: "udevPath", default: None, }, FunctionHeadDestructuredArgument { identifier: "udev", default: None, }, FunctionHeadDestructuredArgument { identifier: "systemd", default: None, }, FunctionHeadDestructuredArgument { identifier: "binPackages", default: None, }, FunctionHeadDestructuredArgument { identifier: "initrdBin", default: Some( Identifier( Identifier { id: "null", span: Span { start: Position { line: 50, column: 90, }, end: Position { line: 50, column: 94, }, }, }, ), ), }, ], }, ), body: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 50, column: 98, }, end: Position { line: 50, column: 102, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "runCommand", span: Span { start: Position { line: 50, column: 103, }, end: Position { line: 50, column: 113, }, }, }, ), ], default: None, }, ), arguments: [ Identifier( Identifier { id: "name", span: Span { start: Position { line: 50, column: 114, }, end: Position { line: 50, column: 118, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "preferLocalBuild", span: Span { start: Position { line: 51, column: 7, }, end: Position { line: 51, column: 23, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 51, column: 26, }, end: Position { line: 51, column: 30, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "allowSubstitutes", span: Span { start: Position { line: 52, column: 7, }, end: Position { line: 52, column: 23, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 52, column: 26, }, end: Position { line: 52, column: 31, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "packages", span: Span { start: Position { line: 53, column: 7, }, end: Position { line: 53, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "unique", span: Span { start: Position { line: 53, column: 18, }, end: Position { line: 53, column: 24, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "map", span: Span { start: Position { line: 53, column: 26, }, end: Position { line: 53, column: 29, }, }, }, ), arguments: [ Identifier( Identifier { id: "toString", span: Span { start: Position { line: 53, column: 30, }, end: Position { line: 53, column: 38, }, }, }, ), Identifier( Identifier { id: "udevPackages", span: Span { start: Position { line: 53, column: 39, }, end: Position { line: 53, column: 51, }, }, }, ), ], }, ), ], }, ), }, ), ], span: Span { start: Position { line: 51, column: 5, }, end: Position { line: 54, column: 6, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mkdir -p $out\nshopt -s nullglob\nset +o pipefail\n\n# Set a reasonable $PATH for programs called by udev rules.\necho 'ENV{PATH}=\"", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 61, column: 24, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "udevPath", span: Span { start: Position { line: 61, column: 26, }, end: Position { line: 61, column: 34, }, }, }, ), }, ), Raw( PartRaw { content: "/bin:", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 61, column: 40, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "udevPath", span: Span { start: Position { line: 61, column: 42, }, end: Position { line: 61, column: 50, }, }, }, ), }, ), Raw( PartRaw { content: "/sbin\"' > $out/00-path.rules\n\n# Add the udev rules from other packages.\nfor i in $packages; do\n echo \"Adding rules for package $i\"\n for j in $i/{etc,lib}/udev/rules.d/*; do\n echo \"Copying $j to $out/$(basename $j)\"\n cat $j > $out/$(basename $j)\n done\ndone\n\n# Fix some paths in the standard udev rules. Hacky.\nfor i in $out/*.rules; do\n substituteInPlace $i \\\n --replace \\\"/sbin/modprobe \\\"", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 75, column: 40, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 75, column: 42, }, end: Position { line: 75, column: 46, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "kmod", span: Span { start: Position { line: 75, column: 47, }, end: Position { line: 75, column: 51, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/modprobe \\\n --replace \\\"/sbin/mdadm \\\"", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 76, column: 37, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 76, column: 39, }, end: Position { line: 76, column: 43, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdadm", span: Span { start: Position { line: 76, column: 44, }, end: Position { line: 76, column: 49, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/sbin/mdadm \\\n --replace \\\"/sbin/blkid \\\"", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 77, column: 37, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 77, column: 39, }, end: Position { line: 77, column: 43, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "util-linux", span: Span { start: Position { line: 77, column: 44, }, end: Position { line: 77, column: 54, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/sbin/blkid \\\n --replace \\\"/bin/mount \\\"", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 78, column: 36, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 78, column: 38, }, end: Position { line: 78, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "util-linux", span: Span { start: Position { line: 78, column: 43, }, end: Position { line: 78, column: 53, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/mount \\\n --replace /usr/bin/readlink ", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 79, column: 39, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 79, column: 41, }, end: Position { line: 79, column: 45, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "coreutils", span: Span { start: Position { line: 79, column: 46, }, end: Position { line: 79, column: 55, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/readlink \\\n --replace /usr/bin/basename ", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 80, column: 39, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 80, column: 41, }, end: Position { line: 80, column: 45, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "coreutils", span: Span { start: Position { line: 80, column: 46, }, end: Position { line: 80, column: 55, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/basename\n", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 81, column: 7, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 81, column: 9, }, end: Position { line: 81, column: 23, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "initrdBin", span: Span { start: Position { line: 81, column: 25, }, end: Position { line: 81, column: 34, }, }, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 81, column: 38, }, end: Position { line: 81, column: 42, }, }, }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "substituteInPlace $i --replace '/run/current-system/systemd' \"", span: Span { start: Position { line: 82, column: 1, }, end: Position { line: 82, column: 71, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "removeSuffix", span: Span { start: Position { line: 82, column: 73, }, end: Position { line: 82, column: 85, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "/bin", span: Span { start: Position { line: 82, column: 87, }, end: Position { line: 82, column: 91, }, }, }, ), ], span: Span { start: Position { line: 82, column: 86, }, end: Position { line: 82, column: 92, }, }, }, ), Identifier( Identifier { id: "initrdBin", span: Span { start: Position { line: 82, column: 93, }, end: Position { line: 82, column: 102, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\"\n", span: Span { start: Position { line: 82, column: 1, }, end: Position { line: 83, column: 7, }, }, }, ), ], span: Span { start: Position { line: 81, column: 44, }, end: Position { line: 83, column: 9, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\ndone\n\necho -n \"Checking that all programs called by relative paths in udev rules exist in ", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 86, column: 91, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "udev", span: Span { start: Position { line: 86, column: 93, }, end: Position { line: 86, column: 97, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/udev... \"\nimport_progs=$(grep 'IMPORT{program}=\"[^/$]' $out/* |\n sed -e 's/.*IMPORT{program}=\"\\([^ \"]*\\)[ \"].*/\\1/' | uniq)\nrun_progs=$(grep -v '^[[:space:]]*#' $out/* | grep 'RUN+=\"[^/$]' |\n sed -e 's/.*RUN+=\"\\([^ \"]*\\)[ \"].*/\\1/' | uniq)\nfor i in $import_progs $run_progs; do\n if [[ ! -x ", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 92, column: 20, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "udev", span: Span { start: Position { line: 92, column: 22, }, end: Position { line: 92, column: 26, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/udev/$i && ! $i =~ socket:.* ]]; then\n echo \"FAIL\"\n echo \"$i is called in udev rules but not installed by udev\"\n exit 1\n fi\ndone\necho \"OK\"\n\necho -n \"Checking that all programs called by absolute paths in udev rules exist... \"\nimport_progs=$(grep 'IMPORT{program}=\"\\/' $out/* |\n sed -e 's/.*IMPORT{program}=\"\\([^ \"]*\\)[ \"].*/\\1/' | uniq)\nrun_progs=$(grep -v '^[[:space:]]*#' $out/* | grep 'RUN+=\"/' |\n sed -e 's/.*RUN+=\"\\([^ \"]*\\)[ \"].*/\\1/' | uniq)\nfor i in $import_progs $run_progs; do\n # if the path refers to /run/current-system/systemd, replace with config.systemd.package\n if [[ $i == /run/current-system/systemd* ]]; then\n i=\"", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 108, column: 14, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "systemd", span: Span { start: Position { line: 108, column: 16, }, end: Position { line: 108, column: 23, }, }, }, ), }, ), Raw( PartRaw { content: "/", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 108, column: 25, }, }, }, ), Raw( PartRaw { content: "$", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 108, column: 28, }, }, }, ), Raw( PartRaw { content: "{i#/run/current-system/systemd/}\"\n fi\n\n if [[ ! -x $i ]]; then\n echo \"FAIL\"\n echo \"$i is called in udev rules but is not executable or does not exist\"\n exit 1\n fi\ndone\necho \"OK\"\n\nfilesToFixup=\"$(for i in \"$out\"/*; do\n grep -l '\\B\\(/usr\\)\\?/s\\?bin' \"$i\" || :\ndone)\"\n\nif [ -n \"$filesToFixup\" ]; then\n echo \"Consider fixing the following udev rules:\"\n echo \"$filesToFixup\" | while read localFile; do\n remoteFile=\"origin unknown\"\n for i in ", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 127, column: 20, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 127, column: 22, }, end: Position { line: 127, column: 30, }, }, }, ), arguments: [ Identifier( Identifier { id: "binPackages", span: Span { start: Position { line: 127, column: 31, }, end: Position { line: 127, column: 42, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "; do\n for j in \"$i\"/*/udev/rules.d/*; do\n [ -e \"$out/$(basename \"$j\")\" ] || continue\n [ \"$(basename \"$j\")\" = \"$(basename \"$localFile\")\" ] || continue\n remoteFile=\"originally from $j\"\n break 2\n done\n done\n refs=\"$(\n grep -o '\\B\\(/usr\\)\\?/s\\?bin/[^ \"]\\+' \"$localFile\" \\\n | sed -e ':r;N;", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 137, column: 30, }, }, }, ), Raw( PartRaw { content: "$", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 137, column: 33, }, }, }, ), Raw( PartRaw { content: "{s/\\n/ and /;br};s/\\n/, /g;br'\n )\"\n echo \"$localFile ($remoteFile) contains references to $refs.\"\n done\n exit 1\nfi\n\n# If auto-configuration is disabled, then remove\n# udev's 80-drivers.rules file, which contains rules for\n# automatically calling modprobe.\n", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 147, column: 7, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 147, column: 9, }, end: Position { line: 147, column: 23, }, }, }, ), arguments: [ UnaryOperation( UnaryOperation { operator: Not, operand: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 147, column: 26, }, end: Position { line: 147, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 147, column: 33, }, end: Position { line: 147, column: 37, }, }, }, ), Raw( PartRaw { content: "hardwareScan", span: Span { start: Position { line: 147, column: 38, }, end: Position { line: 147, column: 50, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 147, column: 25, }, end: Position { line: 147, column: 50, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "ln -s /dev/null $out/80-drivers.rules\n", span: Span { start: Position { line: 148, column: 1, }, end: Position { line: 149, column: 7, }, }, }, ), ], span: Span { start: Position { line: 147, column: 52, }, end: Position { line: 149, column: 9, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 150, column: 5, }, }, }, ), ], span: Span { start: Position { line: 55, column: 5, }, end: Position { line: 150, column: 7, }, }, }, ), ], }, ), span: Span { start: Position { line: 50, column: 18, }, end: Position { line: 150, column: 7, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "hwdbBin", span: Span { start: Position { line: 152, column: 3, }, end: Position { line: 152, column: 10, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 152, column: 13, }, end: Position { line: 152, column: 17, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "runCommand", span: Span { start: Position { line: 152, column: 18, }, end: Position { line: 152, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "hwdb.bin", span: Span { start: Position { line: 152, column: 30, }, end: Position { line: 152, column: 38, }, }, }, ), ], span: Span { start: Position { line: 152, column: 29, }, end: Position { line: 152, column: 39, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "preferLocalBuild", span: Span { start: Position { line: 153, column: 7, }, end: Position { line: 153, column: 23, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 153, column: 26, }, end: Position { line: 153, column: 30, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "allowSubstitutes", span: Span { start: Position { line: 154, column: 7, }, end: Position { line: 154, column: 23, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 154, column: 26, }, end: Position { line: 154, column: 31, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "packages", span: Span { start: Position { line: 155, column: 7, }, end: Position { line: 155, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "unique", span: Span { start: Position { line: 155, column: 18, }, end: Position { line: 155, column: 24, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "map", span: Span { start: Position { line: 155, column: 26, }, end: Position { line: 155, column: 29, }, }, }, ), arguments: [ Identifier( Identifier { id: "toString", span: Span { start: Position { line: 155, column: 30, }, end: Position { line: 155, column: 38, }, }, }, ), BinaryOperation( BinaryOperation { left: List( List { elements: [ Identifier( Identifier { id: "udev", span: Span { start: Position { line: 155, column: 41, }, end: Position { line: 155, column: 45, }, }, }, ), ], span: Span { start: Position { line: 155, column: 40, }, end: Position { line: 155, column: 46, }, }, }, ), operator: Concatenation, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 155, column: 50, }, end: Position { line: 155, column: 53, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "packages", span: Span { start: Position { line: 155, column: 54, }, end: Position { line: 155, column: 62, }, }, }, ), ], default: None, }, ), }, ), ], }, ), ], }, ), }, ), ], span: Span { start: Position { line: 153, column: 5, }, end: Position { line: 156, column: 6, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mkdir -p etc/udev/hwdb.d\nfor i in $packages; do\n echo \"Adding hwdb files for package $i\"\n for j in $i/{etc,lib}/udev/hwdb.d/*; do\n ln -s $j etc/udev/hwdb.d/$(basename $j)\n done\ndone\n\necho \"Generating hwdb database...\"\n# hwdb --update doesn't return error code even on errors!\nres=\"$(", span: Span { start: Position { line: 158, column: 1, }, end: Position { line: 168, column: 14, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 168, column: 16, }, end: Position { line: 168, column: 20, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "buildPackages", span: Span { start: Position { line: 168, column: 21, }, end: Position { line: 168, column: 34, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 168, column: 35, }, end: Position { line: 168, column: 39, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/udevadm hwdb --update --root=$(pwd) 2>&1)\"\necho \"$res\"\n[ -z \"$(echo \"$res\" | egrep '^Error')\" ]\nmv etc/udev/hwdb.bin $out\n", span: Span { start: Position { line: 158, column: 1, }, end: Position { line: 172, column: 5, }, }, }, ), ], span: Span { start: Position { line: 157, column: 5, }, end: Position { line: 172, column: 7, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "compressFirmware", span: Span { start: Position { line: 174, column: 3, }, end: Position { line: 174, column: 19, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "firmware", }, ), body: IfThenElse( IfThenElse { predicate: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 174, column: 36, }, end: Position { line: 174, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 174, column: 43, }, end: Position { line: 174, column: 47, }, }, }, ), Raw( PartRaw { content: "kernelPackages", span: Span { start: Position { line: 174, column: 48, }, end: Position { line: 174, column: 62, }, }, }, ), Raw( PartRaw { content: "kernelAtLeast", span: Span { start: Position { line: 174, column: 63, }, end: Position { line: 174, column: 76, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "5.3", span: Span { start: Position { line: 174, column: 78, }, end: Position { line: 174, column: 81, }, }, }, ), ], span: Span { start: Position { line: 174, column: 77, }, end: Position { line: 174, column: 82, }, }, }, ), ], }, ), operator: LogicalAnd, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "firmware", span: Span { start: Position { line: 174, column: 87, }, end: Position { line: 174, column: 95, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "compressFirmware", span: Span { start: Position { line: 174, column: 96, }, end: Position { line: 174, column: 112, }, }, }, ), ], default: Some( Identifier( Identifier { id: "true", span: Span { start: Position { line: 174, column: 116, }, end: Position { line: 174, column: 120, }, }, }, ), ), }, ), }, ), then: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 175, column: 5, }, end: Position { line: 175, column: 9, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "compressFirmwareXz", span: Span { start: Position { line: 175, column: 10, }, end: Position { line: 175, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ Identifier( Identifier { id: "firmware", span: Span { start: Position { line: 175, column: 29, }, end: Position { line: 175, column: 37, }, }, }, ), ], }, ), else_: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "id", span: Span { start: Position { line: 177, column: 5, }, end: Position { line: 177, column: 7, }, }, }, ), arguments: [ Identifier( Identifier { id: "firmware", span: Span { start: Position { line: 177, column: 8, }, end: Position { line: 177, column: 16, }, }, }, ), ], }, ), span: Span { start: Position { line: 174, column: 32, }, end: Position { line: 177, column: 16, }, }, }, ), span: Span { start: Position { line: 174, column: 22, }, end: Position { line: 177, column: 16, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "udevPath", span: Span { start: Position { line: 181, column: 3, }, end: Position { line: 181, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 181, column: 14, }, end: Position { line: 181, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "buildEnv", span: Span { start: Position { line: 181, column: 19, }, end: Position { line: 181, column: 27, }, }, }, ), ], default: None, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 182, column: 5, }, end: Position { line: 182, column: 9, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "udev-path", span: Span { start: Position { line: 182, column: 13, }, end: Position { line: 182, column: 22, }, }, }, ), ], span: Span { start: Position { line: 182, column: 12, }, end: Position { line: 182, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "paths", span: Span { start: Position { line: 183, column: 5, }, end: Position { line: 183, column: 10, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 183, column: 13, }, end: Position { line: 183, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 183, column: 17, }, end: Position { line: 183, column: 21, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "pathsToLink", span: Span { start: Position { line: 184, column: 5, }, end: Position { line: 184, column: 16, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "/bin", span: Span { start: Position { line: 184, column: 22, }, end: Position { line: 184, column: 26, }, }, }, ), ], span: Span { start: Position { line: 184, column: 21, }, end: Position { line: 184, column: 27, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "/sbin", span: Span { start: Position { line: 184, column: 29, }, end: Position { line: 184, column: 34, }, }, }, ), ], span: Span { start: Position { line: 184, column: 28, }, end: Position { line: 184, column: 35, }, }, }, ), ], span: Span { start: Position { line: 184, column: 19, }, end: Position { line: 184, column: 37, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ignoreCollisions", span: Span { start: Position { line: 185, column: 5, }, end: Position { line: 185, column: 21, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 185, column: 24, }, end: Position { line: 185, column: 28, }, }, }, ), }, ), ], span: Span { start: Position { line: 181, column: 28, }, end: Position { line: 186, column: 4, }, }, }, ), ], }, ), }, ), ], target: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 194, column: 3, }, end: Position { line: 194, column: 10, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 195, column: 5, }, end: Position { line: 195, column: 9, }, }, }, ), Raw( PartRaw { content: "hardwareScan", span: Span { start: Position { line: 195, column: 10, }, end: Position { line: 195, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 195, column: 25, }, end: Position { line: 195, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 196, column: 7, }, end: Position { line: 196, column: 11, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 196, column: 14, }, end: Position { line: 196, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 196, column: 20, }, end: Position { line: 196, column: 24, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 197, column: 7, }, end: Position { line: 197, column: 14, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 197, column: 17, }, end: Position { line: 197, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 198, column: 7, }, end: Position { line: 198, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 198, column: 21, }, end: Position { line: 198, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 198, column: 25, }, end: Position { line: 198, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Whether to try to load kernel modules for all detected hardware.\nUsually this does a good job of providing you with the modules\nyou need, but sometimes it can crash the system or cause other\nnasty effects.\n", span: Span { start: Position { line: 199, column: 1, }, end: Position { line: 203, column: 7, }, }, }, ), ], span: Span { start: Position { line: 198, column: 31, }, end: Position { line: 203, column: 9, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 195, column: 34, }, end: Position { line: 204, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 206, column: 5, }, end: Position { line: 206, column: 13, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 206, column: 14, }, end: Position { line: 206, column: 18, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 207, column: 7, }, end: Position { line: 207, column: 13, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 207, column: 16, }, end: Position { line: 207, column: 30, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 207, column: 32, }, end: Position { line: 207, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 207, column: 36, }, end: Position { line: 207, column: 41, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "udev", span: Span { start: Position { line: 207, column: 43, }, end: Position { line: 207, column: 47, }, }, }, ), ], span: Span { start: Position { line: 207, column: 42, }, end: Position { line: 207, column: 48, }, }, }, ), ], }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 208, column: 9, }, end: Position { line: 208, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 208, column: 19, }, end: Position { line: 208, column: 23, }, }, }, ), }, ), ], span: Span { start: Position { line: 207, column: 53, }, end: Position { line: 209, column: 8, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "packages", span: Span { start: Position { line: 211, column: 7, }, end: Position { line: 211, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 211, column: 18, }, end: Position { line: 211, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 212, column: 9, }, end: Position { line: 212, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 212, column: 16, }, end: Position { line: 212, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listOf", span: Span { start: Position { line: 212, column: 22, }, end: Position { line: 212, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 212, column: 29, }, end: Position { line: 212, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 212, column: 35, }, end: Position { line: 212, column: 39, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 213, column: 9, }, end: Position { line: 213, column: 16, }, }, }, ), ], to: List( List { elements: [], span: Span { start: Position { line: 213, column: 19, }, end: Position { line: 213, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 214, column: 9, }, end: Position { line: 214, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 214, column: 23, }, end: Position { line: 214, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 214, column: 27, }, end: Position { line: 214, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "List of packages containing {command}`udev` rules.\nAll files found in\n{file}`«pkg»/etc/udev/rules.d` and\n{file}`«pkg»/lib/udev/rules.d`\nwill be included.\n", span: Span { start: Position { line: 215, column: 1, }, end: Position { line: 220, column: 9, }, }, }, ), ], span: Span { start: Position { line: 214, column: 33, }, end: Position { line: 220, column: 11, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "apply", span: Span { start: Position { line: 221, column: 9, }, end: Position { line: 221, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "map", span: Span { start: Position { line: 221, column: 17, }, end: Position { line: 221, column: 20, }, }, }, ), arguments: [ Identifier( Identifier { id: "getBin", span: Span { start: Position { line: 221, column: 21, }, end: Position { line: 221, column: 27, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 211, column: 27, }, end: Position { line: 222, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 224, column: 7, }, end: Position { line: 224, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 224, column: 14, }, end: Position { line: 224, column: 22, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 225, column: 9, }, end: Position { line: 225, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 225, column: 16, }, end: Position { line: 225, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listOf", span: Span { start: Position { line: 225, column: 22, }, end: Position { line: 225, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 225, column: 29, }, end: Position { line: 225, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 225, column: 35, }, end: Position { line: 225, column: 39, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 226, column: 9, }, end: Position { line: 226, column: 16, }, }, }, ), ], to: List( List { elements: [], span: Span { start: Position { line: 226, column: 19, }, end: Position { line: 226, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 227, column: 9, }, end: Position { line: 227, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 227, column: 23, }, end: Position { line: 227, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 227, column: 27, }, end: Position { line: 227, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Packages added to the {env}`PATH` environment variable when\nexecuting programs from Udev rules.\n", span: Span { start: Position { line: 228, column: 1, }, end: Position { line: 230, column: 9, }, }, }, ), ], span: Span { start: Position { line: 227, column: 33, }, end: Position { line: 230, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 224, column: 23, }, end: Position { line: 231, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraRules", span: Span { start: Position { line: 233, column: 7, }, end: Position { line: 233, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 233, column: 20, }, end: Position { line: 233, column: 28, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 234, column: 9, }, end: Position { line: 234, column: 16, }, }, }, ), ], to: String( String_ { parts: [], span: Span { start: Position { line: 234, column: 19, }, end: Position { line: 234, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 235, column: 9, }, end: Position { line: 235, column: 16, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "ENV{ID_VENDOR_ID}==\"046d\", ENV{ID_MODEL_ID}==\"0825\", ENV{PULSE_IGNORE}=\"1\"\n", span: Span { start: Position { line: 236, column: 1, }, end: Position { line: 237, column: 9, }, }, }, ), ], span: Span { start: Position { line: 235, column: 19, }, end: Position { line: 237, column: 11, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 238, column: 9, }, end: Position { line: 238, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 238, column: 16, }, end: Position { line: 238, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lines", span: Span { start: Position { line: 238, column: 22, }, end: Position { line: 238, column: 27, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 239, column: 9, }, end: Position { line: 239, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 239, column: 23, }, end: Position { line: 239, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 239, column: 27, }, end: Position { line: 239, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Additional {command}`udev` rules. They'll be written\ninto file {file}`99-local.rules`. Thus they are\nread and applied after all other rules.\n", span: Span { start: Position { line: 240, column: 1, }, end: Position { line: 243, column: 9, }, }, }, ), ], span: Span { start: Position { line: 239, column: 33, }, end: Position { line: 243, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 233, column: 29, }, end: Position { line: 244, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraHwdb", span: Span { start: Position { line: 246, column: 7, }, end: Position { line: 246, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 246, column: 19, }, end: Position { line: 246, column: 27, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 247, column: 9, }, end: Position { line: 247, column: 16, }, }, }, ), ], to: String( String_ { parts: [], span: Span { start: Position { line: 247, column: 19, }, end: Position { line: 247, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 248, column: 9, }, end: Position { line: 248, column: 16, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "evdev:input:b0003v05AFp8277*\n KEYBOARD_KEY_70039=leftalt\n KEYBOARD_KEY_700e2=leftctrl\n", span: Span { start: Position { line: 249, column: 1, }, end: Position { line: 252, column: 9, }, }, }, ), ], span: Span { start: Position { line: 248, column: 19, }, end: Position { line: 252, column: 11, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 253, column: 9, }, end: Position { line: 253, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 253, column: 16, }, end: Position { line: 253, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lines", span: Span { start: Position { line: 253, column: 22, }, end: Position { line: 253, column: 27, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 254, column: 9, }, end: Position { line: 254, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 254, column: 23, }, end: Position { line: 254, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 254, column: 27, }, end: Position { line: 254, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Additional {command}`hwdb` files. They'll be written\ninto file {file}`99-local.hwdb`. Thus they are\nread after all other files.\n", span: Span { start: Position { line: 255, column: 1, }, end: Position { line: 258, column: 9, }, }, }, ), ], span: Span { start: Position { line: 254, column: 33, }, end: Position { line: 258, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 246, column: 28, }, end: Position { line: 259, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 206, column: 21, }, end: Position { line: 261, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "hardware", span: Span { start: Position { line: 263, column: 5, }, end: Position { line: 263, column: 13, }, }, }, ), Raw( PartRaw { content: "firmware", span: Span { start: Position { line: 263, column: 14, }, end: Position { line: 263, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 263, column: 25, }, end: Position { line: 263, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 264, column: 7, }, end: Position { line: 264, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 264, column: 14, }, end: Position { line: 264, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listOf", span: Span { start: Position { line: 264, column: 20, }, end: Position { line: 264, column: 26, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 264, column: 27, }, end: Position { line: 264, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "package", span: Span { start: Position { line: 264, column: 33, }, end: Position { line: 264, column: 40, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 265, column: 7, }, end: Position { line: 265, column: 14, }, }, }, ), ], to: List( List { elements: [], span: Span { start: Position { line: 265, column: 17, }, end: Position { line: 265, column: 19, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 266, column: 7, }, end: Position { line: 266, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 266, column: 21, }, end: Position { line: 266, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 266, column: 25, }, end: Position { line: 266, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "List of packages containing firmware files. Such files\nwill be loaded automatically if the kernel asks for them\n(i.e., when it has detected specific hardware that requires\nfirmware to function). If multiple packages contain firmware\nfiles with the same name, the first package in the list takes\nprecedence. Note that you must rebuild your system if you add\nfiles to any of these directories.\n", span: Span { start: Position { line: 267, column: 1, }, end: Position { line: 274, column: 7, }, }, }, ), ], span: Span { start: Position { line: 266, column: 31, }, end: Position { line: 274, column: 9, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "apply", span: Span { start: Position { line: 275, column: 7, }, end: Position { line: 275, column: 12, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "list", }, ), body: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 275, column: 21, }, end: Position { line: 275, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "buildEnv", span: Span { start: Position { line: 275, column: 26, }, end: Position { line: 275, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 276, column: 9, }, end: Position { line: 276, column: 13, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "firmware", span: Span { start: Position { line: 276, column: 17, }, end: Position { line: 276, column: 25, }, }, }, ), ], span: Span { start: Position { line: 276, column: 16, }, end: Position { line: 276, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "paths", span: Span { start: Position { line: 277, column: 9, }, end: Position { line: 277, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "map", span: Span { start: Position { line: 277, column: 17, }, end: Position { line: 277, column: 20, }, }, }, ), arguments: [ Identifier( Identifier { id: "compressFirmware", span: Span { start: Position { line: 277, column: 21, }, end: Position { line: 277, column: 37, }, }, }, ), Identifier( Identifier { id: "list", span: Span { start: Position { line: 277, column: 38, }, end: Position { line: 277, column: 42, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "pathsToLink", span: Span { start: Position { line: 278, column: 9, }, end: Position { line: 278, column: 20, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "/lib/firmware", span: Span { start: Position { line: 278, column: 26, }, end: Position { line: 278, column: 39, }, }, }, ), ], span: Span { start: Position { line: 278, column: 25, }, end: Position { line: 278, column: 40, }, }, }, ), ], span: Span { start: Position { line: 278, column: 23, }, end: Position { line: 278, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ignoreCollisions", span: Span { start: Position { line: 279, column: 9, }, end: Position { line: 279, column: 25, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 279, column: 28, }, end: Position { line: 279, column: 32, }, }, }, ), }, ), ], span: Span { start: Position { line: 275, column: 35, }, end: Position { line: 280, column: 8, }, }, }, ), ], }, ), span: Span { start: Position { line: 275, column: 15, }, end: Position { line: 280, column: 8, }, }, }, ), }, ), ], span: Span { start: Position { line: 263, column: 34, }, end: Position { line: 281, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "networking", span: Span { start: Position { line: 283, column: 5, }, end: Position { line: 283, column: 15, }, }, }, ), Raw( PartRaw { content: "usePredictableInterfaceNames", span: Span { start: Position { line: 283, column: 16, }, end: Position { line: 283, column: 44, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 283, column: 47, }, end: Position { line: 283, column: 55, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 284, column: 7, }, end: Position { line: 284, column: 14, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 284, column: 17, }, end: Position { line: 284, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 285, column: 7, }, end: Position { line: 285, column: 11, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 285, column: 14, }, end: Position { line: 285, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 285, column: 20, }, end: Position { line: 285, column: 24, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 286, column: 7, }, end: Position { line: 286, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 286, column: 21, }, end: Position { line: 286, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 286, column: 25, }, end: Position { line: 286, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Whether to assign [predictable names to network interfaces](http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames).\nIf enabled, interfaces\nare assigned names that contain topology information\n(e.g. `wlp3s0`) and thus should be stable\nacross reboots. If disabled, names depend on the order in\nwhich interfaces are discovered by the kernel, which may\nchange randomly across reboots; for instance, you may find\n`eth0` and `eth1` flipping\nunpredictably.\n", span: Span { start: Position { line: 287, column: 1, }, end: Position { line: 296, column: 7, }, }, }, ), ], span: Span { start: Position { line: 286, column: 31, }, end: Position { line: 296, column: 9, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 283, column: 56, }, end: Position { line: 297, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 299, column: 5, }, end: Position { line: 299, column: 9, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 299, column: 10, }, end: Position { line: 299, column: 16, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 299, column: 17, }, end: Position { line: 299, column: 25, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 299, column: 26, }, end: Position { line: 299, column: 30, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "packages", span: Span { start: Position { line: 301, column: 7, }, end: Position { line: 301, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 301, column: 18, }, end: Position { line: 301, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 302, column: 9, }, end: Position { line: 302, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 302, column: 16, }, end: Position { line: 302, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listOf", span: Span { start: Position { line: 302, column: 22, }, end: Position { line: 302, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 302, column: 29, }, end: Position { line: 302, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 302, column: 35, }, end: Position { line: 302, column: 39, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 303, column: 9, }, end: Position { line: 303, column: 16, }, }, }, ), ], to: List( List { elements: [], span: Span { start: Position { line: 303, column: 19, }, end: Position { line: 303, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "visible", span: Span { start: Position { line: 304, column: 9, }, end: Position { line: 304, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 304, column: 19, }, end: Position { line: 304, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 305, column: 9, }, end: Position { line: 305, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 305, column: 23, }, end: Position { line: 305, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 305, column: 27, }, end: Position { line: 305, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "*This will only be used when systemd is used in stage 1.*\n\nList of packages containing {command}`udev` rules that will be copied to stage 1.\nAll files found in\n{file}`«pkg»/etc/udev/rules.d` and\n{file}`«pkg»/lib/udev/rules.d`\nwill be included.\n", span: Span { start: Position { line: 306, column: 1, }, end: Position { line: 313, column: 9, }, }, }, ), ], span: Span { start: Position { line: 305, column: 33, }, end: Position { line: 313, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 301, column: 27, }, end: Position { line: 314, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "binPackages", span: Span { start: Position { line: 316, column: 7, }, end: Position { line: 316, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 316, column: 21, }, end: Position { line: 316, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 317, column: 9, }, end: Position { line: 317, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 317, column: 16, }, end: Position { line: 317, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listOf", span: Span { start: Position { line: 317, column: 22, }, end: Position { line: 317, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 317, column: 29, }, end: Position { line: 317, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 317, column: 35, }, end: Position { line: 317, column: 39, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 318, column: 9, }, end: Position { line: 318, column: 16, }, }, }, ), ], to: List( List { elements: [], span: Span { start: Position { line: 318, column: 19, }, end: Position { line: 318, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "visible", span: Span { start: Position { line: 319, column: 9, }, end: Position { line: 319, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 319, column: 19, }, end: Position { line: 319, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 320, column: 9, }, end: Position { line: 320, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 320, column: 23, }, end: Position { line: 320, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 320, column: 27, }, end: Position { line: 320, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "*This will only be used when systemd is used in stage 1.*\n\nPackages to search for binaries that are referenced by the udev rules in stage 1.\nThis list always contains /bin of the initrd.\n", span: Span { start: Position { line: 321, column: 1, }, end: Position { line: 325, column: 9, }, }, }, ), ], span: Span { start: Position { line: 320, column: 33, }, end: Position { line: 325, column: 11, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "apply", span: Span { start: Position { line: 326, column: 9, }, end: Position { line: 326, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "map", span: Span { start: Position { line: 326, column: 17, }, end: Position { line: 326, column: 20, }, }, }, ), arguments: [ Identifier( Identifier { id: "getBin", span: Span { start: Position { line: 326, column: 21, }, end: Position { line: 326, column: 27, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 316, column: 30, }, end: Position { line: 327, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "rules", span: Span { start: Position { line: 329, column: 7, }, end: Position { line: 329, column: 12, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 329, column: 15, }, end: Position { line: 329, column: 23, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 330, column: 9, }, end: Position { line: 330, column: 16, }, }, }, ), ], to: String( String_ { parts: [], span: Span { start: Position { line: 330, column: 19, }, end: Position { line: 330, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 331, column: 9, }, end: Position { line: 331, column: 16, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"00:1D:60:B9:6D:4F\", KERNEL==\"eth*\", NAME=\"my_fast_network_card\"\n", span: Span { start: Position { line: 332, column: 1, }, end: Position { line: 333, column: 9, }, }, }, ), ], span: Span { start: Position { line: 331, column: 19, }, end: Position { line: 333, column: 11, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 334, column: 9, }, end: Position { line: 334, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 334, column: 16, }, end: Position { line: 334, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lines", span: Span { start: Position { line: 334, column: 22, }, end: Position { line: 334, column: 27, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 335, column: 9, }, end: Position { line: 335, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 335, column: 23, }, end: Position { line: 335, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 335, column: 27, }, end: Position { line: 335, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "{command}`udev` rules to include in the initrd\n*only*. They'll be written into file\n{file}`99-local.rules`. Thus they are read and applied\nafter the essential initrd rules.\n", span: Span { start: Position { line: 336, column: 1, }, end: Position { line: 340, column: 9, }, }, }, ), ], span: Span { start: Position { line: 335, column: 33, }, end: Position { line: 340, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 329, column: 24, }, end: Position { line: 341, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 299, column: 33, }, end: Position { line: 343, column: 6, }, }, }, ), }, ), ], span: Span { start: Position { line: 194, column: 13, }, end: Position { line: 345, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "config", span: Span { start: Position { line: 350, column: 3, }, end: Position { line: 350, column: 9, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 350, column: 12, }, end: Position { line: 350, column: 16, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 350, column: 17, }, end: Position { line: 350, column: 20, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 350, column: 21, }, end: Position { line: 350, column: 27, }, }, }, ), ], default: None, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 352, column: 5, }, end: Position { line: 352, column: 13, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 352, column: 14, }, end: Position { line: 352, column: 18, }, }, }, ), Raw( PartRaw { content: "extraRules", span: Span { start: Position { line: 352, column: 19, }, end: Position { line: 352, column: 29, }, }, }, ), ], to: Identifier( Identifier { id: "nixosRules", span: Span { start: Position { line: 352, column: 32, }, end: Position { line: 352, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 354, column: 5, }, end: Position { line: 354, column: 13, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 354, column: 14, }, end: Position { line: 354, column: 18, }, }, }, ), Raw( PartRaw { content: "packages", span: Span { start: Position { line: 354, column: 19, }, end: Position { line: 354, column: 27, }, }, }, ), ], to: List( List { elements: [ Identifier( Identifier { id: "extraUdevRules", span: Span { start: Position { line: 354, column: 32, }, end: Position { line: 354, column: 46, }, }, }, ), Identifier( Identifier { id: "extraHwdbFile", span: Span { start: Position { line: 354, column: 47, }, end: Position { line: 354, column: 60, }, }, }, ), ], span: Span { start: Position { line: 354, column: 30, }, end: Position { line: 354, column: 62, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 356, column: 5, }, end: Position { line: 356, column: 13, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 356, column: 14, }, end: Position { line: 356, column: 18, }, }, }, ), Raw( PartRaw { content: "path", span: Span { start: Position { line: 356, column: 19, }, end: Position { line: 356, column: 23, }, }, }, ), ], to: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 356, column: 28, }, end: Position { line: 356, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "coreutils", span: Span { start: Position { line: 356, column: 33, }, end: Position { line: 356, column: 42, }, }, }, ), ], default: None, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 356, column: 43, }, end: Position { line: 356, column: 47, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "gnused", span: Span { start: Position { line: 356, column: 48, }, end: Position { line: 356, column: 54, }, }, }, ), ], default: None, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 356, column: 55, }, end: Position { line: 356, column: 59, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "gnugrep", span: Span { start: Position { line: 356, column: 60, }, end: Position { line: 356, column: 67, }, }, }, ), ], default: None, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 356, column: 68, }, end: Position { line: 356, column: 72, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "util-linux", span: Span { start: Position { line: 356, column: 73, }, end: Position { line: 356, column: 83, }, }, }, ), ], default: None, }, ), Identifier( Identifier { id: "udev", span: Span { start: Position { line: 356, column: 84, }, end: Position { line: 356, column: 88, }, }, }, ), ], span: Span { start: Position { line: 356, column: 26, }, end: Position { line: 356, column: 90, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 358, column: 5, }, end: Position { line: 358, column: 9, }, }, }, ), Raw( PartRaw { content: "kernelParams", span: Span { start: Position { line: 358, column: 10, }, end: Position { line: 358, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 358, column: 25, }, end: Position { line: 358, column: 29, }, }, }, ), arguments: [ UnaryOperation( UnaryOperation { operator: Not, operand: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 358, column: 32, }, end: Position { line: 358, column: 38, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "networking", span: Span { start: Position { line: 358, column: 39, }, end: Position { line: 358, column: 49, }, }, }, ), Raw( PartRaw { content: "usePredictableInterfaceNames", span: Span { start: Position { line: 358, column: 50, }, end: Position { line: 358, column: 78, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 358, column: 31, }, end: Position { line: 358, column: 78, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "net.ifnames=0", span: Span { start: Position { line: 358, column: 83, }, end: Position { line: 358, column: 96, }, }, }, ), ], span: Span { start: Position { line: 358, column: 82, }, end: Position { line: 358, column: 97, }, }, }, ), ], span: Span { start: Position { line: 358, column: 80, }, end: Position { line: 358, column: 99, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 360, column: 5, }, end: Position { line: 360, column: 9, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 360, column: 10, }, end: Position { line: 360, column: 16, }, }, }, ), Raw( PartRaw { content: "extraUdevRulesCommands", span: Span { start: Position { line: 360, column: 17, }, end: Position { line: 360, column: 39, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 360, column: 42, }, end: Position { line: 360, column: 56, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: UnaryOperation( UnaryOperation { operator: Not, operand: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 360, column: 59, }, end: Position { line: 360, column: 65, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 360, column: 66, }, end: Position { line: 360, column: 70, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 360, column: 71, }, end: Position { line: 360, column: 77, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 360, column: 78, }, end: Position { line: 360, column: 85, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 360, column: 86, }, end: Position { line: 360, column: 92, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 360, column: 58, }, end: Position { line: 360, column: 92, }, }, }, ), operator: LogicalAnd, right: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 360, column: 96, }, end: Position { line: 360, column: 102, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 360, column: 103, }, end: Position { line: 360, column: 107, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 360, column: 108, }, end: Position { line: 360, column: 114, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 360, column: 115, }, end: Position { line: 360, column: 123, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 360, column: 124, }, end: Position { line: 360, column: 128, }, }, }, ), Raw( PartRaw { content: "rules", span: Span { start: Position { line: 360, column: 129, }, end: Position { line: 360, column: 134, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: String( String_ { parts: [], span: Span { start: Position { line: 360, column: 138, }, end: Position { line: 360, column: 140, }, }, }, ), }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "cat <<'EOF' > $out/99-local.rules\n", span: Span { start: Position { line: 362, column: 1, }, end: Position { line: 363, column: 9, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 363, column: 11, }, end: Position { line: 363, column: 17, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 363, column: 18, }, end: Position { line: 363, column: 22, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 363, column: 23, }, end: Position { line: 363, column: 29, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 363, column: 30, }, end: Position { line: 363, column: 38, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 363, column: 39, }, end: Position { line: 363, column: 43, }, }, }, ), Raw( PartRaw { content: "rules", span: Span { start: Position { line: 363, column: 44, }, end: Position { line: 363, column: 49, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "\nEOF\n", span: Span { start: Position { line: 362, column: 1, }, end: Position { line: 365, column: 7, }, }, }, ), ], span: Span { start: Position { line: 361, column: 7, }, end: Position { line: 365, column: 9, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 367, column: 5, }, end: Position { line: 367, column: 9, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 367, column: 10, }, end: Position { line: 367, column: 16, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 367, column: 17, }, end: Position { line: 367, column: 24, }, }, }, ), Raw( PartRaw { content: "additionalUpstreamUnits", span: Span { start: Position { line: 367, column: 25, }, end: Position { line: 367, column: 48, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "systemd-udevd-control.socket", span: Span { start: Position { line: 369, column: 8, }, end: Position { line: 369, column: 36, }, }, }, ), ], span: Span { start: Position { line: 369, column: 7, }, end: Position { line: 369, column: 37, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "systemd-udevd-kernel.socket", span: Span { start: Position { line: 370, column: 8, }, end: Position { line: 370, column: 35, }, }, }, ), ], span: Span { start: Position { line: 370, column: 7, }, end: Position { line: 370, column: 36, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "systemd-udevd.service", span: Span { start: Position { line: 371, column: 8, }, end: Position { line: 371, column: 29, }, }, }, ), ], span: Span { start: Position { line: 371, column: 7, }, end: Position { line: 371, column: 30, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "systemd-udev-settle.service", span: Span { start: Position { line: 372, column: 8, }, end: Position { line: 372, column: 35, }, }, }, ), ], span: Span { start: Position { line: 372, column: 7, }, end: Position { line: 372, column: 36, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "systemd-udev-trigger.service", span: Span { start: Position { line: 373, column: 8, }, end: Position { line: 373, column: 36, }, }, }, ), ], span: Span { start: Position { line: 373, column: 7, }, end: Position { line: 373, column: 37, }, }, }, ), ], span: Span { start: Position { line: 367, column: 51, }, end: Position { line: 374, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 375, column: 5, }, end: Position { line: 375, column: 9, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 375, column: 10, }, end: Position { line: 375, column: 16, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 375, column: 17, }, end: Position { line: 375, column: 24, }, }, }, ), Raw( PartRaw { content: "storePaths", span: Span { start: Position { line: 375, column: 25, }, end: Position { line: 375, column: 35, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: List( List { elements: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 376, column: 10, }, end: Position { line: 376, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 376, column: 17, }, end: Position { line: 376, column: 21, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 376, column: 22, }, end: Position { line: 376, column: 28, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 376, column: 29, }, end: Position { line: 376, column: 36, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 376, column: 37, }, end: Position { line: 376, column: 44, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/systemd/systemd-udevd", span: Span { start: Position { line: 376, column: 8, }, end: Position { line: 376, column: 71, }, }, }, ), ], span: Span { start: Position { line: 376, column: 7, }, end: Position { line: 376, column: 72, }, }, }, ), String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 377, column: 10, }, end: Position { line: 377, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 377, column: 17, }, end: Position { line: 377, column: 21, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 377, column: 22, }, end: Position { line: 377, column: 28, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 377, column: 29, }, end: Position { line: 377, column: 36, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 377, column: 37, }, end: Position { line: 377, column: 44, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/udev/ata_id", span: Span { start: Position { line: 377, column: 8, }, end: Position { line: 377, column: 61, }, }, }, ), ], span: Span { start: Position { line: 377, column: 7, }, end: Position { line: 377, column: 62, }, }, }, ), String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 378, column: 10, }, end: Position { line: 378, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 378, column: 17, }, end: Position { line: 378, column: 21, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 378, column: 22, }, end: Position { line: 378, column: 28, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 378, column: 29, }, end: Position { line: 378, column: 36, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 378, column: 37, }, end: Position { line: 378, column: 44, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/udev/cdrom_id", span: Span { start: Position { line: 378, column: 8, }, end: Position { line: 378, column: 63, }, }, }, ), ], span: Span { start: Position { line: 378, column: 7, }, end: Position { line: 378, column: 64, }, }, }, ), String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 379, column: 10, }, end: Position { line: 379, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 379, column: 17, }, end: Position { line: 379, column: 21, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 379, column: 22, }, end: Position { line: 379, column: 28, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 379, column: 29, }, end: Position { line: 379, column: 36, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 379, column: 37, }, end: Position { line: 379, column: 44, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/udev/scsi_id", span: Span { start: Position { line: 379, column: 8, }, end: Position { line: 379, column: 62, }, }, }, ), ], span: Span { start: Position { line: 379, column: 7, }, end: Position { line: 379, column: 63, }, }, }, ), String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 380, column: 10, }, end: Position { line: 380, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 380, column: 17, }, end: Position { line: 380, column: 21, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 380, column: 22, }, end: Position { line: 380, column: 28, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 380, column: 29, }, end: Position { line: 380, column: 36, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 380, column: 37, }, end: Position { line: 380, column: 44, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/udev/rules.d", span: Span { start: Position { line: 380, column: 8, }, end: Position { line: 380, column: 62, }, }, }, ), ], span: Span { start: Position { line: 380, column: 7, }, end: Position { line: 380, column: 63, }, }, }, ), ], span: Span { start: Position { line: 375, column: 38, }, end: Position { line: 381, column: 6, }, }, }, ), operator: Concatenation, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "map", span: Span { start: Position { line: 381, column: 10, }, end: Position { line: 381, column: 13, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "x", }, ), body: String( String_ { parts: [ Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "x", span: Span { start: Position { line: 381, column: 21, }, end: Position { line: 381, column: 22, }, }, }, ), }, ), Raw( PartRaw { content: "/bin", span: Span { start: Position { line: 381, column: 19, }, end: Position { line: 381, column: 27, }, }, }, ), ], span: Span { start: Position { line: 381, column: 18, }, end: Position { line: 381, column: 28, }, }, }, ), span: Span { start: Position { line: 381, column: 15, }, end: Position { line: 381, column: 28, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 381, column: 30, }, end: Position { line: 381, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 381, column: 37, }, end: Position { line: 381, column: 41, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 381, column: 42, }, end: Position { line: 381, column: 48, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 381, column: 49, }, end: Position { line: 381, column: 57, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 381, column: 58, }, end: Position { line: 381, column: 62, }, }, }, ), Raw( PartRaw { content: "binPackages", span: Span { start: Position { line: 381, column: 63, }, end: Position { line: 381, column: 74, }, }, }, ), ], default: None, }, ), ], }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 384, column: 5, }, end: Position { line: 384, column: 9, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 384, column: 10, }, end: Position { line: 384, column: 16, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 384, column: 17, }, end: Position { line: 384, column: 24, }, }, }, ), Raw( PartRaw { content: "contents", span: Span { start: Position { line: 384, column: 25, }, end: Position { line: 384, column: 33, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "/etc/udev/rules.d", span: Span { start: Position { line: 385, column: 8, }, end: Position { line: 385, column: 25, }, }, }, ), ], span: Span { start: Position { line: 385, column: 7, }, end: Position { line: 385, column: 26, }, }, }, ), }, ), Raw( PartRaw { content: "source", span: Span { start: Position { line: 385, column: 27, }, end: Position { line: 385, column: 33, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "udevRulesFor", span: Span { start: Position { line: 385, column: 36, }, end: Position { line: 385, column: 48, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 386, column: 9, }, end: Position { line: 386, column: 13, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "initrd-udev-rules", span: Span { start: Position { line: 386, column: 17, }, end: Position { line: 386, column: 34, }, }, }, ), ], span: Span { start: Position { line: 386, column: 16, }, end: Position { line: 386, column: 35, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "initrdBin", span: Span { start: Position { line: 387, column: 9, }, end: Position { line: 387, column: 18, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 387, column: 21, }, end: Position { line: 387, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 387, column: 28, }, end: Position { line: 387, column: 32, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 387, column: 33, }, end: Position { line: 387, column: 39, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 387, column: 40, }, end: Position { line: 387, column: 47, }, }, }, ), Raw( PartRaw { content: "contents", span: Span { start: Position { line: 387, column: 48, }, end: Position { line: 387, column: 56, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "/bin", span: Span { start: Position { line: 387, column: 58, }, end: Position { line: 387, column: 62, }, }, }, ), ], span: Span { start: Position { line: 387, column: 57, }, end: Position { line: 387, column: 63, }, }, }, ), }, ), Raw( PartRaw { content: "source", span: Span { start: Position { line: 387, column: 64, }, end: Position { line: 387, column: 70, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "udevPackages", span: Span { start: Position { line: 388, column: 9, }, end: Position { line: 388, column: 21, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 388, column: 24, }, end: Position { line: 388, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 388, column: 31, }, end: Position { line: 388, column: 35, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 388, column: 36, }, end: Position { line: 388, column: 42, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 388, column: 43, }, end: Position { line: 388, column: 51, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 388, column: 52, }, end: Position { line: 388, column: 56, }, }, }, ), Raw( PartRaw { content: "packages", span: Span { start: Position { line: 388, column: 57, }, end: Position { line: 388, column: 65, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "udevPath", span: Span { start: Position { line: 389, column: 9, }, end: Position { line: 389, column: 17, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 389, column: 20, }, end: Position { line: 389, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 389, column: 27, }, end: Position { line: 389, column: 31, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 389, column: 32, }, end: Position { line: 389, column: 38, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 389, column: 39, }, end: Position { line: 389, column: 46, }, }, }, ), Raw( PartRaw { content: "contents", span: Span { start: Position { line: 389, column: 47, }, end: Position { line: 389, column: 55, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "/bin", span: Span { start: Position { line: 389, column: 57, }, end: Position { line: 389, column: 61, }, }, }, ), ], span: Span { start: Position { line: 389, column: 56, }, end: Position { line: 389, column: 62, }, }, }, ), }, ), Raw( PartRaw { content: "source", span: Span { start: Position { line: 389, column: 63, }, end: Position { line: 389, column: 69, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "udev", span: Span { start: Position { line: 390, column: 9, }, end: Position { line: 390, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 390, column: 16, }, end: Position { line: 390, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 390, column: 23, }, end: Position { line: 390, column: 27, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 390, column: 28, }, end: Position { line: 390, column: 34, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 390, column: 35, }, end: Position { line: 390, column: 42, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 390, column: 43, }, end: Position { line: 390, column: 50, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 391, column: 9, }, end: Position { line: 391, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 391, column: 19, }, end: Position { line: 391, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 391, column: 26, }, end: Position { line: 391, column: 30, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 391, column: 31, }, end: Position { line: 391, column: 37, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 391, column: 38, }, end: Position { line: 391, column: 45, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 391, column: 46, }, end: Position { line: 391, column: 53, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "binPackages", span: Span { start: Position { line: 392, column: 9, }, end: Position { line: 392, column: 20, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 392, column: 23, }, end: Position { line: 392, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 392, column: 30, }, end: Position { line: 392, column: 34, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 392, column: 35, }, end: Position { line: 392, column: 41, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 392, column: 42, }, end: Position { line: 392, column: 50, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 392, column: 51, }, end: Position { line: 392, column: 55, }, }, }, ), Raw( PartRaw { content: "binPackages", span: Span { start: Position { line: 392, column: 56, }, end: Position { line: 392, column: 67, }, }, }, ), ], default: None, }, ), operator: Concatenation, right: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 392, column: 73, }, end: Position { line: 392, column: 79, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 392, column: 80, }, end: Position { line: 392, column: 84, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 392, column: 85, }, end: Position { line: 392, column: 91, }, }, }, ), Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 392, column: 92, }, end: Position { line: 392, column: 99, }, }, }, ), Raw( PartRaw { content: "contents", span: Span { start: Position { line: 392, column: 100, }, end: Position { line: 392, column: 108, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "/bin", span: Span { start: Position { line: 392, column: 110, }, end: Position { line: 392, column: 114, }, }, }, ), ], span: Span { start: Position { line: 392, column: 109, }, end: Position { line: 392, column: 115, }, }, }, ), }, ), Raw( PartRaw { content: "source", span: Span { start: Position { line: 392, column: 116, }, end: Position { line: 392, column: 122, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 392, column: 71, }, end: Position { line: 392, column: 124, }, }, }, ), }, ), }, ), ], span: Span { start: Position { line: 385, column: 49, }, end: Position { line: 393, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "/etc/systemd/network", span: Span { start: Position { line: 394, column: 8, }, end: Position { line: 394, column: 28, }, }, }, ), ], span: Span { start: Position { line: 394, column: 7, }, end: Position { line: 394, column: 29, }, }, }, ), }, ), Raw( PartRaw { content: "source", span: Span { start: Position { line: 394, column: 30, }, end: Position { line: 394, column: 36, }, }, }, ), ], to: Identifier( Identifier { id: "initrdLinkUnits", span: Span { start: Position { line: 394, column: 39, }, end: Position { line: 394, column: 54, }, }, }, ), }, ), ], span: Span { start: Position { line: 384, column: 36, }, end: Position { line: 395, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 397, column: 5, }, end: Position { line: 397, column: 9, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 397, column: 10, }, end: Position { line: 397, column: 16, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 397, column: 17, }, end: Position { line: 397, column: 25, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 397, column: 26, }, end: Position { line: 397, column: 30, }, }, }, ), Raw( PartRaw { content: "packages", span: Span { start: Position { line: 397, column: 31, }, end: Position { line: 397, column: 39, }, }, }, ), ], to: List( List { elements: [ Identifier( Identifier { id: "initrdUdevRules", span: Span { start: Position { line: 398, column: 7, }, end: Position { line: 398, column: 22, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 399, column: 8, }, end: Position { line: 399, column: 12, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 399, column: 14, }, end: Position { line: 399, column: 20, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 399, column: 21, }, end: Position { line: 399, column: 25, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 399, column: 26, }, end: Position { line: 399, column: 32, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 399, column: 33, }, end: Position { line: 399, column: 41, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 399, column: 42, }, end: Position { line: 399, column: 46, }, }, }, ), Raw( PartRaw { content: "rules", span: Span { start: Position { line: 399, column: 47, }, end: Position { line: 399, column: 52, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: String( String_ { parts: [], span: Span { start: Position { line: 399, column: 56, }, end: Position { line: 399, column: 58, }, }, }, ), }, ), FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 399, column: 61, }, end: Position { line: 399, column: 65, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeTextFile", span: Span { start: Position { line: 399, column: 66, }, end: Position { line: 399, column: 79, }, }, }, ), ], default: None, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 400, column: 9, }, end: Position { line: 400, column: 13, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "initrd-udev-rules", span: Span { start: Position { line: 400, column: 17, }, end: Position { line: 400, column: 34, }, }, }, ), ], span: Span { start: Position { line: 400, column: 16, }, end: Position { line: 400, column: 35, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "destination", span: Span { start: Position { line: 401, column: 9, }, end: Position { line: 401, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/etc/udev/rules.d/99-local.rules", span: Span { start: Position { line: 401, column: 24, }, end: Position { line: 401, column: 56, }, }, }, ), ], span: Span { start: Position { line: 401, column: 23, }, end: Position { line: 401, column: 57, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "text", span: Span { start: Position { line: 402, column: 9, }, end: Position { line: 402, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 402, column: 16, }, end: Position { line: 402, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 402, column: 23, }, end: Position { line: 402, column: 27, }, }, }, ), Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 402, column: 28, }, end: Position { line: 402, column: 34, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 402, column: 35, }, end: Position { line: 402, column: 43, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 402, column: 44, }, end: Position { line: 402, column: 48, }, }, }, ), Raw( PartRaw { content: "rules", span: Span { start: Position { line: 402, column: 49, }, end: Position { line: 402, column: 54, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 399, column: 80, }, end: Position { line: 403, column: 8, }, }, }, ), ], }, ), ], }, ), ], span: Span { start: Position { line: 397, column: 42, }, end: Position { line: 404, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "environment", span: Span { start: Position { line: 406, column: 5, }, end: Position { line: 406, column: 16, }, }, }, ), Raw( PartRaw { content: "etc", span: Span { start: Position { line: 406, column: 17, }, end: Position { line: 406, column: 20, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "udev/rules.d", span: Span { start: Position { line: 408, column: 10, }, end: Position { line: 408, column: 22, }, }, }, ), ], span: Span { start: Position { line: 408, column: 9, }, end: Position { line: 408, column: 23, }, }, }, ), }, ), Raw( PartRaw { content: "source", span: Span { start: Position { line: 408, column: 24, }, end: Position { line: 408, column: 30, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "udevRulesFor", span: Span { start: Position { line: 408, column: 33, }, end: Position { line: 408, column: 45, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 409, column: 11, }, end: Position { line: 409, column: 15, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "udev-rules", span: Span { start: Position { line: 409, column: 19, }, end: Position { line: 409, column: 29, }, }, }, ), ], span: Span { start: Position { line: 409, column: 18, }, end: Position { line: 409, column: 30, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "udevPackages", span: Span { start: Position { line: 410, column: 11, }, end: Position { line: 410, column: 23, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 410, column: 26, }, end: Position { line: 410, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "packages", span: Span { start: Position { line: 410, column: 30, }, end: Position { line: 410, column: 38, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 411, column: 11, }, end: Position { line: 411, column: 18, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 411, column: 21, }, end: Position { line: 411, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 411, column: 28, }, end: Position { line: 411, column: 35, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 411, column: 36, }, end: Position { line: 411, column: 43, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "binPackages", span: Span { start: Position { line: 412, column: 11, }, end: Position { line: 412, column: 22, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 412, column: 25, }, end: Position { line: 412, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "packages", span: Span { start: Position { line: 412, column: 29, }, end: Position { line: 412, column: 37, }, }, }, ), ], default: None, }, ), }, ), Inherit( BindingInherit { from: None, attributes: [ Raw( PartRaw { content: "udevPath", span: Span { start: Position { line: 413, column: 19, }, end: Position { line: 413, column: 27, }, }, }, ), Raw( PartRaw { content: "udev", span: Span { start: Position { line: 413, column: 28, }, end: Position { line: 413, column: 32, }, }, }, ), ], span: Span { start: Position { line: 408, column: 47, }, end: Position { line: 413, column: 33, }, }, }, ), ], span: Span { start: Position { line: 408, column: 46, }, end: Position { line: 414, column: 10, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "udev/hwdb.bin", span: Span { start: Position { line: 415, column: 10, }, end: Position { line: 415, column: 23, }, }, }, ), ], span: Span { start: Position { line: 415, column: 9, }, end: Position { line: 415, column: 24, }, }, }, ), }, ), Raw( PartRaw { content: "source", span: Span { start: Position { line: 415, column: 25, }, end: Position { line: 415, column: 31, }, }, }, ), ], to: Identifier( Identifier { id: "hwdbBin", span: Span { start: Position { line: 415, column: 34, }, end: Position { line: 415, column: 41, }, }, }, ), }, ), ], span: Span { start: Position { line: 407, column: 7, }, end: Position { line: 416, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "system", span: Span { start: Position { line: 418, column: 5, }, end: Position { line: 418, column: 11, }, }, }, ), Raw( PartRaw { content: "requiredKernelConfig", span: Span { start: Position { line: 418, column: 12, }, end: Position { line: 418, column: 32, }, }, }, ), ], to: With( With { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 418, column: 40, }, end: Position { line: 418, column: 46, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lib", span: Span { start: Position { line: 418, column: 47, }, end: Position { line: 418, column: 50, }, }, }, ), Raw( PartRaw { content: "kernelConfig", span: Span { start: Position { line: 418, column: 51, }, end: Position { line: 418, column: 63, }, }, }, ), ], default: None, }, ), target: List( List { elements: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 419, column: 8, }, end: Position { line: 419, column: 17, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "UNIX", span: Span { start: Position { line: 419, column: 19, }, end: Position { line: 419, column: 23, }, }, }, ), ], span: Span { start: Position { line: 419, column: 18, }, end: Position { line: 419, column: 24, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isYes", span: Span { start: Position { line: 420, column: 8, }, end: Position { line: 420, column: 13, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "INOTIFY_USER", span: Span { start: Position { line: 420, column: 15, }, end: Position { line: 420, column: 27, }, }, }, ), ], span: Span { start: Position { line: 420, column: 14, }, end: Position { line: 420, column: 28, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isYes", span: Span { start: Position { line: 421, column: 8, }, end: Position { line: 421, column: 13, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "NET", span: Span { start: Position { line: 421, column: 15, }, end: Position { line: 421, column: 18, }, }, }, ), ], span: Span { start: Position { line: 421, column: 14, }, end: Position { line: 421, column: 19, }, }, }, ), ], }, ), ], span: Span { start: Position { line: 418, column: 65, }, end: Position { line: 422, column: 6, }, }, }, ), span: Span { start: Position { line: 418, column: 35, }, end: Position { line: 422, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "environment", span: Span { start: Position { line: 425, column: 5, }, end: Position { line: 425, column: 16, }, }, }, ), Raw( PartRaw { content: "etc", span: Span { start: Position { line: 425, column: 17, }, end: Position { line: 425, column: 20, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "modprobe.d/firmware.conf", span: Span { start: Position { line: 425, column: 22, }, end: Position { line: 425, column: 46, }, }, }, ), ], span: Span { start: Position { line: 425, column: 21, }, end: Position { line: 425, column: 47, }, }, }, ), }, ), Raw( PartRaw { content: "text", span: Span { start: Position { line: 425, column: 48, }, end: Position { line: 425, column: 52, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "options firmware_class path=", span: Span { start: Position { line: 425, column: 56, }, end: Position { line: 425, column: 111, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 425, column: 86, }, end: Position { line: 425, column: 92, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "hardware", span: Span { start: Position { line: 425, column: 93, }, end: Position { line: 425, column: 101, }, }, }, ), Raw( PartRaw { content: "firmware", span: Span { start: Position { line: 425, column: 102, }, end: Position { line: 425, column: 110, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/firmware", span: Span { start: Position { line: 425, column: 56, }, end: Position { line: 425, column: 124, }, }, }, ), ], span: Span { start: Position { line: 425, column: 55, }, end: Position { line: 425, column: 125, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "system", span: Span { start: Position { line: 427, column: 5, }, end: Position { line: 427, column: 11, }, }, }, ), Raw( PartRaw { content: "activationScripts", span: Span { start: Position { line: 427, column: 12, }, end: Position { line: 427, column: 29, }, }, }, ), Raw( PartRaw { content: "udevd", span: Span { start: Position { line: 427, column: 30, }, end: Position { line: 427, column: 35, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "# The deprecated hotplug uevent helper is not used anymore\nif [ -e /proc/sys/kernel/hotplug ]; then\n echo \"\" > /proc/sys/kernel/hotplug\nfi\n\n# Allow the kernel to find our firmware.\nif [ -e /sys/module/firmware_class/parameters/path ]; then\n echo -n \"", span: Span { start: Position { line: 429, column: 1, }, end: Position { line: 436, column: 20, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 436, column: 22, }, end: Position { line: 436, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "hardware", span: Span { start: Position { line: 436, column: 29, }, end: Position { line: 436, column: 37, }, }, }, ), Raw( PartRaw { content: "firmware", span: Span { start: Position { line: 436, column: 38, }, end: Position { line: 436, column: 46, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/firmware\" > /sys/module/firmware_class/parameters/path\nfi\n", span: Span { start: Position { line: 429, column: 1, }, end: Position { line: 438, column: 7, }, }, }, ), ], span: Span { start: Position { line: 428, column: 7, }, end: Position { line: 438, column: 9, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 440, column: 5, }, end: Position { line: 440, column: 12, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 440, column: 13, }, end: Position { line: 440, column: 21, }, }, }, ), Raw( PartRaw { content: "systemd-udevd", span: Span { start: Position { line: 440, column: 22, }, end: Position { line: 440, column: 35, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "restartTriggers", span: Span { start: Position { line: 441, column: 9, }, end: Position { line: 441, column: 24, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 441, column: 27, }, end: Position { line: 441, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "packages", span: Span { start: Position { line: 441, column: 31, }, end: Position { line: 441, column: 39, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 441, column: 7, }, end: Position { line: 442, column: 8, }, }, }, ), }, ), ], span: Span { start: Position { line: 350, column: 28, }, end: Position { line: 444, column: 4, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "imports", span: Span { start: Position { line: 446, column: 3, }, end: Position { line: 446, column: 10, }, }, }, ), ], to: List( List { elements: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkRenamedOptionModule", span: Span { start: Position { line: 447, column: 6, }, end: Position { line: 447, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 447, column: 31, }, end: Position { line: 447, column: 39, }, }, }, ), ], span: Span { start: Position { line: 447, column: 30, }, end: Position { line: 447, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "udev", span: Span { start: Position { line: 447, column: 42, }, end: Position { line: 447, column: 46, }, }, }, ), ], span: Span { start: Position { line: 447, column: 41, }, end: Position { line: 447, column: 47, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "initrdRules", span: Span { start: Position { line: 447, column: 49, }, end: Position { line: 447, column: 60, }, }, }, ), ], span: Span { start: Position { line: 447, column: 48, }, end: Position { line: 447, column: 61, }, }, }, ), ], span: Span { start: Position { line: 447, column: 28, }, end: Position { line: 447, column: 63, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 447, column: 67, }, end: Position { line: 447, column: 71, }, }, }, ), ], span: Span { start: Position { line: 447, column: 66, }, end: Position { line: 447, column: 72, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "initrd", span: Span { start: Position { line: 447, column: 74, }, end: Position { line: 447, column: 80, }, }, }, ), ], span: Span { start: Position { line: 447, column: 73, }, end: Position { line: 447, column: 81, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 447, column: 83, }, end: Position { line: 447, column: 91, }, }, }, ), ], span: Span { start: Position { line: 447, column: 82, }, end: Position { line: 447, column: 92, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "udev", span: Span { start: Position { line: 447, column: 94, }, end: Position { line: 447, column: 98, }, }, }, ), ], span: Span { start: Position { line: 447, column: 93, }, end: Position { line: 447, column: 99, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "rules", span: Span { start: Position { line: 447, column: 101, }, end: Position { line: 447, column: 106, }, }, }, ), ], span: Span { start: Position { line: 447, column: 100, }, end: Position { line: 447, column: 107, }, }, }, ), ], span: Span { start: Position { line: 447, column: 64, }, end: Position { line: 447, column: 109, }, }, }, ), ], }, ), ], span: Span { start: Position { line: 446, column: 13, }, end: Position { line: 448, column: 4, }, }, }, ), }, ), ], span: Span { start: Position { line: 190, column: 1, }, end: Position { line: 449, column: 2, }, }, }, ), span: Span { start: Position { line: 5, column: 1, }, end: Position { line: 449, column: 2, }, }, }, ), span: Span { start: Position { line: 3, column: 1, }, end: Position { line: 449, column: 2, }, }, }, ), span: Span { start: Position { line: 1, column: 1, }, end: Position { line: 449, column: 2, }, }, }, )