Uutils: Difference between revisions
m CLI_Applications |
mNo edit summary |
||
| (3 intermediate revisions by 2 users not shown) | |||
| Line 14: | Line 14: | ||
<small>For details, see [https://github.com/uutils/coreutils/blob/main/docs/src/extensions.md Uutils Coreutils - Extensions]</small> | <small>For details, see [https://github.com/uutils/coreutils/blob/main/docs/src/extensions.md Uutils Coreutils - Extensions]</small> | ||
[https://search.nixos.org/packages?show=uutils-diffutils Nixpkgs - <code>uutils-coreutils</code>] | |||
<small>If you want a prefixed package for some reason, use [https://search.nixos.org/packages?show=uutils-coreutils <code>uutils-coreutils</code>] instead</small> | <small>If you want a prefixed package for some reason, use [https://search.nixos.org/packages?show=uutils-coreutils <code>uutils-coreutils</code>] instead</small> | ||
== Findutils == | == Findutils == | ||
| Line 45: | Line 33: | ||
[https://search.nixos.org/packages?show=uutils-diffutils Nixpkgs - <code>uutils-diffutils</code>] | [https://search.nixos.org/packages?show=uutils-diffutils Nixpkgs - <code>uutils-diffutils</code>] | ||
== Installation == | |||
To do a systemwide replacement of gnu utils with uutils you can use system.replaceDependencies. It should be noted that the name of the dependency is hardcoded in the binaries, therefore the name of the replacing dependency needs to have exactly the same length as the name of the source dependency. To do this declaratively this snippet should be added to your configs: | |||
{{File|3={ pkgs, ... }: | |||
let | |||
coreutils-full-name = "coreuutils-full" + builtins.concatStringsSep "" | |||
(builtins.genList (_: "_") (builtins.stringLength pkgs.coreutils-full.version)); | |||
coreutils-name = "coreuutils" + builtins.concatStringsSep "" | |||
(builtins.genList (_: "_") (builtins.stringLength pkgs.coreutils.version)); | |||
findutils-name = "finduutils" + builtins.concatStringsSep "" | |||
(builtins.genList (_: "_") (builtins.stringLength pkgs.findutils.version)); | |||
diffutils-name = "diffuutils" + builtins.concatStringsSep "" | |||
(builtins.genList (_: "_") (builtins.stringLength pkgs.diffutils.version)); | |||
in | |||
{ | |||
system.replaceDependencies.replacements = [ | |||
# coreutils | |||
{ | |||
# system | |||
oldDependency = pkgs.coreutils-full; | |||
newDependency = pkgs.symlinkJoin { | |||
# Make the name length match so it builds | |||
name = coreutils-full-name; | |||
paths = [pkgs.uutils-coreutils-noprefix]; | |||
}; | |||
} | |||
{ | |||
# applications | |||
oldDependency = pkgs.coreutils; | |||
newDependency = pkgs.symlinkJoin { | |||
# Make the name length match so it builds | |||
name = coreutils-name; | |||
paths = [pkgs.uutils-coreutils-noprefix]; | |||
}; | |||
} | |||
# findutils | |||
{ | |||
# applications | |||
oldDependency = pkgs.findutils; | |||
newDependency = pkgs.symlinkJoin { | |||
# Make the name length match so it builds | |||
name = findutils-name; | |||
paths = [pkgs.uutils-findutils]; | |||
}; | |||
} | |||
# diffutils | |||
{ | |||
# applications | |||
oldDependency = pkgs.diffutils; | |||
newDependency = pkgs.symlinkJoin { | |||
# Make the name length match so it builds | |||
name = diffutils-name; | |||
paths = [pkgs.uutils-diffutils]; | |||
}; | |||
} | |||
]; | |||
}|name=/etc/nixos/configuration.nix|lang=nix}} | |||
It should be noted that this is of course still quite a hacky solution, as the name of the resulting binaries will simply be padded with the char '_'. A better solution might be found in the future. | |||
<small>For details, see [https://discourse.nixos.org/t/how-to-use-uutils-coreutils-instead-of-the-builtin-coreutils/8904/36?u=malix NixOS - Discourse: "How to use uutils-coreutils instead of the builtin coreutils?" (8904) - Comment 36]</small>}} | |||
[[Category:CLI_Applications]] | [[Category:CLI_Applications]] | ||
[[Category:Applications]] | [[Category:Applications]] | ||
[[Category:Rust]]] | [[Category:Rust]]] | ||
Latest revision as of 18:31, 25 October 2025
The Uutils project reimplements ubiquitous command line utilities in memory-safe Rust.
Coreutils
Introduction
Uutils Coreutils is a cross-platform memory-safe reimplementation of GNU Coreutils in Rust
While all programs have been implemented, some options might be missing or different behavior might be experienced
For details, see Uutils Coreutils - GNU Coreutils Test Coverage
Though the main goal of the project is compatibility, Uutils Coreutils supports a few features that are not supported by GNU Coreutils
For details, see Uutils Coreutils - Extensions
If you want a prefixed package for some reason, use uutils-coreutils instead
Findutils
Uutils Findutils is a cross-platform memory-safe reimplementation of GNU findutils: xargs, find, locate and updatedb
It aims to be a drop-in replacement of the original GNU findutils commands
Diffutils
Uutils Diffutils is is a cross-platform memory-safe reimplementation of GNU findutils: diff, cmp, diff3 and sdiff
It aims to be a drop-in replacement of the original GNU diffutils commands
Installation
To do a systemwide replacement of gnu utils with uutils you can use system.replaceDependencies. It should be noted that the name of the dependency is hardcoded in the binaries, therefore the name of the replacing dependency needs to have exactly the same length as the name of the source dependency. To do this declaratively this snippet should be added to your configs:
{ pkgs, ... }:
let
coreutils-full-name = "coreuutils-full" + builtins.concatStringsSep ""
(builtins.genList (_: "_") (builtins.stringLength pkgs.coreutils-full.version));
coreutils-name = "coreuutils" + builtins.concatStringsSep ""
(builtins.genList (_: "_") (builtins.stringLength pkgs.coreutils.version));
findutils-name = "finduutils" + builtins.concatStringsSep ""
(builtins.genList (_: "_") (builtins.stringLength pkgs.findutils.version));
diffutils-name = "diffuutils" + builtins.concatStringsSep ""
(builtins.genList (_: "_") (builtins.stringLength pkgs.diffutils.version));
in
{
system.replaceDependencies.replacements = [
# coreutils
{
# system
oldDependency = pkgs.coreutils-full;
newDependency = pkgs.symlinkJoin {
# Make the name length match so it builds
name = coreutils-full-name;
paths = [pkgs.uutils-coreutils-noprefix];
};
}
{
# applications
oldDependency = pkgs.coreutils;
newDependency = pkgs.symlinkJoin {
# Make the name length match so it builds
name = coreutils-name;
paths = [pkgs.uutils-coreutils-noprefix];
};
}
# findutils
{
# applications
oldDependency = pkgs.findutils;
newDependency = pkgs.symlinkJoin {
# Make the name length match so it builds
name = findutils-name;
paths = [pkgs.uutils-findutils];
};
}
# diffutils
{
# applications
oldDependency = pkgs.diffutils;
newDependency = pkgs.symlinkJoin {
# Make the name length match so it builds
name = diffutils-name;
paths = [pkgs.uutils-diffutils];
};
}
];
}
It should be noted that this is of course still quite a hacky solution, as the name of the resulting binaries will simply be padded with the char '_'. A better solution might be found in the future.
For details, see NixOS - Discourse: "How to use uutils-coreutils instead of the builtin coreutils?" (8904) - Comment 36}}]