atool is a commandline archive manager that uses packages like gnutar, p7zip, unrar, and zip as backends for viewing, creating, and extracting their corresponding archive formats.
83 lines
2 KiB
Nix
83 lines
2 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
let
|
|
inherit (lib)
|
|
mkOption
|
|
types
|
|
;
|
|
cfg = config.programs.atool;
|
|
in
|
|
{
|
|
meta.maintainers = [ lib.hm.maintainers.oneorseveralcats ];
|
|
|
|
options.programs.atool = {
|
|
enable = lib.mkEnableOption "atool a commandline archive manager.";
|
|
|
|
package = lib.mkPackageOption pkgs "atool" { nullable = true; };
|
|
|
|
finalPackage = mkOption {
|
|
type = types.package;
|
|
readOnly = true;
|
|
description = ''
|
|
Final atool package bundled with extraPackages.
|
|
'';
|
|
};
|
|
|
|
settings = mkOption {
|
|
type = with types; attrsOf (either str int);
|
|
default = { };
|
|
example = {
|
|
path_unrar = "unrar-free";
|
|
};
|
|
description = ''
|
|
atool settings to generate {file}`~/.atoolrc`.
|
|
'';
|
|
};
|
|
|
|
extraPackages = mkOption {
|
|
type = types.listOf types.package;
|
|
default = [ ];
|
|
example = lib.literalExpression ''
|
|
# all supported archive backends
|
|
with pkgs; [ bzip2 cpio gnutar gzip lhasa lzop p7zip unrar-free unzip xz zip ]
|
|
'';
|
|
description = "Extra packages for atool.";
|
|
};
|
|
};
|
|
|
|
config =
|
|
let
|
|
atoolPackage =
|
|
if (cfg.extraPackages != [ ]) then
|
|
(pkgs.symlinkJoin {
|
|
name = "atool-wrapped";
|
|
paths = [ cfg.package ];
|
|
buildInputs = [ pkgs.makeWrapper ];
|
|
postBuild = ''
|
|
wrapProgram $out/bin/atool \
|
|
--suffix PATH : ${lib.makeBinPath cfg.extraPackages}
|
|
'';
|
|
})
|
|
else
|
|
cfg.package;
|
|
in
|
|
lib.mkIf cfg.enable {
|
|
programs.atool.finalPackage = atoolPackage;
|
|
|
|
home.packages = lib.mkIf (cfg.package != null) [
|
|
cfg.finalPackage
|
|
];
|
|
|
|
home.file.".atoolrc" = lib.mkIf (cfg.settings != { }) {
|
|
source = pkgs.writeText ".atoolrc" (
|
|
lib.generators.toKeyValue {
|
|
mkKeyValue = lib.generators.mkKeyValueDefault { } " ";
|
|
} cfg.settings
|
|
);
|
|
};
|
|
};
|
|
}
|