{ lib, pkgs, stockholm, ... }: with stockholm.lib; rec { generators = { command_hook = commands: { pattern = "^\\s*([0-9A-Za-z._][0-9A-Za-z._-]*)(?:\\s+(.*\\S))?\\s*$"; command = 1; arguments = [2]; commands = commands; }; }; commands = { random-emoji = { filename = <stockholm/krebs/5pkgs/simple/Reaktor/scripts/random-emoji.sh>; env = { PATH = makeBinPath (with pkgs; [ coreutils gnused gnugrep xmlstarlet wget ]); }; }; dance = { filename = pkgs.writeDash "dance" '' ${pkgs.krebsdance}/bin/krebsdance --dance "$@"; ''; }; nixos-version = { filename = pkgs.writeDash "nixos-version" '' . /etc/os-release echo "$PRETTY_NAME" ''; }; stockholm-issue = { filename = <stockholm/krebs/5pkgs/simple/Reaktor/scripts/random-issue.sh>; env = { PATH = makeBinPath (with pkgs; [ coreutils git gnused haskellPackages.lentil ]); origin = "http://cgit.gum/stockholm"; state_dir = "/tmp/stockholm-issue"; }; }; }; hooks = { sed = { activate = "always"; pattern = "^(.*)$"; arguments = [1]; command = { env = { PATH = makeBinPath (with pkgs; [ gnused ]); state_dir = "/tmp"; }; filename = pkgs.writeDash "sed-plugin" '' set -efu exec ${pkgs.python3}/bin/python \ ${<stockholm/krebs/5pkgs/simple/Reaktor/scripts/sed-plugin.py>} "$@" ''; }; }; shack-correct = { activate = "match"; pattern = "^(.*Shack.*)$"; arguments = [1]; command.filename = <stockholm/krebs/5pkgs/simple/Reaktor/scripts/shack-correct.sh>; }; url-title = { #pattern = "^.*(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+).*$"; pattern = "^.*(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+).*$"; activate = "match"; arguments = [1]; command = { filename = pkgs.writePython3 "url-title" { deps = with pkgs.python3Packages; [ beautifulsoup4 lxml ]; } '' import cgi import sys import urllib.request from bs4 import BeautifulSoup try: req = urllib.request.Request(sys.argv[1]) req.add_header('user-agent', 'Reaktor-url-title') resp = urllib.request.urlopen(req) if resp.headers['content-type'].find('text/html') >= 0: soup = BeautifulSoup(resp.read(16000), "lxml") title = soup.find('title').string if len(title.split('\n')) > 5: title = '\n'.join(title.split('\n')[:5]) print(title[:450]) else: cd_header = resp.headers['content-disposition'] print(cgi.parse_header(cd_header)[1]['filename']) except: # noqa: E722 pass ''; }; }; }; }