97 lines
2.2 KiB
Nix
97 lines
2.2 KiB
Nix
{ lib, pkgs, stdenv }:
|
|
|
|
stdenv.mkDerivation rec {
|
|
name = "TabFS";
|
|
|
|
src = pkgs.fetchgit (lib.importJSON ./src.json);
|
|
|
|
phases = [
|
|
"unpackPhase"
|
|
"buildPhase"
|
|
"installPhase"
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
pkgs.jq
|
|
];
|
|
|
|
buildInputs = [
|
|
pkgs.fuse
|
|
];
|
|
|
|
buildPhase = ''
|
|
make -C fs
|
|
'';
|
|
|
|
installPhase = ''
|
|
mkdir -p $out/bin
|
|
|
|
cp fs/tabfs $out/bin
|
|
|
|
${lib.concatStrings
|
|
(lib.mapAttrsToList
|
|
(name: spec: /* sh */ ''
|
|
jq < ${spec.source} > $out/bin/${name} \
|
|
--arg out $out \
|
|
--arg path ${lib.makeBinPath spec.path} \
|
|
-Rrs \
|
|
${lib.escapeShellArg /* jq */ ''
|
|
def when(cond; update): if cond then update else . end;
|
|
|
|
split("\n") |
|
|
map(${lib.concatMapStringsSep "|" (filter: "(${filter})")
|
|
(lib.toList (spec.filter or []) ++ [
|
|
/* jq */ ''when(test("^#!"); "\(.)\nexport PATH=\($path)")''
|
|
])
|
|
}) |
|
|
join("\n")
|
|
''}
|
|
chmod +x $out/bin/${name}
|
|
'')
|
|
{
|
|
tabfs-enable-native-messaging = {
|
|
source = "install.sh";
|
|
path = [
|
|
pkgs.coreutils
|
|
];
|
|
filter = /* jq */''
|
|
when(test("^EXE_PATH="); "EXE_PATH=\($out)/bin/tabfs-wrapper")
|
|
'';
|
|
};
|
|
tabfs-wrapper = {
|
|
source = "fs/tabfs-wrapper";
|
|
path = [
|
|
pkgs.coreutils
|
|
pkgs.findutils
|
|
pkgs.gnugrep
|
|
pkgs.procps
|
|
"/run/wrappers" # for fusermount
|
|
];
|
|
};
|
|
tabfs-build-crx = {
|
|
source = "build-crx.sh";
|
|
path = [
|
|
pkgs.coreutils
|
|
pkgs.crx
|
|
pkgs.gnugrep
|
|
pkgs.jq
|
|
pkgs.openssl
|
|
];
|
|
filter = /* jq */''
|
|
when(test("^source_dir=");
|
|
sub("\\$\\(dirname \"\\$0\"\\)"; ${builtins.toJSON src})
|
|
)
|
|
'';
|
|
};
|
|
tabfs-install-crx = {
|
|
source = "install-crx.sh";
|
|
path = [
|
|
pkgs.coreutils
|
|
];
|
|
};
|
|
}
|
|
)
|
|
}
|
|
'';
|
|
}
|