{
  pkgs,
  config,
  lib,
  ...
}:
let
  inherit (lib)
    types
    mkMerge
    mkOption
    mkIf
    mkEnableOption
    ;
  runes = {
    othalan = import ./othalan.nix;
    algiz = import ./algiz.nix;
    mannaz = import ./mannaz.nix;
    naudiz = import ./naudiz.nix;
  };
  mkRune =
    {
      name,
      number ? "6",
      kind ? "braille",
    }:
    "[1;3${number}m\n" + runes.${name}.${kind} + "\n";

  cfg = config.oizys.rune;
in
{
  options.oizys = {
    rune = {
      enable = mkOption {
        type = types.bool;
        default = true;
      };
      motd.enable = mkEnableOption "set rune for MOTD";
      name = mkOption {
        default = config.networking.hostName;
        type = types.either (types.enum (builtins.attrNames runes)) types.str;
        description = "Name of rune (probabaly matches hostname)";
      };
      kind = mkOption {
        type =
          with types;
          either (enum [
            "ascii"
            "braille"
          ]) str;
        default = "ascii";
      };
    };
  };

  config = mkMerge [
    (mkIf cfg.enable {
      environment.etc.issue = {
        source = pkgs.writeText "issue" (mkRune {
          name = cfg.name;
          kind = cfg.kind;
        });
      };
    })
    (mkIf cfg.motd.enable {
      users.motd = mkRune {
        number = "2"; # todo: autogenerate based on hostname?
        name = cfg.name;
      };
    })
  ];
}