Files
nix-helper-flake/flake.nix
T

62 lines
2.0 KiB
Nix

{
description = "A flake that provides a set of useful helper functions";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
outputs = { self, nixpkgs }: let
inherit (nixpkgs) lib;
in rec {
mkIfElse = with lib; p: yes: no: mkMerge [
(mkIf p yes)
(mkIf (!p) no)
];
mkSymlinkActivationScript = {target, source}: ''
if [ -e ${source} ]; then
if [ -e ${target} ]; then
rm -rf ${target}
fi
ln -s ${source} ${target}
fi
'';
attrByStrPath = strPath: set: lib.attrByPath (lib.strings.splitString "." strPath) null set;
setAttrByStrPath = strPath: value: lib.setAttrByPath (lib.strings.splitString "." strPath) value;
homeFilesFromStringAttrs = { dir, attrs, exec ? false }: mergeListsToAttrs (map (x: "${dir}/${x}") (builtins.attrNames attrs)) (map (y: {
text = y;
executable = exec;
}) (builtins.attrValues attrs));
prependShebangToString = x: "#!/usr/bin/env bash\n" + x;
localBinFromStringAttrs = attrs: homeFilesFromStringAttrs {
dir = ".local/bin";
attrs = builtins.mapAttrs (name: value: prependShebangToString value) attrs;
exec = true;
};
mergeListsToAttrs = names: values: lib.listToAttrs (lib.zipListsWith (name: value: { inherit name value; }) names values);
mkEnumFromDirContents = dir: lib.types.enum (map (name: lib.removeSuffix ".nix" name) (builtins.attrNames (builtins.readDir dir)));
mkOptionalListOfType = type: lib.types.either (type) (lib.types.listOf (type));
mkMirroredModulesFlakeModule = moduleName: func: {
flake.nixosModules.${moduleName} = func;
flake.homeModules.${moduleName} = func;
};
mkRedundantOptionDescription = name: value: "The functionality of this option completely depends on `${name}` being `${value}`, and will not be evaluated otherwise.";
mkRedundantOption = name: value: attrs: lib.mkOption {
inherit (attrs) type default;
description = "${attrs.description} ${mkRedundantOptionDescription name value}";
};
};
}