let port = 8082; in import ({ pkgs, ... }: { nodes = { server = { imports = [ ./module.nix ]; services.bang-evaluator = { enable = true; listenAddress = ":${toString port}"; }; networking.firewall.allowedTCPPorts = [ port ]; }; client = { }; }; testScript = '' from urllib.parse import urlencode def evalSearch(query, engine="https://duckduckgo.com/?q=%s"): query_params = { "query": query, "engine": engine, } return client.succeed( " ".join( [ "${pkgs.curl}/bin/curl", "-s", "-o/dev/null", "-w", "%{redirect_url}", f"'http://server:${toString port}/eval?{urlencode(query_params)}'", ] ) ) start_all() server.wait_for_open_port(${toString port}) client.wait_for_unit("multi-user.target") assert evalSearch("foo") == "https://duckduckgo.com/?q=foo" assert evalSearch("foo !wde") == "https://de.wikipedia.org/w/index.php?search=foo" assert evalSearch("!wde foo") == "https://de.wikipedia.org/w/index.php?search=foo" assert ( evalSearch("foo", engine="https://startpage.com/sp/search?query=%s") == "https://startpage.com/sp/search?query=foo" ) ''; })