88 lines
2.3 KiB
Nix
88 lines
2.3 KiB
Nix
{
|
|
inputs,
|
|
pkgs,
|
|
...
|
|
}:
|
|
inputs.nixpkgs.lib.extend (
|
|
final: prev:
|
|
let
|
|
lib = prev;
|
|
in
|
|
{
|
|
# Should probably be moved to a package later instead of this
|
|
ensureZfsMounts = pkgs.writeShellApplication {
|
|
name = "zfsEnsureMounted";
|
|
runtimeInputs = with pkgs; [
|
|
zfs
|
|
gnugrep
|
|
gawk
|
|
coreutils
|
|
];
|
|
|
|
text = ''
|
|
#!/bin/sh -x
|
|
|
|
if [[ "$#" -eq "0" ]]; then
|
|
echo "no arguments passed"
|
|
exit 1
|
|
fi
|
|
|
|
TARGETS=$(echo "$@" | sort | uniq)
|
|
MOUNTED=$(zfs list -o mountpoint,mounted -H | awk '$2 == "yes" {print $1}' | sort | uniq)
|
|
NUM_MATCHED=$(echo "$MOUNTED" | grep -Ec "$(echo "$@" | tr ' ' '\|')") # does not properly handle paths with strings
|
|
if [[ "$NUM_MATCHED" -eq "$#" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
FOUND=$(printf "%s\n%s" "$TARGETS" "$MOUNTED" | sort | uniq -c | awk '$1 == "2" {print $2}' | sort)
|
|
MISSING=$(printf "%s\n%s" "$FOUND" "$TARGETS" | sort | uniq -u | sort)
|
|
|
|
echo "FAILURE, missing: $MISSING" 1>&2
|
|
exit 1
|
|
'';
|
|
};
|
|
|
|
serviceMountDeps = serviceName: dirs: {
|
|
systemd.services."${serviceName}_mounts" = {
|
|
wants = [ "zfs.target" ];
|
|
before = [ "${serviceName}.service" ];
|
|
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
RemainAfterExit = true;
|
|
ExecStart = "${lib.getExe final.ensureZfsMounts} ${lib.strings.concatStringsSep " " dirs}";
|
|
};
|
|
};
|
|
|
|
systemd.services.${serviceName} = {
|
|
wants = [ "${serviceName}_mounts.service" ];
|
|
after = [ "${serviceName}_mounts.service" ];
|
|
requires = [ "${serviceName}_mounts.service" ];
|
|
};
|
|
};
|
|
|
|
# stolen from: https://stackoverflow.com/a/42398526
|
|
optimizeWithFlags =
|
|
pkg: flags:
|
|
lib.overrideDerivation pkg (
|
|
old:
|
|
let
|
|
newflags = lib.foldl' (acc: x: "${acc} ${x}") "" flags;
|
|
oldflags = if (lib.hasAttr "NIX_CFLAGS_COMPILE" old) then "${old.NIX_CFLAGS_COMPILE}" else "";
|
|
in
|
|
{
|
|
NIX_CFLAGS_COMPILE = "${oldflags} ${newflags}";
|
|
# stdenv = pkgs.clang19Stdenv;
|
|
}
|
|
);
|
|
|
|
optimizePackage =
|
|
pkg:
|
|
final.optimizeWithFlags pkg [
|
|
"-O3"
|
|
"-march=znver3"
|
|
"-mtune=znver3"
|
|
];
|
|
}
|
|
)
|