···1{ lib }:
2- let inherit (lib.attrsets) mapAttrs; in
000000000000000000034-rec {
5 doubles = import ./doubles.nix { inherit lib; };
6 parse = import ./parse.nix { inherit lib; };
7 inspect = import ./inspect.nix { inherit lib; };
···24 both arguments have been `elaborate`-d.
25 */
26 equals =
27- let removeFunctions = a: lib.filterAttrs (_: v: !builtins.isFunction v) a;
28 in a: b: removeFunctions a == removeFunctions b;
2930 /* List of all Nix system doubles the nixpkgs flake will expose the package set
···41 # clearly preferred, and to prevent cycles. A simpler fixed point where the RHS
42 # always just used `final.*` would fail on both counts.
43 elaborate = args': let
44- args = if lib.isString args' then { system = args'; }
45 else args';
4647 # TODO: deprecate args.rustc in favour of args.rust after 23.05 is EOL.
···96 then "lib64"
97 else "lib"
98 else null;
99- extensions = lib.optionalAttrs final.hasSharedLibraries {
100 sharedLibrary =
101 if final.isDarwin then ".dylib"
102 else if final.isWindows then ".dll"
···134 # uname -m
135 processor =
136 if final.isPower64
137- then "ppc64${lib.optionalString final.isLittleEndian "le"}"
138 else if final.isPower
139- then "ppc${lib.optionalString final.isLittleEndian "le"}"
140 else if final.isMips64
141 then "mips64" # endianness is *not* included on mips64
142 else final.parsed.cpu.name;
···202 else if final.isS390 && !final.isS390x then null
203 else if final.isx86_64 then "x86_64"
204 else if final.isx86 then "i386"
205- else if final.isMips64n32 then "mipsn32${lib.optionalString final.isLittleEndian "el"}"
206- else if final.isMips64 then "mips64${lib.optionalString final.isLittleEndian "el"}"
207 else final.uname.processor;
208209 # Name used by UEFI for architectures.
···259 if pkgs.stdenv.hostPlatform.canExecute final
260 then "${pkgs.runtimeShell} -c '\"$@\"' --"
261 else if final.isWindows
262- then "${wine}/bin/wine${lib.optionalString (final.parsed.cpu.bits == 64) "64"}"
263 else if final.isLinux && pkgs.stdenv.hostPlatform.isLinux && final.qemuArch != null
264 then "${qemu-user}/bin/qemu-${final.qemuArch}"
265 else if final.isWasi
···310 let
311 f = args.rustc.platform.target-family;
312 in
313- if builtins.isList f then f else [ f ]
314 )
315- else lib.optional final.isUnix "unix"
316- ++ lib.optional final.isWindows "windows";
317318 # https://doc.rust-lang.org/reference/conditional-compilation.html#target_vendor
319 vendor = let
···337 vendor_ = final.rust.platform.vendor;
338 # TODO: deprecate args.rustc in favour of args.rust after 23.05 is EOL.
339 in args.rust.rustcTarget or args.rustc.config
340- or "${cpu_}-${vendor_}-${kernel.name}${lib.optionalString (abi.name != "unknown") "-${abi.name}"}";
341342 # The name of the rust target if it is standard, or the json file
343 # containing the custom target spec.
344 rustcTargetSpec = rust.rustcTargetSpec or (
345 /**/ if rust ? platform
346- then builtins.toFile (final.rust.rustcTarget + ".json") (builtins.toJSON rust.platform)
347 else final.rust.rustcTarget);
348349 # The name of the rust target if it is standard, or the
···352 #
353 # This is the name used by Cargo for target subdirectories.
354 cargoShortTarget =
355- lib.removeSuffix ".json" (baseNameOf "${final.rust.rustcTargetSpec}");
356357 # When used as part of an environment variable name, triples are
358 # uppercased and have all hyphens replaced by underscores:
···360 # https://github.com/rust-lang/cargo/pull/9169
361 # https://github.com/rust-lang/cargo/issues/8285#issuecomment-634202431
362 cargoEnvVarTarget =
363- lib.strings.replaceStrings ["-"] ["_"]
364- (lib.strings.toUpper final.rust.cargoShortTarget);
365366 # True if the target is no_std
367 # https://github.com/rust-lang/rust/blob/2e44c17c12cec45b6a682b1e53a04ac5b5fcc9d2/src/bootstrap/config.rs#L415-L421
368 isNoStdTarget =
369- builtins.any (t: lib.hasInfix t final.rust.rustcTarget) ["-none" "nvptx" "switch" "-uefi"];
370 };
371 };
372 in assert final.useAndroidPrebuilt -> final.isAndroid;
373- assert lib.foldl
374 (pass: { assertion, message }:
375 if assertion final
376 then pass
···378 true
379 (final.parsed.abi.assertions or []);
380 final;
0000000000000000381}
···1{ lib }:
2+3+let
4+ inherit (lib)
5+ any
6+ filterAttrs
7+ foldl
8+ hasInfix
9+ isFunction
10+ isList
11+ isString
12+ mapAttrs
13+ optional
14+ optionalAttrs
15+ optionalString
16+ removeSuffix
17+ replaceStrings
18+ toUpper
19+ ;
20+21+ inherit (lib.strings) toJSON;
22023 doubles = import ./doubles.nix { inherit lib; };
24 parse = import ./parse.nix { inherit lib; };
25 inspect = import ./inspect.nix { inherit lib; };
···42 both arguments have been `elaborate`-d.
43 */
44 equals =
45+ let removeFunctions = a: filterAttrs (_: v: !isFunction v) a;
46 in a: b: removeFunctions a == removeFunctions b;
4748 /* List of all Nix system doubles the nixpkgs flake will expose the package set
···59 # clearly preferred, and to prevent cycles. A simpler fixed point where the RHS
60 # always just used `final.*` would fail on both counts.
61 elaborate = args': let
62+ args = if isString args' then { system = args'; }
63 else args';
6465 # TODO: deprecate args.rustc in favour of args.rust after 23.05 is EOL.
···114 then "lib64"
115 else "lib"
116 else null;
117+ extensions = optionalAttrs final.hasSharedLibraries {
118 sharedLibrary =
119 if final.isDarwin then ".dylib"
120 else if final.isWindows then ".dll"
···152 # uname -m
153 processor =
154 if final.isPower64
155+ then "ppc64${optionalString final.isLittleEndian "le"}"
156 else if final.isPower
157+ then "ppc${optionalString final.isLittleEndian "le"}"
158 else if final.isMips64
159 then "mips64" # endianness is *not* included on mips64
160 else final.parsed.cpu.name;
···220 else if final.isS390 && !final.isS390x then null
221 else if final.isx86_64 then "x86_64"
222 else if final.isx86 then "i386"
223+ else if final.isMips64n32 then "mipsn32${optionalString final.isLittleEndian "el"}"
224+ else if final.isMips64 then "mips64${optionalString final.isLittleEndian "el"}"
225 else final.uname.processor;
226227 # Name used by UEFI for architectures.
···277 if pkgs.stdenv.hostPlatform.canExecute final
278 then "${pkgs.runtimeShell} -c '\"$@\"' --"
279 else if final.isWindows
280+ then "${wine}/bin/wine${optionalString (final.parsed.cpu.bits == 64) "64"}"
281 else if final.isLinux && pkgs.stdenv.hostPlatform.isLinux && final.qemuArch != null
282 then "${qemu-user}/bin/qemu-${final.qemuArch}"
283 else if final.isWasi
···328 let
329 f = args.rustc.platform.target-family;
330 in
331+ if isList f then f else [ f ]
332 )
333+ else optional final.isUnix "unix"
334+ ++ optional final.isWindows "windows";
335336 # https://doc.rust-lang.org/reference/conditional-compilation.html#target_vendor
337 vendor = let
···355 vendor_ = final.rust.platform.vendor;
356 # TODO: deprecate args.rustc in favour of args.rust after 23.05 is EOL.
357 in args.rust.rustcTarget or args.rustc.config
358+ or "${cpu_}-${vendor_}-${kernel.name}${optionalString (abi.name != "unknown") "-${abi.name}"}";
359360 # The name of the rust target if it is standard, or the json file
361 # containing the custom target spec.
362 rustcTargetSpec = rust.rustcTargetSpec or (
363 /**/ if rust ? platform
364+ then builtins.toFile (final.rust.rustcTarget + ".json") (toJSON rust.platform)
365 else final.rust.rustcTarget);
366367 # The name of the rust target if it is standard, or the
···370 #
371 # This is the name used by Cargo for target subdirectories.
372 cargoShortTarget =
373+ removeSuffix ".json" (baseNameOf "${final.rust.rustcTargetSpec}");
374375 # When used as part of an environment variable name, triples are
376 # uppercased and have all hyphens replaced by underscores:
···378 # https://github.com/rust-lang/cargo/pull/9169
379 # https://github.com/rust-lang/cargo/issues/8285#issuecomment-634202431
380 cargoEnvVarTarget =
381+ replaceStrings ["-"] ["_"]
382+ (toUpper final.rust.cargoShortTarget);
383384 # True if the target is no_std
385 # https://github.com/rust-lang/rust/blob/2e44c17c12cec45b6a682b1e53a04ac5b5fcc9d2/src/bootstrap/config.rs#L415-L421
386 isNoStdTarget =
387+ any (t: hasInfix t final.rust.rustcTarget) ["-none" "nvptx" "switch" "-uefi"];
388 };
389 };
390 in assert final.useAndroidPrebuilt -> final.isAndroid;
391+ assert foldl
392 (pass: { assertion, message }:
393 if assertion final
394 then pass
···396 true
397 (final.parsed.abi.assertions or []);
398 final;
399+400+in
401+402+# Everything in this attrset is the public interface of the file.
403+{
404+ inherit
405+ architectures
406+ doubles
407+ elaborate
408+ equals
409+ examples
410+ flakeExposed
411+ inspect
412+ parse
413+ platforms
414+ ;
415}
+35-14
lib/systems/inspect.nix
···1{ lib }:
2-with import ./parse.nix { inherit lib; };
3-with lib.attrsets;
4-with lib.lists;
00000000000000000000056-let abis_ = abis; in
7-let abis = lib.mapAttrs (_: abi: builtins.removeAttrs abi [ "assertions" ]) abis_; in
89rec {
10 # these patterns are to be matched against {host,build,target}Platform.parsed
···32 isx86 = { cpu = { family = "x86"; }; };
33 isAarch32 = { cpu = { family = "arm"; bits = 32; }; };
34 isArmv7 = map ({ arch, ... }: { cpu = { inherit arch; }; })
35- (lib.filter (cpu: lib.hasPrefix "armv7" cpu.arch or "")
36- (lib.attrValues cpuTypes));
37 isAarch64 = { cpu = { family = "arm"; bits = 64; }; };
38 isAarch = { cpu = { family = "arm"; }; };
39 isMicroBlaze = { cpu = { family = "microblaze"; }; };
···111 let
112 # patterns can be either a list or a (bare) singleton; turn
113 # them into singletons for uniform handling
114- pat1 = lib.toList pat1_;
115- pat2 = lib.toList pat2_;
116 in
117- lib.concatMap (attr1:
118 map (attr2:
119- lib.recursiveUpdateUntil
120 (path: subattr1: subattr2:
121 if (builtins.intersectAttrs subattr1 subattr2) == {} || subattr1 == subattr2
122 then true
123 else throw ''
124 pattern conflict at path ${toString path}:
125- ${builtins.toJSON subattr1}
126- ${builtins.toJSON subattr2}
127 '')
128 attr1
129 attr2
···132 pat1;
133134 matchAnyAttrs = patterns:
135- if builtins.isList patterns then attrs: any (pattern: matchAttrs pattern attrs) patterns
136 else matchAttrs patterns;
137138 predicates = mapAttrs (_: matchAnyAttrs) patterns;
···1{ lib }:
2+3+let
4+ inherit (lib)
5+ any
6+ attrValues
7+ concatMap
8+ filter
9+ hasPrefix
10+ isList
11+ mapAttrs
12+ matchAttrs
13+ recursiveUpdateUntil
14+ toList
15+ ;
16+17+ inherit (lib.strings) toJSON;
18+19+ inherit (lib.systems.parse)
20+ kernels
21+ kernelFamilies
22+ significantBytes
23+ cpuTypes
24+ execFormats
25+ ;
2627+ abis = mapAttrs (_: abi: removeAttrs abi [ "assertions" ]) lib.systems.parse.abis;
28+in
2930rec {
31 # these patterns are to be matched against {host,build,target}Platform.parsed
···53 isx86 = { cpu = { family = "x86"; }; };
54 isAarch32 = { cpu = { family = "arm"; bits = 32; }; };
55 isArmv7 = map ({ arch, ... }: { cpu = { inherit arch; }; })
56+ (filter (cpu: hasPrefix "armv7" cpu.arch or "")
57+ (attrValues cpuTypes));
58 isAarch64 = { cpu = { family = "arm"; bits = 64; }; };
59 isAarch = { cpu = { family = "arm"; }; };
60 isMicroBlaze = { cpu = { family = "microblaze"; }; };
···132 let
133 # patterns can be either a list or a (bare) singleton; turn
134 # them into singletons for uniform handling
135+ pat1 = toList pat1_;
136+ pat2 = toList pat2_;
137 in
138+ concatMap (attr1:
139 map (attr2:
140+ recursiveUpdateUntil
141 (path: subattr1: subattr2:
142 if (builtins.intersectAttrs subattr1 subattr2) == {} || subattr1 == subattr2
143 then true
144 else throw ''
145 pattern conflict at path ${toString path}:
146+ ${toJSON subattr1}
147+ ${toJSON subattr2}
148 '')
149 attr1
150 attr2
···153 pat1;
154155 matchAnyAttrs = patterns:
156+ if isList patterns then attrs: any (pattern: matchAttrs pattern attrs) patterns
157 else matchAttrs patterns;
158159 predicates = mapAttrs (_: matchAnyAttrs) patterns;
+51-17
lib/systems/parse.nix
···15# systems that overlap with existing ones and won't notice something amiss.
16#
17{ lib }:
18-with lib.lists;
19-with lib.types;
20-with lib.attrsets;
21-with lib.strings;
22-with (import ./inspect.nix { inherit lib; }).predicates;
2324let
25- inherit (lib.options) mergeOneOption;
0000000000000000000000000000000000002627 setTypes = type:
28 mapAttrs (name: value:
···33 # regex `e?abi.*$` when determining the validity of a triple. In
34 # other words, `i386-linuxabichickenlips` is a valid triple.
35 removeAbiSuffix = x:
36- let match = builtins.match "(.*)e?abi.*" x;
37- in if match==null
38 then x
39- else lib.elemAt match 0;
4041in
42···7677 types.cpuType = enum (attrValues cpuTypes);
7879- cpuTypes = with significantBytes; setTypes types.openCpuType {
80 arm = { bits = 32; significantByte = littleEndian; family = "arm"; };
81 armv5tel = { bits = 32; significantByte = littleEndian; family = "arm"; version = "5"; arch = "armv5t"; };
82 armv6m = { bits = 32; significantByte = littleEndian; family = "arm"; version = "6"; arch = "armv6-m"; };
···166 # Note: Since 22.11 the archs of a mode switching CPU are no longer considered
167 # pairwise compatible. Mode switching implies that binaries built for A
168 # and B respectively can't be executed at the same time.
169- isCompatible = a: b: with cpuTypes; lib.any lib.id [
170 # x86
171 (b == i386 && isCompatible a i486)
172 (b == i486 && isCompatible a i586)
···287288 types.kernel = enum (attrValues kernels);
289290- kernels = with execFormats; with kernelFamilies; setTypes types.openKernel {
000291 # TODO(@Ericson2314): Don't want to mass-rebuild yet to keeping 'darwin' as
292 # the normalized name for macOS.
293 macos = { execFormat = macho; families = { inherit darwin; }; name = "darwin"; };
···359 The "gnu" ABI is ambiguous on 32-bit ARM. Use "gnueabi" or "gnueabihf" instead.
360 '';
361 }
362- { assertion = platform: with platform; !(isPower64 && isBigEndian);
363 message = ''
364 The "gnu" ABI is ambiguous on big-endian 64-bit PowerPC. Use "gnuabielfv2" or "gnuabielfv1" instead.
365 '';
···480 /**/ if args ? abi then getAbi args.abi
481 else if isLinux parsed || isWindows parsed then
482 if isAarch32 parsed then
483- if lib.versionAtLeast (parsed.cpu.version or "0") "6"
484 then abis.gnueabihf
485 else abis.gnueabi
486 # Default ppc64 BE to ELFv2
···491492 in mkSystem parsed;
493494- mkSystemFromString = s: mkSystemFromSkeleton (mkSkeletonFromList (lib.splitString "-" s));
495496 kernelName = kernel:
497 kernel.name + toString (kernel.version or "");
···503504 tripleFromSystem = { cpu, vendor, kernel, abi, ... } @ sys: assert isSystem sys; let
505 optExecFormat =
506- lib.optionalString (kernel.name == "netbsd" &&
507 gnuNetBSDDefaultExecFormat cpu != kernel.execFormat)
508 kernel.execFormat.name;
509- optAbi = lib.optionalString (abi != abis.unknown) "-${abi.name}";
510 in "${cpu.name}-${vendor.name}-${kernelName kernel}${optExecFormat}${optAbi}";
511512 ################################################################################
···15# systems that overlap with existing ones and won't notice something amiss.
16#
17{ lib }:
000001819let
20+ inherit (lib)
21+ all
22+ any
23+ attrValues
24+ elem
25+ elemAt
26+ hasPrefix
27+ id
28+ length
29+ mapAttrs
30+ mergeOneOption
31+ optionalString
32+ splitString
33+ versionAtLeast
34+ ;
35+36+ inherit (lib.strings) match;
37+38+ inherit (lib.systems.inspect.predicates)
39+ isAarch32
40+ isBigEndian
41+ isDarwin
42+ isLinux
43+ isPower64
44+ isWindows
45+ ;
46+47+ inherit (lib.types)
48+ enum
49+ float
50+ isType
51+ mkOptionType
52+ number
53+ setType
54+ string
55+ types
56+ ;
5758 setTypes = type:
59 mapAttrs (name: value:
···64 # regex `e?abi.*$` when determining the validity of a triple. In
65 # other words, `i386-linuxabichickenlips` is a valid triple.
66 removeAbiSuffix = x:
67+ let found = match "(.*)e?abi.*" x;
68+ in if found == null
69 then x
70+ else elemAt found 0;
7172in
73···107108 types.cpuType = enum (attrValues cpuTypes);
109110+ cpuTypes = let inherit (significantBytes) bigEndian littleEndian; in setTypes types.openCpuType {
111 arm = { bits = 32; significantByte = littleEndian; family = "arm"; };
112 armv5tel = { bits = 32; significantByte = littleEndian; family = "arm"; version = "5"; arch = "armv5t"; };
113 armv6m = { bits = 32; significantByte = littleEndian; family = "arm"; version = "6"; arch = "armv6-m"; };
···197 # Note: Since 22.11 the archs of a mode switching CPU are no longer considered
198 # pairwise compatible. Mode switching implies that binaries built for A
199 # and B respectively can't be executed at the same time.
200+ isCompatible = with cpuTypes; a: b: any id [
201 # x86
202 (b == i386 && isCompatible a i486)
203 (b == i486 && isCompatible a i586)
···318319 types.kernel = enum (attrValues kernels);
320321+ kernels = let
322+ inherit (execFormats) elf pe wasm unknown macho;
323+ inherit (kernelFamilies) bsd darwin;
324+ in setTypes types.openKernel {
325 # TODO(@Ericson2314): Don't want to mass-rebuild yet to keeping 'darwin' as
326 # the normalized name for macOS.
327 macos = { execFormat = macho; families = { inherit darwin; }; name = "darwin"; };
···393 The "gnu" ABI is ambiguous on 32-bit ARM. Use "gnueabi" or "gnueabihf" instead.
394 '';
395 }
396+ { assertion = platform: !(platform.isPower64 && platform.isBigEndian);
397 message = ''
398 The "gnu" ABI is ambiguous on big-endian 64-bit PowerPC. Use "gnuabielfv2" or "gnuabielfv1" instead.
399 '';
···514 /**/ if args ? abi then getAbi args.abi
515 else if isLinux parsed || isWindows parsed then
516 if isAarch32 parsed then
517+ if versionAtLeast (parsed.cpu.version or "0") "6"
518 then abis.gnueabihf
519 else abis.gnueabi
520 # Default ppc64 BE to ELFv2
···525526 in mkSystem parsed;
527528+ mkSystemFromString = s: mkSystemFromSkeleton (mkSkeletonFromList (splitString "-" s));
529530 kernelName = kernel:
531 kernel.name + toString (kernel.version or "");
···537538 tripleFromSystem = { cpu, vendor, kernel, abi, ... } @ sys: assert isSystem sys; let
539 optExecFormat =
540+ optionalString (kernel.name == "netbsd" &&
541 gnuNetBSDDefaultExecFormat cpu != kernel.execFormat)
542 kernel.execFormat.name;
543+ optAbi = optionalString (abi != abis.unknown) "-${abi.name}";
544 in "${cpu.name}-${vendor.name}-${kernelName kernel}${optExecFormat}${optAbi}";
545546 ################################################################################
···330 - The `erlang_node_short_name`, `erlang_node_name`, `port` and `options` configuration parameters are gone, and have been replaced with an `environment` parameter.
331 Use the appropriate [environment variables](https://hexdocs.pm/livebook/readme.html#environment-variables) inside `environment` to configure the service instead.
332000333## Other Notable Changes {#sec-release-24.05-notable-changes}
334335<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
···449- The `hardware.pulseaudio` module now sets permission of pulse user home directory to 755 when running in "systemWide" mode. It fixes [issue 114399](https://github.com/NixOS/nixpkgs/issues/114399).
450451- The module `services.github-runner` has been removed. To configure a single GitHub Actions Runner refer to `services.github-runners.*`. Note that this will trigger a new runner registration.
000000452453- The `btrbk` module now automatically selects and provides required compression
454 program depending on the configured `stream_compress` option. Since this
···330 - The `erlang_node_short_name`, `erlang_node_name`, `port` and `options` configuration parameters are gone, and have been replaced with an `environment` parameter.
331 Use the appropriate [environment variables](https://hexdocs.pm/livebook/readme.html#environment-variables) inside `environment` to configure the service instead.
332333+- The `crystal` package has been updated to 1.11.x, which has some breaking changes.
334+ Refer to crystal's changelog for more information. ([v1.10](https://github.com/crystal-lang/crystal/blob/master/CHANGELOG.md#1100-2023-10-09), [v1.11](https://github.com/crystal-lang/crystal/blob/master/CHANGELOG.md#1110-2024-01-08))
335+336## Other Notable Changes {#sec-release-24.05-notable-changes}
337338<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
···452- The `hardware.pulseaudio` module now sets permission of pulse user home directory to 755 when running in "systemWide" mode. It fixes [issue 114399](https://github.com/NixOS/nixpkgs/issues/114399).
453454- The module `services.github-runner` has been removed. To configure a single GitHub Actions Runner refer to `services.github-runners.*`. Note that this will trigger a new runner registration.
455+456+- The `services.slskd` has been refactored to include more configuation options in
457+ the freeform `services.slskd.settings` option, and some defaults (including listen ports)
458+ have been changed to match the upstream defaults. Additionally, disk logging is now
459+ disabled by default, and the log rotation timer has been removed.
460+ The nginx virtualhost option is now of the `vhost-options` type.
461462- The `btrbk` module now automatically selects and provides required compression
463 program depending on the configured `stream_compress` option. Since this
+5
nixos/modules/profiles/macos-builder.nix
···145 # This installCredentials script is written so that it's as easy as
146 # possible for a user to audit before confirming the `sudo`
147 installCredentials = hostPkgs.writeShellScript "install-credentials" ''
00148 KEYS="''${1}"
149 INSTALL=${hostPkgs.coreutils}/bin/install
150 "''${INSTALL}" -g nixbld -m 600 "''${KEYS}/${user}_${keyType}" ${privateKey}
···154 hostPkgs = config.virtualisation.host.pkgs;
155156 script = hostPkgs.writeShellScriptBin "create-builder" (
000157 # When running as non-interactively as part of a DarwinConfiguration the working directory
158 # must be set to a writeable directory.
159 (if cfg.workingDirectory != "." then ''
···145 # This installCredentials script is written so that it's as easy as
146 # possible for a user to audit before confirming the `sudo`
147 installCredentials = hostPkgs.writeShellScript "install-credentials" ''
148+ set -euo pipefail
149+150 KEYS="''${1}"
151 INSTALL=${hostPkgs.coreutils}/bin/install
152 "''${INSTALL}" -g nixbld -m 600 "''${KEYS}/${user}_${keyType}" ${privateKey}
···156 hostPkgs = config.virtualisation.host.pkgs;
157158 script = hostPkgs.writeShellScriptBin "create-builder" (
159+ ''
160+ set -euo pipefail
161+ '' +
162 # When running as non-interactively as part of a DarwinConfiguration the working directory
163 # must be set to a writeable directory.
164 (if cfg.workingDirectory != "." then ''
···7 device = "none";
8 fsType = "envfs";
9 options = [
10+ "bind-mount=/bin"
11 "fallback-path=${pkgs.runCommand "fallback-path" {} (''
12 mkdir -p $out
13 ln -s ${config.environment.usrbinenv} $out/env
···16 "nofail"
17 ];
18 };
19+ # We need to bind-mount /bin to /usr/bin, because otherwise upgrading
20+ # from envfs < 1.0.5 will cause having the old envs with no /bin bind mount.
21+ # Systemd is smart enough to not mount /bin if it's already mounted.
22 "/bin" = {
23 device = "/usr/bin";
24 fsType = "none";
+120-44
nixos/modules/virtualisation/incus.nix
···1-{ config, lib, pkgs, ... }:
0000023let
4 cfg = config.virtualisation.incus;
5 preseedFormat = pkgs.formats.yaml { };
00000000000000000000000000000000000000000000000000000000000000000006in
7{
8 meta = {
···1112 options = {
13 virtualisation.incus = {
14- enable = lib.mkEnableOption (lib.mdDoc ''
15 incusd, a daemon that manages containers and virtual machines.
1617 Users in the "incus-admin" group can interact with
18 the daemon (e.g. to start or stop containers) using the
19 {command}`incus` command line tool, among others.
20- '');
2122 package = lib.mkPackageOption pkgs "incus" { };
2324 lxcPackage = lib.mkPackageOption pkgs "lxc" { };
250000026 preseed = lib.mkOption {
27- type = lib.types.nullOr (
28- lib.types.submodule { freeformType = preseedFormat.type; }
29- );
3031 default = null;
3233- description = lib.mdDoc ''
34 Configuration for Incus preseed, see
35 <https://linuxcontainers.org/incus/docs/main/howto/initialize/#non-interactive-configuration>
36 for supported values.
···80 };
81 };
8283- socketActivation = lib.mkEnableOption (
84- lib.mdDoc ''
85- socket-activation for starting incus.service. Enabling this option
86- will stop incus.service from starting automatically on boot.
87- ''
88- );
8990 startTimeout = lib.mkOption {
91 type = lib.types.ints.unsigned;
92 default = 600;
93 apply = toString;
94- description = lib.mdDoc ''
95 Time to wait (in seconds) for incusd to become ready to process requests.
96 If incusd does not reply within the configured time, `incus.service` will be
97 considered failed and systemd will attempt to restart it.
···99 };
100101 ui = {
102- enable = lib.mkEnableOption (lib.mdDoc "(experimental) Incus UI");
103104- package = lib.mkPackageOption pkgs [ "incus" "ui" ] { };
000105 };
106 };
107 };
···109 config = lib.mkIf cfg.enable {
110 assertions = [
111 {
112- assertion = !(config.networking.firewall.enable && !config.networking.nftables.enable && config.virtualisation.incus.enable);
00000113 message = "Incus on NixOS is unsupported using iptables. Set `networking.nftables.enable = true;`";
114 }
115 ];
···137 "vhost_vsock"
138 ] ++ lib.optionals (!config.networking.nftables.enable) [ "iptable_mangle" ];
139140- environment.systemPackages = [ cfg.package ];
00000141142 # Note: the following options are also declared in virtualisation.lxc, but
143 # the latter can't be simply enabled to reuse the formers, because it
···164 "network-online.target"
165 "lxcfs.service"
166 "incus.socket"
167- ]
168- ++ lib.optional config.virtualisation.vswitch.enable "ovs-vswitchd.service";
169170 requires = [
171 "lxcfs.service"
172 "incus.socket"
173- ]
174- ++ lib.optional config.virtualisation.vswitch.enable "ovs-vswitchd.service";
175176- wants = [
177- "network-online.target"
0000000178 ];
179-180- path = lib.optionals config.boot.zfs.enabled [
181- config.boot.zfs.package
182- "${config.boot.zfs.package}/lib/udev"
183- ]
184- ++ lib.optional config.virtualisation.vswitch.enable config.virtualisation.vswitch.package;
185-186- environment = lib.mkMerge [ {
187- # Override Path to the LXC template configuration directory
188- INCUS_LXC_TEMPLATE_CONFIG = "${pkgs.lxcfs}/share/lxc/config";
189- } (lib.mkIf (cfg.ui.enable) {
190- "INCUS_UI" = cfg.ui.package;
191- }) ];
192193 serviceConfig = {
194 ExecStart = "${cfg.package}/bin/incusd --group incus-admin";
···222 systemd.services.incus-preseed = lib.mkIf (cfg.preseed != null) {
223 description = "Incus initialization with preseed file";
224225- wantedBy = ["incus.service"];
226- after = ["incus.service"];
227- bindsTo = ["incus.service"];
228- partOf = ["incus.service"];
229230 script = ''
231- ${cfg.package}/bin/incus admin init --preseed <${
232- preseedFormat.generate "incus-preseed.yaml" cfg.preseed
233- }
234 '';
235236 serviceConfig = {
···1+{
2+ config,
3+ lib,
4+ pkgs,
5+ ...
6+}:
78let
9 cfg = config.virtualisation.incus;
10 preseedFormat = pkgs.formats.yaml { };
11+12+ serverBinPath = ''${pkgs.qemu_kvm}/libexec:${
13+ lib.makeBinPath (
14+ with pkgs;
15+ [
16+ cfg.package
17+18+ acl
19+ attr
20+ bash
21+ btrfs-progs
22+ cdrkit
23+ coreutils
24+ criu
25+ dnsmasq
26+ e2fsprogs
27+ findutils
28+ getent
29+ gnugrep
30+ gnused
31+ gnutar
32+ gptfdisk
33+ gzip
34+ iproute2
35+ iptables
36+ kmod
37+ lvm2
38+ minio
39+ nftables
40+ qemu_kvm
41+ qemu-utils
42+ rsync
43+ squashfsTools
44+ systemd
45+ thin-provisioning-tools
46+ util-linux
47+ virtiofsd
48+ xz
49+50+ (writeShellScriptBin "apparmor_parser" ''
51+ exec '${apparmor-parser}/bin/apparmor_parser' -I '${apparmor-profiles}/etc/apparmor.d' "$@"
52+ '')
53+ ]
54+ ++ lib.optionals config.boot.zfs.enabled [
55+ config.boot.zfs.package
56+ "${config.boot.zfs.package}/lib/udev"
57+ ]
58+ ++ lib.optionals config.virtualisation.vswitch.enable [ config.virtualisation.vswitch.package ]
59+ )
60+ }'';
61+62+ # https://github.com/lxc/incus/blob/cff35a29ee3d7a2af1f937cbb6cf23776941854b/internal/server/instance/drivers/driver_qemu.go#L123
63+ ovmf-prefix = if pkgs.stdenv.hostPlatform.isAarch64 then "AAVMF" else "OVMF";
64+ ovmf = pkgs.linkFarm "incus-ovmf" [
65+ {
66+ name = "OVMF_CODE.4MB.fd";
67+ path = "${pkgs.OVMFFull.fd}/FV/${ovmf-prefix}_CODE.fd";
68+ }
69+ {
70+ name = "OVMF_VARS.4MB.fd";
71+ path = "${pkgs.OVMFFull.fd}/FV/${ovmf-prefix}_VARS.fd";
72+ }
73+ {
74+ name = "OVMF_VARS.4MB.ms.fd";
75+ path = "${pkgs.OVMFFull.fd}/FV/${ovmf-prefix}_VARS.fd";
76+ }
77+ ];
78in
79{
80 meta = {
···8384 options = {
85 virtualisation.incus = {
86+ enable = lib.mkEnableOption ''
87 incusd, a daemon that manages containers and virtual machines.
8889 Users in the "incus-admin" group can interact with
90 the daemon (e.g. to start or stop containers) using the
91 {command}`incus` command line tool, among others.
92+ '';
9394 package = lib.mkPackageOption pkgs "incus" { };
9596 lxcPackage = lib.mkPackageOption pkgs "lxc" { };
9798+ clientPackage = lib.mkPackageOption pkgs [
99+ "incus"
100+ "client"
101+ ] { };
102+103 preseed = lib.mkOption {
104+ type = lib.types.nullOr (lib.types.submodule { freeformType = preseedFormat.type; });
00105106 default = null;
107108+ description = ''
109 Configuration for Incus preseed, see
110 <https://linuxcontainers.org/incus/docs/main/howto/initialize/#non-interactive-configuration>
111 for supported values.
···155 };
156 };
157158+ socketActivation = lib.mkEnableOption (''
159+ socket-activation for starting incus.service. Enabling this option
160+ will stop incus.service from starting automatically on boot.
161+ '');
00162163 startTimeout = lib.mkOption {
164 type = lib.types.ints.unsigned;
165 default = 600;
166 apply = toString;
167+ description = ''
168 Time to wait (in seconds) for incusd to become ready to process requests.
169 If incusd does not reply within the configured time, `incus.service` will be
170 considered failed and systemd will attempt to restart it.
···172 };
173174 ui = {
175+ enable = lib.mkEnableOption "(experimental) Incus UI";
176177+ package = lib.mkPackageOption pkgs [
178+ "incus"
179+ "ui"
180+ ] { };
181 };
182 };
183 };
···185 config = lib.mkIf cfg.enable {
186 assertions = [
187 {
188+ assertion =
189+ !(
190+ config.networking.firewall.enable
191+ && !config.networking.nftables.enable
192+ && config.virtualisation.incus.enable
193+ );
194 message = "Incus on NixOS is unsupported using iptables. Set `networking.nftables.enable = true;`";
195 }
196 ];
···218 "vhost_vsock"
219 ] ++ lib.optionals (!config.networking.nftables.enable) [ "iptable_mangle" ];
220221+ environment.systemPackages = [
222+ cfg.clientPackage
223+224+ # gui console support
225+ pkgs.spice-gtk
226+ ];
227228 # Note: the following options are also declared in virtualisation.lxc, but
229 # the latter can't be simply enabled to reuse the formers, because it
···250 "network-online.target"
251 "lxcfs.service"
252 "incus.socket"
253+ ] ++ lib.optionals config.virtualisation.vswitch.enable [ "ovs-vswitchd.service" ];
0254255 requires = [
256 "lxcfs.service"
257 "incus.socket"
258+ ] ++ lib.optionals config.virtualisation.vswitch.enable [ "ovs-vswitchd.service" ];
0259260+ wants = [ "network-online.target" ];
261+262+ environment = lib.mkMerge [
263+ {
264+ INCUS_LXC_TEMPLATE_CONFIG = "${pkgs.lxcfs}/share/lxc/config";
265+ INCUS_OVMF_PATH = ovmf;
266+ PATH = lib.mkForce serverBinPath;
267+ }
268+ (lib.mkIf (cfg.ui.enable) { "INCUS_UI" = cfg.ui.package; })
269 ];
0000000000000270271 serviceConfig = {
272 ExecStart = "${cfg.package}/bin/incusd --group incus-admin";
···300 systemd.services.incus-preseed = lib.mkIf (cfg.preseed != null) {
301 description = "Incus initialization with preseed file";
302303+ wantedBy = [ "incus.service" ];
304+ after = [ "incus.service" ];
305+ bindsTo = [ "incus.service" ];
306+ partOf = [ "incus.service" ];
307308 script = ''
309+ ${cfg.package}/bin/incus admin init --preseed <${preseedFormat.generate "incus-preseed.yaml" cfg.preseed}
00310 '';
311312 serviceConfig = {
···1-import ./make-test-python.nix ({ pkgs, ... }: {
2 name = "tracee-integration";
3 meta.maintainers = pkgs.tracee.meta.maintainers;
00000045 nodes = {
6 machine = { config, pkgs, ... }: {
···12 environment.systemPackages = with pkgs; [
13 # required by Test_EventFilters/trace_events_from_ls_and_which_binary_in_separate_scopes
14 which
15- # build the go integration tests as a binary
16- (tracee.overrideAttrs (oa: {
17- pname = oa.pname + "-integration";
18- postPatch = oa.postPatch or "" + ''
19- # prepare tester.sh (which will be embedded in the test binary)
20- patchShebangs tests/integration/tester.sh
2122- # fix the test to look at nixos paths for running programs
23- substituteInPlace tests/integration/integration_test.go \
24- --replace "bin=/usr/bin/" "comm=" \
25- --replace "binary=/usr/bin/" "comm=" \
26- --replace "/usr/bin/dockerd" "dockerd" \
27- --replace "/usr/bin" "/run/current-system/sw/bin"
28- '';
29- nativeBuildInputs = oa.nativeBuildInputs or [ ] ++ [ makeWrapper ];
30- buildPhase = ''
31- runHook preBuild
32- # just build the static lib we need for the go test binary
33- make $makeFlags ''${enableParallelBuilding:+-j$NIX_BUILD_CORES} bpf-core ./dist/btfhub
3435- # then compile the tests to be ran later
36- CGO_LDFLAGS="$(pkg-config --libs libbpf)" go test -tags core,ebpf,integration -p 1 -c -o $GOPATH/tracee-integration ./tests/integration/...
37- runHook postBuild
38- '';
39- doCheck = false;
40- outputs = [ "out" ];
41- installPhase = ''
42- mkdir -p $out/bin
43- mv $GOPATH/tracee-integration $out/bin/
44- '';
45- doInstallCheck = false;
46-47- meta = oa.meta // {
48- outputsToInstall = [];
49- };
50- }))
51 ];
52- };
53- };
0005455- testScript = ''
56- machine.wait_for_unit("docker.service")
5758- with subtest("run integration tests"):
59- # EventFilters/trace_only_events_from_new_containers also requires a container called "alpine"
60- machine.succeed('tar c -C ${pkgs.pkgsStatic.busybox} . | docker import - alpine --change "ENTRYPOINT [\"sleep\"]"')
0006162- # Test_EventFilters/trace_event_set_in_a_specific_scope expects to be in a dir that includes "integration"
63- print(machine.succeed(
64- 'mkdir /tmp/integration',
65- 'cd /tmp/integration && tracee-integration -test.v'
66- ))
67- '';
0068})
···1+import ./make-test-python.nix ({ pkgs, ... }: rec {
2 name = "tracee-integration";
3 meta.maintainers = pkgs.tracee.meta.maintainers;
4+5+ passthru.hello-world-builder = pkgs: pkgs.dockerTools.buildImage {
6+ name = "hello-world";
7+ tag = "latest";
8+ config.Cmd = [ "${pkgs.hello}/bin/hello" ];
9+ };
1011 nodes = {
12 machine = { config, pkgs, ... }: {
···18 environment.systemPackages = with pkgs; [
19 # required by Test_EventFilters/trace_events_from_ls_and_which_binary_in_separate_scopes
20 which
21+ # the go integration tests as a binary
22+ tracee.passthru.tests.integration-test-cli
23+ ];
24+ };
25+ };
02627+ testScript =
28+ let
29+ skippedTests = [
30+ # these comm tests for some reason do not resolve.
31+ # something about the test is different as it works fine if I replicate
32+ # the policies and run tracee myself but doesn't work in the integration
33+ # test either with the automatic run or running the commands by hand
34+ # while it's searching.
35+ "Test_EventFilters/comm:_event:_args:_trace_event_set_in_a_specific_policy_with_args_from_ls_command"
36+ "Test_EventFilters/comm:_event:_trace_events_set_in_two_specific_policies_from_ls_and_uname_commands"
003738+ # worked at some point, seems to be flakey
39+ "Test_EventFilters/pid:_event:_args:_trace_event_sched_switch_with_args_from_pid_0"
0000000000000040 ];
41+ in
42+ ''
43+ with subtest("prepare for integration tests"):
44+ machine.wait_for_unit("docker.service")
45+ machine.succeed('which bash')
4647+ # EventFilters/trace_only_events_from_new_containers also requires a container called "hello-world"
48+ machine.succeed('docker load < ${passthru.hello-world-builder pkgs}')
4950+ # exec= needs fully resolved paths
51+ machine.succeed(
52+ 'mkdir /tmp/testdir',
53+ 'cp $(which who) /tmp/testdir/who',
54+ 'cp $(which uname) /tmp/testdir/uname',
55+ )
5657+ with subtest("run integration tests"):
58+ # Test_EventFilters/trace_event_set_in_a_specific_scope expects to be in a dir that includes "integration"
59+ # tests must be ran with 1 process
60+ print(machine.succeed(
61+ 'mkdir /tmp/integration',
62+ 'cd /tmp/integration && export PATH="/tmp/testdir:$PATH" && integration.test -test.v -test.parallel 1 -test.skip="^${builtins.concatStringsSep "$|^" skippedTests}$"'
63+ ))
64+ '';
65})
···67 deprecatedNativeMessagingHost = option: pkg:
68 if (cfg.${option} or false)
69 then
70- lib.warn "The cfg.${option} argument for `firefox.override` is deprecated, please add `pkgs.${pkg.pname}` to `nativeMessagingHosts.packages` instead"
71 [pkg]
72 else [];
73
···67 deprecatedNativeMessagingHost = option: pkg:
68 if (cfg.${option} or false)
69 then
70+ lib.warn "The cfg.${option} argument for `firefox.override` is deprecated, please add `pkgs.${pkg.pname}` to `nativeMessagingHosts` instead"
71 [pkg]
72 else [];
73
···123 ro_mounts=()
124 symlinks=()
125 etc_ignored=()
00126 for i in ${fhsenv}/*; do
127 path="/''${i##*/}"
128 if [[ $path == '/etc' ]]; then
···136 fi
137 done
1380139 if [[ -d ${fhsenv}/etc ]]; then
140 for i in ${fhsenv}/etc/*; do
141 path="/''${i##*/}"
···144 if [[ $path == '/fonts' || $path == '/ssl' ]]; then
145 continue
146 fi
147- ro_mounts+=(--ro-bind "$i" "/etc$path")
0000148 etc_ignored+=("/etc$path")
149 done
150 fi
···156 ro_mounts+=(--ro-bind /etc /.host-etc)
157 fi
1580159 for i in ${lib.escapeShellArgs etcBindEntries}; do
160 if [[ "''${etc_ignored[@]}" =~ "$i" ]]; then
161 continue
···123 ro_mounts=()
124 symlinks=()
125 etc_ignored=()
126+127+ # loop through all entries of root in the fhs environment, except its /etc.
128 for i in ${fhsenv}/*; do
129 path="/''${i##*/}"
130 if [[ $path == '/etc' ]]; then
···138 fi
139 done
140141+ # loop through the entries of /etc in the fhs environment.
142 if [[ -d ${fhsenv}/etc ]]; then
143 for i in ${fhsenv}/etc/*; do
144 path="/''${i##*/}"
···147 if [[ $path == '/fonts' || $path == '/ssl' ]]; then
148 continue
149 fi
150+ if [[ -L $i ]]; then
151+ symlinks+=(--symlink "$i" "/etc$path")
152+ else
153+ ro_mounts+=(--ro-bind "$i" "/etc$path")
154+ fi
155 etc_ignored+=("/etc$path")
156 done
157 fi
···163 ro_mounts+=(--ro-bind /etc /.host-etc)
164 fi
165166+ # link selected etc entries from the actual root
167 for i in ${lib.escapeShellArgs etcBindEntries}; do
168 if [[ "''${etc_ignored[@]}" =~ "$i" ]]; then
169 continue
···1# this release doesn't exist yet, but satisfay the by-name checks
2# will be added as incus-lts in all-packages.nix once ready
3-_: { }
···1# this release doesn't exist yet, but satisfay the by-name checks
2# will be added as incus-lts in all-packages.nix once ready
3+import ./generic.nix { }
···1+This patch introduces an intermediate Gradle build step to alter the behavior
2+of flutter_tools' Gradle project, specifically moving the creation of `build`
3+and `.gradle` directories from within the Nix Store to somewhere in `$HOME/.cache/flutter/nix-flutter-tools-gradle/$engineShortRev`.
4+5+Without this patch, flutter_tools' Gradle project tries to generate `build` and `.gradle`
6+directories within the Nix Store. Resulting in read-only errors when trying to build a
7+Flutter Android app at runtime.
8+9+This patch takes advantage of the fact settings.gradle takes priority over settings.gradle.kts to build the intermediate Gradle project
10+when a Flutter app runs `includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")`
11+12+`rootProject.buildFileName = "/dev/null"` so that the intermediate project doesn't use `build.gradle.kts` that's in the same directory.
13+14+The intermediate project makes a `settings.gradle` file in `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/` and `includeBuild`s it.
15+This Gradle project will build the actual `packages/flutter_tools/gradle` project by setting
16+`rootProject.projectDir = new File("$settingsDir")` and `apply from: new File("$settingsDir/settings.gradle.kts")`.
17+18+Now the `.gradle` will be built in `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/`, but `build` doesn't.
19+To move `build` to `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/` as well, we need to set `buildDirectory`.
20+diff --git a/packages/flutter_tools/gradle/settings.gradle b/packages/flutter_tools/gradle/settings.gradle
21+new file mode 100644
22+index 0000000000..b2485c94b4
23+--- /dev/null
24++++ b/packages/flutter_tools/gradle/settings.gradle
25+@@ -0,0 +1,19 @@
26++rootProject.buildFileName = "/dev/null"
27++
28++def engineShortRev = (new File("$settingsDir/../../../bin/internal/engine.version")).text.take(10)
29++def dir = new File("$System.env.HOME/.cache/flutter/nix-flutter-tools-gradle/$engineShortRev")
30++dir.mkdirs()
31++def file = new File(dir, "settings.gradle")
32++
33++file.text = """
34++rootProject.projectDir = new File("$settingsDir")
35++apply from: new File("$settingsDir/settings.gradle.kts")
36++
37++gradle.allprojects { project ->
38++ project.beforeEvaluate {
39++ project.layout.buildDirectory = new File("$dir/build")
40++ }
41++}
42++"""
43++
44++includeBuild(dir)
···1+{ callPackage
2+, enableJavaFX ? false
3+, ...
4+}@args:
5+6+callPackage ./common.nix ({
7+ # Details from https://www.azul.com/downloads/?version=java-22-lts&package=jdk
8+ # Note that the latest build may differ by platform
9+ dists = {
10+ x86_64-linux = {
11+ zuluVersion = "22.28.91";
12+ jdkVersion = "22.0.0";
13+ hash =
14+ if enableJavaFX then "sha256-HvMiODsz+puu1xtxG2RRXH/PWCk91PGNZ7UcOd9orqQ="
15+ else "sha256-HvMiODsz+puu1xtxG2RRXH/PWCk91PGNZ7UcOd9orqQ=";
16+ };
17+18+ aarch64-linux = {
19+ zuluVersion = "22.28.91";
20+ jdkVersion = "22.0.0";
21+ hash =
22+ if enableJavaFX then throw "JavaFX is not available for aarch64-linux"
23+ else "sha256-3RLNNEbMk5wAZsQmbQj/jpx9iTL/yr9N3wL4t7m6c+s=";
24+ };
25+26+ x86_64-darwin = {
27+ zuluVersion = "22.28.91";
28+ jdkVersion = "22.0.0";
29+ hash =
30+ if enableJavaFX then "sha256-Y6PSNQjHRXukwux2sVbvpTIqT+Cg+KeG1C0iSEwyKZw="
31+ else "sha256-Y6PSNQjHRXukwux2sVbvpTIqT+Cg+KeG1C0iSEwyKZw=";
32+ };
33+34+ aarch64-darwin = {
35+ zuluVersion = "22.28.91";
36+ jdkVersion = "22.0.0";
37+ hash =
38+ if enableJavaFX then "sha256-o0VkWB4+PzBmNNWy+FZlyjTgukBTe6owfydb3YNfEE0="
39+ else "sha256-o0VkWB4+PzBmNNWy+FZlyjTgukBTe6owfydb3YNfEE0=";
40+ };
41+ };
42+} // builtins.removeAttrs args [ "callPackage" ])
+4
pkgs/development/libraries/flatpak/default.nix
···97 # The icon validator needs to access the gdk-pixbuf loaders in the Nix store
98 # and cannot bind FHS paths since those are not available on NixOS.
99 finalAttrs.passthru.icon-validator-patch
0000100 ];
101102 nativeBuildInputs = [
···97 # The icon validator needs to access the gdk-pixbuf loaders in the Nix store
98 # and cannot bind FHS paths since those are not available on NixOS.
99 finalAttrs.passthru.icon-validator-patch
100+101+ # Try mounting fonts and icons from NixOS locations if FHS locations don't exist.
102+ # https://github.com/NixOS/nixpkgs/issues/119433
103+ ./fix-fonts-icons.patch
104 ];
105106 nativeBuildInputs = [
···21 enableParallelBuilding = true;
22 hardeningDisable = [ "format" ];
2300000000000000024 meta = with lib; {
25 description = "A robust high performance CORBA ORB for C++ and Python";
26 longDescription = ''
···21 enableParallelBuilding = true;
22 hardeningDisable = [ "format" ];
2324+ # Transform omniidl_be into a PEP420 namespace to allow other projects to define
25+ # their omniidl backends. Especially useful for omniorbpy, the python backend.
26+ postInstall = ''
27+ rm $out/${python3.sitePackages}/omniidl_be/__init__.py
28+ rm $out/${python3.sitePackages}/omniidl_be/__pycache__/__init__.*.pyc
29+ '';
30+31+ # Ensure postInstall didn't break cxx backend
32+ # Same as 'pythonImportsCheck = ["omniidl_be.cxx"];', but outside buildPythonPackage
33+ doInstallCheck = true;
34+ postInstallCheck = ''
35+ export PYTHONPATH=$out/${python3.sitePackages}:$PYTHONPATH
36+ ${lib.getExe python3} -c "import omniidl_be.cxx"
37+ '';
38+39 meta = with lib; {
40 description = "A robust high performance CORBA ORB for C++ and Python";
41 longDescription = ''
···11function arguments. Pass them into `propagatedBuildInputs`, for them to
12be available to Home Assistant.
1314-Out-of-tree components need to use python packages from
15`home-assistant.python.pkgs` as to not introduce conflicting package
16versions into the Python environment.
17···5859The `pname` attribute is a composition of both `owner` and `domain`.
6061-Don't set `pname`, set `owner and `domain` instead.
6263Exposing the `domain` attribute separately allows checking for
64conflicting components at eval time.
···11function arguments. Pass them into `propagatedBuildInputs`, for them to
12be available to Home Assistant.
1314+Out-of-tree components need to use Python packages from
15`home-assistant.python.pkgs` as to not introduce conflicting package
16versions into the Python environment.
17···5859The `pname` attribute is a composition of both `owner` and `domain`.
6061+Don't set `pname`, set `owner` and `domain` instead.
6263Exposing the `domain` attribute separately allows checking for
64conflicting components at eval time.
···237 docker-machine = throw "'docker-machine' has been removed, because the upstream project was archived"; # Added 2023-12-27
238 docker-machine-kvm = throw "'docker-machine-kvm' has been removed, because 'docker-machine' was archived upstream and removed"; # Added 2023-12-27
239 docker-machine-xhyve = throw "'docker-machine-xhyve' has been removed, because 'docker-machine' was archived upstream and removed"; # Added 2023-12-27
0240 dogecoin = throw "'dogecoin' has been removed, as it was broken and unmaintained"; # Added 2024-03-11
241 dogecoind = throw "'dogecoind' has been removed, as it was broken and unmaintained"; # Added 2024-03-11
242 dolphin-emu-beta = dolphin-emu; # Added 2023-02-11
···237 docker-machine = throw "'docker-machine' has been removed, because the upstream project was archived"; # Added 2023-12-27
238 docker-machine-kvm = throw "'docker-machine-kvm' has been removed, because 'docker-machine' was archived upstream and removed"; # Added 2023-12-27
239 docker-machine-xhyve = throw "'docker-machine-xhyve' has been removed, because 'docker-machine' was archived upstream and removed"; # Added 2023-12-27
240+ docker-proxy = throw "`docker-proxy` has been merged to the main repo of Moby since Docker 22.06"; # Added 2024-03-14
241 dogecoin = throw "'dogecoin' has been removed, as it was broken and unmaintained"; # Added 2024-03-11
242 dogecoind = throw "'dogecoind' has been removed, as it was broken and unmaintained"; # Added 2024-03-11
243 dolphin-emu-beta = dolphin-emu; # Added 2023-02-11