diff options
author | tv <tv@krebsco.de> | 2017-05-24 01:43:50 +0200 |
---|---|---|
committer | tv <tv@krebsco.de> | 2017-05-24 01:43:50 +0200 |
commit | f0b98bd0114df1e1ebb82ff300f9532d86b3eb18 (patch) | |
tree | 58a39173f7d6d7caa10a7b8fec1b5a1e54f0c08c /krebs/5pkgs/simple/irc-announce/default.nix | |
parent | 46d6506916f699e3b707dc41cd68c92b98e50e5a (diff) |
krebs/5pkgs: move simple pkgs to a subdir
Diffstat (limited to 'krebs/5pkgs/simple/irc-announce/default.nix')
-rw-r--r-- | krebs/5pkgs/simple/irc-announce/default.nix | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/krebs/5pkgs/simple/irc-announce/default.nix b/krebs/5pkgs/simple/irc-announce/default.nix new file mode 100644 index 000000000..e1f4919d5 --- /dev/null +++ b/krebs/5pkgs/simple/irc-announce/default.nix @@ -0,0 +1,66 @@ +{ pkgs, lib, ... }: + +with lib; + +pkgs.writeDashBin "irc-announce" '' + set -euf + + export PATH=${makeSearchPath "bin" (with pkgs; [ + coreutils + gawk + gnused + netcat + nettools + ])} + + IRC_SERVER=$1 + IRC_PORT=$2 + IRC_NICK=$3$$ + IRC_CHANNEL=$4 + message=$5 + + export IRC_CHANNEL # for privmsg_cat + + # echo2 and cat2 are used output to both, stdout and stderr + # This is used to see what we send to the irc server. (debug output) + echo2() { echo "$*"; echo "$*" >&2; } + cat2() { tee /dev/stderr; } + + # privmsg_cat transforms stdin to a privmsg + privmsg_cat() { awk '{ print "PRIVMSG "ENVIRON["IRC_CHANNEL"]" :"$0 }'; } + + # ircin is used to feed the output of netcat back to the "irc client" + # so we can implement expect-like behavior with sed^_^ + # XXX mkselfdestructingtmpfifo would be nice instead of this cruft + tmpdir=$(mktemp --tmpdir -d irc-announce_XXXXXXXX) + cd "$tmpdir" + mkfifo ircin + trap " + rm ircin + cd '$OLDPWD' + rmdir '$tmpdir' + trap - EXIT INT QUIT + " EXIT INT QUIT + + { + echo2 "USER $LOGNAME 0 * :$LOGNAME@$(hostname)" + echo2 "NICK $IRC_NICK" + + # wait for MODE message + sed -n '/^:[^ ]* MODE /q' + + echo2 "JOIN $IRC_CHANNEL" + + printf '%s' "$message" \ + | privmsg_cat \ + | cat2 + + echo2 "PART $IRC_CHANNEL" + + # wait for PART confirmation + sed -n '/:'"$IRC_NICK"'![^ ]* PART /q' + + echo2 'QUIT :Gone to have lunch' + } < ircin \ + | nc "$IRC_SERVER" "$IRC_PORT" | tee -a ircin +'' |