kubo: rename from ipfs

Go-IPFS was renamed to Kubo in version 0.14.0, see https://github.com/ipfs/kubo/issues/8959.
This commit is contained in:
Luflosi 2022-07-24 20:49:05 +02:00
parent 7cb6b3251f
commit eefaaf41d6
No known key found for this signature in database
GPG key ID: 4E41E29EDCC345D0
13 changed files with 104 additions and 75 deletions

View file

@ -721,7 +721,7 @@
./services/network-filesystems/drbd.nix ./services/network-filesystems/drbd.nix
./services/network-filesystems/glusterfs.nix ./services/network-filesystems/glusterfs.nix
./services/network-filesystems/kbfs.nix ./services/network-filesystems/kbfs.nix
./services/network-filesystems/ipfs.nix ./services/network-filesystems/kubo.nix
./services/network-filesystems/litestream/default.nix ./services/network-filesystems/litestream/default.nix
./services/network-filesystems/netatalk.nix ./services/network-filesystems/netatalk.nix
./services/network-filesystems/nfsd.nix ./services/network-filesystems/nfsd.nix

View file

@ -1,9 +1,9 @@
{ config, lib, pkgs, utils, ... }: { config, lib, pkgs, utils, ... }:
with lib; with lib;
let let
cfg = config.services.ipfs; cfg = config.services.kubo;
ipfsFlags = utils.escapeSystemdExecArgs ( kuboFlags = utils.escapeSystemdExecArgs (
optional cfg.autoMount "--mount" ++ optional cfg.autoMount "--mount" ++
optional cfg.enableGC "--enable-gc" ++ optional cfg.enableGC "--enable-gc" ++
optional (cfg.serviceFdlimit != null) "--manage-fdlimit=false" ++ optional (cfg.serviceFdlimit != null) "--manage-fdlimit=false" ++
@ -50,27 +50,27 @@ in
options = { options = {
services.ipfs = { services.kubo = {
enable = mkEnableOption (lib.mdDoc "Interplanetary File System (WARNING: may cause severe network degredation)"); enable = mkEnableOption (lib.mdDoc "Interplanetary File System (WARNING: may cause severe network degredation)");
package = mkOption { package = mkOption {
type = types.package; type = types.package;
default = pkgs.ipfs; default = pkgs.kubo;
defaultText = literalExpression "pkgs.ipfs"; defaultText = literalExpression "pkgs.kubo";
description = lib.mdDoc "Which IPFS package to use."; description = lib.mdDoc "Which Kubo package to use.";
}; };
user = mkOption { user = mkOption {
type = types.str; type = types.str;
default = "ipfs"; default = "ipfs";
description = lib.mdDoc "User under which the IPFS daemon runs"; description = lib.mdDoc "User under which the Kubo daemon runs";
}; };
group = mkOption { group = mkOption {
type = types.str; type = types.str;
default = "ipfs"; default = "ipfs";
description = lib.mdDoc "Group under which the IPFS daemon runs"; description = lib.mdDoc "Group under which the Kubo daemon runs";
}; };
dataDir = mkOption { dataDir = mkOption {
@ -84,7 +84,7 @@ in
then "/var/lib/ipfs" then "/var/lib/ipfs"
else "/var/lib/ipfs/.ipfs" else "/var/lib/ipfs/.ipfs"
''; '';
description = lib.mdDoc "The data dir for IPFS"; description = lib.mdDoc "The data dir for Kubo";
}; };
defaultMode = mkOption { defaultMode = mkOption {
@ -96,13 +96,13 @@ in
autoMount = mkOption { autoMount = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = lib.mdDoc "Whether IPFS should try to mount /ipfs and /ipns at startup."; description = lib.mdDoc "Whether Kubo should try to mount /ipfs and /ipns at startup.";
}; };
autoMigrate = mkOption { autoMigrate = mkOption {
type = types.bool; type = types.bool;
default = true; default = true;
description = lib.mdDoc "Whether IPFS should try to run the fs-repo-migration at startup."; description = lib.mdDoc "Whether Kubo should try to run the fs-repo-migration at startup.";
}; };
ipfsMountDir = mkOption { ipfsMountDir = mkOption {
@ -126,7 +126,7 @@ in
apiAddress = mkOption { apiAddress = mkOption {
type = types.str; type = types.str;
default = "/ip4/127.0.0.1/tcp/5001"; default = "/ip4/127.0.0.1/tcp/5001";
description = lib.mdDoc "Where IPFS exposes its API to"; description = lib.mdDoc "Where Kubo exposes its API to";
}; };
swarmAddress = mkOption { swarmAddress = mkOption {
@ -137,7 +137,7 @@ in
"/ip4/0.0.0.0/udp/4001/quic" "/ip4/0.0.0.0/udp/4001/quic"
"/ip6/::/udp/4001/quic" "/ip6/::/udp/4001/quic"
]; ];
description = lib.mdDoc "Where IPFS listens for incoming p2p connections"; description = lib.mdDoc "Where Kubo listens for incoming p2p connections";
}; };
enableGC = mkOption { enableGC = mkOption {
@ -174,14 +174,14 @@ in
extraFlags = mkOption { extraFlags = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
description = lib.mdDoc "Extra flags passed to the IPFS daemon"; description = lib.mdDoc "Extra flags passed to the Kubo daemon";
default = [ ]; default = [ ];
}; };
localDiscovery = mkOption { localDiscovery = mkOption {
type = types.bool; type = types.bool;
description = lib.mdDoc ''Whether to enable local discovery for the ipfs daemon. description = lib.mdDoc ''Whether to enable local discovery for the Kubo daemon.
This will allow ipfs to scan ports on your local network. Some hosting services will ban you if you do this. This will allow Kubo to scan ports on your local network. Some hosting services will ban you if you do this.
''; '';
default = false; default = false;
}; };
@ -189,14 +189,14 @@ in
serviceFdlimit = mkOption { serviceFdlimit = mkOption {
type = types.nullOr types.int; type = types.nullOr types.int;
default = null; default = null;
description = lib.mdDoc "The fdlimit for the IPFS systemd unit or `null` to have the daemon attempt to manage it"; description = lib.mdDoc "The fdlimit for the Kubo systemd unit or `null` to have the daemon attempt to manage it";
example = 64 * 1024; example = 64 * 1024;
}; };
startWhenNeeded = mkOption { startWhenNeeded = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = lib.mdDoc "Whether to use socket activation to start IPFS when needed."; description = lib.mdDoc "Whether to use socket activation to start Kubo when needed.";
}; };
}; };
@ -223,7 +223,7 @@ in
uid = config.ids.uids.ipfs; uid = config.ids.uids.ipfs;
description = "IPFS daemon user"; description = "IPFS daemon user";
packages = [ packages = [
pkgs.ipfs-migrator pkgs.kubo-migrator
]; ];
}; };
}; };
@ -255,7 +255,7 @@ in
# After an unclean shutdown this file may exist which will cause the config command to attempt to talk to the daemon. This will hang forever if systemd is holding our sockets open. # After an unclean shutdown this file may exist which will cause the config command to attempt to talk to the daemon. This will hang forever if systemd is holding our sockets open.
rm -vf "$IPFS_PATH/api" rm -vf "$IPFS_PATH/api"
'' + optionalString cfg.autoMigrate '' '' + optionalString cfg.autoMigrate ''
${pkgs.ipfs-migrator}/bin/fs-repo-migrations -to '${cfg.package.repoVersion}' -y ${pkgs.kubo-migrator}/bin/fs-repo-migrations -to '${cfg.package.repoVersion}' -y
'' + '' '' + ''
ipfs --offline config profile apply ${profile} >/dev/null ipfs --offline config profile apply ${profile} >/dev/null
fi fi
@ -279,7 +279,7 @@ in
| ipfs --offline config replace - | ipfs --offline config replace -
''; '';
serviceConfig = { serviceConfig = {
ExecStart = [ "" "${cfg.package}/bin/ipfs daemon ${ipfsFlags}" ]; ExecStart = [ "" "${cfg.package}/bin/ipfs daemon ${kuboFlags}" ];
User = cfg.user; User = cfg.user;
Group = cfg.group; Group = cfg.group;
StateDirectory = ""; StateDirectory = "";
@ -320,4 +320,27 @@ in
meta = { meta = {
maintainers = with lib.maintainers; [ Luflosi ]; maintainers = with lib.maintainers; [ Luflosi ];
}; };
imports = [
(mkRenamedOptionModule [ "services" "ipfs" "enable" ] [ "services" "kubo" "enable" ])
(mkRenamedOptionModule [ "services" "ipfs" "package" ] [ "services" "kubo" "package" ])
(mkRenamedOptionModule [ "services" "ipfs" "user" ] [ "services" "kubo" "user" ])
(mkRenamedOptionModule [ "services" "ipfs" "group" ] [ "services" "kubo" "group" ])
(mkRenamedOptionModule [ "services" "ipfs" "dataDir" ] [ "services" "kubo" "dataDir" ])
(mkRenamedOptionModule [ "services" "ipfs" "defaultMode" ] [ "services" "kubo" "defaultMode" ])
(mkRenamedOptionModule [ "services" "ipfs" "autoMount" ] [ "services" "kubo" "autoMount" ])
(mkRenamedOptionModule [ "services" "ipfs" "autoMigrate" ] [ "services" "kubo" "autoMigrate" ])
(mkRenamedOptionModule [ "services" "ipfs" "ipfsMountDir" ] [ "services" "kubo" "ipfsMountDir" ])
(mkRenamedOptionModule [ "services" "ipfs" "ipnsMountDir" ] [ "services" "kubo" "ipnsMountDir" ])
(mkRenamedOptionModule [ "services" "ipfs" "gatewayAddress" ] [ "services" "kubo" "gatewayAddress" ])
(mkRenamedOptionModule [ "services" "ipfs" "apiAddress" ] [ "services" "kubo" "apiAddress" ])
(mkRenamedOptionModule [ "services" "ipfs" "swarmAddress" ] [ "services" "kubo" "swarmAddress" ])
(mkRenamedOptionModule [ "services" "ipfs" "enableGC" ] [ "services" "kubo" "enableGC" ])
(mkRenamedOptionModule [ "services" "ipfs" "emptyRepo" ] [ "services" "kubo" "emptyRepo" ])
(mkRenamedOptionModule [ "services" "ipfs" "extraConfig" ] [ "services" "kubo" "extraConfig" ])
(mkRenamedOptionModule [ "services" "ipfs" "extraFlags" ] [ "services" "kubo" "extraFlags" ])
(mkRenamedOptionModule [ "services" "ipfs" "localDiscovery" ] [ "services" "kubo" "localDiscovery" ])
(mkRenamedOptionModule [ "services" "ipfs" "serviceFdlimit" ] [ "services" "kubo" "serviceFdlimit" ])
(mkRenamedOptionModule [ "services" "ipfs" "startWhenNeeded" ] [ "services" "kubo" "startWhenNeeded" ])
];
} }

View file

@ -284,7 +284,6 @@ in {
installer-systemd-stage-1 = handleTest ./installer-systemd-stage-1.nix {}; installer-systemd-stage-1 = handleTest ./installer-systemd-stage-1.nix {};
invoiceplane = handleTest ./invoiceplane.nix {}; invoiceplane = handleTest ./invoiceplane.nix {};
iodine = handleTest ./iodine.nix {}; iodine = handleTest ./iodine.nix {};
ipfs = handleTest ./ipfs.nix {};
ipv6 = handleTest ./ipv6.nix {}; ipv6 = handleTest ./ipv6.nix {};
iscsi-multipath-root = handleTest ./iscsi-multipath-root.nix {}; iscsi-multipath-root = handleTest ./iscsi-multipath-root.nix {};
iscsi-root = handleTest ./iscsi-root.nix {}; iscsi-root = handleTest ./iscsi-root.nix {};
@ -317,6 +316,7 @@ in {
ksm = handleTest ./ksm.nix {}; ksm = handleTest ./ksm.nix {};
kthxbye = handleTest ./kthxbye.nix {}; kthxbye = handleTest ./kthxbye.nix {};
kubernetes = handleTestOn ["x86_64-linux"] ./kubernetes {}; kubernetes = handleTestOn ["x86_64-linux"] ./kubernetes {};
kubo = handleTest ./kubo.nix {};
ladybird = handleTest ./ladybird.nix {}; ladybird = handleTest ./ladybird.nix {};
languagetool = handleTest ./languagetool.nix {}; languagetool = handleTest ./languagetool.nix {};
latestKernel.login = handleTest ./login.nix { latestKernel = true; }; latestKernel.login = handleTest ./login.nix { latestKernel = true; };

View file

@ -1,11 +1,11 @@
import ./make-test-python.nix ({ pkgs, ...} : { import ./make-test-python.nix ({ pkgs, ...} : {
name = "ipfs"; name = "kubo";
meta = with pkgs.lib.maintainers; { meta = with pkgs.lib.maintainers; {
maintainers = [ mguentner ]; maintainers = [ mguentner ];
}; };
nodes.machine = { ... }: { nodes.machine = { ... }: {
services.ipfs = { services.kubo = {
enable = true; enable = true;
# Also will add a unix domain socket socket API address, see module. # Also will add a unix domain socket socket API address, see module.
startWhenNeeded = true; startWhenNeeded = true;
@ -15,7 +15,7 @@ import ./make-test-python.nix ({ pkgs, ...} : {
}; };
nodes.fuse = { ... }: { nodes.fuse = { ... }: {
services.ipfs = { services.kubo = {
enable = true; enable = true;
apiAddress = "/ip4/127.0.0.1/tcp/2324"; apiAddress = "/ip4/127.0.0.1/tcp/2324";
autoMount = true; autoMount = true;

View file

@ -1,23 +0,0 @@
{ lib
, buildEnv
, makeWrapper
, ipfs-migrator-unwrapped
, ipfs-migrator-all-fs-repo-migrations
}:
buildEnv {
name = "ipfs-migrator-${ipfs-migrator-unwrapped.version}";
nativeBuildInputs = [ makeWrapper ];
paths = [ ipfs-migrator-unwrapped ];
pathsToLink = [ "/bin" ];
postBuild = ''
wrapProgram "$out/bin/fs-repo-migrations" \
--prefix PATH ':' '${lib.makeBinPath [ ipfs-migrator-all-fs-repo-migrations ]}'
'';
inherit (ipfs-migrator-unwrapped) meta;
}

View file

@ -2,23 +2,23 @@
, stdenv , stdenv
, symlinkJoin , symlinkJoin
, buildGoModule , buildGoModule
, ipfs-migrator-unwrapped , kubo-migrator-unwrapped
}: }:
# This package contains all the individual migrations in the bin directory. # This package contains all the individual migrations in the bin directory.
# This is used by fs-repo-migrations and could also be used by IPFS itself # This is used by fs-repo-migrations and could also be used by Kubo itself
# when starting it like this: ipfs daemon --migrate # when starting it like this: ipfs daemon --migrate
let let
fs-repo-common = pname: version: buildGoModule { fs-repo-common = pname: version: buildGoModule {
inherit pname version; inherit pname version;
inherit (ipfs-migrator-unwrapped) src; inherit (kubo-migrator-unwrapped) src;
sourceRoot = "source/${pname}"; sourceRoot = "source/${pname}";
vendorSha256 = null; vendorSha256 = null;
doCheck = false; doCheck = false;
meta = ipfs-migrator-unwrapped.meta // { meta = kubo-migrator-unwrapped.meta // {
mainProgram = pname; mainProgram = pname;
description = "Individual migration for the filesystem repository of ipfs clients"; description = "Individual migration for the filesystem repository of Kubo clients";
}; };
}; };
@ -58,6 +58,6 @@ let
in in
symlinkJoin { symlinkJoin {
name = "ipfs-migrator-all-fs-repo-migrations-${version}"; name = "kubo-migrator-all-fs-repo-migrations-${version}";
paths = all-migrations; paths = all-migrations;
} }

View file

@ -0,0 +1,23 @@
{ lib
, buildEnv
, makeWrapper
, kubo-migrator-unwrapped
, kubo-migrator-all-fs-repo-migrations
}:
buildEnv {
name = "kubo-migrator-${kubo-migrator-unwrapped.version}";
nativeBuildInputs = [ makeWrapper ];
paths = [ kubo-migrator-unwrapped ];
pathsToLink = [ "/bin" ];
postBuild = ''
wrapProgram "$out/bin/fs-repo-migrations" \
--prefix PATH ':' '${lib.makeBinPath [ kubo-migrator-all-fs-repo-migrations ]}'
'';
inherit (kubo-migrator-unwrapped) meta;
}

View file

@ -4,7 +4,7 @@
}: }:
buildGoModule rec { buildGoModule rec {
pname = "ipfs-migrator"; pname = "kubo-migrator";
version = "2.0.2"; version = "2.0.2";
src = fetchFromGitHub { src = fetchFromGitHub {
@ -26,7 +26,7 @@ buildGoModule rec {
doCheck = false; doCheck = false;
meta = with lib; { meta = with lib; {
description = "Migrations for the filesystem repository of ipfs clients"; description = "Migrations for the filesystem repository of Kubo clients";
homepage = "https://github.com/ipfs/fs-repo-migrations"; homepage = "https://github.com/ipfs/fs-repo-migrations";
license = licenses.mit; license = licenses.mit;
maintainers = with maintainers; [ Luflosi elitak ]; maintainers = with maintainers; [ Luflosi elitak ];

View file

@ -1,13 +1,13 @@
{ lib, buildGoModule, fetchurl, nixosTests, openssl, pkg-config }: { lib, buildGoModule, fetchurl, nixosTests, openssl, pkg-config }:
buildGoModule rec { buildGoModule rec {
pname = "ipfs"; pname = "kubo";
version = "0.15.0"; # When updating, also check if the repo version changed and adjust repoVersion below version = "0.15.0"; # When updating, also check if the repo version changed and adjust repoVersion below
rev = "v${version}"; rev = "v${version}";
passthru.repoVersion = "12"; # Also update ipfs-migrator when changing the repo version passthru.repoVersion = "12"; # Also update kubo-migrator when changing the repo version
# go-ipfs makes changes to it's source tarball that don't match the git source. # Kubo makes changes to it's source tarball that don't match the git source.
src = fetchurl { src = fetchurl {
url = "https://github.com/ipfs/kubo/releases/download/${rev}/kubo-source.tar.gz"; url = "https://github.com/ipfs/kubo/releases/download/${rev}/kubo-source.tar.gz";
hash = "sha256-GkOY1G2CKXbMbHXkw5v27HmfkJIl2nZOmjjZbzuaRWs="; hash = "sha256-GkOY1G2CKXbMbHXkw5v27HmfkJIl2nZOmjjZbzuaRWs=";
@ -15,10 +15,10 @@ buildGoModule rec {
# tarball contains multiple files/directories # tarball contains multiple files/directories
postUnpack = '' postUnpack = ''
mkdir ipfs-src mkdir kubo-src
shopt -s extglob shopt -s extglob
mv !(ipfs-src) ipfs-src || true mv !(kubo-src) kubo-src || true
cd ipfs-src cd kubo-src
''; '';
sourceRoot = "."; sourceRoot = ".";
@ -29,7 +29,7 @@ buildGoModule rec {
nativeBuildInputs = [ pkg-config ]; nativeBuildInputs = [ pkg-config ];
tags = [ "openssl" ]; tags = [ "openssl" ];
passthru.tests.ipfs = nixosTests.ipfs; passthru.tests.kubo = nixosTests.kubo;
vendorSha256 = null; vendorSha256 = null;
@ -57,6 +57,7 @@ buildGoModule rec {
homepage = "https://ipfs.io/"; homepage = "https://ipfs.io/";
license = licenses.mit; license = licenses.mit;
platforms = platforms.unix; platforms = platforms.unix;
mainProgram = "ipfs";
maintainers = with maintainers; [ fpletz ]; maintainers = with maintainers; [ fpletz ];
}; };
} }

View file

@ -14,7 +14,7 @@
, pytest-order , pytest-order
, pytest-cid , pytest-cid
, mock , mock
, ipfs , kubo
, httpx , httpx
, httpcore , httpcore
}: }:
@ -46,7 +46,7 @@ buildPythonPackage rec {
pytest-order pytest-order
pytest-cid pytest-cid
mock mock
ipfs kubo
httpcore httpcore
httpx httpx
]; ];

View file

@ -1,5 +1,5 @@
{ lib, buildPythonPackage, pythonOlder, fetchFromSourcehut { lib, buildPythonPackage, pythonOlder, fetchFromSourcehut
, ipfs, packaging, tomli }: , kubo, packaging, tomli }:
buildPythonPackage rec { buildPythonPackage rec {
pname = "ipwhl"; pname = "ipwhl";
@ -14,7 +14,7 @@ buildPythonPackage rec {
sha256 = "sha256-YaIYcoUnbiv9wUOFIzGj2sWGbh7NsqRQcqOR2X6+QZA="; sha256 = "sha256-YaIYcoUnbiv9wUOFIzGj2sWGbh7NsqRQcqOR2X6+QZA=";
}; };
buildInputs = [ ipfs ]; buildInputs = [ kubo ];
propagatedBuildInputs = [ packaging tomli ]; propagatedBuildInputs = [ packaging tomli ];
doCheck = false; # there's no test doCheck = false; # there's no test
pythonImportsCheck = [ "ipwhl" ]; pythonImportsCheck = [ "ipwhl" ];

View file

@ -515,6 +515,10 @@ mapAliases ({
interfacer = throw "interfacer is deprecated and archived by upstream"; # Added 2022-04-05 interfacer = throw "interfacer is deprecated and archived by upstream"; # Added 2022-04-05
inter-ui = throw "'inter-ui' has been renamed to/replaced by 'inter'"; # Converted to throw 2022-09-24 inter-ui = throw "'inter-ui' has been renamed to/replaced by 'inter'"; # Converted to throw 2022-09-24
iops = throw "iops was removed: upstream is gone"; # Added 2022-02-06 iops = throw "iops was removed: upstream is gone"; # Added 2022-02-06
ipfs = kubo; # Added 2022-09-27
ipfs-migrator-all-fs-repo-migrations = kubo-migrator-all-fs-repo-migrations; # Added 2022-09-27
ipfs-migrator-unwrapped = kubo-migrator-unwrapped; # Added 2022-09-27
ipfs-migrator = kubo-migrator; # Added 2022-09-27
iproute = throw "'iproute' has been renamed to/replaced by 'iproute2'"; # Converted to throw 2022-09-24 iproute = throw "'iproute' has been renamed to/replaced by 'iproute2'"; # Converted to throw 2022-09-24
ipsecTools = throw "ipsecTools has benn removed, because it was no longer maintained upstream"; # Added 2021-12-15 ipsecTools = throw "ipsecTools has benn removed, because it was no longer maintained upstream"; # Added 2021-12-15
itch-setup = throw "itch-setup has benn removed, use itch instead"; # Added 2022-06-02 itch-setup = throw "itch-setup has benn removed, use itch instead"; # Added 2022-06-02

View file

@ -7830,17 +7830,10 @@ with pkgs;
ipfetch = callPackage ../tools/networking/ipfetch { }; ipfetch = callPackage ../tools/networking/ipfetch { };
ipfs = callPackage ../applications/networking/ipfs {
openssl = openssl_1_1;
};
ipfs-cluster = callPackage ../applications/networking/ipfs-cluster { ipfs-cluster = callPackage ../applications/networking/ipfs-cluster {
buildGoModule = buildGo119Module; buildGoModule = buildGo119Module;
}; };
ipfs-migrator-all-fs-repo-migrations = callPackage ../applications/networking/ipfs-migrator/all-migrations.nix { };
ipfs-migrator-unwrapped = callPackage ../applications/networking/ipfs-migrator/unwrapped.nix { };
ipfs-migrator = callPackage ../applications/networking/ipfs-migrator { };
ipfs-upload-client = callPackage ../applications/networking/ipfs-upload-client { }; ipfs-upload-client = callPackage ../applications/networking/ipfs-upload-client { };
ipget = callPackage ../applications/networking/ipget { }; ipget = callPackage ../applications/networking/ipget { };
@ -8185,6 +8178,14 @@ with pkgs;
kubergrunt = callPackage ../applications/networking/cluster/kubergrunt { }; kubergrunt = callPackage ../applications/networking/cluster/kubergrunt { };
kubo = callPackage ../applications/networking/kubo {
openssl = openssl_1_1;
};
kubo-migrator-all-fs-repo-migrations = callPackage ../applications/networking/kubo-migrator/all-migrations.nix { };
kubo-migrator-unwrapped = callPackage ../applications/networking/kubo-migrator/unwrapped.nix { };
kubo-migrator = callPackage ../applications/networking/kubo-migrator { };
kwalletcli = libsForQt5.callPackage ../tools/security/kwalletcli { }; kwalletcli = libsForQt5.callPackage ../tools/security/kwalletcli { };
peruse = libsForQt5.callPackage ../tools/misc/peruse { }; peruse = libsForQt5.callPackage ../tools/misc/peruse { };