{ config, pkgs, lib, namespace, host, ... }: let inherit (lib) types mkIf; inherit (lib.${namespace}) mkOpt; cfg = config.${namespace}.services.openiscsi; in { options.${namespace}.services.openiscsi = { enable = lib.mkEnableOption "Open iSCSI support"; name = mkOpt types.str "iqn.2025.reichard.io:${host}" "iSCSI name"; symlink = mkOpt types.bool false "Create a symlink to the iSCSI binaries"; }; config = mkIf cfg.enable { boot.kernelModules = [ "iscsi_tcp" "libiscsi" "scsi_transport_iscsi" ]; services.openiscsi = { enable = true; name = cfg.name; }; environment.systemPackages = with pkgs; [ openiscsi ]; # Predominately used for RKE2 & Democratic CSI system.activationScripts.iscsi-symlink = mkIf cfg.symlink '' mkdir -p /usr/bin ln -sf ${pkgs.openiscsi}/bin/iscsiadm /usr/bin/iscsiadm ln -sf ${pkgs.openiscsi}/bin/iscsid /usr/bin/iscsid ''; }; }