···604 ({
605 name :: String,
606 type :: String,
0607 ...
608 } -> Bool)
609 -> Path
···614 fileFilter (file: file.name == "default.nix") ./.
615616 # Include all non-Nix files from the current directory
617- fileFilter (file: ! hasSuffix ".nix" file.name) ./.
618619 # Include all files that start with a "." in the current directory
620 fileFilter (file: hasPrefix "." file.name) ./.
···633634 - `type` (String, one of `"regular"`, `"symlink"` or `"unknown"`): The type of the file.
635 This matches result of calling [`builtins.readFileType`](https://nixos.org/manual/nix/stable/language/builtins.html#builtins-readFileType) on the file's path.
000000636637 Other attributes may be added in the future.
638 */
···604 ({
605 name :: String,
606 type :: String,
607+ hasExt :: String -> Bool,
608 ...
609 } -> Bool)
610 -> Path
···615 fileFilter (file: file.name == "default.nix") ./.
616617 # Include all non-Nix files from the current directory
618+ fileFilter (file: ! file.hasExt "nix") ./.
619620 # Include all files that start with a "." in the current directory
621 fileFilter (file: hasPrefix "." file.name) ./.
···634635 - `type` (String, one of `"regular"`, `"symlink"` or `"unknown"`): The type of the file.
636 This matches result of calling [`builtins.readFileType`](https://nixos.org/manual/nix/stable/language/builtins.html#builtins-readFileType) on the file's path.
637+638+ - `hasExt` (String -> Bool): Whether the file has a certain file extension.
639+ `hasExt ext` is true only if `hasSuffix ".${ext}" name`.
640+641+ This also means that e.g. for a file with name `.gitignore`,
642+ `hasExt "gitignore"` is true.
643644 Other attributes may be added in the future.
645 */
+4-1
lib/fileset/internal.nix
···52 concatStringsSep
53 substring
54 stringLength
055 ;
5657in
···797 if
798 predicate {
799 inherit name type;
00800 # To ensure forwards compatibility with more arguments being added in the future,
801 # adding an attribute which can't be deconstructed :)
802- "lib.fileset.fileFilter: The predicate function passed as the first argument must be able to handle extra attributes for future compatibility. If you're using `{ name, file }:`, use `{ name, file, ... }:` instead." = null;
803 }
804 then
805 type
···52 concatStringsSep
53 substring
54 stringLength
55+ hasSuffix
56 ;
5758in
···798 if
799 predicate {
800 inherit name type;
801+ hasExt = ext: hasSuffix ".${ext}" name;
802+803 # To ensure forwards compatibility with more arguments being added in the future,
804 # adding an attribute which can't be deconstructed :)
805+ "lib.fileset.fileFilter: The predicate function passed as the first argument must be able to handle extra attributes for future compatibility. If you're using `{ name, file, hasExt }:`, use `{ name, file, hasExt, ... }:` instead." = null;
806 }
807 then
808 type
+34-1
lib/fileset/tests.sh
···847848# The predicate must be able to handle extra attributes
849touch a
850-expectFailure 'toSource { root = ./.; fileset = fileFilter ({ name, type }: true) ./.; }' 'called with unexpected argument '\''"lib.fileset.fileFilter: The predicate function passed as the first argument must be able to handle extra attributes for future compatibility. If you'\''re using `\{ name, file \}:`, use `\{ name, file, ... \}:` instead."'\'
851rm -rf -- *
852853# .name is the name, and it works correctly, even recursively
···894 'toSource { root = ./.; fileset = fileFilter (file: file.type != "unknown") ./.; }' \
895 'toSource { root = ./.; fileset = union ./d/a ./d/b; }'
896rm -rf -- *
000000000000000000000000000000000897898# It's lazy
899tree=(
···847848# The predicate must be able to handle extra attributes
849touch a
850+expectFailure 'toSource { root = ./.; fileset = fileFilter ({ name, type, hasExt }: true) ./.; }' 'called with unexpected argument '\''"lib.fileset.fileFilter: The predicate function passed as the first argument must be able to handle extra attributes for future compatibility. If you'\''re using `\{ name, file, hasExt \}:`, use `\{ name, file, hasExt, ... \}:` instead."'\'
851rm -rf -- *
852853# .name is the name, and it works correctly, even recursively
···894 'toSource { root = ./.; fileset = fileFilter (file: file.type != "unknown") ./.; }' \
895 'toSource { root = ./.; fileset = union ./d/a ./d/b; }'
896rm -rf -- *
897+898+# Check that .hasExt checks for the file extension
899+# The empty extension is the same as a file ending with a .
900+tree=(
901+ [a]=0
902+ [a.]=1
903+ [a.b]=0
904+ [a.b.]=1
905+ [a.b.c]=0
906+)
907+checkFileset 'fileFilter (file: file.hasExt "") ./.'
908+909+# It can check for the last extension
910+tree=(
911+ [a]=0
912+ [.a]=1
913+ [.a.]=0
914+ [.b.a]=1
915+ [.b.a.]=0
916+)
917+checkFileset 'fileFilter (file: file.hasExt "a") ./.'
918+919+# It can check for any extension
920+tree=(
921+ [a.b.c.d]=1
922+)
923+checkFileset 'fileFilter (file:
924+ all file.hasExt [
925+ "b.c.d"
926+ "c.d"
927+ "d"
928+ ]
929+) ./.'
930931# It's lazy
932tree=(
+98-5
nixos/doc/manual/release-notes/rl-2311.section.md
···364365- `networking.networkmanager.firewallBackend` was removed as NixOS is now using iptables-nftables-compat even when using iptables, therefore Networkmanager now uses the nftables backend unconditionally.
366367-- [`lib.lists.foldl'`](https://nixos.org/manual/nixpkgs/stable#function-library-lib.lists.foldl-prime) now always evaluates the initial accumulator argument first.
368- If you depend on the lazier behavior, consider using [`lib.lists.foldl`](https://nixos.org/manual/nixpkgs/stable#function-library-lib.lists.foldl) or [`builtins.foldl'`](https://nixos.org/manual/nix/stable/language/builtins.html#builtins-foldl') instead.
369-370-- [`lib.attrsets.foldlAttrs`](https://nixos.org/manual/nixpkgs/stable#function-library-lib.attrsets.foldlAttrs) now always evaluates the initial accumulator argument first.
371-372- `rome` was removed because it is no longer maintained and is succeeded by `biome`.
373374- The `prometheus-knot-exporter` was migrated to a version maintained by CZ.NIC. Various metric names have changed, so checking existing rules is recommended.
···612- Docker now defaults to 24, as 20.10 is stopping to receive security updates and bug fixes after [December 10, 2023](https://github.com/moby/moby/discussions/45104).
613614- There is a new NixOS option when writing NixOS tests `testing.initrdBackdoor`, that enables `backdoor.service` in initrd. Requires `boot.initrd.systemd.enable` to be enabled. Boot will pause in stage 1 at `initrd.target`, and will listen for commands from the `Machine` python interface, just like stage 2 normally does. This enables commands to be sent to test and debug stage 1. Use `machine.switch_root()` to leave stage 1 and proceed to stage 2.
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
···364365- `networking.networkmanager.firewallBackend` was removed as NixOS is now using iptables-nftables-compat even when using iptables, therefore Networkmanager now uses the nftables backend unconditionally.
36600000367- `rome` was removed because it is no longer maintained and is succeeded by `biome`.
368369- The `prometheus-knot-exporter` was migrated to a version maintained by CZ.NIC. Various metric names have changed, so checking existing rules is recommended.
···607- Docker now defaults to 24, as 20.10 is stopping to receive security updates and bug fixes after [December 10, 2023](https://github.com/moby/moby/discussions/45104).
608609- There is a new NixOS option when writing NixOS tests `testing.initrdBackdoor`, that enables `backdoor.service` in initrd. Requires `boot.initrd.systemd.enable` to be enabled. Boot will pause in stage 1 at `initrd.target`, and will listen for commands from the `Machine` python interface, just like stage 2 normally does. This enables commands to be sent to test and debug stage 1. Use `machine.switch_root()` to leave stage 1 and proceed to stage 2.
610+611+## Nixpkgs library changes {#sec-release-23.11-lib}
612+613+### Breaking changes {#sec-release-23.11-lib-breaking}
614+615+- [`lib.lists.foldl'`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.lists.foldl-prime)
616+ now always evaluates the initial accumulator argument first.
617+ If you depend on the lazier behavior, consider using [`lib.lists.foldl`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.lists.foldl)
618+ or [`builtins.foldl'`](https://nixos.org/manual/nix/stable/language/builtins.html#builtins-foldl') instead.
619+- [`lib.attrsets.foldlAttrs`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.attrsets.foldlAttrs)
620+ now always evaluates the initial accumulator argument first.
621+- Now that the internal NixOS transition to Markdown documentation is complete,
622+ `lib.options.literalDocBook` has been removed after deprecation in 22.11.
623+- `lib.types.string` is now fully deprecated and gives a warning when used.
624+625+### Additions and improvements {#sec-release-23.11-lib-additions-improvements}
626+627+- [`lib.fileset`](https://nixos.org/manual/nixpkgs/unstable#sec-functions-library-fileset):
628+ A new sub-library to select local files to use for sources,
629+ designed to be easy and safe to use.
630+631+ This aims to be a replacement for `lib.sources`-based filtering.
632+ To learn more about it, see [the tutorial](https://nix.dev/tutorials/file-sets).
633+634+- [`lib.gvariant`](https://nixos.org/manual/nixpkgs/unstable#sec-functions-library-gvariant):
635+ A partial and basic implementation of GVariant formatted strings.
636+ See [GVariant Format Strings](https://docs.gtk.org/glib/gvariant-format-strings.html) for details.
637+638+ :::{.warning}
639+ This API is not considered fully stable and it might therefore
640+ change in backwards incompatible ways without prior notice.
641+ :::
642+643+- [`lib.asserts`](https://nixos.org/manual/nixpkgs/unstable#sec-functions-library-asserts): New function:
644+ [`assertEachOneOf`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.asserts.assertEachOneOf).
645+- [`lib.attrsets`](https://nixos.org/manual/nixpkgs/unstable#sec-functions-library-attrsets): New function:
646+ [`attrsToList`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.attrsets.attrsToList).
647+- [`lib.customisation`](https://nixos.org/manual/nixpkgs/unstable#sec-functions-library-customisation): New function:
648+ [`makeScopeWithSplicing'`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.customisation.makeScopeWithSplicing-prime).
649+- [`lib.fixedPoints`](https://nixos.org/manual/nixpkgs/unstable#sec-functions-library-fixedPoints): Documentation improvements for
650+ [`lib.fixedPoints.fix`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.fixedPoints.fix).
651+- `lib.generators`: New functions:
652+ [`mkDconfKeyValue`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.generators.mkDconfKeyValue),
653+ [`toDconfINI`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.generators.toDconfINI).
654+655+ `lib.generators.toKeyValue` now supports the `indent` attribute in its first argument.
656+- [`lib.lists`](https://nixos.org/manual/nixpkgs/unstable#sec-functions-library-lists): New functions:
657+ [`findFirstIndex`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.lists.findFirstIndex),
658+ [`hasPrefix`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.lists.hasPrefix),
659+ [`removePrefix`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.lists.removePrefix),
660+ [`commonPrefix`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.lists.commonPrefix),
661+ [`allUnique`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.lists.allUnique).
662+663+ Documentation improvements for
664+ [`lib.lists.foldl'`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.lists.foldl-prime).
665+- [`lib.meta`](https://nixos.org/manual/nixpkgs/unstable#sec-functions-library-meta): Documentation of functions now gets rendered
666+- [`lib.path`](https://nixos.org/manual/nixpkgs/unstable#sec-functions-library-path): New functions:
667+ [`hasPrefix`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.path.hasPrefix),
668+ [`removePrefix`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.path.removePrefix),
669+ [`splitRoot`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.path.splitRoot),
670+ [`subpath.components`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.path.subpath.components).
671+- [`lib.strings`](https://nixos.org/manual/nixpkgs/unstable#sec-functions-library-strings): New functions:
672+ [`replicate`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.strings.replicate),
673+ [`cmakeOptionType`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.strings.cmakeOptionType),
674+ [`cmakeBool`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.strings.cmakeBool),
675+ [`cmakeFeature`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.strings.cmakeFeature).
676+- [`lib.trivial`](https://nixos.org/manual/nixpkgs/unstable#sec-functions-library-trivial): New function:
677+ [`mirrorFunctionArgs`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.trivial.mirrorFunctionArgs).
678+- `lib.systems`: New function:
679+ [`equals`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.systems.equals).
680+- [`lib.options`](https://nixos.org/manual/nixpkgs/unstable#sec-functions-library-options): Improved documentation for
681+ [`mkPackageOption`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.options.mkPackageOption).
682+683+ [`mkPackageOption`](https://nixos.org/manual/nixpkgs/unstable#function-library-lib.options.mkPackageOption).
684+ now also supports the `pkgsText` attribute.
685+686+Module system:
687+- Options in the `options` module argument now have the `declarationPositions` attribute
688+ containing the position where the option was declared:
689+ ```
690+ $ nix repl -f '<nixpkgs/nixos>'
691+ [...]
692+ nix-repl> :p options.environment.systemPackages.declarationPositions
693+ [ {
694+ column = 7;
695+ file = "/nix/store/vm9zf9wvfd628cchj0hdij1g4hzjrcz9-source/nixos/modules/config/system-path.nix";
696+ line = 62;
697+ } ]
698+ ```
699+ Not to be confused with `definitionsWithLocations`, which is the same but for option _definitions_.
700+- Improved error message for option declarations missing `mkOption`
701+702+### Deprecations {#sec-release-23.11-lib-deprecations}
703+704+- `lib.meta.getExe pkg` (also available as `lib.getExe`) now gives a warning if `pkg.meta.mainProgram` is not set,
705+ but it continues to default to the derivation name.
706+ Nixpkgs accepts PRs that set `meta.mainProgram` on packages where it makes sense.
707+ Use `lib.getExe' pkg "some-command"` to avoid the warning and/or select a different executable.
···261 ];
262 boot = {
263 blacklistedKernelModules = ["nouveau" "nvidiafb"];
264+265+ # Don't add `nvidia-uvm` to `kernelModules`, because we want
266+ # `nvidia-uvm` be loaded only after `udev` rules for `nvidia` kernel
267+ # module are applied.
268+ #
269+ # Instead, we use `softdep` to lazily load `nvidia-uvm` kernel module
270+ # after `nvidia` kernel module is loaded and `udev` rules are applied.
271+ extraModprobeConfig = ''
272+ softdep nvidia post: nvidia-uvm
273+ '';
274 };
275 systemd.tmpfiles.rules =
276 lib.optional config.virtualisation.docker.enableNvidia
+1
nixos/modules/tasks/filesystems/bcachefs.nix
···20 printf "waiting for device to appear $path"
21 for try in $(seq 10); do
22 if [ -e $path ]; then
023 success=true
24 break
25 else
···20 printf "waiting for device to appear $path"
21 for try in $(seq 10); do
22 if [ -e $path ]; then
23+ target=$(readlink -f $path)
24 success=true
25 break
26 else
···21 # Whether to force the usage of Git dependencies that have install scripts, but not a lockfile.
22 # Use with care.
23, forceGitDeps ? false
00024 # Whether to make the cache writable prior to installing dependencies.
25 # Don't set this unless npm tries to write to the cache directory, as it can slow down the build.
26, makeCacheWritable ? false
···42, npmWorkspace ? null
43, nodejs ? topLevelArgs.nodejs
44, npmDeps ? fetchNpmDeps {
45- inherit forceGitDeps src srcs sourceRoot prePatch patches postPatch;
46 name = "${name}-npm-deps";
47 hash = npmDepsHash;
48}
···21 # Whether to force the usage of Git dependencies that have install scripts, but not a lockfile.
22 # Use with care.
23, forceGitDeps ? false
24+ # Whether to force allow an empty dependency cache.
25+ # This can be enabled if there are truly no remote dependencies, but generally an empty cache indicates something is wrong.
26+, forceEmptyCache ? false
27 # Whether to make the cache writable prior to installing dependencies.
28 # Don't set this unless npm tries to write to the cache directory, as it can slow down the build.
29, makeCacheWritable ? false
···45, npmWorkspace ? null
46, nodejs ? topLevelArgs.nodejs
47, npmDeps ? fetchNpmDeps {
48+ inherit forceGitDeps forceEmptyCache src srcs sourceRoot prePatch patches postPatch;
49 name = "${name}-npm-deps";
50 hash = npmDepsHash;
51}
···1415pub mod lock;
1617-pub fn lockfile(content: &str, force_git_deps: bool) -> anyhow::Result<Vec<Package>> {
000018 let mut packages = lock::packages(content)
19 .context("failed to extract packages from lockfile")?
20 .into_par_iter()
···24 Package::from_lock(p).with_context(|| format!("failed to parse data for {n}"))
25 })
26 .collect::<anyhow::Result<Vec<_>>>()?;
00002728 let mut new = Vec::new();
29···64 }
6566 if let Ok(lockfile_contents) = lockfile_contents {
67- new.append(&mut lockfile(&lockfile_contents, force_git_deps)?);
00000068 }
69 }
70
···1415pub mod lock;
1617+pub fn lockfile(
18+ content: &str,
19+ force_git_deps: bool,
20+ force_empty_cache: bool,
21+) -> anyhow::Result<Vec<Package>> {
22 let mut packages = lock::packages(content)
23 .context("failed to extract packages from lockfile")?
24 .into_par_iter()
···28 Package::from_lock(p).with_context(|| format!("failed to parse data for {n}"))
29 })
30 .collect::<anyhow::Result<Vec<_>>>()?;
31+32+ if packages.is_empty() && !force_empty_cache {
33+ bail!("No cacheable dependencies were found. Please inspect the upstream `package-lock.json` file and ensure that remote dependencies have `resolved` URLs and `integrity` hashes. If the lockfile is missing this data, attempt to get upstream to fix it via a tool like <https://github.com/jeslie0/npm-lockfile-fix>. If generating an empty cache is intentional and you would like to do it anyways, set `forceEmptyCache = true`.");
34+ }
3536 let mut new = Vec::new();
37···72 }
7374 if let Ok(lockfile_contents) = lockfile_contents {
75+ new.append(&mut lockfile(
76+ &lockfile_contents,
77+ force_git_deps,
78+ // force_empty_cache is turned on here since recursively parsed lockfiles should be
79+ // allowed to have an empty cache without erroring by default
80+ true,
81+ )?);
82 }
83 }
84
+2-2
pkgs/development/interpreters/php/8.1.nix
···23let
4 base = callPackage ./generic.nix (_args // {
5- version = "8.1.25";
6- hash = "sha256-qGqIwYQMG8gyvP0vvsO4oZQsgxTaXf9T8J+cmNDBLoo=";
7 });
89in
···23let
4 base = callPackage ./generic.nix (_args // {
5+ version = "8.1.26";
6+ hash = "sha256-g73iSchKoaBDqMjQ7qCTRcLK5puXhM3wIin8kW+7nqA=";
7 });
89in
+2-2
pkgs/development/interpreters/php/8.2.nix
···23let
4 base = callPackage ./generic.nix (_args // {
5- version = "8.2.12";
6- hash = "sha256-cEMl9WsbTBf5+VHh/+9cZOFIiWBT804mJhUsuqLwWJM=";
7 });
89in
···23let
4 base = callPackage ./generic.nix (_args // {
5+ version = "8.2.13";
6+ hash = "sha256-ZlKfQ7ITEx5rJTxWAr7wXwSUWNISknMPzNY7SKBtZ7o=";
7 });
89in
···32 disabled = pythonOlder "3.6";
33 src = rootSource;
3435- patches = [
36- # workaround for apparent rustc bug
37- # remove when we're at Rust 1.73
38- # https://github.com/pola-rs/polars/issues/12050
39- ./all_horizontal.patch
40- ];
41-42 # Cargo.lock file is sometimes behind actual release which throws an error,
43 # thus the `sed` command
44 # Make sure to check that the right substitutions are made when updating the package
···32 disabled = pythonOlder "3.6";
33 src = rootSource;
34000000035 # Cargo.lock file is sometimes behind actual release which throws an error,
36 # thus the `sed` command
37 # Make sure to check that the right substitutions are made when updating the package
···1415 meta = {
16 description = "This is a PEP 561 type stub package for the appdirs package. It can be used by type-checking tools like mypy, pyright, pytype, PyCharm, etc. to check code that uses appdirs. ";
17- homepage = "https://pypi.org/project/types-appdirss";
18 license = lib.licenses.asl20;
19 maintainers = with lib.maintainers; [ ];
20 };
···1415 meta = {
16 description = "This is a PEP 561 type stub package for the appdirs package. It can be used by type-checking tools like mypy, pyright, pytype, PyCharm, etc. to check code that uses appdirs. ";
17+ homepage = "https://pypi.org/project/types-appdirs";
18 license = lib.licenses.asl20;
19 maintainers = with lib.maintainers; [ ];
20 };
···21 description = "A program that converts CD images in BIN/CUE format into a set of ISO and CDR tracks";
22 platforms = platforms.unix;
23 license = licenses.gpl2;
024 };
25}
···21 description = "A program that converts CD images in BIN/CUE format into a set of ISO and CDR tracks";
22 platforms = platforms.unix;
23 license = licenses.gpl2;
24+ mainProgram = "bchunk";
25 };
26}
···15 description = "A utility to identify and optionally copy recordings from a DVD-VR format disc";
16 license = licenses.gpl2;
17 maintainers = with maintainers; [ fgaz ];
018 };
19}
20
···15 description = "A utility to identify and optionally copy recordings from a DVD-VR format disc";
16 license = licenses.gpl2;
17 maintainers = with maintainers; [ fgaz ];
18+ mainProgram = "dvd-vr";
19 };
20}
21
···21 description = "Verify size of ISO 9660 image against Volume Descriptor fields";
22 license = licenses.asl20;
23 maintainers = with maintainers; [ mkg20001 ];
024 };
25}
···21 description = "Verify size of ISO 9660 image against Volume Descriptor fields";
22 license = licenses.asl20;
23 maintainers = with maintainers; [ mkg20001 ];
24+ mainProgram = "isolyzer";
25 };
26}
+1
pkgs/tools/cd-dvd/lsdvd/default.nix
···16 description = "Display information about audio, video, and subtitle tracks on a DVD";
17 license = licenses.gpl2;
18 platforms = platforms.linux;
019 };
20}
···16 description = "Display information about audio, video, and subtitle tracks on a DVD";
17 license = licenses.gpl2;
18 platforms = platforms.linux;
19+ mainProgram = "lsdvd";
20 };
21}
···29 license = licenses.unfree; # No license specified upstream
30 platforms = [ "x86_64-linux" ]; # Should work on Darwin as well, but this is untested. aarch64-linux fails.
31 maintainers = [ maintainers.ivar ];
032 };
33}
···29 license = licenses.unfree; # No license specified upstream
30 platforms = [ "x86_64-linux" ]; # Should work on Darwin as well, but this is untested. aarch64-linux fails.
31 maintainers = [ maintainers.ivar ];
32+ mainProgram = "nx2elf";
33 };
34}
···36 platforms = lib.platforms.unix;
37 # never built on aarch64-darwin, x86_64-darwin since first introduction in nixpkgs
38 broken = stdenv.isDarwin;
039 };
40}
···36 platforms = lib.platforms.unix;
37 # never built on aarch64-darwin, x86_64-darwin since first introduction in nixpkgs
38 broken = stdenv.isDarwin;
39+ mainProgram = "esshader";
40 };
41}
+1
pkgs/tools/graphics/exif/default.nix
···41 description = "A utility to read and manipulate EXIF data in digital photographs";
42 platforms = platforms.unix;
43 license = licenses.lgpl21Plus;
044 };
45}
···41 description = "A utility to read and manipulate EXIF data in digital photographs";
42 platforms = platforms.unix;
43 license = licenses.lgpl21Plus;
44+ mainProgram = "exif";
45 };
46}
···20 description = "Small utility to convert a set of PNG images to Microsoft ICO format";
21 license = lib.licenses.gpl2Plus;
22 platforms = with lib.platforms; linux;
023 };
24}
···20 description = "Small utility to convert a set of PNG images to Microsoft ICO format";
21 license = lib.licenses.gpl2Plus;
22 platforms = with lib.platforms; linux;
23+ mainProgram = "pngtoico";
24 };
25}