GitHub repository: searx/searx

Issues:
issue_3533: state: open
title: Bump linuxdoc from 20221127 to 20230629
body: Bumps [linuxdoc](https://github.com/return42/linuxdoc) from 20221127 to 20230629.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/return42/linuxdoc/blob/master/CHANGELOG">linuxdoc's changelog</a>.</em></p>
<blockquote>
<p>2023-06-29 [20230629]</p>
<p>Python 3.12 compatibility / imp replaced by importlib</p>
<p>2023-05-06 [20230506]</p>
<pre><code>    rename kernel-* commands into linuxdoc.* commands &amp; add man pages
</code></pre>
<ul>
<li>Deprecated: The maintenance of the <code>kernel-*</code> command ends in
version 20230321.  The <code>kernel-*</code> commands will be removed in a future
release: use the <code>linuxdoc.*</code> commands.</li>
</ul>
<ul>
<li>kernel-doc     --&gt; linuxdoc.rest</li>
<li>kernel-autodoc --&gt; linuxdoc.autodoc
- kernel-lintdoc --&gt; linuxdoc.lintdoc
- kernel-grepdoc --&gt; linuxdoc.grepdoc</li>
</ul>
<p>2023-03-21 [20230321] LICENSE AGPLv3+</p>
<ul>
<li>Changed: GNU Affero General Public License v3 or later (AGPLv3+)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a href="https://github.com/return42/linuxdoc/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=linuxdoc&package-manager=pip&previous-version=20221127&new-version=20230629)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
user: dependabot[bot]
labels: dependencies: Pull requests that update a dependency file
issue_3529: state: open
title: fix(sec): upgrade certifi to 2022.12.07
body: ### What happened？
There are 1 security vulnerabilities found in certifi 2022.12.7
- [CVE-2022-23491](https://www.oscs1024.com/hd/CVE-2022-23491)


### What did I do？
Upgrade certifi from 2022.12.7 to 2022.12.07 for vulnerability fix

### What did you expect to happen？
Ideally, no insecure libs should be used.

### The specification of the pull request
[PR Specification](https://www.oscs1024.com/docs/pr-specification/) from OSCS
user: chncaption
issue_3528: state: open
title: Google image and bing image no longer works
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Version of Searx, commit number if you are using on master branch and stipulate if you forked Searx**
Powered by [searx](https://searx.github.io/searx) - 1.1.0-69-75b859d2

**How did you install Searx?**
I installed it as a docker container

**What happened?**
When I try to run an image search, I get the warning red message on the right:

```
Engines cannot retrieve results:
google images (unexpected crash), bing images (HTTP error), flickr (unexpected crash)
```

**How To Reproduce**
Do an image search

**Expected behavior**
Expect to get images from Google, Bing and flickr as well

**Screenshots & Logs**
![image](https://github.com/searx/searx/assets/16146012/35102953-0d36-47c4-a146-3c8af53da6bb)

```
ERROR:searx.search.processor.online:engine bing images : requests exception(search duration : 0.005860328674316406 s, timeout: 4.0 s) : HTTPSConnectionPool(host='www.bing.com', port=443): Max retries exceeded with url: /images/search?q=polar+bear&count=28&first=1&tsc=ImageHoverTitle (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f522fc4cc10>: Failed to establish a new connection: [Errno 111] Connection refused'))
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 174, in _new_conn
    conn = connection.create_connection(
  File "/usr/lib/python3.9/site-packages/urllib3/util/connection.py", line 96, in create_connection
    raise err
  File "/usr/lib/python3.9/site-packages/urllib3/util/connection.py", line 86, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3.9/site-packages/urllib3/connectionpool.py", line 382, in _make_request
    self._validate_conn(conn)
  File "/usr/lib/python3.9/site-packages/urllib3/connectionpool.py", line 1010, in _validate_conn
    conn.connect()
  File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 358, in connect
    conn = self._new_conn()
  File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
    raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x7f522fc4cc10>: Failed to establish a new connection: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/requests/adapters.py", line 489, in send
    resp = conn.urlopen(
  File "/usr/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
    retries = retries.increment(
  File "/usr/lib/python3.9/site-packages/urllib3/util/retry.py", line 574, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.bing.com', port=443): Max retries exceeded with url: /images/search?q=polar+bear&count=28&first=1&tsc=ImageHoverTitle (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f522fc4cc10>: Failed to establish a new connection: [Errno 111] Connection refused'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/searx/searx/search/processors/online.py", line 144, in search
    search_results = self._search_basic(query, params)
  File "/usr/local/searx/searx/search/processors/online.py", line 124, in _search_basic
    response = self._send_http_request(params)
  File "/usr/local/searx/searx/search/processors/online.py", line 96, in _send_http_request
    response = req(params['url'], **request_args)
  File "/usr/local/searx/searx/poolrequests.py", line 209, in get
    return request('get', url, **kwargs)
  File "/usr/local/searx/searx/poolrequests.py", line 181, in request
    response = session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python3.9/site-packages/requests/sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3.9/site-packages/requests/sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3.9/site-packages/requests/adapters.py", line 565, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.bing.com', port=443): Max retries exceeded with url: /images/search?q=polar+bear&count=28&first=1&tsc=ImageHoverTitle (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f522fc4cc10>: Failed to establish a new connection: [Errno 111] Connection refused'))
ERROR:searx.search.processor.online:engine google images : exception : list index out of range
Traceback (most recent call last):
  File "/usr/local/searx/searx/search/processors/online.py", line 144, in search
    search_results = self._search_basic(query, params)
  File "/usr/local/searx/searx/search/processors/online.py", line 128, in _search_basic
    return self.engine.response(response)
  File "/usr/local/searx/searx/engines/google_images.py", line 193, in response
    pub_source = extract_text(pub_nodes[1])
IndexError: list index out of range
ERROR:searx.search.processor.online:engine flickr : exception : invalid literal for int() with base 10: 'data'
Traceback (most recent call last):
  File "/usr/local/searx/searx/search/processors/online.py", line 144, in search
    search_results = self._search_basic(query, params)
  File "/usr/local/searx/searx/search/processors/online.py", line 128, in _search_basic
    return self.engine.response(response)
  File "/usr/local/searx/searx/engines/flickr_noapi.py", line 79, in response
    photo = model_export['main'][index[0]][int(index[1])][index[2]][index[3]][int(index[4])]
ValueError: invalid literal for int() with base 10: 'data'
```

**Additional context**
I get similar HTTP error from Brave, Gigablast and Bing when doing normal searches.

user: MatthK
issue_3520: state: open
title: Bump sphinx from 5.3.0 to 7.0.1
body: Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.3.0 to 7.0.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/sphinx-doc/sphinx/releases">sphinx's releases</a>.</em></p>
<blockquote>
<h2>v7.0.1</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
<h2>v7.0.0</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
<h2>v7.0.0rc1</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
<h2>v6.2.1</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
<h2>v6.2.0</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
<h2>v6.1.3</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
<h2>v6.1.2</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
<h2>v6.1.1</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
<h2>v6.1.0</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
<h2>v6.0.1</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
<h2>v6.0.0</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
<h2>v6.0.0b2</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
<h2>v6.0.0b1</h2>
<p>Changelog: <a href="https://www.sphinx-doc.org/en/master/changes.html">https://www.sphinx-doc.org/en/master/changes.html</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/sphinx-doc/sphinx/blob/master/CHANGES">sphinx's changelog</a>.</em></p>
<blockquote>
<h1>Release 7.0.1 (released May 12, 2023)</h1>
<h2>Dependencies</h2>
<ul>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11411">#11411</a>: Support <code>Docutils 0.20</code>_. Patch by Adam Turner.</li>
</ul>
<p>.. _Docutils 0.20: <a href="https://docutils.sourceforge.io/RELEASE-NOTES.html#release-0-20-2023-05-04">https://docutils.sourceforge.io/RELEASE-NOTES.html#release-0-20-2023-05-04</a></p>
<h2>Bugs fixed</h2>
<ul>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11418">#11418</a>: Clean up remaining references to <code>sphinx.setup_command</code>
following the removal of support for setuptools.
Patch by Willem Mulder.</li>
</ul>
<h1>Release 7.0.0 (released Apr 29, 2023)</h1>
<h2>Incompatible changes</h2>
<ul>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11359">#11359</a>: Remove long-deprecated aliases for <code>MecabSplitter</code> and
<code>DefaultSplitter</code> in <code>sphinx.search.ja</code>.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11360">#11360</a>: Remove deprecated <code>make_old_id</code> functions in domain object
description classes.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11363">#11363</a>: Remove the Setuptools integration (<code>build_sphinx</code> hook in
<code>setup.py</code>).</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11364">#11364</a>: Remove deprecated <code>sphinx.ext.napoleon.iterators</code> module.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11365">#11365</a>: Remove support for the <code>jsdump</code> format in <code>sphinx.search</code>.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11366">#11366</a>: Make <code>locale</code> a required argument to
<code>sphinx.util.i18n.format_date()</code>.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11370">#11370</a>: Remove deprecated <code>sphinx.util.stemmer</code> module.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11371">#11371</a>: Remove deprecated <code>sphinx.pycode.ast.parse()</code> function.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11372">#11372</a>: Remove deprecated <code>sphinx.io.read_doc()</code> function.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11373">#11373</a>: Removed deprecated <code>sphinx.util.get_matching_files()</code> function.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11378">#11378</a>: Remove deprecated <code>sphinx.util.docutils.is_html5_writer_available()</code>
function.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11379">#11379</a>: Make the <code>env</code> argument to <code>Builder</code> subclasses required.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11380">#11380</a>: autosummary: Always emit grouped import exceptions.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11381">#11381</a>: Remove deprecated <code>style</code> key for HTML templates.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11382">#11382</a>: Remove deprecated <code>sphinx.writers.latex.LaTeXTranslator.docclasses</code>
attribute.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11383">#11383</a>: Remove deprecated <code>sphinx.builders.html.html5_ready</code> and
<code>sphinx.builders.html.HTMLTranslator</code> attributes.</li>
<li><a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11385">#11385</a>: Remove support for HTML 4 output.</li>
</ul>
<h1>Release 6.2.1 (released Apr 25, 2023)</h1>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/sphinx-doc/sphinx/commit/d48cc783b6e48b99cbbcf5462f44c59a4ed78e6a"><code>d48cc78</code></a> Bump to 7.0.1 final</li>
<li><a href="https://github.com/sphinx-doc/sphinx/commit/de6b18ac7de317030be4344ea7a9d553c423ffcf"><code>de6b18a</code></a> Remove remaining references to the setuptools integration (<a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11418">#11418</a>)</li>
<li><a href="https://github.com/sphinx-doc/sphinx/commit/db546189ce1d2a345f4399367ced6ecdd538be5d"><code>db54618</code></a> Support Docutils 0.20 (<a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11411">#11411</a>)</li>
<li><a href="https://github.com/sphinx-doc/sphinx/commit/8942a1dddf2355928f088d6b631db8658034eaae"><code>8942a1d</code></a> Test with Docutils 0.20</li>
<li><a href="https://github.com/sphinx-doc/sphinx/commit/c9d0933e5d8e34aa9d2c1d88c5a80b46b575730e"><code>c9d0933</code></a> linkcheck: Use context managers for HTTP requests (<a href="https://redirect.github.com/sphinx-doc/sphinx/issues/11318">#11318</a>)</li>
<li><a href="https://github.com/sphinx-doc/sphinx/commit/2b1c106bbff5265e8a6076318db5d083c329d575"><code>2b1c106</code></a> Update documentation workflow</li>
<li><a href="https://github.com/sphinx-doc/sphinx/commit/ba7408209e84ee413f240afc20f3c6b484a81f8f"><code>ba74082</code></a> Change concurrency groups for GitHub workflows</li>
<li><a href="https://github.com/sphinx-doc/sphinx/commit/b546879539200ec4128bcc6d0ed911ebf28bb3cb"><code>b546879</code></a> Bump version</li>
<li><a href="https://github.com/sphinx-doc/sphinx/commit/d568b2f4f7cca743fcbf70814d15602d8129b790"><code>d568b2f</code></a> Bump to 7.0.0 final</li>
<li><a href="https://github.com/sphinx-doc/sphinx/commit/ff79edf353f5cc6e02036f58e0295dc704c5e681"><code>ff79edf</code></a> Remove <code>jsdump</code> references post removal</li>
<li>Additional commits viewable in <a href="https://github.com/sphinx-doc/sphinx/compare/v5.3.0...v7.0.1">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx&package-manager=pip&previous-version=5.3.0&new-version=7.0.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
user: dependabot[bot]
labels: dependencies: Pull requests that update a dependency file
issue_3519: state: open
title: Added macOS and Windows thumbnails exceptions in .gitignore 
body: Added exception for macOS and Windows thumbnails.
Prevents automatically created thumbnail files on local workspace to be automatically considered for commit.

user: NAICOLAS
issue_3515: state: open
title: Bump pylint from 2.15.9 to 2.17.4
body: Bumps [pylint](https://github.com/PyCQA/pylint) from 2.15.9 to 2.17.4.
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pylint-dev/pylint/commit/fc34a4b6abe56f3ac07ca15d846b1c1955545f85"><code>fc34a4b</code></a> Bump pylint to 2.17.4, update changelog</li>
<li><a href="https://github.com/pylint-dev/pylint/commit/62083dc1f197712e440128620541e5c068d9ccf7"><code>62083dc</code></a> [changelog] Add a changelog entry for <a href="https://redirect.github.com/PyCQA/pylint/issues/8632">#8632</a></li>
<li><a href="https://github.com/pylint-dev/pylint/commit/fd60b7284a78e3fe371dd90566f0cc316deaf4c4"><code>fd60b72</code></a> Make sure a <code>tool</code> table is created in <code>toml</code> generation (<a href="https://redirect.github.com/PyCQA/pylint/issues/8638">#8638</a>) (<a href="https://redirect.github.com/PyCQA/pylint/issues/8640">#8640</a>)</li>
<li><a href="https://github.com/pylint-dev/pylint/commit/0b5defa5cfa4662d76cb01c90893c38428e3513c"><code>0b5defa</code></a> [tomlkit] Limit the maximum version of tomlkit (<a href="https://redirect.github.com/PyCQA/pylint/issues/8633">#8633</a>) (<a href="https://redirect.github.com/PyCQA/pylint/issues/8635">#8635</a>)</li>
<li><a href="https://github.com/pylint-dev/pylint/commit/4350c6fd7a955892712e2bf7a78adf4531e483b4"><code>4350c6f</code></a> Added escaping of vertical bar character in annotation labels (<a href="https://redirect.github.com/PyCQA/pylint/issues/8610">#8610</a>) (<a href="https://redirect.github.com/PyCQA/pylint/issues/8631">#8631</a>)</li>
<li><a href="https://github.com/pylint-dev/pylint/commit/e507a4d87ec80e706ac0c8ce2d23bd28006cbbbc"><code>e507a4d</code></a> Fix a false positive for <code>bad-dunder-name</code> when there is a user-defined ``_...</li>
<li><a href="https://github.com/pylint-dev/pylint/commit/389e14c36819cb87190fd412d3f366a3283f0078"><code>389e14c</code></a> Bump pylint to 2.17.3, update changelog (<a href="https://redirect.github.com/PyCQA/pylint/issues/8620">#8620</a>)</li>
<li><a href="https://github.com/pylint-dev/pylint/commit/3fc153ac67f8264275f846bc25daccc57a8f8a5a"><code>3fc153a</code></a> Upgrade astroid to 2.15.4 (<a href="https://redirect.github.com/PyCQA/pylint/issues/8615">#8615</a>) (<a href="https://redirect.github.com/PyCQA/pylint/issues/8618">#8618</a>)</li>
<li><a href="https://github.com/pylint-dev/pylint/commit/c2936a541f570a4a854672cbb4899651d39d6088"><code>c2936a5</code></a> Disable import-error as attrs is no longer a test dependency</li>
<li><a href="https://github.com/pylint-dev/pylint/commit/5f7e2a51bf008b0bb4acf2ecbcadcf1c903a72f4"><code>5f7e2a5</code></a> Upgrade astroid to 2.15.3 (<a href="https://redirect.github.com/PyCQA/pylint/issues/8584">#8584</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/PyCQA/pylint/compare/v2.15.9...v2.17.4">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pylint&package-manager=pip&previous-version=2.15.9&new-version=2.17.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
user: dependabot[bot]
labels: dependencies: Pull requests that update a dependency file
issue_3512: state: open
title: Bump flask from 2.2.2 to 2.3.2
body: Bumps [flask](https://github.com/pallets/flask) from 2.2.2 to 2.3.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/pallets/flask/releases">flask's releases</a>.</em></p>
<blockquote>
<h2>2.3.2</h2>
<p>This is a security fix release for the 2.3.x release branch.</p>
<ul>
<li>Security advisory: <a href="https://github.com/pallets/flask/security/advisories/GHSA-m2qf-hxjv-5gpq">https://github.com/pallets/flask/security/advisories/GHSA-m2qf-hxjv-5gpq</a>, CVE-2023-30861</li>
<li>Changes: <a href="https://flask.palletsprojects.com/en/2.3.x/changes/#version-2-3-2">https://flask.palletsprojects.com/en/2.3.x/changes/#version-2-3-2</a></li>
<li>Milestone: <a href="https://github.com/pallets/flask/milestone/29?closed=1">https://github.com/pallets/flask/milestone/29?closed=1</a></li>
</ul>
<h2>2.3.1</h2>
<p>This is a fix release for the 2.3.x release branch.</p>
<ul>
<li>Changes: <a href="https://flask.palletsprojects.com/en/2.3.x/changes/#version-2-3-1">https://flask.palletsprojects.com/en/2.3.x/changes/#version-2-3-1</a></li>
<li>Milestone: <a href="https://github.com/pallets/flask/milestone/28?closed=1">https://github.com/pallets/flask/milestone/28?closed=1</a></li>
</ul>
<h2>2.3.0</h2>
<p>This is a feature release, which includes new features, removes previously deprecated code, and adds new deprecations. The 2.3.x branch is now the supported fix branch, the 2.2.x branch will become a tag marking the end of support for that branch. We encourage everyone to upgrade, and to use a tool such as <a href="https://pypi.org/project/pip-tools/">pip-tools</a> to pin all dependencies and control upgrades. Test with warnings treated as errors to be able to adapt to deprecation warnings early.</p>
<ul>
<li>Changes: <a href="https://flask.palletsprojects.com/en/2.3.x/changes/#version-2-3-0">https://flask.palletsprojects.com/en/2.3.x/changes/#version-2-3-0</a></li>
<li>Milestone: <a href="https://github.com/pallets/flask/milestone/24?closed=1">https://github.com/pallets/flask/milestone/24?closed=1</a></li>
</ul>
<h2>2.2.5</h2>
<p>This is a security fix release for the 2.2.x release branch. Note that 2.3.x is the currently supported release branch; please upgrade to the latest version if possible.</p>
<ul>
<li>Security advisory: <a href="https://github.com/pallets/flask/security/advisories/GHSA-m2qf-hxjv-5gpq">https://github.com/pallets/flask/security/advisories/GHSA-m2qf-hxjv-5gpq</a>, CVE-2023-30861</li>
<li>Changes: <a href="https://flask.palletsprojects.com/en/2.2.x/changes/#version-2-2-5">https://flask.palletsprojects.com/en/2.2.x/changes/#version-2-2-5</a></li>
<li>Milestone: <a href="https://github.com/pallets/flask/milestone/30?closed=1">https://github.com/pallets/flask/milestone/30?closed=1</a></li>
</ul>
<h2>2.2.4</h2>
<p>This is a fix release for the 2.2.x release branch.</p>
<ul>
<li>Changes: <a href="https://flask.palletsprojects.com/en/2.2.x/changes/#version-2-2-4">https://flask.palletsprojects.com/en/2.2.x/changes/#version-2-2-4</a></li>
<li>Milestone: <a href="https://github.com/pallets/flask/milestone/27?closed=1">https://github.com/pallets/flask/milestone/27?closed=1</a></li>
</ul>
<h2>2.2.3</h2>
<p>This is a fix release for the 2.2.x release branch.</p>
<ul>
<li>Changes: <a href="https://flask.palletsprojects.com/en/2.2.x/changes/#version-2-2-3">https://flask.palletsprojects.com/en/2.2.x/changes/#version-2-2-3</a></li>
<li>Milestone: <a href="https://github.com/pallets/flask/milestone/26?closed=1">https://github.com/pallets/flask/milestone/26?closed=1</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/pallets/flask/blob/main/CHANGES.rst">flask's changelog</a>.</em></p>
<blockquote>
<h2>Version 2.3.2</h2>
<p>Released 2023-05-01</p>
<ul>
<li>Set <code>Vary: Cookie</code> header when the session is accessed, modified, or refreshed.</li>
<li>Update Werkzeug requirement to &gt;=2.3.3 to apply recent bug fixes.</li>
</ul>
<h2>Version 2.3.1</h2>
<p>Released 2023-04-25</p>
<ul>
<li>Restore deprecated <code>from flask import Markup</code>. :issue:<code>5084</code></li>
</ul>
<h2>Version 2.3.0</h2>
<p>Released 2023-04-25</p>
<ul>
<li>
<p>Drop support for Python 3.7. :pr:<code>5072</code></p>
</li>
<li>
<p>Update minimum requirements to the latest versions: Werkzeug&gt;=2.3.0, Jinja2&gt;3.1.2,
itsdangerous&gt;=2.1.2, click&gt;=8.1.3.</p>
</li>
<li>
<p>Remove previously deprecated code. :pr:<code>4995</code></p>
<ul>
<li>The <code>push</code> and <code>pop</code> methods of the deprecated <code>_app_ctx_stack</code> and
<code>_request_ctx_stack</code> objects are removed. <code>top</code> still exists to give
extensions more time to update, but it will be removed.</li>
<li>The <code>FLASK_ENV</code> environment variable, <code>ENV</code> config key, and <code>app.env</code>
property are removed.</li>
<li>The <code>session_cookie_name</code>, <code>send_file_max_age_default</code>, <code>use_x_sendfile</code>,
<code>propagate_exceptions</code>, and <code>templates_auto_reload</code> properties on <code>app</code>
are removed.</li>
<li>The <code>JSON_AS_ASCII</code>, <code>JSON_SORT_KEYS</code>, <code>JSONIFY_MIMETYPE</code>, and
<code>JSONIFY_PRETTYPRINT_REGULAR</code> config keys are removed.</li>
<li>The <code>app.before_first_request</code> and <code>bp.before_app_first_request</code> decorators
are removed.</li>
<li><code>json_encoder</code> and <code>json_decoder</code> attributes on app and blueprint, and the
corresponding <code>json.JSONEncoder</code> and <code>JSONDecoder</code> classes, are removed.</li>
<li>The <code>json.htmlsafe_dumps</code> and <code>htmlsafe_dump</code> functions are removed.</li>
<li>Calling setup methods on blueprints after registration is an error instead of a
warning. :pr:<code>4997</code></li>
</ul>
</li>
<li>
<p>Importing <code>escape</code> and <code>Markup</code> from <code>flask</code> is deprecated. Import them
directly from <code>markupsafe</code> instead. :pr:<code>4996</code></p>
</li>
<li>
<p>The <code>app.got_first_request</code> property is deprecated. :pr:<code>4997</code></p>
</li>
<li>
<p>The <code>locked_cached_property</code> decorator is deprecated. Use a lock inside the
decorated function if locking is needed. :issue:<code>4993</code></p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pallets/flask/commit/f3b8f570545200c87465d18386f3fc9f2258307a"><code>f3b8f57</code></a> release version 2.3.2</li>
<li><a href="https://github.com/pallets/flask/commit/c990bba94ab9bc81adf2d33e83c9a9628a2098f2"><code>c990bba</code></a> update min test env</li>
<li><a href="https://github.com/pallets/flask/commit/adedb2a64ea7703369bc89021710b439ee79f8dc"><code>adedb2a</code></a> Merge pull request <a href="https://redirect.github.com/pallets/flask/issues/5101">#5101</a> from pallets/update-werkzeug</li>
<li><a href="https://github.com/pallets/flask/commit/e1aedecdc689cc9a79131851dbdabf6c3bc49c9e"><code>e1aedec</code></a> update werkzeug</li>
<li><a href="https://github.com/pallets/flask/commit/37badc3ce8b0665e3454547839196a676729309f"><code>37badc3</code></a> update changelog</li>
<li><a href="https://github.com/pallets/flask/commit/70f906c51ce49c485f1d355703e9cc3386b1cc2b"><code>70f906c</code></a> Merge pull request from GHSA-m2qf-hxjv-5gpq</li>
<li><a href="https://github.com/pallets/flask/commit/8705dd39c4fa563ea0fe0bf84c85da8fcc98b88d"><code>8705dd3</code></a> set <code>Vary: Cookie</code> header consistently for session</li>
<li><a href="https://github.com/pallets/flask/commit/9532cba45d2339e90ebf04f178b1e4f2064e7328"><code>9532cba</code></a> fix mypy finding</li>
<li><a href="https://github.com/pallets/flask/commit/0bc7356ce1ae11e633426902aba76d525f4523da"><code>0bc7356</code></a> start version 2.3.2</li>
<li><a href="https://github.com/pallets/flask/commit/f07fb2b607c1eaa724ca9bfe43e2dc20d97d34de"><code>f07fb2b</code></a> Merge pull request <a href="https://redirect.github.com/pallets/flask/issues/5086">#5086</a> from pallets/release-2.3.1</li>
<li>Additional commits viewable in <a href="https://github.com/pallets/flask/compare/2.2.2...2.3.2">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=flask&package-manager=pip&previous-version=2.2.2&new-version=2.3.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
user: dependabot[bot]
labels: dependencies: Pull requests that update a dependency file
issue_3510: state: open
title: Update searx.data - update_firefox_version.py
body: Update searx.data - update_firefox_version.py
user: searx-bot
issue_3509: state: open
title: Update searx.data - update_currencies.py
body: Update searx.data - update_currencies.py
user: searx-bot
issue_3508: state: open
title: Update searx.data - update_wikidata_units.py
body: Update searx.data - update_wikidata_units.py
user: searx-bot
issue_3507: state: open
title: Update searx.data - update_ahmia_blacklist.py
body: Update searx.data - update_ahmia_blacklist.py
user: searx-bot
issue_3501: state: open
title: Support flask-babel 3.0
body: ## What does this PR do?

Allows searx to run with flask-babel 3.0.  The driving motivation was to fix the package on NixOS which is not honoring dependency versions (https://github.com/NixOS/nixpkgs/issues/216695).

The error:

```
AttributeError: 'Babel' object has no attribute 'localeselector'
```

The fix:

The way the locale selector is added has changed somewhat, and I needed to move `get_locale` up to make use of it.

## Why is this change important?

I just want it to work with NixOS but keeping dependencies up to date is good in general.

## How to test this PR locally?

I just ran `make test` with and without the updated requirements to make sure searx runs with both 2.0 and 3.0 without any errors.

## Related issues

Obviates https://github.com/searx/searx/pull/3497
user: eryg-kai
issue_3498: state: open
title: restricting time range leads to no results
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Version of Searx, commit number if you are using on master branch and stipulate if you forked Searx**
1.1.0
**How did you install Searx?**
non-docker
**What happened?**
restricting time range leads to no results
**How To Reproduce**
look [here](https://search.stinpriza.org/search?q=test&categories=general&time_range=month&language=en-US) for example

at my instance I'm using google, bing, brave and qwant engines, and there's no results
user: br4nnigan
issue_3497: state: open
title: Bump flask-babel from 2.0.0 to 3.1.0
body: Bumps [flask-babel](https://github.com/python-babel/flask-babel) from 2.0.0 to 3.1.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/python-babel/flask-babel/releases">flask-babel's releases</a>.</em></p>
<blockquote>
<h2>v3.1.0</h2>
<ul>
<li>Documentation and packaging improvements. (<a href="https://redirect.github.com/python-babel/flask-babel/issues/226">#226</a>, <a href="https://redirect.github.com/python-babel/flask-babel/issues/223">#223</a>, <a href="https://redirect.github.com/python-babel/flask-babel/issues/218">#218</a>, <a href="https://redirect.github.com/python-babel/flask-babel/issues/217">#217</a>, <a href="https://redirect.github.com/python-babel/flask-babel/issues/215">#215</a>)</li>
<li>Don't return the default locale twice (<a href="https://redirect.github.com/python-babel/flask-babel/issues/219">#219</a>)</li>
<li>Fix tests breaking against babel 12.2, which changed localized times to use non-breaking-spaces. Babel 12.2 or greater
is now required. (<a href="https://redirect.github.com/python-babel/flask-babel/issues/222">#222</a>)</li>
<li>Relax version requirements for dependencies. (<a href="https://redirect.github.com/python-babel/flask-babel/issues/227">#227</a>, <a href="https://redirect.github.com/python-babel/flask-babel/issues/225">#225</a>)</li>
</ul>
<h2>v3.0.1 Bugfix Release</h2>
<p>Small bugfix for the get_locale() behaviour when the default locale is returned.</p>
<h2>v3.0.0</h2>
<p>Major version bump as this version removes support for Python 3.5 and 3.6, along with multiple
major breaking changes. Hope you've been following SemVer :)</p>
<ul>
<li>Dropped support for end-of-life Python 3.5 and 3.6, added tests for 3.10 and 3.11.</li>
<li>Fixes to documentation to address outdated links and settings (<a href="https://redirect.github.com/python-babel/flask-babel/issues/204">#204</a>, 201)</li>
<li>Jinja version 3 or greater is now required (released 2021)</li>
<li>Removed Babel._date_formats, use the public Babel.date_formats instead.</li>
<li>list_translations() always returns the default locale, even if it does not exist. (<a href="https://redirect.github.com/python-babel/flask-babel/issues/75">#75</a>)</li>
<li>Add lazy_npgettext() (<a href="https://redirect.github.com/python-babel/flask-babel/issues/68">#68</a>)</li>
<li>Babel.locale_selector and Babel.timezone_selector no longer exist. They must be provided
either when the Babel() object is created or when init_app() is called. This is to support
having a single Babel object for multiple Flask apps (<a href="https://redirect.github.com/python-babel/flask-babel/issues/107">#107</a>) as well as to simplify settings
and multi-threaded state.</li>
<li>Most configuration options can be passed directly through init_app().</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/python-babel/flask-babel/blob/master/CHANGELOG">flask-babel's changelog</a>.</em></p>
<blockquote>
<h2>v3.1.0</h2>
<ul>
<li>Documentation and packaging improvements. (<a href="https://redirect.github.com/python-babel/flask-babel/issues/226">#226</a>, <a href="https://redirect.github.com/python-babel/flask-babel/issues/223">#223</a>, <a href="https://redirect.github.com/python-babel/flask-babel/issues/218">#218</a>, <a href="https://redirect.github.com/python-babel/flask-babel/issues/217">#217</a>, <a href="https://redirect.github.com/python-babel/flask-babel/issues/215">#215</a>)</li>
<li>Don't return the default locale twice (<a href="https://redirect.github.com/python-babel/flask-babel/issues/219">#219</a>)</li>
<li>Fix tests breaking against babel 12.2, which changed localized times to use non-breaking-spaces. Babel 12.2 or greater
is now required. (<a href="https://redirect.github.com/python-babel/flask-babel/issues/222">#222</a>)</li>
<li>Relax version requirements for dependencies. (<a href="https://redirect.github.com/python-babel/flask-babel/issues/227">#227</a>, <a href="https://redirect.github.com/python-babel/flask-babel/issues/225">#225</a>)</li>
</ul>
<h2>v3.0.0</h2>
<p>Major version bump as this version removes support for Python 3.5 and 3.6, along with multiple
major breaking changes. Hope you've been following SemVer :)</p>
<ul>
<li>Dropped support for end-of-life Python 3.5 and 3.6, added tests for 3.10 and 3.11.</li>
<li>Fixes to documentation to address outdated links and settings (<a href="https://redirect.github.com/python-babel/flask-babel/issues/204">#204</a>, 201)</li>
<li>Jinja version 3 or greater is now required (released 2021)</li>
<li>Removed Babel._date_formats, use the public Babel.date_formats instead.</li>
<li>list_translations() always returns the default locale, even if it does not exist. (<a href="https://redirect.github.com/python-babel/flask-babel/issues/75">#75</a>)</li>
<li>Add lazy_npgettext() (<a href="https://redirect.github.com/python-babel/flask-babel/issues/68">#68</a>)</li>
<li>Babel.locale_selector and Babel.timezone_selector no longer exist. They must be provided
either when the Babel() object is created or when init_app() is called. This is to support
having a single Babel object for multiple Flask apps (<a href="https://redirect.github.com/python-babel/flask-babel/issues/107">#107</a>) as well as to simplify settings
and multi-threaded state.</li>
<li>Most configuration options can be passed directly through init_app().</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/python-babel/flask-babel/commit/69d3340cd0ff52f3e23a47518285a7e6d8f8c640"><code>69d3340</code></a> Bump version: 3.0.1 → 3.1.0</li>
<li><a href="https://github.com/python-babel/flask-babel/commit/2c706cb2e1f231fa5eb2ded0f075f2f73b9e0cc3"><code>2c706cb</code></a> Update changelog.</li>
<li><a href="https://github.com/python-babel/flask-babel/commit/1f23bfd0a83dcf01c8fe3c3bb87b6dc030667b22"><code>1f23bfd</code></a> Relax dependency requirements for all non-dev dependencies (closes <a href="https://redirect.github.com/python-babel/flask-babel/issues/227">#227</a>, clos...</li>
<li><a href="https://github.com/python-babel/flask-babel/commit/a160d6a1efae089872f070cab4aafe9684016da0"><code>a160d6a</code></a> Merge pull request <a href="https://redirect.github.com/python-babel/flask-babel/issues/226">#226</a> from sr-verde/typo-description</li>
<li><a href="https://github.com/python-babel/flask-babel/commit/42b88c70097f8fb2409961c4f95b585a5c0afd81"><code>42b88c7</code></a> Fix typo in description of pyproject.toml</li>
<li><a href="https://github.com/python-babel/flask-babel/commit/61315ea6490776bbc34fea4f700c906cf351e2c7"><code>61315ea</code></a> Merge pull request <a href="https://redirect.github.com/python-babel/flask-babel/issues/215">#215</a> from mgorny/poetry-fix</li>
<li><a href="https://github.com/python-babel/flask-babel/commit/bde015348c3ab9cd36056baeac1936e8028bb599"><code>bde0153</code></a> Merge pull request <a href="https://redirect.github.com/python-babel/flask-babel/issues/219">#219</a> from jpvanhal/fix-list-translations-duplicate-default...</li>
<li><a href="https://github.com/python-babel/flask-babel/commit/7510e9cb8c6bd2d074bdd0c963a5584355a7b06f"><code>7510e9c</code></a> Merge pull request <a href="https://redirect.github.com/python-babel/flask-babel/issues/218">#218</a> from cjmayo/project</li>
<li><a href="https://github.com/python-babel/flask-babel/commit/940e3480622100f5b1ef6507f7473d1deb62daee"><code>940e348</code></a> Merge pull request <a href="https://redirect.github.com/python-babel/flask-babel/issues/217">#217</a> from cjmayo/intro</li>
<li><a href="https://github.com/python-babel/flask-babel/commit/c24f35830ae17f386be94106d6e403283367a4d2"><code>c24f358</code></a> Merge pull request <a href="https://redirect.github.com/python-babel/flask-babel/issues/223">#223</a> from amercader/fix-docs-typo</li>
<li>Additional commits viewable in <a href="https://github.com/python-babel/flask-babel/compare/v2.0.0...v3.1.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=flask-babel&package-manager=pip&previous-version=2.0.0&new-version=3.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
user: dependabot[bot]
labels: dependencies: Pull requests that update a dependency file
issue_3485: state: open
title: Outdated pip searx
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Is your feature request related to a problem? Please describe.**
My problem is that I noticed that pypi searx is out of date (https://pypi.org/project/searx/). It has last update in 9 Jul 2020 and the last searx version is 1.10 (https://github.com/searx/searx/releases/tag/v1.1.0). I need up-to-date searx module from my searxng installation.

**Describe the solution you'd like**
Somebody needs to update it in pypi.org

**Describe alternatives you've considered**
none

**Additional context**
none
user: 12D687
issue_3483: state: open
title: Initial integration tests
body: ## What does this PR do?

Creates a base integration test suite to quickly test search results of a set of listed engines.

This is a PR in progress and is meant to aid in diagnosing certain engine issues.

## Why is this change important?

Allows for quick iteration of engine development for selected engines (more could be added).

## How to test this PR locally?

Run the following command in your terminal

`make test.int`

![image](https://user-images.githubusercontent.com/58887802/223906098-aeadce2c-9d5c-41be-a030-f19de94a4e1a.png)


## Author's checklist

## Related issues


user: glanham-jr
issue_3470: state: open
title: Update dependabot.yml
body: ## What does this PR do?

Configure Dependabot to update Dockerfile

## Why is this change important?

<!-- MANDATORY -->

Alpine 3.15.6 has a number of critical CVEs. Dependabot will probably update this to 3.17.2 (latest available version).

## How to test this PR locally?

<!-- commands to run the tests or instructions to test the changes-->

## Author's checklist

<!-- additional notes for reviewers -->

## Related issues

<!--
Closes #234
-->

user: jauderho
issue_3464: state: open
title: More quick results and embeds
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Is your feature request related to a problem? Please describe.**

Yeah, it's about some features that a lot of other search engines provide that is missing in here.
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->

**Describe the solution you'd like**

Adding more quick results and embeds, for example 

Asking DDG a question results in :
![image](https://user-images.githubusercontent.com/75695425/217685165-e833742a-275a-4128-8811-76a99123dac5.png)

But Searx doesn't seem to have a thing for this, as it results in a regular search.

Another example : 
![image](https://user-images.githubusercontent.com/75695425/217685386-5a7193e5-4403-47ae-b4e3-231f3069aa6b.png)

DDG neatly puts an embed next to the site (even though it's unrelated to the question but forget about that),  showing a possible answer, while Searx seems to only show results from Stackoverflow 

Yet another example : 
![image](https://user-images.githubusercontent.com/75695425/217685585-ab5b1f22-c882-4b18-8c50-b1a27c89c8ec.png)
Here, we ask DDG a basic math problem, and it neatly shows the result to us, with a calculator screen allowing us to do future calculations. This feature does not exist in Searx.

<!-- A clear and concise description of what you want to happen. -->

**Describe alternatives you've considered**

While clicking on the first result is one of the things that come to mind, it'd still be cool to have basic possible answers such as these to be embedded on our search results. It seems to partly work for stuff like when i search for "Apple" i can see the company on the side, but it can be greatly expanded.
<!-- A clear and concise description of any alternative solutions or features you've considered. -->

**Additional context**

It may be a little out of scope for this project, but i really want to see Searx noıt be inferior to the engines it uses, so this is the reason why i'm creating this feature request.
<!-- Add any other context or screenshots about the feature request here. -->

user: rktfier
issue_3442: state: open
title: Create scorecard.yml
body: ## What does this PR do?

<!-- MANDATORY -->

<!-- explain the changes in your PR, algorithms, design, architecture -->

## Why is this change important?

<!-- MANDATORY -->

<!-- explain the motivation behind your PR -->

## How to test this PR locally?

<!-- commands to run the tests or instructions to test the changes-->

## Author's checklist

<!-- additional notes for reviewers -->

## Related issues

<!--
Closes #234
-->

user: deererum
issue_3427: state: open
title: Add support for Chat GPT/ChatGPT engine
body: 
**Working URL to the engine**
You have to register but it's free with unlimited number of requests.
https://openai.com/blog/chatgpt/

**Why do you want to add this engine?**
It's not a search engine but it could provide really good answers. In many cases it's better than Google.
* https://threadreaderapp.com/thread/1598021488795586561.html
* https://dataconomy.com/2022/12/openai-chatgpt-chatbot-examples-limitations/
* https://www.engraved.blog/building-a-virtual-machine-inside/

**Features of this engine**
It's an AI / Machine learning model trained with a large corpus.

**How can SearXNG fetch the information from this engine?**

**Applicable category of this engine**

**Additional context**

Cross ref https://github.com/searxng/searxng/issues/2008


user: ngosang
issue_3396: state: open
title: [Engine Request] Namu Wiki
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Working URL to the engine**
[namu wiki](https://namu.wiki/)

**Why do you want to add this engine?**
It's essentially Wikipedia but specifically in Korean (anyone can edit, but requires citations and etc), and generally has a bigger focus on Current/Recent Events that aren't exactly laid out in detail on Wikipedia. 

One advantage of this over normal Korean Wikipedia is that the flow of new information is very fast here, because this has kinda become the go-to site (especially among people under 30), rather than Wikipedia.

**Features of this engine**
It's pretty easy to integrate, while there isn't an API as far as I know, you can always just do "https://namu.wiki/Go?q=" and then put the search term after that. 

Generally pretty fast. 

**How can Searx fetch the information from this engine?**
I don't think this is a proper "API" but you can just do "https://namu.wiki/Go?q=" and then add the search term (as I mentioned above).

**Applicable category of this engine**
General 

**Additional context**
Tl;dr: Pretty popular wiki in korea, as popular as [ko.wikipedia](https://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8), if not more popular. 
user: mystery-z
issue_3393: state: open
title: [Engine] AniDB Support
body: Requesting support for AniDB. They have an API
user: seniorm0ment
issue_3392: state: open
title: No dark theme for oscar? searx - 1.1.0-27-bf0a583f
body: I am trying to use the dark theme for oscar.

I changed the settings.yml as follows:

```
default_theme : oscar # ui theme
    default_locale : "" # Default interface locale - leave blank to detect from browser information or use codes from the 'locales' config section
    theme_args :
        oscar_style : logicodev-dark # default style of oscar
```

logicodev-dark should be supported since #1428 
user: 825i
issue_3374: state: open
title: Update searx.data - update_languages.py
body: Update searx.data - update_languages.py
user: searx-bot
issue_3365: state: open
title: variables.less in pointhi/oscar.less
body: Hi,

which file is `variables.less` in `searx/static/themes/oscar/src/less/pointhi/oscar.less` supposed to reference? There is no `variables.less` in `searx/static/themes/oscar/src/less/pointhi`. Is it supposed to be `searx/static/themes/oscar/src/less/logicodev/variables.less`? But then why is it not referenced in the same way as in `searx/static/themes/oscar/src/less/logicodev-dark/oscar.less`:

    @import "../logicodev/variables.less";

Or was `variables.less` just forgotten to be committed in 16d43fe8d4aef7bc9387d38d1e22aacfc3d04f15 where it was introduced in `searx/static/themes/oscar/src/less/pointhi/oscar.less`?
user: josch
issue_3355: state: open
title: [Feature Request] Toggle "suggestions" section
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
I don't like the suggestions box, I think it'd takes up too much space.

**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
I would like to be able to disable the "suggestions" box from the settings.

**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
I've thought of using CSS or a uBlockOrigin filter to hide the box, but I want this to be disable-able in the settings so we don't have to waste resources server-side.

**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->
Here's a picture of the suggestions box, in case I didn't make myself clear
![Screenshot_20220906-165138.png](https://user-images.githubusercontent.com/46269721/188726140-61904efe-b0cb-4a61-aa15-8485eae9ca93.png)
user: ItsIgnacioPortal
issue_3347: state: open
title: Tag privacy Violators
body: ## What does this PR do?
This PR adds the ability to tag privacy violating websites, Fixing Issue #1987. I grabbed the ASN data from [here](https://github.com/searxng/searx-space/blob/master/searxstats/data/asn.py), I also used IPWhois as it was used in [here](https://github.com/searx/searx-stats2/blob/45097dc7ebbaf284b2dc04b7f5051afb19571980/searxstats/fetcher/network.py#L120-L137). I used a dictionary as a cache so the IPWhois queries wouldn't slow down the searches drastically. 
I also changed the templates to show the tagged websites correctly.
## Why is this change important?
This PR is motivated by Issue #1987.
## How to test this PR locally?
```bash
make run
```
## Related issues
Closes #1987


user: SepehrRasouli
issue_3344: state: open
title: Logging - Stdout/Stderr is mixed up
body: **Version of Searx, commit number if you are using on master branch and stipulate if you forked Searx**
![image](https://user-images.githubusercontent.com/3085830/184855950-467fec83-9481-42a3-bf84-48ced50c81ac.png)

**How did you install Searx?**
Manually installed & executed. 

**What happened?**
I use supervisorctl to control my services. I configured the stdout/stderr to each own file. But somehow they are mixed up.
The startup is shown in stdout and each request is shown in stderr. 
Exceptions seems to be fine though.

**How To Reproduce**
<!-- How can we reproduce this issue? (as minimally and as precisely as possible) -->

**Expected behavior**
Info logs are printed out to stdinfo. As the look show.


user: ThraaxSession
issue_3343: state: open
title: Extend Logging - Show user agent 
body: **Is your feature request related to a problem? Please describe.**
It's kinda a problem. I see more and more weird requests for Wordpress. It would be also nice to see the user agent.
(I know they can be faked, but better than nothing I would say. The internet is a dangerous place. ;D) 

**Describe the solution you'd like**
Another parameter in the settings to verbose the HTTP requests in the logs.


user: ThraaxSession
issue_3332: state: open
title: Deepl
body: ## What does this PR do?

This implements the Deepl Translation engine

It works nearly like lingva but directly to the deepl api. There is a free option to use. See https://www.deepl.com/pro-api?cta=header-pro-api for registering a free account.

This api only needs a to-lang, from-lang is a fake by now

## Why is this change important?

You will have deepl in searx with full phrase and sentence translations

## How to test this PR locally?

Api key needed. Put api key into settings.yml - enable deepl. 

de-en Dies ist ein großartiger Test
en-es This is deepl.

## Author's checklist

<!-- additional notes for reviewiers -->

## Related issues

user: cy8aer
issue_3326: state: open
title: lingva does not fill the infobox right
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

Searx master

in order to fetch the latest commit ID:
```
git log -1
commit 4828faaa0701a6982becebb8e223e0bbe10ce559 (HEAD -> master, origin/master, origin/HEAD)
Author: Adam Tauber <asciimoo@gmail.com>
Date:   Fri Apr 23 19:09:24 2021 +0200

    [fix] exit on failure of creating environment to avoid endless loop in this case
``` 

**How did you install Searx?**

Searx is installed via the standard update-script

**What happened?**
Lingva does not fill the infobox right. The result is filled in the tiltle and should fill the text field of the info box.

**How To Reproduce**

"de-en dies ist ein Test"

**Expected behavior**
Answer is shown in the text field of the lingva infobox but it is shown in the header field of the box.

**Screenshots & Logs**
<!-- If applicable, add screenshots, logs to help explain your problem. -->

![grafik](https://user-images.githubusercontent.com/578172/183265616-717b9c83-2744-4f82-9083-ec25998c5eb9.png)


**Additional context**
<!-- Add any other context about the problem here. -->

user: cy8aer
issue_3304: state: open
title: filter image results by usage rights
body: **Is your feature request related to a problem? Please describe.**

i would like to not only find images online, but actually use them too

**Describe the solution you'd like**

be able to filter search results for images by usage rights, as on other major search engines

**Describe alternatives you've considered**

switch to closed-source search engines

user: KiaraGrouwstra
issue_3295: state: open
title: Limited results on Google image search
body: For DuckDuckGo on image search, you can go to the next page to keep getting as many results as possible. However, for Google on image search, you're limited to the first page only (there is no second page). This is either a bizarre feature or a fault which hasn't been noticed before. You can easily fetch more image results from Google, what is exactly the problem which is preventing this? 

Here is DuckDuckgo on image search:

![Screenshot_2022-07-24_22-45-34](https://user-images.githubusercontent.com/12466600/180659587-421adeba-826c-482a-b1e5-619cd415a765.png)

Here is Google on image search:

![Screenshot_2022-07-24_22-45-14](https://user-images.githubusercontent.com/12466600/180659598-bb97c2eb-9941-4ea9-9610-a854d4191aa1.png)


user: Krando
issue_3268: state: open
title: Allow proxy bypassing via web UI switch?
body: Hello.

My private Searx instance on my VPS is configured to use the Tor network as proxy for all outgoing requests. It works fine. However, sometimes I get annoyed over the long response times when fetching results over the Tor network, especially when performing searches that do not necessarily need to go through Tor.

Therefore I think a dynamic switch in the web UI about whether to use the configured proxy or not would be great (instead of maintaining two separate uWSGI apps and web URLs, one which uses the proxy configuration and another one which doesn't).

However, on public instances the administrators probably don't want to allow users to bypass their proxy configuration from the web UI for a good reason, so if such a switch should get implemented it probably should consist of an "additional" list of optional proxies which doesn't affect the "forced" proxy configuration defined by the administrators.

Or maybe an option in the `settings.yml` like `allowProxyBypass` which enables proxy bypassing via web UI switch. At least this would be sufficient on private instances where the only one who has access to the instance is the administrator himself, but the idea with the "additional" proxies (from which users can optionally choose from) seems more elegant for both cases (private & public instances).

The available list of additional/optional proxies should be restricted by the administrators, of course.

Just a random thought. Don't know what you guys think about it or if it  really makes sense to implement this.
user: Nerdmind
issue_3262: state: open
title: Handle double-bang redirections better for CSP
body: **Is your feature request related to a problem? Please describe.**
When using double-bangs with POST requests, the site you will be redirected to must be added to `form-action` CSP else it will be blocked for violation.

**Describe the solution you'd like**
Find a way to not send form data when redirecting to another site with double-bangs so that every engine does not need to be added to CSP.

**Describe alternatives you've considered**
Started adding sites to CSP—it quickly becomes unmaintainable.

**Example**
On [my server](https://searx.sev.monster), try to search for "Nagios !!alternativeto". Since 
I did not add `alternativeto.net` to `form-action`, this is the result:
![image](https://user-images.githubusercontent.com/16788697/173209296-5f88cede-14af-4d5c-926e-9f941f94c2b3.png)

**Additional context**
Related: https://github.com/searxng/searxng/issues/140
user: sevmonster
issue_3258: state: open
title: Petal engine search results was incorrect in Chinese
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Version of Searx, commit number if you are using on master branch and stipulate if you forked Searx**
8a19442
<!-- If you are running on master branch using git execute this command
in order to fetch the latest commit ID:
```
git log -1
``` 
If you are using searx-docker then look at the bottom of the Searx page
and check for the version after "Powered by searx"
Please also stipulate if you are using a forked version of Searx and
include a link to the fork source code.
-->

**How did you install Searx?**
Installation scripts and executing the searx/webapp.py file
<!-- Did you install Searx using the official wiki or using searx-docker
or manually by executing the searx/webapp.py file? -->
**What happened?**
<!-- A clear and concise description of what the bug is. -->
Can't get the correct search results when using Petal in Chinese . All results are irrelevant to the keyword。

**How To Reproduce**
<!-- How can we reproduce this issue? (as minimally and as precisely as possible) -->
Search any Chinese with Petal

**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
The previous version showed the correct search results.

**Screenshots & Logs**
<!-- If applicable, add screenshots, logs to help explain your problem. -->
![image](https://user-images.githubusercontent.com/52371609/172492954-a32190ed-5b83-43c4-8226-e0ac773aa97b.png)

**Additional context**
<!-- Add any other context about the problem here. -->

user: Plus-xu
issue_3220: state: open
title: Anilist manga and anime search engine
body: 
**Working URL to the engine**
https://anilist.co/search/anime

**Why do you want to add this engine?**
It contains quite a comprehensive database of anime/manga releases.

**Features of this engine**
Name of the anime, format, statut of the release, start days, studio, genres, staff, character of the media and so on

**How can Searx fetch the information from this engine?**
It has a public graphql API

https://github.com/AniList/ApiV2-GraphQL-Docs
https://anilist.gitbook.io/anilist-apiv2-docs/

**Applicable category of this engine**
general, images(the cover and character picture)



user: constraintAutomaton
issue_3219: state: open
title: Adding Torlook Engine
body: **Working URL to the engine**
https://gw1.torlook.info/

**Why do you want to add this engine?**
It pulls torrents from a lot of good torrent sites.

**Features of this engine**
Multiple website results
Frequent updates
Displays filtered/sorted results
Has its own forums/social media

**How can Searx fetch the information from this engine?**
https://gw1.torlook.info/faq should give you more information than I could.

**Usage example:**
https://gw1.torlook.info/titanic

**Applicable category:**
Files
user: Furchee
issue_3210: state: open
title: Yandex Engine via XML
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Working URL to the engine**
https://yandex.com

**Why do you want to add this engine?**
Most unfiltered and complete search engine I could find 

**Features of this engine**
They don't filter results
Superior results compare to Google/Bing

**How can Searx fetch the information from this engine?**
[Yandex.XML](https://yandex.com/dev/xml/doc/dg/concepts/about.html) is a service that lets you send queries to the Yandex search engine and get responses in XML format:
https://yandex.com/dev/xml/doc/dg/concepts/about.html

- [Usage example](https://github.com/fluquid/yandex-search)

You need to register an IP but having the option would be amazing!

**Applicable category of this engine**
general, files, images, it, map, music, news, science, social media and videos.

**Additional context**
There is also [Serpapi API service](https://serpapi.com/yandex-search-api), so they found a way to parse Yandex.
user: ghost
issue_3197: state: open
title: test.coverage is failing
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Version of Searx, commit number if you are using on master branch and stipulate if you forked Searx**
Commit id - 03eb9c2461194b81ce978253aceaab587cca975f
<!-- If you are running on master branch using git execute this command
in order to fetch the latest commit ID:
```
git log -1
``` 
If you are using searx-docker then look at the bottom of the Searx page
and check for the version after "Powered by searx"

Please also stipulate if you are using a forked version of Searx and
include a link to the fork source code.
-->
**How did you install Searx?**
Manual installation with using `manage` script
<!-- Did you install Searx using the official wiki or using searx-docker
or manually by executing the searx/webapp.py file? -->
**What happened?**
Coverage unit tests are failing with the following log output
```
TEST      unit test coverage
PYENV     [check] import yaml --> OK
PYENV     OK
.........DEBUG:searx.utils:HTMLTextExtractor: invalid HTML
<p><b>Lorem ipsum</i>dolor sit amet</p>
.....................................................................................................DEBUG:searx.webapp:static directory is /home/nivesh/Desktop/repos/searx/searx/static
DEBUG:searx.webapp:templates directory is /home/nivesh/Desktop/repos/searx/searx/templates
INFO:searx:Send SIGUSR1 signal to pid 30935 to start the checker
INFO:searx:debug mode: checker is disabled
EEEEEEEEEEEEEEEEEEEEEEE........DEBUG:searx.search:actual_timeout=3.0 (default_timeout=3.0, ?timeout_limit=None, max_request_timeout=None)
..DEBUG:asyncio:Using selector: EpollSelector
DEBUG:asyncio:Using selector: EpollSelector
TRACE:httpx._config:load_ssl_context verify=True cert=None trust_env=False http2=False
TRACE:httpx._config:load_verify_locations cafile=/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/certifi/cacert.pem
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
DEBUG:asyncio:Using selector: EpollSelector
.DEBUG:asyncio:Using selector: EpollSelector
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
TRACE:httpx._config:load_ssl_context verify=False cert=None trust_env=False http2=False
DEBUG:asyncio:Using selector: EpollSelector
....DEBUG:asyncio:Using selector: EpollSelector
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
DEBUG:asyncio:Using selector: EpollSelector
..DEBUG:asyncio:Using selector: EpollSelector
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
DEBUG:asyncio:Using selector: EpollSelector
.DEBUG:asyncio:Using selector: EpollSelector
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
DEBUG:asyncio:Using selector: EpollSelector
.DEBUG:asyncio:Using selector: EpollSelector
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
DEBUG:asyncio:Using selector: EpollSelector
.DEBUG:asyncio:Using selector: EpollSelector
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
DEBUG:asyncio:Using selector: EpollSelector
.DEBUG:asyncio:Using selector: EpollSelector
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
DEBUG:asyncio:Using selector: EpollSelector
.DEBUG:asyncio:Using selector: EpollSelector
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
DEBUG:asyncio:Using selector: EpollSelector
.DEBUG:asyncio:Using selector: EpollSelector
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
DEBUG:asyncio:Using selector: EpollSelector
.DEBUG:asyncio:Using selector: EpollSelector
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
DEBUG:asyncio:Using selector: EpollSelector
.DEBUG:asyncio:Using selector: EpollSelector
TRACE:httpx._config:load_ssl_context verify=<ssl.SSLContext object at 0x7ff0a7b396c0> cert=None trust_env=False http2=False
DEBUG:asyncio:Using selector: EpollSelector
...DEBUG:searx.search:actual_timeout=3.0 (default_timeout=3.0, ?timeout_limit=None, max_request_timeout=None)
.DEBUG:searx.search:actual_timeout=3.0 (default_timeout=3.0, ?timeout_limit=5.0, max_request_timeout=None)
.DEBUG:searx.search:actual_timeout=10.0 (default_timeout=3.0, ?timeout_limit=15.0, max_request_timeout=10.0)
.DEBUG:searx.search:actual_timeout=1.0 (default_timeout=3.0, ?timeout_limit=1.0, max_request_timeout=None)
.DEBUG:searx.search:actual_timeout=5.0 (default_timeout=3.0, ?timeout_limit=5.0, max_request_timeout=10.0)
.DEBUG:searx.search:actual_timeout=3.0 (default_timeout=3.0, ?timeout_limit=None, max_request_timeout=None)
....
======================================================================
ERROR: test_about (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 191, in test_about
    result = self.app.get('/about')
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1134, in get
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

-------------------- >> begin captured logging << --------------------
searx.webapp: DEBUG: static directory is /home/nivesh/Desktop/repos/searx/searx/static
searx.webapp: DEBUG: templates directory is /home/nivesh/Desktop/repos/searx/searx/templates
searx: INFO: Send SIGUSR1 signal to pid 30935 to start the checker
searx: INFO: debug mode: checker is disabled
--------------------- >> end captured logging << ---------------------
======================================================================
ERROR: test_browser_locale (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 217, in test_browser_locale
    result = self.app.get('/preferences', headers={'Accept-Language': 'zh-tw;q=0.8'})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1134, in get
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_config (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 249, in test_config
    result = self.app.get('/config')
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1134, in get
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_favicon (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 245, in test_favicon
    result = self.app.get('/favicon.ico')
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1134, in get
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_health (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 196, in test_health
    result = self.app.get('/healthz')
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1134, in get
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_index_csv (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 145, in test_index_csv
    result = self.app.post('/', data={'q': 'test', 'format': 'csv'})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_index_empty (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 84, in test_index_empty
    result = self.app.post('/')
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_index_html_get (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 96, in test_index_html_get
    result = self.app.post('/?q=test')
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_index_html_post (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 91, in test_index_html_post
    result = self.app.post('/', data={'q': 'test'})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_index_json (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 132, in test_index_json
    result = self.app.post('/', data={'q': 'test', 'format': 'json'})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_index_rss (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 159, in test_index_rss
    result = self.app.post('/', data={'q': 'test', 'format': 'rss'})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_opensearch_xml (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 240, in test_opensearch_xml
    result = self.app.get('/opensearch.xml')
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1134, in get
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_preferences (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 201, in test_preferences
    result = self.app.get('/preferences')
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1134, in get
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_robots_txt (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 235, in test_robots_txt
    result = self.app.get('/robots.txt')
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1134, in get
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_search_csv (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 149, in test_search_csv
    result = self.app.post('/search', data={'q': 'test', 'format': 'csv'})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_search_empty_csv (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 110, in test_search_empty_csv
    result = self.app.post('/search', data={'q': '', 'format': 'csv'})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_search_empty_html (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 101, in test_search_empty_html
    result = self.app.post('/search', data={'q': ''})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_search_empty_json (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 106, in test_search_empty_json
    result = self.app.post('/search', data={'q': '', 'format': 'json'})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_search_empty_rss (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 114, in test_search_empty_rss
    result = self.app.post('/search', data={'q': '', 'format': 'rss'})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_search_html (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 118, in test_search_html
    result = self.app.post('/search', data={'q': 'test'})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_search_json (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 136, in test_search_json
    result = self.app.post('/search', data={'q': 'test', 'format': 'json'})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_search_rss (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 163, in test_search_rss
    result = self.app.post('/search', data={'q': 'test', 'format': 'rss'})
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1139, in post
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

======================================================================
ERROR: test_stats (tests.unit.test_webapp.ViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/nivesh/Desktop/repos/searx/tests/unit/test_webapp.py", line 231, in test_stats
    result = self.app.get('/stats')
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1134, in get
    return self.open(*args, **kw)
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/flask/testing.py", line 216, in open
    return super().open(  # type: ignore
  File "/home/nivesh/Desktop/repos/searx/local/py3/lib/python3.9/site-packages/werkzeug/test.py", line 1081, in open
    builder = EnvironBuilder(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'as_tuple'

----------------------------------------------------------------------
Ran 170 tests in 3.031s

FAILED (errors=23)
Name                                           Stmts   Miss Branch BrPart  Cover   Missing
------------------------------------------------------------------------------------------
searx/__init__.py                                 66     21     14      5    65%   33-36, 40, 55-58, 63, 70, 72, 79, 83, 87, 91, 95, 99, 103, 107, 111, 115
searx/answerers/__init__.py                       34      6     18      2    77%   17, 38-42
searx/answerers/random/answerer.py                32     12      8      1    52%   16, 21, 25, 29, 33-35, 39, 56-59, 65
searx/answerers/statistics/answerer.py            29     17     14      1    30%   20, 27-44, 50
searx/autocomplete.py                             79     60     24      0    18%   33-36, 41-52, 57-67, 72-77, 82-92, 97-101, 106-109, 114-126, 131-136, 151-158
searx/data/__init__.py                            18      2      0      0    89%   40-41
searx/engines/1337x.py                            25     14      2      0    41%   27-29, 33-53
searx/engines/__init__.py                        149     65     76      8    59%   65-66, 69-71, 77-82, 89, 104, 106-108, 115->130, 138->exit, 172-173, 181-186, 191-249
searx/engines/ahmia.py                            43     24      8      0    37%   42-47, 51-85
searx/engines/apkmirror.py                        27     13      2      0    48%   39-44, 48-68
searx/engines/archlinux.py                        42     25      8      0    34%   34-36, 71-73, 106-123, 129-145
searx/engines/arxiv.py                            31     20      4      0    31%   32-40, 44-75
searx/engines/bandcamp.py                         33     22      8      0    27%   37-43, 50-73
searx/engines/base.py                             49     49     20      0     0%   2-117
searx/engines/bing.py                             67     49     14      0    22%   36, 41-56, 61-105, 110-124
searx/engines/bing_images.py                      42     21      4      0    46%   53-72, 77-106
searx/engines/bing_news.py                        65     43     18      0    27%   41-45, 50-54, 58-68, 73-85, 90-131
searx/engines/bing_videos.py                      42     22      4      0    43%   51-77, 82-101
searx/engines/btdigg.py                           37     26      4      0    27%   34-37, 42-89
searx/engines/ccengine.py                         19      8      2      0    52%   32-39, 43-53
searx/engines/command.py                         122    122     66      0     0%   2-172
searx/engines/core.py                             41     41     12      0     0%   2-82
searx/engines/currency_convert.py                 22     12      0      0    45%   27-28, 33-54
searx/engines/dailymotion.py                      44     30     12      0    25%   36-45, 50-79, 84-98
searx/engines/deezer.py                           26     15      6      0    34%   34-38, 43-70
searx/engines/deviantart.py                       30     19     10      0    28%   39-48, 52-77
searx/engines/dictzone.py                         29     16      6      0    37%   30-34, 38-60
searx/engines/digbt.py                            29     29      4      0     0%   2-60
searx/engines/digg.py                             27     14      4      0    42%   38-44, 47-68
searx/engines/doku.py                             38     38     12      0     0%   2-87
searx/engines/duckduckgo.py                       85     67     28      0    16%   59-66, 71-118, 124-172, 179-186
searx/engines/duckduckgo_definitions.py          141    120     72      0    10%   47, 52-61, 65-69, 73-241, 245-249, 254-261
searx/engines/duckduckgo_images.py                44     28      8      0    31%   39-46, 52-69, 74-94
searx/engines/duden.py                            32     20      6      0    32%   40-49, 56-77
searx/engines/dummy-offline.py                     4      1      0      0    75%   18
searx/engines/dummy.py                             6      1      0      0    83%   24
searx/engines/ebay.py                             38     19      6      0    43%   37-38, 42-73
searx/engines/elasticsearch.py                    69     69     22      0     0%   2-131
searx/engines/etools.py                           25     13      4      0    41%   32-39, 43-56
searx/engines/fdroid.py                           23     12      2      0    44%   31-33, 38-54
searx/engines/flickr.py                           38     38     14      0     0%   2-92
searx/engines/flickr_noapi.py                     70     47     22      0    25%   43, 47-49, 53-55, 59-127
searx/engines/framalibre.py                       34     18      6      0    40%   38-42, 47-72
searx/engines/freesound.py                        25     25      2      0     0%   2-69
searx/engines/frinkiac.py                         21      9      2      0    52%   32-33, 37-51
searx/engines/genius.py                           45     29     10      0    29%   30-34, 38-50, 54-59, 63-76, 83-90
searx/engines/gentoo.py                           42     25      8      0    34%   32-34, 54-56, 89-107, 113-129
searx/engines/gigablast.py                        65     44     24      0    24%   52-61, 64, 72-94, 98-138
searx/engines/github.py                           24     15      6      0    30%   30-34, 39-63
searx/engines/google.py                          129     99     44      0    17%   138-194, 197-198, 204-245, 251-326, 331-341
searx/engines/google_images.py                    84     65     24      0    18%   73-82, 88-95, 101-128, 133-209
searx/engines/google_news.py                      64     44     14      0    26%   83-119, 124-196
searx/engines/google_scholar.py                   55     36     14      0    28%   67-70, 76-108, 112-156
searx/engines/google_videos.py                    79     58     28      0    20%   81-82, 87-113, 119-145, 150-201
searx/engines/imdb.py                             25     15      8      0    30%   34-36, 40-55
searx/engines/ina.py                              43     22      4      0    45%   43-47, 52-85
searx/engines/invidious.py                        50     37     20      0    19%   36-63, 68-122
searx/engines/json_engine.py                      89     66     38      0    18%   29-35, 39-41, 45-51, 55-75, 79-81, 85-94, 98, 102-143
searx/engines/kickass.py                          43     28      6      0    31%   37-40, 45-94
searx/engines/loc.py                              25     14      6      0    35%   37-43, 47-68
searx/engines/mediathekviewweb.py                 23     13      2      0    40%   27-46, 50-68
searx/engines/mediawiki.py                        35     22     11      0    28%   39-64, 69-90
searx/engines/meilisearch.py                      33     33     10      0     0%   2-59
searx/engines/microsoft_academic.py               34     23     10      0    25%   26-41, 45-63, 67-73
searx/engines/mixcloud.py                         25     13      2      0    44%   34-39, 44-64
searx/engines/mongodb.py                          38     38     10      0     0%   2-61
searx/engines/mysql_server.py                     33     33      6      0     0%   2-62
searx/engines/nyaa.py                             53     34      6      0    32%   41-43, 48-111
searx/engines/onesearch.py                        23     12      2      0    44%   34-36, 42-57
searx/engines/opensemantic.py                     24     24      4      0     0%   2-46
searx/engines/openstreetmap.py                   183    143     84      0    16%   71-74, 78-79, 83-84, 88, 141-144, 149-194, 198-200, 212-249, 257-295, 301-316, 322-338, 343-357, 367-381, 389-393, 401-411, 416-418, 423-441
searx/engines/pdbe.py                             51     38     10      0    21%   35-41, 46-73, 78-115
searx/engines/peertube.py                         44     30      8      0    27%   30-41, 45, 50-91, 95-96
searx/engines/photon.py                           49     35     20      0    20%   36-48, 53-133
searx/engines/piratebay.py                        37     23      4      0    34%   50-55, 60-101
searx/engines/postgresql.py                       38     38      8      0     0%   2-69
searx/engines/prowlarr.py                         42     42     22      0     0%   2-80
searx/engines/pubmed.py                           51     38      6      0    23%   37-45, 49-105
searx/engines/qwant.py                           102     85     44      0    12%   67-100, 107-227, 233-245
searx/engines/recoll.py                           50     50     20      0     0%   2-111
searx/engines/reddit.py                           38     27      8      0    24%   31-34, 39-79
searx/engines/redis_server.py                     43     43     16      0     0%   2-69
searx/engines/rumble.py                           44     23      6      0    42%   42-43, 47-81
searx/engines/scanr_structures.py                 33     33     12      0     0%   2-79
searx/engines/searchcode_code.py                  25     14      4      0    38%   36-38, 43-71
searx/engines/searx_engine.py                     21     21      4      0     0%   2-59
searx/engines/semantic_scholar.py                 42     33     16      0    16%   24-40, 44-79
searx/engines/sepiasearch.py                      44     26     10      0    33%   50-52, 56-71, 75-102
searx/engines/seznam.py                           31     21      8      0    26%   31-45, 49-66
searx/engines/sjp.py                              56     41     22      0    19%   36-38, 42-92
searx/engines/solidtorrents.py                    22     10      2      0    50%   31-35, 39-53
searx/engines/solr.py                             49     49     20      0     0%   2-74
searx/engines/soundcloud.py                       48     28     14      0    32%   48-66, 72, 77-83, 88-109
searx/engines/spotify.py                          31     31      4      0     0%   2-80
searx/engines/springer.py                         34     34     10      0     0%   2-74
searx/engines/sqlite.py                           33     33      8      0     0%   2-51
searx/engines/stackexchange.py                    26     13      4      0    43%   35-45, 50-67
searx/engines/startpage.py                       111     80     43      0    20%   66-68, 86-106, 119-138, 143-208, 220-269
searx/engines/tineye.py                           33     22      4      0    30%   30-43, 47-86
searx/engines/tokyotoshokan.py                    54     41     18      0    18%   33-35, 40-101
searx/engines/torrentz.py                         51     38      6      0    23%   34-37, 42-99
searx/engines/translated.py                       19      8      2      0    52%   27-35, 39-51
searx/engines/unsplash.py                         23     11      6      0    41%   27-30, 39-40, 44-55
searx/engines/vimeo.py                            28     16      2      0    40%   35-38, 43-68
searx/engines/wikidata.py                        361    276    110      0    21%   112, 119-128, 132-142, 146-161, 165-182, 186-262, 266-278, 282-410, 418, 421, 424, 427, 430, 433, 436, 439, 445, 448, 453, 456-461, 469-471, 475, 478, 481, 487, 490-491, 497, 500, 503, 506, 516-518, 521-529, 535, 538, 541, 546, 549-553, 556-560, 568-569, 575, 582, 590, 594, 597-604, 608-609, 613-614, 617-619, 627, 648-666, 670-675, 680-694
searx/engines/wikipedia.py                        61     47     20      0    17%   30-33, 38-52, 57-90, 95-111
searx/engines/wolframalpha_api.py                 66     66     22      0     0%   2-134
searx/engines/wolframalpha_noapi.py               58     43     24      0    18%   53-60, 64, 70-75, 80-126
searx/engines/wordnik.py                          46     33     16      0    21%   31-33, 37-77
searx/engines/www1x.py                            24     12      2      0    46%   32-34, 39-57
searx/engines/xpath.py                            54     36     26      0    22%   29-39, 43-93
searx/engines/xpath_flex.py                       49     49     14      0     0%   3-121
searx/engines/yacy.py                             44     44     16      0     0%   2-114
searx/engines/yahoo.py                            65     48     20      0    20%   70-76, 81-99, 103-116, 120-150, 155-162
searx/engines/yahoo_news.py                       52     31     10      0    34%   60-67, 70-111
searx/engines/yggtorrent.py                       62     45     12      0    23%   42-46, 51-60, 65-128
searx/engines/youtube_api.py                      38     38      8      0     0%   2-91
searx/engines/youtube_noapi.py                    77     55     30      0    21%   47-61, 66-68, 72-105, 109-153, 157-160
searx/exceptions.py                               40     12     24      0    78%   26-33, 71-73, 83, 93
searx/external_bang.py                            61      0     36      1    99%   66->65
searx/external_urls.py                            36     27     16      0    17%   17-18, 22-26, 37-51, 55-59, 85-89
searx/languages.py                                 1      0      0      0   100%
searx/metrology/__init__.py                        0      0      0      0   100%
searx/metrology/error_recorder.py                107     82     38      0    19%   22-28, 31-33, 38, 42, 48-50, 54-60, 64-67, 72-85, 89-105, 109-114, 118-124, 128-135, 139-144
searx/network/__init__.py                        103     71     26      0    25%   26, 39-42, 47-100, 104-105, 109-110, 114-115, 119, 123, 127, 131, 135-149, 153, 171-188
searx/network/client.py                           76     25     30      6    61%   41, 51-58, 66-74, 108, 109->exit, 111, 123-131, 134, 138->140
searx/network/network.py                         237     39    106     11    81%   153-158, 162-177, 201-202, 210-211, 241->exit, 251-259, 285-289, 295, 330->332, 344->346, 353, 366, 376->exit, 394->399
searx/network/raise_for_httperror.py              31     23     20      0    16%   10-18, 22, 26-33, 37-39, 43-44, 59-66
searx/plugins/__init__.py                        114     62     50      7    45%   60-61, 65, 69-70, 80->79, 83, 89-104, 108-123, 127-157, 161-163, 178, 181-185, 189
searx/plugins/ahmia_filter.py                     20     10      4      0    42%   18-20, 24-27, 31-33
searx/plugins/hash_plugin.py                      22      2      6      2    86%   37, 42
searx/plugins/hostname_replace.py                 21      7      8      1    52%   15->exit, 21-28
searx/plugins/https_rewrite.py                   105     43     54      8    55%   34, 57-59, 67, 75, 87, 101, 110, 119-121, 127, 138-139, 149-150, 173-221, 225-230
searx/plugins/infinite_scroll.py                   7      0      0      0   100%
searx/plugins/oa_doi_rewrite.py                   37     24     16      0    25%   18-25, 29-34, 38-48
searx/plugins/search_on_category_select.py         6      0      0      0   100%
searx/plugins/self_info.py                        19      1      8      2    89%   37, 41->44
searx/plugins/tracker_url_remover.py              25     16     10      0    26%   34-53
searx/plugins/vim_hotkeys.py                       7      0      0      0   100%
searx/preferences.py                             286     91    165     16    65%   48, 55, 68, 111-112, 119-125, 130, 136->exit, 142, 148-149, 156-160, 165, 173, 214-215, 225, 229, 237->239, 239->exit, 243-255, 260-261, 267, 293, 297, 300-301, 319, 418-435, 450, 460->exit, 466, 470-488, 495->497, 498, 504-513, 532-534
searx/query.py                                   195      0     98      1    99%   215->214
searx/results.py                                 255    134    148     28    41%   22, 40, 44, 64-131, 135-148, 182, 184, 186, 188, 190, 194-195, 197-198, 200-201, 207-208, 211-213, 217, 220-231, 238, 245-246, 249, 251, 256->259, 273, 282-283, 290, 295, 305-306, 309-312, 316-320, 330-366, 373->375, 384, 387-388, 391, 398
searx/search/__init__.py                         121     26     50      9    74%   44-49, 87->89, 99-101, 119, 142, 143->147, 167-172, 181->186, 193->196, 205-207, 210-220
searx/search/checker/__init__.py                   2      0      0      0   100%
searx/search/checker/__main__.py                  63     63     32      0     0%   3-91
searx/search/checker/background.py                83     52     22      3    32%   22-29, 33-34, 38-40, 45, 50-73, 77-81, 85-87, 91-93, 97->103, 111-125
searx/search/checker/impl.py                     286    215    162      0    19%   41, 50-56, 61-98, 102, 113-123, 131-133, 137-143, 146, 150, 153-155, 167-172, 176-177, 180-182, 185-193, 196-223, 226-227, 230-232, 235-241, 244-258, 262-263, 267-268, 274-275, 279-291, 295-299, 310-312, 316-327, 337-339, 343-345, 349-362, 365-375, 380-381, 384-391, 394-397, 400-412, 415-416
searx/search/models.py                            33      3      6      0    87%   21, 52, 70
searx/search/processors/__init__.py               36      5     14      4    82%   24, 32, 40-41, 53
searx/search/processors/abstract.py               47     18     12      3    58%   18-25, 34, 38, 48, 55, 58-64, 67
searx/search/processors/offline.py                36     25      8      0    30%   18-22, 25, 28-51
searx/search/processors/online.py                127     83     46      7    31%   42, 46-47, 60-105, 114, 120-124, 145-198, 201, 208-212, 219-262
searx/search/processors/online_currency.py        43     31      8      0    27%   14-16, 21-25, 30, 38-59, 62-69
searx/search/processors/online_dictionary.py      28     20     10      0    26%   17-37, 40-55
searx/settings_loader.py                          81      1     48      1    98%   119
searx/shared/__init__.py                          19     11      2      0    38%   14-29
searx/shared/shared_abstract.py                   14      4      2      0    75%   9, 13, 17, 21
searx/shared/shared_simple.py                     24     12      2      0    54%   16, 19, 22, 29-39
searx/shared/shared_uwsgi.py                      40     40     14      0     0%   3-64
searx/testing.py                                  47     18      8      0    60%   24, 28, 32, 36, 43-69, 72-74, 79-82
searx/utils.py                                   278     71    150      6    69%   75, 92, 101, 204, 210, 220-224, 275, 294-316, 321-324, 332-336, 356-369, 398, 453-460, 489, 497-506
searx/version.py                                   5      0      0      0   100%
searx/webadapter.py                              142     45     82     19    61%   47, 53, 58, 62, 66, 73, 76-80, 86, 96, 102->105, 107-110, 117-128, 132-151, 169->181, 173-177, 183-185, 191, 204-205, 213, 235
searx/webapp.py                                  630    473    303      3    18%   22-23, 32-33, 108-109, 154->158, 182-186, 193-202, 207-232, 238-282, 288, 292, 303-308, 312-315, 319-325, 329-342, 348-369, 374, 381-452, 457-464, 469-512, 518-522, 527-537, 541-563, 574-581, 590, 601-744, 770-776, 782, 792-838, 846-890, 915-916, 926-1000, 1006-1009, 1017-1040, 1045-1046, 1051, 1062-1080, 1085, 1096-1099, 1105-1131, 1155, 1159-1160, 1174-1176, 1211-1218, 1221-1235
searx/webutils.py                                 92      5     38      3    92%   51->53, 54, 61->63, 145-148
------------------------------------------------------------------------------------------
TOTAL                                           9906   6115   3582    158    34%

ERROR: test.coverage exit with error (1)

```

<!-- A clear and concise description of what the bug is. -->

**How To Reproduce**
<!-- How can we reproduce this issue? (as minimally and as precisely as possible) -->

Run `sudo ./manage test.coverage` from root directory of this repo

**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
No errors

**Screenshots & Logs**
<!-- If applicable, add screenshots, logs to help explain your problem. -->

**Additional context**
<!-- Add any other context about the problem here. -->

user: Niveshkrishna
issue_3196: state: open
title: Cannot exclude hostname from being proxied
body: **Version of Searx, commit number if you are using on master branch and stipulate if you forked Searx**
1.0.0-361-03eb9c24
**How did you install Searx?**
searx-docker
**What happened?**
I'm trying to exclude a single hostname from being proxied via Tor, while keeping everything else proxied.
According to the python httpx documentation (https://www.python-httpx.org/advanced/#http-proxying) this can be done like this:
```python
proxies = {
    "all://": "socks5h://tor:9100",
    "all://prowlarr": None,
}
```
which should translate to this searx `settings.yml`:
```yml
    proxies:
        all://:
            - socks5h://tor:9100
        all://prowlarr: null
```

but it causes searx to crash on startup

**Screenshots & Logs**
<!-- If applicable, add screenshots, logs to help explain your problem. -->
```
Traceback (most recent call last):
  File "/usr/local/searx/searx/webapp.py", line 156, in <module>
    search_initialize(enable_checker=True, check_network=True)
  File "/usr/local/searx/searx/search/__init__.py", line 57, in initialize
    check_network_configuration()
  File "/usr/local/searx/searx/network/network.py", line 295, in check_network_configuration
    raise RuntimeError("Invalid network configuration")
RuntimeError: Invalid network configuration
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
--- no python application found, check your startup logs for errors ---
--- no python application found, check your startup logs for errors ---
--- no python application found, check your startup logs for errors ---
```
and
```
ERROR:searx.network.<name>:Error
Traceback (most recent call last):
  File "/usr/local/searx/searx/network/network.py", line 286, in check
    await network.get_client()
  File "/usr/local/searx/searx/network/network.py", line 187, in get_client
    client = new_client(
  File "/usr/local/searx/searx/network/client.py", line 125, in new_client
    if proxy_url.startswith('socks4://') \
AttributeError: 'NoneType' object has no attribute 'startswith'
```
repeated for every search engine
user: m00nwtchr
issue_3195: state: open
title: Explore possible synergies with Meta-Press.es
body: Hi,

I'm the main dev of Meta-Press.es an NGI0 / NLnet funded free software project.

Meta-Press.es is a meta-search engine dedicated to the online press, and shaped as a WebExtension : https://meta-press.es

I first tried to reach @dalf about the coming JDLL.org event and the possibility to meet here (but his email quota is exceeded, and his personal website is down).
user: Siltaar
issue_3194: state: open
title: Jisho.org (Japanese <-> English dictionary)
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Working URL to the engine**
https://jisho.org

**Why do you want to add this engine?**
It's the go-to online dictionary for Japanese <->English. It's basically what https://www.naver.com is for Korean, and there's already an engine entry for Naver.

**Features of this engine**
I'm not really sure what I should put here... Uhm, I guess it's fast? And it's a nicely and matter-of-factly designed website? And it's indispensable for anyone having to do anything with Japanese?

**How can Searx fetch the information from this engine?**
Again, not really sure what kind of technical data need to go here because I don't really know how Searx talks to its engines internally, but I suppose this could be a starting point: https://jisho.org/docs

**Applicable category of this engine**
General; or maybe Science, seeing as it's of an academic nature, but all the other dictionaries are in General, so I see no reason to break the tradition.

**Additional context**
Cross-linking to searxng/searxng#1016
user: Nocifer
issue_3189: state: open
title: The command engine doesn't use the working_dir configuration variable.
body: Version of Searx: commit 0248777f959ba9ee26fc8f1c367ea4ef2cb5d7cc

Installed by cloning the repo and manually executing searx/webapp.py.

**What happened?**
I am setting up a couple of custom commands using the command.py engine.  Reading the source code for this engine shows that it has a configuration option called [working_dir](https://github.com/searx/searx/blob/master/searx/engines/command.py#L23).  However, as it is currently implemented it can't be changed in settings.yml.  It will always default to `realpath('.')`

**How To Reproduce**
Configure a simple command search:

```
  - name: print working directory
    engine: command
    command: [ 'pwd' ]
    working_dir: "/home/your_home_directory"
    shortcut: pwd
    tokens: []
    disabled: False
    timeout: 120.0
    delimiter:
        chars: ' '
        keys: ['line']
```

Optionally, comment out the other search engines.

Start Searx.

Enter the following search: `!pwd` or `!pwd fooble`

**Expected behavior**
You should see a search result that looks something like this:

`LINE: /home/your_home_directory`

What you get is a search result like this:

`LINE: /path/to/where/you/have/searx`

**Screenshots & Logs**
![Screenshot at 2022-03-17 17-42-03](https://user-images.githubusercontent.com/639730/158915873-73eecd07-ea2d-4028-95fc-edfac1311731.png)

![Screenshot at 2022-03-17 17-42-58](https://user-images.githubusercontent.com/639730/158915927-1526f6fd-79e3-490c-9073-432fe4a30e45.png)

user: virtadpt
issue_3186: state: open
title: Show the correct URL to be able to transfert preferences cookies from one browser to an other
body: **Is your feature request related to a problem? Please describe.**

Several SearX users are requesting a simple way to save preferences from one browser to an other:
https://github.com/searx/searx/issues?q=is%3Aissue+is%3Aopen+preferences

SearX is able to give a preferences URL for later searches: 

![image](https://user-images.githubusercontent.com/477243/158146967-e9d7ac23-8f21-4cd4-a764-aceb0cee9841.png)

The problem is this URL is not really useful. If you paste it into the address bar of a browser, it will return a search for "%s".

![image](https://user-images.githubusercontent.com/477243/158147453-18c27fec-2a33-4ac0-a57b-5974dabac07a.png)

I suppose most users won't realise they'll have to copy this URL and paste it into their browser preferences to be able to use the custom preferences

![image](https://user-images.githubusercontent.com/477243/158148195-c3893b72-55e6-407c-9cb9-fb012401186f.png)

**Maybe it should be a good idea to give a more meaningful message about how the users are supposed to use this URL!**

Because when you paste the https://searx.be/?preferences=eJxtVk/.../&q=%s into the address bar, it will replace the ?preference by search?preference= and you won't be able to save the cookie later.


**Describe the solution you'd like**

If you just copy the URL from the preference page, paste it into a text editor, add preferences before the ?preferences (it will become preferences?preferences) and remove the &q=%s part.

Then you'll get the preferences panel with your options preconfigured, and you can save the cookie.

It's not very obvious nor user friendly, the preferences option could give the URL to save preferences into a new browser, and in addition add the "search" link for entering into the new browser preferences (with a hint how to use it)



user: farvardin
issue_3182: state: open
title: Add a new engine: Baidu
body: ## What does this PR do?
Add a new search engine https://www.baidu.com/
## Why is this change important?
Baidu is a chinese search engine which is famous in China, so I think it is necessary to add it. 
## How to test this PR locally?
Run `sudo make run`
Go to `/preferences`
Disable all search engines with the exception of onesearch (the last one)
Make some search
Assert that it works as expected
Assert that the pagination works
## Author's checklist
This search engine is OFF by default.
HTML parser from [python-baidusearch](https://github.com/wcadaydayup/python-baidusearch)
## Related issues
[#1622 ](https://github.com/searx/searx/issues/1622)

user: ShevonKuan
issue_3148: state: open
title: If MySQL restarts, the MySQL engine fails
body: **Version of Searx, commit number if you are using on master branch and stipulate if you forked Searx**

commit 33f3f716784157a7325fba73b1c36bc175ddaa49

Not forked.

**How did you install Searx?**

Manual installation, running as a uwsgi service.

**What happened?**

I ran a search on a MySQL service configured for Searx this morning and got an error message that the search source was unavailable.  Manual examination showed that the search service was running and responding to queries executed from the context of `/usr/bin/mysql -h0 --port 9306`.

I then restarted Searx and re-ran the search, and started getting results as expected.

**How To Reproduce**

* Configure a MySQL server as a search engine to query with the mysql_engine.py service.
* Run a search to confirm that it works.
* Restart the MySQL server.
* Run the search again while watching the Searx logs.  You should get a similar exception from mysql_engine.py.
* Restart Searx.
* Run the search again.  You should get search results.

**Expected behavior**

You should get search results from the MySQL search source.

**Screenshots & Logs**

```
Jan 22 11:45:22 exocortex.virtadpt.net searx.sh[898490]: ERROR:searx.search.processor.offline:engine mysql : exception : MySQL Connection not available.
Jan 22 11:45:22 exocortex.virtadpt.net searx.sh[898490]: Traceback (most recent call last):
Jan 22 11:45:22 exocortex.virtadpt.net searx.sh[898490]:   File "/home/drwho/searx/searx/search/processors/offline.py", line 29, in search
Jan 22 11:45:22 exocortex.virtadpt.net searx.sh[898490]:     search_results = self._search_basic(query, params)
Jan 22 11:45:22 exocortex.virtadpt.net searx.sh[898490]:   File "/home/drwho/searx/searx/search/processors/offline.py", line 25, in _search_basic
Jan 22 11:45:22 exocortex.virtadpt.net searx.sh[898490]:     return self.engine.search(query, params)
Jan 22 11:45:22 exocortex.virtadpt.net searx.sh[898490]:   File "/home/drwho/searx/searx/engines/mysql_server.py", line 49, in search
Jan 22 11:45:22 exocortex.virtadpt.net searx.sh[898490]:     with _connection.cursor() as cur:
Jan 22 11:45:22 exocortex.virtadpt.net searx.sh[898490]:   File "/home/drwho/searx/env/lib/python3.8/site-packages/mysql/connector/connection_cext.py", line 571, in cursor
Jan 22 11:45:22 exocortex.virtadpt.net searx.sh[898490]:     raise errors.OperationalError("MySQL Connection not available.")
Jan 22 11:45:22 exocortex.virtadpt.net searx.sh[898490]: mysql.connector.errors.OperationalError: MySQL Connection not available.
```

**Additional context**

MySQL search source is a Manticore searchd running on the same host.

Manticore's search index is rebuilt nightly.  This includes a SIGHUP to rotate the index database.

If the search index is not rebuilt nightly (i.e., no SIGHUP received), this does not happen.

This applies to "actual" MySQL servers as well.  During times when the MySQL server is briefly unavailable (hosting provider managed MySQL instance, restarted as part of regular maintenance on their part) this happens.
user: virtadpt
issue_3136: state: open
title: Black theme
body: **Is your feature request related to a problem? Please describe.**
It would be great to have a black `Pointhi` theme, especially for users with AMOLED displays.

**Describe alternatives you've considered**
`Logicodev dark` is a good "dark" theme but it is not "black".

**Additional context**
Are there any other themes for searx, part the official `Logicodev` and `Pointhi`?

Thanks
user: yellowhat
issue_3116: state: open
title: Consider making the HTTP method used for an engine configurable.
body: **Is your feature request related to a problem? Please describe.**
A search engine that I'm trying to integrate using json_engine only accepts POST requests.  json_engine only makes GET requests.

**Describe the solution you'd like**
An optional configuration option that changes the HTTP request method used from GET to something else (POST, PUT, whatever).

**Describe alternatives you've considered**
Writing a small GET-to-POST proxy.  Using an nginx configuration hack to proxy GET requests with POST requests.  Writing a shell script that uses curl and jq to make a request, parse the returned JSON, and return something that the command engine can make sense of.

**Additional context**
[Manticore](https://manticoresearch.com/)'s `searchd` service only accepts HTTP POST requests.  I've tinkered with its MySQL query functionality but it doesn't seem to like the version of the mysql client that Ubuntu's MariaDB packages offer.  I'm having some difficulty turning the returned JSON into output that the command engine can use because it doesn't seem to be documented anywhere, nor have I found any examples.

ref: https://github.com/searxng/searxng/issues/701
user: virtadpt
issue_3113: state: open
title: Bing Images safesearch not working
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Version of Searx, commit number if you are using on master branch and stipulate if you forked Searx**
commit f2f72575023b9a08081f6c87bf309f1f12fa9978 (master from this repository)

**How did you install Searx?**
<!-- Did you install Searx using the official wiki or using searx-docker
or manually by executing the searx/webapp.py file? -->
Cloned the repository and used `sudo make run` to run locally

**What happened?**
<!-- A clear and concise description of what the bug is. -->
The feature `safesearch` of the engine `Bing Images` does not work

**How To Reproduce**
<!-- How can we reproduce this issue? (as minimally and as precisely as possible) -->
1. Go to preferences page
1. Set the safe search to **STRICT** *
1. Search for `!bii UNSAFE_KEYWORD`
1. The images are not filtered (bug)

*The bug also happens when setting to MODERATE

**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
When using bing.com directly and searching for something UNSAFE, bing by default is set to MODERATE (filters images, but not links/webpages). When inside searx and setting it to either STRICT or MODERATE, the engine still returns everything without filtering.

**Additional context**
<!-- Add any other context about the problem here. -->
We have the same problem in spot (https://gitlab.e.foundation/e/cloud/my-spot/-/issues/73). 

After checking how bing safesearch works, it **IS** expected that the current code in searx would work, i.e. the bing endpoint does not seem to have changed how it accepts the requests.

user: israelyago
issue_3100: state: open
title: Bing Images not fetching images properly
body: I am trying to obtain images from Bing via Searx. I have noticed that the images are coming in repetition. Further I have also noticed that the quality of the images in not good as well. As per the code I should obtain at least 28 images per page. 

However, after troubleshooting I have found that I am only receiving 6 and sometimes 9 images at a time. I have checked the URL that is being generated and have found that it has more than 9 images.


user: gurpreetanandevontech
issue_3073: state: open
title: Another Google search parameter to set country
body: Related to https://github.com/benbusby/whoogle-search/issues/544

Current [searX Google engine](https://github.com/searx/searx/blob/master/searx/engines/google.py) maps country to Google country specific domain, but it needs manual maintenance and has some edge cases. In a addition, this method does not seem to work well, so please compare the following search results from Google:

https://www.google.com/search?q=yuyuyu
https://www.google.co.jp/search?q=yuyuyu
https://www.google.com/search?q=yuyuyu&gl=JP

The result of "https://www.google.com/search?q=yuyuyu&gl=JP" is identical to the Google Japan, which can be verified by visiting "https://search.yahoo.co.jp/search?p=yuyuyu", since "Yahoo! Japan search" is based on Google search.

Additionally, this proposed method of setting country also applies to [Google images](https://github.com/searx/searx/blob/master/searx/engines/google_images.py), [Google news](https://github.com/searx/searx/blob/master/searx/engines/google_news.py), [Google scholar](https://github.com/searx/searx/blob/master/searx/engines/google_scholar.py), [Google videos](https://github.com/searx/searx/blob/master/searx/engines/google_videos.py). What's more, it is better to set country as "US" if search language is set as "Default language" in order to guarantee the consistent Google search result from searX instances hosted in different country.
user: msoxzw
issue_3068: state: open
title: Preserve cookies after query
body: ## What does this PR do?

Implements the "preserve preferences URL parameter as cookies" https://github.com/searx/searx/issues/2958 

## Why is this change important?

After making a search with the url preferences, the user expects it's settings to persist across more searches. The current behavior does not persist the user configuration.

This branch allows the user to have it's, e.g. dark mode ON even after the first query

## How to test this PR locally?

1. Set your theme to dark mode
1. Go to the /preferences page
1. Copy the preferences URL
1. Open an anonymous browser tab
1. Paste the preferences URL and update the last q=%s to q=dog

At the search results page, confirm that you are in dark mode
Go to the images page, confirm that you still have the dark mode

## Related issues

https://github.com/searx/searx/issues/2958
https://gitlab.e.foundation/e/backlog/-/issues/1154

user: israelyago
issue_3059: state: open
title: Engine request: Listen Notes podcast search engine
body: **Working URL to the engine**
<!-- Please check if the engine is responding correctly before submitting it. -->

Listen Notes podcast search engine:

-  Website: https://www.listennotes.com/
-  Podcast API: https://www.listennotes.com/api/

The website follows similar convention of search engines by using "?q=[keyword]" to search. 

**Why do you want to add this engine?**
<!-- What's special about this engine? Is it open source or libre? -->

 Podcast is becoming quite popular. [There are ~120,000,000 podcast episodes indexed by Listen Notes](https://www.listennotes.com/podcast-stats/) - as of Nov 2021; note. The number ~120,000,000 should justify the existence of a podcast search engine:

- [Spotify has ~70,000,000 songs](https://newsroom.spotify.com/company-info/)
- [Audible has 470,000 audiobooks](https://production.listennotes.com/web/image/5c7584380c5b4863a2089b0d77fe4296.png)
- [IMDb has 8,300,000 titles (movies, tv shows, tv episodes...)](https://www.imdb.com/pressroom/stats/)
- [Google indexed ~25,000,000 web pages when it was founded in 1998](https://i.insider.com/50c7b16f6bb3f7a26e00000f?width=600&format=jpeg&auto=webp)

Listen Notes provides a widely used [podcast api](https://www.listennotes.com/api/) , which makes integration easy.

**Features of this engine**
<!-- Features of this engine: Doesn't track its users, fast, easy to integrate, ... -->

- [Huge volume of podcast contents](https://www.listennotes.com/podcast-stats/)
- [Provides detailed podcast metadata](https://www.listennotes.com/api/docs/), including podcast cover images, audio urls to stream, [podcast popularity score](https://www.listennotes.com/listen-score/)...
- [Easy to integrate with the podcast api](https://www.listennotes.com/api/)
- [Great track record of stability and speed](https://www.listennotesstatus.com/)

**How can Searx fetch the information from this engine?**
<!-- List API URL, example code (using the correct markdown) and more
that could be useful for the developers in order to implement this engine.
If you don't know what to write, let this part blank.>

Use [Listen Notes Podcast API](https://www.listennotes.com/api/).

[The API documentation shows all endpoints & response data](https://www.listennotes.com/api/docs/).

**Applicable category of this engine**
<!-- Where should this new engine fit in Searx? Current categories in Searx:
general, files, images, it, map, music, news, science, social media and videos.
You can add multiple categories at the same time. -->

Ideally, this is a new category "podcasts".

However, if creating a new category is difficult, I think these categories may be applicable: "general", "files", and "news".

**Additional context**
<!-- Add any other context about this engine here. -->

I'm the founder and CEO of Listen Notes, Inc. Please feel free to contact me for any questions: wenbin@listennotes.com
user: wenbinf
issue_3055: state: open
title: different search engine combination
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Is your feature request related to a problem? Please describe.**
search engine result is distracting  and irrelevant, when you search about specific topic.
it make search result messy. it is unpleasant to deactivate search engine each time you search that topic

**Describe the solution you'd like**
searx show different combination result as custom category. for example:
in specific search query show me result from google and Wikipedia
in other search query just result from duckduckgo and bing.
that can add them as custom category (General 1 , General 2 ,) with custom name

**Describe alternatives you've considered**
i can send different query to different settings with 'Search URL of the currently saved preferences' for now, but that means reduce privacy and i can't use POST Method too.
user: Monirzadeh
issue_3042: state: open
title: Search engine results timeout
body: In a self hosted setup of searx recently I get timeouts for almost all engines.

> Error! Engines cannot retrieve results.
> google (timeout), wikidata (timeout), bing (timeout), brave (timeout), wikipedia (timeout)
> Please, try again later or find another searx instance. (Public instances)

Is it a searx flaw or the search engines drop the searx queries? Any workarounds available?

I can say that this is consistent across many engines. If I disable everything except duckduckgo then I get results from duckduckgo. However, if I enable other engines I don't get any output whatsoever. Is there a timeout that invalidates the results for all the engines? Duckduckgo does not timeout but searx is not returning results for this either.

If it helps, I access searx using nginx as a reverse proxy.
user: pati-ni
issue_3038: state: open
title: New maps mimikry not very stable (only receives places with umlauts)
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

Version git 21d7efa6ca635a1835c2f10c0f3a1e9486f455db

**How did you install Searx?**

Standard on system installation via script (official Wiki)

**What happened?**

The new maps mimikry is not very stable (tested it on official instances as well). Looks like places need umlauts e. g. ö in the place name with german settings.

**How To Reproduce**
enter "Köln" and search in maps (works)
enter "Lisbon" and search in maps (does not work - search engines are not able to receive. openstreetmap (timeout), photon (timeout)
enter "Düsseldorf" - (works)
enter "Bonn" and search in maps (does not work - search engines are not able to receive. openstreetmap (timeout), photon )
enter "Bonn ö" (works)
enter "Lisbon ä" (works but with wrong place...)
enter "Lisbon" (does not work)

**Expected behavior**
not working searches work

user: cy8aer
issue_3028: state: open
title: Ability to export user preferences
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
I want to be able to use the exact same configuration on an installation of Firefox on another machine, but I can't import the preferences URL. 
**Describe the solution you'd like**
The ability to export your entire configuration (theme, enabled search engines, plugins etc) to a JSON

**Describe alternatives you've considered**
I tried to use the preferences url as search but that's stupid.

**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->

user: pistasjis
issue_3025: state: open
title: Make search recommendations expand with the search window
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Is your feature request related to a problem? Please describe.**
Search recommendations are currently shown in a separate window from the search window, which makes the design cluttered.

**Describe the solution you'd like**
When you type into a search field, and the recommendations show up, they should be shown in the same window as the search window, but extended below it.

**Additional context**
By implementing this, it would look much better, design-wise.

Screenshot of current search recommendations:
![image](https://user-images.githubusercontent.com/50620416/137798965-290069b1-ab3c-4071-a93d-c03e17314d2f.png)

Screenshot of the recommended solution (highly compressed image) as seen from another search engine: 

![image](https://user-images.githubusercontent.com/50620416/137800724-d0fc9def-1566-44d2-9ff2-b49224883ad1.png)



user: aha999
issue_3005: state: open
title: "images.html" should be optimized
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Version of Searx, commit number if you are using on master branch and stipulate if you forked Searx**
```
$ git log -1
commit c5d63a5c9718b18b738856dad90a140cc1b51b55 (HEAD -> master)
Merge: 2db2dfa8 9e7a6848
Author: Noémi Ványi <kvch@users.noreply.github.com>
Date:   Thu Jun 3 22:17:29 2021 +0200

    Merge pull request #2837 from searx/update_data_update_currencies.py
    
    Update searx.data - update_currencies.py
```

**How did you install Searx?**
<!-- Did you install Searx using the official wiki or using searx-docker
or manually by executing the searx/webapp.py file? -->
Wiki

**What happened?**
<!-- A clear and concise description of what the bug is. -->
Engines which return images use the [images.html](https://github.com/searx/searx/blob/master/searx/templates/oscar/result_templates/images.html) template, will display information if the image is clicked
but the text of image format or content gets "overlayed".

See image below.

**How To Reproduce**
<!-- How can we reproduce this issue? (as minimally and as precisely as possible) -->
Search with !flickr
```
!flickr time
```

**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
Text of "format" or "content" etc. should be placed without the line.

**Screenshots & Logs**
<!-- If applicable, add screenshots, logs to help explain your problem. -->
![searx_images_html](https://user-images.githubusercontent.com/64094914/136661397-4ed81eef-2195-4cd6-9a6a-4e4686a881e6.png)


**Additional context**
<!-- Add any other context about the problem here. -->

user: allendema
issue_3001: state: open
title: Add option to hide Links- and Info-Box
body: ## Problem

A Links- and Info-Box are shown right of the search-results as can be seen in the screenshot. I would like to disable/hide them and rather have more space for the results and center them. The reason is because I don't need the Links- and Info-Box and they simply take up space and are visual clutter. I prefer to show only the information I need.

## Solution

Add an option in preferences to disable the boxes on the right side and instead increase the space for the search-results or center them.

## Additional Context

![searx_boxes](https://user-images.githubusercontent.com/36510152/136114085-de5a554c-8620-4e13-9da1-e892757bffaa.png)

Related: #1980
user: astier
issue_2958: state: open
title: URL preferences persistance
body: I use the URL preferences feature and have it set up as my browsers default search URL. When I resubmit the query, this time not through browser search box, but rather the one in searx website, default URL is used rather than one with the preferences. In other words, `?preferences=<long_string>` gets removed from the URL. This is especially painful because it switches to light theme.

I would like my preferences to be propagated to each subsequent query.

I do not use cookies.
user: marcin-szmagara
issue_2952: state: open
title: Custom / site-restricted search, like Rollyo or Bing Custom Search
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Is your feature request related to a problem? Please describe.**
Over time I come to favour particular websites for certain information and I want to search those sources first. For example, if I wanted a burrito recipe, I could just search for “burrito recipe” on a standard search engine, but over the years I’ve discovered a few recipe websites which I really like, and so I prefer to search them first as my preferred sources, before searching the entire Web.

**Describe the solution you'd like**
Ability to configure a list of preferred sites which are searched first, by restricting the search query via the `site:` parameter. In Google, Bing and DuckDuckGo, you can restrict a search to a single website with `burrito site:https://naturallyella.com/`. I want to restrict to a list of sites and then combine the results from all of these queries.

**Describe alternatives you've considered**
1. Implement new engine for each site. Not really appropriate because many engines can search a single site.
2. Search each site manually. Does not scale to using many websites.

**Additional context**
I've hacked this on to Searx myself on my fork at <https://github.com/wcerfgba/searx> , but it's not ready for a pull request yet. I wanted to share the idea with the world to see if people think this is worth me tidying up and submitting a proper PR for the main project. If so, notes on project code style and how to test are welcome! :smile:  See also my blog post for a tiny bit more exposition on why I want this: <https://jpreston.xyz/custom-search-engine.html>

user: wcerfgba
issue_2951: state: open
title: added icons to search results
body: ## What does this PR do?

Adds icons next to search result urls. changes are only made in macros.html.  websitename.com/favicon.ico is assumed to have the icon image. dynamically get the images for each website and minor css to adjust with the inline link. 

## Why is this change important?

This was stated as a performance enhancement.  [Feature request] Show icon of domain URLs #1690  

## How to test this PR locally?

all normal testing as stated in the docs.

## Author's checklist

I am a first time open source contributor. Any reviews or mistakes are welcome

## Related issues

 [Feature request] Show icon of domain URLs #1690 


user: Harrry1405
issue_2943: state: open
title: Engine request: https://www.artstation.com
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Working URL to the engine**
https://www.artstation.com

**Why do you want to add this engine?**
Would be great to search images results

**Features of this engine**
High quality images and draws

**How can Searx fetch the information from this engine?**
<!-- List API URL, example code (using the correct markdown) and more
that could be useful for the developers in order to implement this engine.
If you don't know what to write, let this part blank.>

**Applicable category of this engine**
images

**Additional context**
<!-- Add any other context about this engine here. -->

user: ghost
issue_2929: state: open
title: Torrent Search
body: I came across https://github.com/sergiotapia/torrentinim and this would be a good idea to support for the file tab.
 A self-hosted API-only, low memory footprint, torrent search engine and crawler.
user: lisbonjoker
issue_2924: state: open
title: Maps - Komoot Photon search not working
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Version of Searx, commit number if you are using on master branch and stipulate if you forked Searx**
Searx 1.0.0
<!-- If you are running on master branch using git execute this command
in order to fetch the latest commit ID:
```
git log -1
``` 
If you are using searx-docker then look at the bottom of the Searx page
and check for the version after "Powered by searx"

Please also stipulate if you are using a forked version of Searx and
include a link to the fork source code.
-->
**How did you install Searx?**
<!-- Did you install Searx using the official wiki or using searx-docker
or manually by executing the searx/webapp.py file? -->
**What happened?**
<!-- A clear and concise description of what the bug is. -->

**How To Reproduce**
<!-- How can we reproduce this issue? (as minimally and as precisely as possible) -->
just search for "Berlin" in the map search

**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
it should point me to the Komoot photon website

**Screenshots & Logs**
<!-- If applicable, add screenshots, logs to help explain your problem. -->

**Additional context**
<!-- Add any other context about the problem here. -->
The website URL may have changed from https://photon.komoot.de/ to https://photon.komoot.io/

![Auswahl_002](https://user-images.githubusercontent.com/7679654/128602950-7b2673be-8b04-4cbf-8bce-f045c6f1f0fc.png)


![Auswahl_001](https://user-images.githubusercontent.com/7679654/128602811-58dfefea-fa82-4924-85a9-259996d14dc2.png)


user: hermann-san
issue_2909: state: open
title: Add espantujo regional
body: We all know that Esperanto is an artificial language and that it is gradually gaining its importance, but there is a problem, when users search for Esperanto content they have difficulties


So I would appreciate it if you added the Esperantujo region to make it easier to find for esperantists


The reason is simple, because the people behind the search engine don't create an exclusive section for Esperantists, and this would be another great advantage for people to use searx,If you add the Esperantujo region to searx



la komunumo dankas vin pro la kontribuo
user: telmobss1
issue_2908: state: open
title: Add odysee with videos and blogs
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Working URL to the engine**
<!-- Please check if the engine is responding correctly before submitting it. -->. Odysee.com

**Why do you want to add this engine?**
<!-- What's special about this engine? Is it open source or libre? -->. Lbry os opensource,but THE odysee it's just an interface that runs on top of the lbry protocol    

**Features of this engine**
<!-- Features of this engine: Doesn't track its users, fast, easy to integrate, ... -->

Best alternative to YouTube, livestreams support blogs podcasts playlists and more

**How can Searx fetch the information from this engine?**
<!-- List API URL, example code (using the correct markdown) and more
that could be useful for the developers in order to implement this engine.
If you don't know what to write, let this part blank.>

Via the odysee URL or via the lbry protocol database 

**Applicable category of this engine**
<!-- Where should this new engine fit in Searx? Current categories in Searx:
general, files, images, it, map, music, news, science, social media and videos.
You can add multiple categories at the same time. --> 

News(blogs) and  videos  
**Additional context**
<!-- Add any other context about this engine here. -->

user: telmobss1
issue_2902: state: open
title: Please bump to Bootstrap 5.0.2
body: Independent website security tests such as Immuniweb indicate that Bootstrap version 3.4.1 and recommend that the new 5.0.2 should be used instead. The test report on my existing installation at https://searx.beatquantum.com is attached in two images.

Grateful if you could bump to Bootstrap 5.0.2 after the testing the impact on the UI. I can spin a few test server to help, if you wish.

![searx1](https://user-images.githubusercontent.com/67234356/126748095-c65bd05a-da4c-451d-bf39-7f3565466f20.PNG)
![searx2](https://user-images.githubusercontent.com/67234356/126748106-4a57f1a5-a3a9-4e09-98ac-45b41e192108.PNG)

Many thanks.
user: beatquantum
issue_2896: state: open
title: [enh] Add researchgate.com
body: Upstream example query:
https://www.researchgate.net/search/publication?q=robot

## What does this PR do?

Add researchgate.com directory.

<!-- MANDATORY -->

<!-- explain the changes in your PR, algorithms, design, architecture -->
Added www.researchgate.com using the ``` xpath ``` engine.

## Why is this change important?

Have an engine to search for publication on searX.

<!-- MANDATORY -->

<!-- explain the motivation behind your PR -->
Make Searx better.

## How to test this PR locally?

Do a search with:
``` !rg robot```

## Author's checklist

<!-- additional notes for reviewiers -->
The returned URL has "/search" in it but if that is remove the URL works fine.
Find a workaround.

## Related issues
N/A
user: allendema
issue_2865: state: open
title: [enh] Add Junior Search Engine "blinde-kuh.de"
body: Upstream example:
https://www.blinde-kuh.de/bksearch.cgi?smart=0&sid=&query=musik


## What does this PR do?

This adds blinde-kuh.de as another optional engine.
It is a junior German search engine for u14.

<!-- MANDATORY -->

<!-- explain the changes in your PR, algorithms, design, architecture -->
Added blinde-kuh.de using the ``` xpath ``` engine.

## Why is this change important?

More engines to choose from.
First enngine for u14.

<!-- MANDATORY -->

<!-- explain the motivation behind your PR -->
Make Searx better, more privacy for end-users.

## How to test this PR locally?

Do a search with:
``` !bkuh musik```

## Author's checklist
Maybe some searches like "pizza" are not always Paginated.


**Testing how to create a Pull Req with just one commit.**

<!-- additional notes for reviewiers -->
Testing. Not ready.
Don't merge.

## Related issues
N/A
user: allendema
issue_2858: state: open
title: Engine request: Tiger.ch
body: **Working URL to the engine**
https://tiger.ch

Search example:
[https://tiger.ch/Websuche?w=barbra+streisand+effect](https://tiger.ch/Websuche?w=barbra+streisand+effect)

**Why do you want to add this engine?**

Because it says that they search other engines for results.

[...] Bing, DuckDuckGo, Google, mojeek, YouTube, daylimotion, vimeo [...]
Source: https://tiger.ch/Websuche?w=tiger.ch

So it is a Metaearch engine, if only this is enabled,
SearX would only do one request and let Tiger.ch do the rest,
in essence search and mix/rank the results from different crawlers shown above.


**Features of this engine**
<!-- Features of this engine: Doesn't track its users, fast, easy to integrate, ... -->
Firstly it has no obvious external trackers or analytics.

**How can Searx fetch the information from this engine?**
Would suggest the ``` xpath_engine ```.

**Applicable category of this engine**
General

**Additional context**
Tried to implement this but I couldn't select the right paths.
Paging is also possible.

https://tiger.ch/Websuche.aspx?w=tiger.ch&page={pageno}
user: allendema
issue_2845: state: open
title: Google Scholar engine no longer returning results
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

If you are using searx-docker then look at the bottom of the Searx page
and check for the version after "Powered by searx"

Powered by searx - 1.0.0-151-c5d63a5c

-->
**How did you install Searx?**
<!-- Did you install Searx using the official wiki or using searx-docker
or manually by executing the searx/webapp.py file? -->
Using the officieal searx-docker image.

**What happened?**
<!-- A clear and concise description of what the bug is. -->
This morning I found that when query google scholar through searx, Google Scholar no longer returns results. Google Scholar is up at time of writing.

**How To Reproduce**
<!-- How can we reproduce this issue? (as minimally and as precisely as possible) -->
https://hub.docker.com/r/searx/searx
docker pull searx/searx
docker run --publish 49152:8080 --env BASE_URL=http://localhost:49152/   --shm-size=256m --tty --detach --name prod_searx_server_bda725e58e22f59843e027f79c42cf08ba96fdcc242301bcd2e042 searx/searx
Disable all engines except for Google Scholar
Attempt to search for any term
Note that no results appear

**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
I expected results form google scholar to appear.
user: pjmattingly
issue_2831: state: open
title: Modifying the Google Scholar engine in docker without hacking?
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Describe the solution you'd like**
I was hoping for a way to override the default behaviors of the Google Scholar engine without having to hack the engine definition directly. Is that possible?

**Additional context**
I wanted to add some additional options to the Google scholar engine that scholar supports, but searx does not. For example, Scholar allows one to specify a date range for results. There are no search operators that control those options, and so it would require crafting a search URL directly. For example, to return a search for papers published only in 2020, the URL would look like:

`f"https://scholar.google.com/scholar?q={query string}&hl=en&as_sdt=0%2C5&as_ylo=2020&as_yhi=2020"`

The key items in that string are: `"&as_ylo=2020&as_yhi=2020"`. Unfortunately the engine doesn't support those additional options, and so I'd have to patch the engine directly; Likely with a wrapper around `request` that would modify `params['url']` to a string that would include these options.

For a complete list of additional options supported by Google scholar, see: https://serpapi.com/google-scholar-api.

I was hoping for an easier solution. Is there one that you would suggest?

Thanks.
user: pjmattingly
issue_2828: state: open
title: [FR] Hide categories like Science, Social media
body: It would be great if an option in preference to hide those categories not needed to the user, for example, in my case, I'd never want Social Media, Science, It, News, Music

![Screenshot_20210525-174952_1](https://user-images.githubusercontent.com/10193999/119496961-a5801e80-bd81-11eb-8b0f-5fdc94c7fed3.png)

user: mizzunet
issue_2827: state: open
title: Use access tokens for list of search engines 
body:  Can I use  access token to limit list of search engines, rather then putting on each search engines?


user: anmol26s
issue_2820: state: open
title: Add RightDao search engine
body: ## What does this PR do?

Adds RightDao search engine to settings.yml.

## Why is this change important?

To add additional search choices to Searx. This is a fairly new general search engine with its own independent database and claims a no-tracking policy.

## How to test this PR locally?

## Author's checklist

Passes both make run and make test.pylint

I've been successfully including RightDao search results with no errors for several days with this code added to my own Searx instance.

## Related issues

<!--
Closes #234
-->

user: eagle-dogtooth
issue_2817: state: open
title: Engine request: searchmysite.net
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Working URL to the engine**
https://searchmysite.net/

**Why do you want to add this engine?**
Fairly new, smaller, interesting search engine that highlights personal and noncommercial websites

**Features of this engine**
Open source, independent search engine that only indexes personal and independent websites

**How can Searx fetch the information from this engine?**
Their API info is at https://searchmysite.net/pages/documentation/#api
Using the given API info I tried adding the below to settings.yml, but it only returns content local to the site and not their search engine results:

  - name : searchmysite
    shortcut : smst
    engine : json_engine
    paging : True
    search_url : https://searchmysite.net/api/v1/search/searchmysite.net?q={query}
    url_query : url
    title_query : title
    content_query : id
    categories : general

Needs some work to figure out how to get their full search engine results.

**Applicable category of this engine**
general

**Additional context**
<!-- Add any other context about this engine here. -->

user: eagle-dogtooth
issue_2815: state: open
title: Add RightDao search engine
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Working URL to the engine**
https://rightdao.com/

**Why do you want to add this engine?**
Relatively new search engine with its own independent database

**Features of this engine**
Has its own independent search database, says they don't track users

**How can Searx fetch the information from this engine?**
I am successfully pulling in results into my own searX instance by adding this to settings.yml:

  - name : rightdao
    shortcut: rdo
    engine: xpath
    paging : True
    search_url : https://rightdao.com/search?q={query}
    url_xpath : //div[@class="info"]/span[@class="url"]
    title_xpath : //div[@class="title"]/a/div[@class="ellipsis-lg"]
    content_xpath : //div[@class="description"]

**Applicable category of this engine**
general

**Additional context**
<!-- Add any other context about this engine here. -->

user: eagle-dogtooth
issue_2791: state: open
title: Get just images from other 'searx_engine's
body: **Is your feature request related to a problem? Please describe.**

Added another instances URL to ```/etc/searx/settings.yml``` and specified engines I would like from that instance,
it worked with general engines until I wanted to get just the images, so I added
the shortcut !images ```searx.instance.tld/search?q=!images+``` according to this [discussion](https://github.com/searx/searx/discussions/2782#discussioncomment-661889).

The external instance returns just general results with no images to be seen.

**Describe the solution you'd like**
If the external instance has a shortcut given, in this case ``` !images ```, results should be just images.

**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
N/A

**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->

Printscreen:

![searx_external_instance](https://user-images.githubusercontent.com/64094914/116754894-cb780480-aa09-11eb-8715-220f6899e1c3.png)



user: allendema
issue_2777: state: open
title: Add SpellChecker for requests
body: ## What does this PR do?

Add new visual block (in results template) with a hint for correct request sentence
results.html and webapp.py are changed

![image](https://user-images.githubusercontent.com/16925900/115936202-52bef880-a49d-11eb-91ca-6438fb738794.png)

## Why is this change important?

other search engines have such feature
good to have I guess

## How to test this PR locally?

make run

## Author's checklist


## Related issues

<!--
Closes #234
-->

user: MykolaSauliak
issue_2772: state: open
title: [FR] Remove engine shortcuts when changing category
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
Lets say I searched for 'Wine' with my defined engines:

```bash
!gh !cb !gl Wine
```
But then decide to view some images, by changing the category.

The page reloads but with the defined engines, and not in the "images" category.

**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
When the category is changed, my engine shortcuts should be removed.

**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
Alternatively add the default image engines to the query, which mixes the results.
So the query would look like this:

```bash
!gh !cb !gl !images Wine
```

user: allendema
issue_2742: state: open
title: Arrow navigation for image preview
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Right, left, up and down arrows are almost always used for for page navigation. Once in preview mode, however, all major search engines feature the ability to use the right and left keys to navigate to the next or previous image (Google, Bing, Yahoo, Yandex, DuckDuckGo), and most feature right and left navigation buttons with the same function. Searx does not yet have these two features, which poses a minor accessibility problem.**

**It would be nice if right and left key arrow navigation corresponding to next and previous image in preview mode could be implemented to ease keyboard navigation, and if graphical right and left buttons could be added to ease mouse navigation.**
user: 00-000
issue_2730: state: open
title: CI documentation build HTML seems buggy
body: ----

**The CI builds this HTML (https://searx.github.io/searx/):**

----

![image](https://user-images.githubusercontent.com/554536/113663553-c4bfd100-9699-11eb-81c2-6e041f784b1b.png)

----

**The correct rendered HTML should looks like ...**

----
![image](https://user-images.githubusercontent.com/554536/113663663-f5076f80-9699-11eb-830e-225925f79152.png)

----
user: return42
issue_2700: state: open
title: Security Category / OSINT & CVE-Search
body: Hi, 
is it possible to include 2x more Security related search engines ? 

**Describe the solution you'd like**
Include Security Category like: science & it 

CVE-Search:

example_search form:
https://linkflix.de/search?q=vmware&categories=security&subcategorie=cve

show all available vmware vulnerabilities  

https://github.com/cve-search/cve-search

CVE-Search uses the following databases: 

NIST National Vulnerability Database
Common Platform Enumeration (CPE)
Common Weakness Enumeration (CWE)
CIRCL incident statistics and threat ranking
toolswatch/vFeed


OSINT Scanner:
search for spam mail address through spiderfoot. 

example_search form:
https://linkflix.de/search?q=maliciois@email-address.com&categories=security


https://github.com/smicallef/spiderfoot

do you see an way to include this both search engines ? 


user: iDustbin
issue_2699: state: open
title: Add DOI resolver: Library Genesis
body: Here's sample query from Library Genesis:
[http://libgen.gs/scimag/ads.php?doi=10.1063/1.529338](http://libgen.gs/scimag/ads.php?doi=10.1063/1.529338)

Currently working alternative domains: [libgen.li](http://libgen.gs/scimag/ads.php?doi=10.1063/1.529338) and [libgen.lc](http://libgen.gs/scimag/ads.php?doi=10.1063/1.529338).

It's very easy to implement.

Also, the whole Library Genesis scientific papers database could be fetched from [libgen.rs/dbdumps/scimag.sql.gz](http://libgen.rs/dbdumps/scimag.sql.gz) to be used in case of an offline query.
user: 1366613
issue_2692: state: open
title: Host SearX as a Serverless function
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
No

**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
An installation guide to run the SearX as serverless function in a Cloud solution that supports serverless framework.
This would help in scalability of the SearX instance/function in case of peak loads. 

**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
The alternative can be to run the instance as a Kubernetes pod to achieve scalability but that might be complicated for some users.

<!--**Additional context**-->
<!-- Add any other context or screenshots about the feature request here. -->

user: arghyadeep-k
issue_2691: state: open
title: [Localization] Missing strings for translation
body: Missing strings for translation, needs to be added to Transifex

- Show advanced settings
- Show advanced settings panel in the home page by default
- Hash plugin
- Converts strings to different hash digests.
- HTTPS rewrite
- Self Informations
user: BouRock
issue_2674: state: open
title: [Feature] Filter Results By Engine / Temporary Selected Engine Query
body: ## Is your feature request related to a problem? Please describe.

Currently a user is not able to easily filter search results by engine, on a per search basis. This could provide mediocre results for specific searches, and simply restricts the user on having more power in seeing results they want.

## Describe the solution you'd like

My suggestion is to provide a simple filter button that will only show results from certain engines. This would be an option available in the advanced search options, as well as after a search has been made already.

For example, if I have Google, DDG, and Wiki enabled as engines, and I do a search, if I dislike the results, I would then be able to simply hit filter, then check whichever of the engines I want to see, say Wiki only, then it'd return only Wiki results.

## Additional Context

This could possibly be extended further to allow users searching different engines that they don't have enabled bt default, without requiring them to go change the default settings, they could simply toggle on an engine for a specific search. 

Edit: Just realized there was a template, templates are still broken on Fasthub app, I can add it and edit my post, apologies. 

Edit 2: Edited the template in, however it won't be automatically marked with an enchancement tag.
user: seniorm0ment
issue_2665: state: open
title: Added artic search engine
body: ## What does this PR do?

Added a search engine to retrieve contents from the Art Institute of Chicago collections.
Added '/engines/artic.py' file and edited the 'settings.yml' accordingly.

## Why is this change important?

Glad to start adding art-related search engines to enrich Searx engines panel.

## How to test this PR locally?

Just 'make run' it.


user: habsinn
issue_2646: state: open
title: Installing with Docker fails building cryptography
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Version of Searx, commit number if you are using on master branch and stipulate if you forked Searx**
v0.18.0
**How did you install Searx?**
with the dockerfile from this github repository
**What happened?**
When trying to build from the dockerfile, it fails because the cryptography project now has a Rust dependency, since they are switching from C to Rust. 

**How To Reproduce**
Try building searx with Docker

**Expected behavior**
Building succeeds

**Screenshots & Logs**
```
 =============================DEBUG ASSISTANCE=============================
If you are seeing a compilation error please try the following steps to
successfully install cryptography:
1) Upgrade to the latest pip and try again. This will fix errors for most
users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
2) Read https://cryptography.io/en/latest/installation.html for specific
instructions for your platform.
3) Check our frequently asked questions for more information:
https://cryptography.io/en/latest/faq.html
4) Ensure you have a recent Rust toolchain installed:
https://cryptography.io/en/latest/installation.html#rust
5) If you are experiencing issues with Rust for *this release only* you may
set the environment variable `CRYPTOGRAPHY_DONT_BUILD_RUST=1`.
=============================DEBUG ASSISTANCE=============================

error: Can not find Rust compiler
—————————————-
ERROR: Failed building wheel for cryptography
```

**Additional context**
From what I could gather, the issue arises, because you're still using Alpine Linux 3.12 in your dockerfile and Alpine 3.13 should have the appropriate version of Rust. The dockerfile should be updated. For further reading here: https://github.com/pyca/cryptography/issues/5771

user: thiccpad
issue_2638: state: open
title: plugin: generic_url_rewrite.py
body: ## What does this PR do?
Adds a new plugin <b>generic_url_rewrite</b> that allows to rewrite hits url. 
<!-- MANDATORY -->

<!-- explain the changes in your PR, algorithms, design, architecture -->

## Why is this change important?
A new plugin, as we discussed in https://github.com/searx/searx/issues/2609 
<!-- MANDATORY -->

<!-- explain the motivation behind your PR -->
Plugin to rewrite generic hits, may be useful to others 

## How to test this PR locally?

<!-- commands to run the tests or instructions to test the changes-->


Edit file `plugins/genericRewrites/config.yml` and add a test entry as 
<pre>
www.reddit.com: old.reddit.com
</pre>
And enable the plugin from `Preferences`.
Then perform a search for `reddit searx` - the output urls should be rewritten to `old.reddit.com` 

## Author's checklist
Tested locally on my lxc machine, 
<!-- additional notes for reviewiers -->
Please feel free to tweak, if you'd like. 
## Related issues
Closes #2609
<!--
Closes #234
-->

user: anmathew
issue_2617: state: open
title: Document external bangs
body: For the old implementation I had written a small documentation for the external bangs, see my [doc-external-bang](https://github.com/return42/searx/commit/68e86a69d0819868015f4665baa9f544454bb98a) branch.

We have never merged this documentation because at this time externel-bangs was nothing more than a mess.  Since #2592 has been merged bangs are now sorted and I want to document them.

What I do miss in the `data/external_bangs.json` are the predicates like _name ("s")_, _category ("c")_  or _sub-category ("sc")_. By example, here is the full entry for bing in the origin from ddg:

```json
    {
        "sc": "Search",
        "u": "https://www.bing.com/search?q={{{s}}}",
        "c": "Online Services",
        "d": "www.bing.com",
        "r": 11107,
        "t": "b",
        "s": "Bing"
    },
```

Does it make sense to add them to the `data/external_bangs.json`? .. or should we better create/update a file in the documentation (e.g. `./docs/user/external-bangs.rst)` when `utils/fetch_external_bangs.py` runs?



user: return42
issue_2599: state: open
title: Add some documentation about Github-Actions and dependabot
body: We automate more and more tasks in or repository but I missed some documentation about.

As soon as I have time for it I will write some words about, if someone precedes me send us your PR or leaf your thoughts about here in a comment / thanks! 
user: return42
issue_2546: state: open
title: Warnings during tests
body: Hello peeps,

I've got warnings at the end of tests and i dunno if it's a normal operating : 
`searx/local/py3/lib/python3.8/site-packages/splinter/driver/webdriver/__init__.py:498: FutureWarning: browser.find_link_by_text is deprecated. Use browser.links.find_by_text instead.
  warnings.warn(`

**How To Reproduce**
Just run `make test`

Cheers.
user: mrwormo
issue_2532: state: open
title: Add ability to set API key without being administrator of the instance
body: **Is your feature request related to a problem? Please describe.**
Not realy. See discussion #2527
**Describe the solution you'd like**
Please add ability to set api key on the settings page of searx  in the browser for every user

user: winux1
issue_2519: state: open
title: Prometheus metrics searx
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
It would be nice to have Prometheus metrics for Searx.

for example:
 - amount of searches
 - response time
 - gets and posts
 - status codes
 - health endpoints
 - amount registered ip's 


user: matthiasantierens
issue_2504: state: open
title: Lbry.tv and Odysee.com engines
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Working URL to the engine**
https://lighthouse.lbry.com/search?s=QUERYSTRING&size=5&from=0&nsfw=false
**Why do you want to add this engine?**
_First and foremost, LBRY is a new protocol that allows anyone to build apps that interact with digital content on the LBRY network. Apps built using the protocol allow creators to upload their work to the LBRY network of hosts (like BitTorrent), to set a price per stream or download (like iTunes) or give it away for free (like YouTube without ads). The work you publish could be videos, audio files, documents, or any other type of file.
Traditional video (or other content) sites such as YouTube, Instagram, and Spotify store your uploads on their servers and allow viewers to download them. They also allow creators to make some money through advertising or other mechanisms. However, there are some well-known drawbacks, especially for people whose material is perceived as not being advertiser-friendly.
LBRY aims to be an alternative to these sites, allowing publishers and their fans to interact directly without the risk of demonetization or other meddling._

**Features of this engine**
LBRY indexes digital content using an open blockchain

**How can Searx fetch the information from this engine?**
https://lighthouse.lbry.com/search?s=youtube-is-over-lbry-odysee-are-here&size=5&from=0&nsfw=false
**Applicable category of this engine**
Mostly Videos but lbry has all kind of content (Docs, pictures....)


user: nukelr
issue_2472: state: open
title: Show WolframAlpha results in General
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Is your feature request related to a problem? Please describe.**
Whenever I make certain non-Science queries, I have to click on "Science" in order to get results. Some examples of such queries:

* 1 usd to yen
* 80 °F
* 2432*53
* daniel radcliffe height
* define discombobulate
* emma stone age

**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
Add WolframAlpha to the General tab (ideally by default)

**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
- Make an extra click (but Google etc don't require an extra click)
- Take results from a search engine like Google (but WolframAlpha is good enough and even better for some cases, and would simply require adding it to the "General tab")

**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->

user: gabrc52
issue_2469: state: open
title: Show how long it took you to return the results?
body: <!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->

**Is your feature request related to a problem? Please describe.**
Sometimes searx is slow and I don't know which engine is slowing it down.

**Describe the solution you'd like**
Show how long it took to retrieve the results, right next to it.

![searx_20210114_time_to_retrieve results](https://user-images.githubusercontent.com/67835718/104634152-29215480-5698-11eb-8571-0075230b9703.jpg)

And this feature can be turned on and off from the preference, so people who don't want it can turn it off.

**Describe alternatives you've considered**
The preferences section has this option, but its not live, and it would be a hassle to open it each time.

**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->

user: extralight
issue_2468: state: open
title: Fetch Google Buildings/Businesses and Yelp
body: **Is your feature request related to a problem? Please describe.**
Not entirely sure the proper name for them, but the lack of Business/Building snippets when searching makes searching for places a chore. Businesses, buildings, restaurants, etc.

For example, if I go to Google, search "the white house washington dc" it provides a snippet on the right of the screen (see image below).
This snippet provides relevant information about the building.

When doing this same search over SearX, you get none of this. You are provided with a Yelp link at most. However this means you are required to open Yelp to view this information.  If you are using  a script blocker, this can make things far more annoying as well. 

**Describe the solution you'd like**
My suggestion is to be able to fetch this information as Google does.

**Information Google Fetches:**
- _Description, Type of Building, Full Address, Construction Date(s), Floor Space, Phone Number, Opening Hours (With notes if they could be wrong during a holiday, or weather event), Designated NHL, Associated Pictures and Relevant Artworks, Social Media Profiles, Website, Similar Landmarks, User Reviews, Link to Wikipedia Page, Link to Directions, and more._

It would be an added benefit if reviews could be read, with pictures and ratings from Yelp and Google, without needing to navigate to their sites to view the reviews.

At minimum I would suggest implementing, a picture if it exists, with the phone number, store hours, full address (with a link to directions) would be better than anything.
However it would be cool to be able to implement as much as possible as it makes searching for places much more helpful.

Yelp also includes a massive amount of things that Google does not in their snippets, I'm not sure if it's possible to scrape these however it would be extremely beneficial.

**Some of the stuff Yelp includes are:** 
Using this as an example: https://www.yelp.com/biz/royal-38-dallas

- _COVID-19 Updates & Health and Safety Measures: Availiability for the following: Outdoor seating, Delivery, Takeout, Sit-down dining, Curbside pickup, Social distancing enforced, Staff wears masks, Masks required, Staff wears gloves, Hand sanitizer provided, Sanitizing between customers._

Amenities and More:
- _Takes reservations, offers takeout, offers delivery, accepts credit cards, vegan options, outdoor seating, garage parking, valet parking, bike parking, waiter service, happy hour specials, full bar, smoking outside only, dogs allowed, wheelchair accessible, open to all, sit-down dining, wi-fi, cryptocurrency, and more._

- _The menu options at the place with pictures and reviews._

- _Suggestions for similar places._

and a bunch of other information.

I'm not exactly asking to scrape or rewrite the entire site, I know it is a lot of information. However all this information is extremely relevant when searching a business, building, restaurant, etc. it would be nice to have it provided right in the search result if it's possible to scrape this info. I know it's a lot, but it could be nestle under drop-downs.
I think this would be **extremely** powerful if possible, alongside allowing users to view this information in a more freedom respecting, privacy friendly way rather then needing to visit the actual websites.


**Additional context**
Google Search Query Example One: https://www.google.com/search?source=hp&ei=PnIAYIOeFamv5NoPu9mQ2A8&q=the+white+house+washing+dc&oq=the+white+house+washing+dc
Image: https://i.imgur.com/oyUSlT4.png

Google Search Query Example Two (click a location): https://www.google.com/search?source=hp&ei=wXUAYPn4I_Wk5NoPyL-2wAQ&q=Best%20Buy%20Texas&oq=Best+Buy+Texas 

Yelp Example One: https://www.yelp.com/biz/royal-38-dallas
Yelp Example Two: https://www.yelp.com/biz/target-dallas-8?osq=best+buy
user: seniorm0ment
issue_2465: state: open
title: [Feature] Improve Image Browsing UX
body: Images seem to pull in low resolutions for one. Higher than going to other search engines and trying it seems.

Secondly the lack of filters, such as filtering my resolution, file size, layouts, types, colors, etc is a lacking feature.

Thirdly the actual layout is very poor imho, there's generally a lot of empty space between photos, once you click on a photo there is no way to just go right or left to the next or previous photo.
(I'd also suggest a fullscreen gallery mode, to swipe on mobile or click left or right on desktop)

Fourthly the lack of information about the image when clicking on it, it would be nice to have it show metadata as there is a lot of empty space when clicking a photo.

Fifth, if you click an image, then click get image, it would be nice to also offer the option to proxy it through Searx (similar to how duckduckgo works). It would be nice if it could passthrough the original filename through.
This can be solved by changing "view image" to be the proxy, then adding a second link below "View source" labeled "Get source image" which would bring you to what "get image" currently brings you to.
user: seniorm0ment
issue_2449: state: open
title: Navigation between search results with arrow keys
body: VIM-like hotkeys overcomplicated for me. I use everything i can with hotkeyst, but the vim-like solution is very different from my habbit.

I'd love a duckduck.go like solution:  arrow keys + enter in a plugin.

user: BenceBakos
issue_2440: state: open
title: Better UI
body: I tried out searx cuase duckduckgo isn't open source and I only wanna use open source software,but the problem is that searx's ui doesn't look good,I tried all the themes,but it looks like an ancient search engine.
user: ghost
issue_2439: state: open
title: Retry mechanism when a captcha is served but multiple proxies are available
body: **Is your feature request related to a problem? Please describe.**
It is known that Google, Bing and more serve a CAPTCHA when Searx does too many requests.
Currently, we got https://github.com/searx/searx/pull/2319 merged, but it is not response aware which means a proxy could be chosen randomly but still be blocked by the website (Google, Bing and more) and thus render the ability of having multiple proxies less useful.

**Describe the solution you'd like**
A mechanism that will retry with another proxy if the response is a CAPTCHA and multiple proxies are provided inside the settings.yml.
Here is an example of a setting that could be included for both general setting and per engine setting:
```yml
outgoing: # communication with search engines
  proxies:
    retry_on:
      - 429
      - 403
    http:
      - http://proxy1:8080
      - http://proxy2:8080
    https:
      - http://proxy1:8080
      - http://proxy2:8080
```
And for the engine setting:
```yml
- name : google
  engine : google
  shortcut : go
  proxies:
    retry_on:
      - 429
      - 403
    http:
      - http://localhost:9000
      - http://localhost:9001
    https:
      - http://localhost:9000
      - http://localhost:9001
```

I don't know if it's better to use HTTP status code or the CAPTCHA detection added in https://github.com/searx/searx/pull/2375 and https://github.com/searx/searx/pull/2350.
Or instead the retry mechanism could just retry if the engine fails with whatever error (proxy that timeout, CAPTCHA, failed to parse the HTML response and so on). So we would have settings like this instead:
```yml
outgoing: # communication with search engines
  proxies:
    retry_on_error: true
    http:
      - http://proxy1:8080
      - http://proxy2:8080
    https:
      - http://proxy1:8080
      - http://proxy2:8080
```

And for the engine setting:
```yml
- name : google
  engine : google
  shortcut : go
  proxies:
    retry_on_error: true
    http:
      - http://localhost:9000
      - http://localhost:9001
    https:
      - http://localhost:9000
      - http://localhost:9001
```

**Describe alternatives you've considered**
I've a Golang proxy that I wrote for that, but it would be better to have this ability inside Searx itself: https://bitbucket.org/unixfox/rotating-proxy-server

**Additional context**
N/A
user: unixfox
issue_2437: state: open
title: Files engines
body: **Working URL to the engine**

I would add: https://docuwiki.net since it is all about files and good quality documentaries.

And here are some of the most popular torrent websites:

1. https://zooqle.com/
2. https://yts.mx/
3. https://torrentgalaxy.org/
4. https://eztv.re/


**Why do you want to add this engine?**

To enhance the Files category. The above seem to be reliable.

**Features of this engine**
They index a lot of torrents.

**How can Searx fetch the information from this engine?**
Unfortunately I do not know.

**Applicable category of this engine**
Files

**Additional context**

user: tiotrom
issue_2436: state: open
title: add DuckDuckGo News
body: Please add DuckDuckGo news. I know there's bing news but DuckDuckGo is different enough to warrant its own news engine. Since they actually do have their own crawler (the DuckDuckBot). I've also seen different results in bing news vs DuckDuckGo news.

------

**Working URL to the engine**
https://duckduckgo.com/?q=new+covid-19+variant&iar=news&ia=news

**Why do you want to add this engine?**
As I said in my experience it includes a diverse set of sources and it's a good news engine, different enough from bing.

**Features of this engine**
Doesn't track according to their claims (of course one can't verify this claim), it has a date filter, (past day, past week, past month)

**How can Searx fetch the information from this engine?**
I found the help pages but I don't think it's useful https://help.duckduckgo.com/duckduckgo-help-pages/results/duckduckbot/.

**Applicable category of this engine**
News.

**Additional context**
...
user: Jon-guy30
issue_2433: state: open
title: Engine request: DockerHub
body: **Working URL to the engine**
https://hub.docker.com/search?q=alpine&type=image

**Why do you want to add this engine?**
The largest Docker container registry

**Features of this engine**
N/A

**How can Searx fetch the information from this engine?**
The HTML result page or with the API: https://index.docker.io/v1/search?q=alpine&page=1 (`star_count` and `is_official` fields are nice to have besides the `name`)

Result entry landing pages:
- The `name` doesn't have a `/` (equivalent to `is_official=true` when using the API): https://hub.docker.com/_/alpine
- The `name` has a `/` (equivalent to `is_official=false` when using the API): https://hub.docker.com/r/alpine/git

**Applicable category of this engine**
IT

**Additional context**
N/A
user: immanuelfodor
issue_2431: state: open
title: Change logicodev dark infobox toggle color to dark
body: ## What does this PR do?

Change background color and remove border of class `.infobox_toggle` for logicodev dark style.

## Why is this change important?

The current infobox toggle color is not dark for logicodev dark style. It should be dark color because the rest of the color theme is dark.

## How to test this PR locally?

- Go to preferences page of searx instance.
- Set themes to oscar and style to logicodev dark.
- Save changes.
- Search with keyword that will shows infobox, for example "Wikipedia".
- The toggle infobox should appear with dark color at the bottom of infobox.
- If the toggle infobox color is not dark, try to hard reload using <kbd>ctrl</kbd> + <kbd>F5</kbd> or <kbd>ctrl</kbd> + <kbd>shift</kbd> + <kbd>R</kbd>.

## Author's checklist

This is my first contribution in this project. Please tell me if I made a mistake or so :smile: 

When I tried to run `make themes` in local, all of the file header in directory `searx/static/themes/{oscar,simple}/{css,js}` is changed, even though I only changed `searx/static/themes/oscar/less/logicodev-dark/oscar.less` file. Is this intended?

Next thing is the changes in file `searx/static/themes/oscar/css/logicodev-dark.min.css` is generated because I made changes in `searx/static/themes/oscar/less/logicodev-dark/oscar.less`. But the changes didn't generated in file `searx/searx/static/themes/oscar/css/logicodev-dark.css`, instead the changes is generated in file `searx/static/themes/oscar/css/logicodev.css`.

I looked at `searx/static/themes/oscar/gruntfile.js` file and found this line.

https://github.com/searx/searx/blob/5fb9a5c7c10252b21a23fe66e1625ed9f8691b4a/searx/static/themes/oscar/gruntfile.js#L44-L45

Is this also intended?

The last weird things that also happened when I run `make themes` is file `searx/searx/static/css/bootstrap.min.css` is also changed. So, I just ignore it because I even didn't change anything in `searx/static/less/bootstrap` directory.

At the end, I decided to only commit the file that directly affected this patch. Tell me if I should commit some of those files too.

You can take a look all of the file changes when I run `make themes` in my repo branch at https://github.com/gagahpangeran/searx/commit/9159ea9824e70c163f556a240775203dac83fb2f

## Related issues

Closes #2410 

user: gagahpangeran
issue_2410: state: open
title: White slider
body: ![IMG_20201221_152143](https://user-images.githubusercontent.com/76424286/102751192-32bde200-43a2-11eb-9707-7a212e6af550.jpg)

user: ksssd090
issue_2394: state: open
title: What searx option is a part of the brand and what is a part of instance settings.yml ?
body: Currently:
https://github.com/searx/searx/blob/002d53abf35192ba1094d7516da10b3442ca1f16/searx/brand.py#L1-L6

* `SEARX_URL` is very similar to https://github.com/searx/searx/blob/002d53abf35192ba1094d7516da10b3442ca1f16/searx/settings.yml#L16
* `GIT_URL` usage:
https://github.com/searx/searx/blob/002d53abf35192ba1094d7516da10b3442ca1f16/utils/makefile.sphinx#L180
https://github.com/searx/searx/blob/002d53abf35192ba1094d7516da10b3442ca1f16/utils/searx.sh#L398
* `GIT_BRANCH` usage: utils/searx.sh
https://github.com/searx/searx/blob/002d53abf35192ba1094d7516da10b3442ca1f16/utils/searx.sh#L329
* `DOCS_URL` is displayed in the themes, referenced in `setup.py` and `utils/morty.sh`
* `PUBLIC_INSTANCES`,  `DOCS_URL`, `ISSUE_URL` are displayed in the themes and referenced in `setup.py`

----

When a setting should go into brand.py ? (brand.py but it is actually [Makefile](https://github.com/searx/searx/blob/002d53abf35192ba1094d7516da10b3442ca1f16/Makefile#L4-L9) )
user: dalf
issue_2392: state: open
title: release automation
body: **Is your feature request related to a problem? Please describe.**

Currently, a release requires different manual steps.
It can be interesting to automate the process to create release more often and easily.

**Describe the solution you'd like**

create a new workflow similar to https://github.com/encode/httpcore/blob/master/.github/workflows/publish.yml

trigger on a new tag

pre-commit hook:
* check searx/version.py
* check the release for the CHANGELOG.rst

After commit:
* `make test`
* `make upload-pypi`
* `make docker.push`

**Describe alternatives you've considered**

* we can add an additional conditional step on https://github.com/searx/searx/blob/master/.github/workflows/integration.yml
* we can rely on a bash script (no Github action)

**Additional context**

user: dalf
issue_2382: state: open
title: Add PeerTube Icon
body: **Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
Icon of PeerTube instances is missing.
Note: I've had no idea that links of several domain are actually instances of sharing platform called PeerTube.

**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
Add an icon of PeerTube to video links to PeerTube instances.

**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->

**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->
Pinging to people of @Chocobozzz (PeerTube)

P.S. Thank you searx for including PeerTube. It's a great project and I've found it via searx :)
user: GreenLunar
issue_2379: state: open
title: Videos search in Grid mode
body: Would be useful if the videos search would be display in a grid manner such as:
![image](https://user-images.githubusercontent.com/34804533/101986368-b6364f80-3c8d-11eb-9494-4636d48f310b.png)

Rather than what it is now:
![image](https://user-images.githubusercontent.com/34804533/101986376-c1897b00-3c8d-11eb-901a-0321ec02797e.png)

For that matter I suggest to allow users ot switch between list and grid for all searches if possible.

Cheers!
user: tiotrom
issue_2378: state: open
title: command engine takes the whole user input query
body: it takes the whole user input query if i'm not mistaken. so when i query eg. `!mylocalcmd xyz` (mylocalcmd being a custom command engine) then the given command gets the whole "`!mylocalcmd xyz`" as `{{QUERY}}` parameter, eventhough it should interested only in the user part of the query, ie. "xyz".
i found that it extracts the user part into the `user_query_parts` variable in `query.py` (current master commit 2fc3b17), but i can not see how to pass it to the engine.

_Originally posted by @bAndie91 in https://github.com/searx/searx/pull/2128#discussion_r540979339_
user: dalf
issue_2377: state: open
title: new engine: CPAN
body: **Working URL to the engine**
https://metacpan.org/

**Why do you want to add this engine?**
this is the de-facto Perl module repo. people can search popular Perl modules and code

**Features of this engine**
its API is quite free (as in freedom and as beer as well)

**How can Searx fetch the information from this engine?**
here is the API docs: https://github.com/metacpan/metacpan-api/blob/master/docs/API-docs.md
i don't include more details here and now because I plan to implement this engine myself.

**Applicable category of this engine**
`it`

**Additional context**
n/a

user: bAndie91
issue_2367: state: open
title: Torrentz2 engine doesn't work anymore
body: Do you plan to remove it or replace it?
user: tiotrom
issue_2351: state: open
title: Engine request (optional, disabled by default): Fess
body: [Fess](https://fess.codelibs.org/): A self-hosted, enterprise ready search engine.  Ideal for personal use.

Should be disabled by default because not everybody uses it, but having the configuration in settings.yml would make life easier for a lot of folks.

Configuration stanza:

```
  - name : Fess
    engine : json_engine
    paging : True
    shortcut : fess
    search_url : http://localhost:8080/json?q={query}&start={pageno}&num=20&sort
    results_query : result
    url_query : url_link
    title_query : title
    content_query : digest
    page_size : 20
    categories : files
    timeout : 60
    disabled : True
```

Documentation of how this was done: [Here](https://drwho.virtadpt.net/archive/2020-11-30/interfacing-fess-with-searx/)
user: virtadpt
issue_2347: state: open
title: Many engines do not support English
body: I noticed that if I pick English (en) or American English (en-US) as a search language, in the list of engines in preferences many are not supported. I was wondering if that's intended...

If yes, what's the list of supported languages for each engine? I've looked in `searx/data/engines_languages.json` but the non-supported engines (such as reddit, yandex, library genesis) are never mentioned there.
user: renyhp
issue_2342: state: open
title: Feature request: Integrating Apertium to provide translations
body: Hello! I'm a contributor to the Apertium project ([Github](https://github.com/apertium), [website](https://apertium.org)). It's an open-source machine translation platform that uses a Python server to process queries ([more info](https://wiki.apertium.org/wiki/Apertium-apy)). The server can be easily installed alongside searx and it made me wonder if it wouldn't be a good idea to enchance searx functionality by adding a possibility of quick translations right from the search field.

Unfortunately my skills in Python are limited, otherwise I'd try to write something like that myself. What do you think about adding such feature? Would it make sense?
user: gkkulik
issue_2341: state: open
title: Feature request: improving inflection handling
body: Hello! Great project and it works fantastic.

I was wondering if it's possible to make the searches more inflection-friendly. Let's take two examples of English inflection:

go, went, gone, going
computer, computers

The same examples from Polish (but all Slavic languages work very similarly):

iść, idę, idziesz, idzie, idziemy, idziecie, idą, idąc, idący, idąca, idące (I'll stop here but this isn't all)
komputer, komputera, komputerowi, komputerze, komputerem, komputery, komputerów, komputerom, komputerami, komputerach

Say we've got a morphological dictionary of some kind (we could generate something like that using the Apertium project ([Github](https://github.com/apertium), [website](https://apertium.org)) for example). Would it be possible to create a function where searx would query such a dictionary and then search for inflected forms as well?

Google uses a similar approach but it seems to be based on semantics, meaning if your search string contains the word "good" (without quotes), Google would show results where it finds the word "bad". That often renders them useless so that's why I would consider an inflection-based dictionary, and not a semantics-based one.

What do you think? Would it be doable? I believe it would greatly help searches not only in languages mentioned but also all other since I don't think there's a single language in the world that doesn't inflect words one way or another.
user: gkkulik
issue_2326: state: open
title: WIP: feat(engine): support DICT protocol, add dict engine
body: This adds support for [DICT protocol](https://en.wikipedia.org/wiki/DICT).

DICT is very simple to use, so on average linux distro this should work like `sudo apt install dictd dict-freedict-eng-jpn` which allows you to query your localhost dictd server. You can also use remote DICT server, like dict.org.

As DICT is not HTTP, this requires more changes than usual for a new engine. In current state it works for me, but I probably missed something in implementation, so I ask for additional feedback.

![searx_dict cleaned](https://user-images.githubusercontent.com/1848785/99884432-253bfd80-2c26-11eb-8058-3a69b8089f74.png)


## Checklist

- [ ] : add unit tests

user: komachi
issue_2320: state: open
title: Yandex ban the IP if it's used in SearX
body: When searching something on Yandex, it will work for less than 5 minutes, then just return empty result.

I tried to see if it's a SearX bug or not, and it looks like an IP ban.

$ curl https://yandex.ru/ (or $ curl https://yandex.com/)

Full output.

$ curl https://yandex.ru/search/?text=test (or $ curl https://yandex.com/search/?text=test)

No output

$ curl "https://yandex.ru/search/?text=test&src=suggest_B" (or $ curl "https://yandex.com/search/?text=test&src=suggest_B")

No output

I'm guessing  #938 is related.
user: TheFrenchGhosty
issue_2312: state: open
title: Change theme based on browser's theme
body: For example, it would switch between logicodev and logicodev-dark

You can use prefers-color-scheme CSS media query https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme
user: B0pol
issue_2274: state: open
title: Enhance ip for ip calc
body: What about using ip plugin for ip calculation if ip is not alone?


ip 192.168.1.40/24

```
Address:   192.168.1.40         11000000.10101000.00000001. 00101000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.1.0/24       11000000.10101000.00000001. 00000000
HostMin:   192.168.1.1          11000000.10101000.00000001. 00000001
HostMax:   192.168.1.254        11000000.10101000.00000001. 11111110
Broadcast: 192.168.1.255        11000000.10101000.00000001. 11111111
Hosts/Net: 254                   Class C, Private Internet
```

Or simpler of course
user: cy8aer
issue_2269: state: open
title: Add Alpha Coders (images)
body: https://alphacoders.com/
user: TheEvilSkeleton
issue_2268: state: open
title: Add wallhaven (images)
body: https://wallhaven.cc/
user: TheEvilSkeleton
issue_2266: state: open
title: Feature request : Disabling themes
body: Hello, is there a way to disable themes?
In /opt/searx/searx/static/themes should I just delete the folder with the theme I like disabled?

Thanks in advance.

----------------

Edited by unixfox: The author would like to have a setting in the settings.yml for disabling theme.
user: martin-kostov
issue_2263: state: open
title: Bigger image previews
body: Currently when clicking an image from search resutls the pop-up includes the image at a fixed size.
I propose to either increase that scaling to a somewhat higher fixed value or factor in the original image size so that very small pictures do not become pixelated. 

Currently the preview is too small in my opinion which forces me to visit the website.
user: RandomClaim
issue_2260: state: open
title: sci-hub.tw DOI resolver nxdomain
body: In the DOI config section, the default sci-hub domain is sci-hub.tw. This now resolves nxdomain, and they have moved to different domains. Wikipedia always keeps an [updated list of domains](https://en.wikipedia.org/wiki/Sci-Hub). In a [recent tweet](https://twitter.com/Sci_Hub/status/1308407854559358979) sci-hub announced that both sci-hub.se and sci-hub.st were working domains.
user: gerome1812
issue_2252: state: open
title: Add searx/settings.py ?
body: Currently [`searx/__init__.py`](https://github.com/searx/searx/blob/da8b227044f45127f705f6ea94a72d368eea73bb/searx/__init__.py#L30-L51) reads `searx/settings.yml`  into `searx.settings`.

Then `searx.settings` is read directly in numerous places (not exhaustive) :
* most of https://github.com/searx/searx/blob/master/searx/__init__.py
* https://github.com/searx/searx/blob/da8b227044f45127f705f6ea94a72d368eea73bb/searx/webapp.py#L93
* https://github.com/searx/searx/blob/da8b227044f45127f705f6ea94a72d368eea73bb/searx/webapp.py#L115
* https://github.com/searx/searx/blob/da8b227044f45127f705f6ea94a72d368eea73bb/searx/preferences.py#L318-L375
* https://github.com/searx/searx/blob/da8b227044f45127f705f6ea94a72d368eea73bb/searx/utils.py#L484-L496
* https://github.com/searx/searx/blob/da8b227044f45127f705f6ea94a72d368eea73bb/searx/poolrequests.py#L70-L71
* https://github.com/searx/searx/blob/474d56c77f4c8bbd3d03f6feec0d2a13dcd41d40/searx/search.py#L38-L48

Wouldn't it be better to:
* add searx/settings.py
* clearly defined the default values here (for example a default settings written with dict and list in Python)
* write some helper to read the different values. Related to
      * https://github.com/searx/searx/pull/2251
      * https://github.com/searx/searx/pull/1278
* write a loader that check the validity of settings.yml
?
user: dalf
issue_2242: state: open
title: [mod] URL for the static file contains the sha1
body: ## What does this PR do?

for example, instead of 
```html
<link rel="stylesheet" href="/static/css/bootstrap.min.css" type="text/css" />
```

the HTML becomes:
```html
<link rel="stylesheet" href="/static/css/bootstrap.min.css?0d0624d4eb8096f13cc9f981ed648b3a6624e532" type="text/css" />
```

## Why is this change important?

* allow to cache the static files forever
* avoid bugs when the static files are updated but not reloaded

## How to test this PR locally?

<!-- commands to run the tests or instructions to test the changes-->

## Author's checklist

<!-- additional notes for reviewiers -->

## Related issues

<!--
Closes #234
-->

user: dalf
issue_2240: state: open
title: searx.utils.is_valid_lang & searx.query.RawTextQuery: redundant code ?
body: This two following peace of code do the same thing in different way: check if a string describes a language defined [searx.language.language_codes](https://github.com/searx/searx/blob/master/searx/languages.py)

https://github.com/searx/searx/blob/ecb9f28869f081dc75182053c727523ed7e20d12/searx/utils.py#L167-L181

https://github.com/searx/searx/blob/ecb9f28869f081dc75182053c727523ed7e20d12/searx/query.py#L92-L112

Different questions:
* Could it be one function ?
* Could the code in [autocomplete.py](https://github.com/searx/searx/blob/ecb9f28869f081dc75182053c727523ed7e20d12/searx/autocomplete.py#L84-L100) be merged too ?
* wouldn't be more efficient and simplier to build on runtime a dict with:
	* key : lower case of `lang_id`, `lang_name`, `country`, `english_name`
	* value: (`lang_id`, `lang_name`, `country`, `english_name`)
	?
	
ping @MarcAbonce
user: dalf
issue_2231: state: open
title: Remember scroll position?
body: Quick question: running Searx locally (localhost; Linux). When I click a Searx search result, then return to Searx it navigates back to the top of the search results, not the previous (clicked) position.

Is there a solution?  Thanks!  :-)
user: victoriastuart
issue_2229: state: open
title: Change and add bang shortcut for East Asian users
body: In the mystic Republic of Korea, Naver is by far the most used search engine over Google. I believe it deserves to get at least !nv as its bang shortcut instead of the current longer version of !nvr. 

That being said, it would be nicer if you allowed multiple shortcuts, for support of non-latin alphabet users such as Arabic, several branches of Turkics and Slavic. Changing keyboard layout into and out of Qwerty usually takes three to four strokes especially since no one keeps track of which keyboard layout is being used (which is usually program-wise local but sometimes global; iow very inconsistent) for Korean users. That's in total nine strokes combined with "!nvr " (and eleven on Linux/GNU). Not so much of a "short"-cut, is it?

In particular, I would like to suggest a few for the Korean script. Letters are quicker to type than syllables in Korean since Korean script, called Hangeul, is an alphabet (unlike Chinese where a letter is a syllable and Japanese where a letter is a mora, both of which usually borrow English alphabet to denote phonemes when typing). For instance, Google could be !ㄱ or !%E3%84%B1, Namu Wiki could be !ㄴㅁ or !%E3%84%B4%E3%85%81, and Naver shortcut could be !ㄴ or !%E3%84%B4 on the UR location bar. 

That being said, there's another Korean portal website called Daum. Although not as popular, I believe it may deserve to get a bang shortcut of its own.

Another bang shortcut suggestion for the Korean web users is Namu Wiki, which is used more often than the Korean Wikipedia by Korean. 

Also, I suggest adding Yahoo Japan as well. I hear it's used often by Japanese. Although the familiar name of "Yahoo" may fool you, Yahoo Japan has become a distinct company of its own, owned by Softbank instead of Yahoo. Or at least, do something. I have no idea why, but at the moment searching in Japanese or Korean does not return anything on Yahoo now for me. Try searching for
:ja !yh カナダ
:ko !yh 캐나다
(fyk, it's Canada; [KA][NA][T"A] and [k/ay][n/a][d/a] respectively)
As Yahoo closed down Yahoo Korea, Korean search won't be an issue but Japanese search on Yahoo Japan still remains.
user: coughingmouse
issue_2215: state: open
title: Add Chinese (Hong Kong) localization
body: Hello, I would like to help translating Searx to Chinese (Hong Kong). Could you add it to Transifex?
user: JasonHK
issue_2207: state: open
title: Should we create a FAQ ?
body: See: 
* https://www.reddit.com/r/Searx
* https://github.com/searx/searx/issues?q=is%3Aissue+is%3Aopen+label%3Aquestion

It would be interesting to newcomers to have a sum up in https://asciimoo.github.io/searx/

Some examples:

FAQ as an user:
* How to choose a public instance ?
* [When using a searx local (private) instance, search engines are still able to make a profile of me?](https://www.reddit.com/r/Searx/comments/iqoyp2/when_using_a_searx_local_private_instance_search/)
* [How do I know if an instance is trustworthy?](https://www.reddit.com/r/Searx/comments/i3v26p/how_do_i_know_if_an_instance_is_trustworthy/)
* [How does the Ranking work?](https://github.com/searx/searx/issues/1790)

FAQ as an admin:
* Will my server IP be visible ?
* [System requirements for Searx?](https://www.reddit.com/r/Searx/comments/imca59/system_requirements_for_searx/)


user: dalf
issue_2197: state: open
title: Service's IP address leak, even if it is a hidden service
body: You can use morty proxy to proxy those "what's my IP address" websites, being a proxy, it will use the server's IP address to query the website. Even if it is a hidden service. Leaking it
![1600119909](https://user-images.githubusercontent.com/53711069/93142079-9c648b00-f6e5-11ea-8311-792b079e27da.png)
(This was made in I2P)
Also, if you search "What's my IP" it will also leak the IP address
![1600119789](https://user-images.githubusercontent.com/53711069/93142105-a4bcc600-f6e5-11ea-8faa-c1bdae2592a7.png)

This can be also done in .onion services
![1600120014](https://user-images.githubusercontent.com/53711069/93142159-be5e0d80-f6e5-11ea-8a94-6d3d5b68475a.png)

**Possible solutions:** 
* Encourage hidden services searx instances' owners to disable duckduckgo definitions in their searx installation
* Discourage hidden services searx instances' owners to use Morty Proxy

user: rfc-2549
issue_2155: state: open
title: Alter Morty listen IP
body: Hi there,

No matter what I do, I cannot seem to get morty to listen on the actual machine IP, which is resulting in mixed content errors on the URL.

Everything was installed using the official install scripts.

### My scenario:
I am running Searx on a dedicated VM on a Proxmox cluster, behind an NGINX reverse proxy running on a SEPARATE machine. This instance of searx is running on the root of a .surf domain.

### What I have tried:

- I have modified the .config.sh IP, but the service still listens on 127.0.0.1:3000
- I have modified the systemd service to reflect the IP, but it still listens on 127.0.0.1:3000 even with listen-ip altered.

### My NGINX Reverse Proxy config:
```
server {
        server_name domain.tld;

        location / {
            proxy_pass http://192.168.1.178:8888;
            proxy_set_header   Host             $http_host;
            proxy_set_header   Connection       $http_connection;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header   X-Scheme         $scheme;
 }
 
 
location /morty {
    proxy_pass         http://192.168.1.178:3000/;
    proxy_set_header   Host             $http_host;
    proxy_set_header   Connection       $http_connection;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header   X-Scheme         $scheme;
}


    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = domain.tld) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80;
        server_name domain.tld;
    return 404; # managed by Certbot


}
```

### Settings.yml (only included first part):

```
general:
    debug : False # Debug mode, only for development
    instance_name : "searx" # displayed name

search:
    safe_search : 0 # Filter results. 0: None, 1: Moderate, 2: Strict
    autocomplete : "google" # Existing autocomplete backends: "dbpedia", "duckduckgo", "google", "startpage", "swisscows", "qwant", "wikipedia" - leave blank to turn it off by defa$    default_lang : "" # Default search language - leave blank to detect from browser information or use codes from 'languages.py'
    ban_time_on_fail : 5 # ban time in seconds after engine errors
    max_ban_time_on_fail : 120 # max ban time in seconds after engine errors

server:
    port : 8888
    bind_address : "192.168.1.178" # address to listen on
    secret_key : "REMOVED" # change this!
    base_url : "https://domain.tld" # Set custom base_url. Possible values: False or "https://your.custom.host/location/"
    image_proxy : True # Proxying image results through searx
    http_protocol_version : "1.0"  # 1.0 and 1.1 are supported
    method: "POST" # POST queries are more secure as they don't show up in history but may cause problems when using Firefox containers

ui:
    static_path : "" # Custom static path - leave it blank if you didn't change
    templates_path : "" # Custom templates path - leave it blank if you didn't change
    default_theme : oscar # ui theme
    default_locale : "" # Default interface locale - leave blank to detect from browser information or use codes from the 'locales' config section
    theme_args :
        oscar_style : logicodev # default style of oscar
#   categories_order :
#     - general
#     - files
#     - map
#     - it
#     - science

# searx supports result proxification using an external service: https://github.com/asciimoo/morty
# uncomment below section if you have running morty proxy
# the key is base64 encoded (keep the !!binary notation)
# Note: since commit af77ec3, morty accepts a base64 encoded key.
result_proxy:
    url: http://192.168.1.178/morty/
    key: !!binary "REMOVED"

outgoing: # communication with search engines
    request_timeout : 2.0 # default timeout in seconds, can be override by engine
    # max_request_timeout: 10.0 # the maximum timeout in seconds
    useragent_suffix : "" # suffix of searx_useragent, could contain informations like an email address to the administrator
    pool_connections : 100 # Number of different hosts
    pool_maxsize : 10 # Number of simultaneous requests by host
# uncomment below section if you want to use a proxy
# see http://docs.python-requests.org/en/latest/user/advanced/#proxies
# SOCKS proxies are also supported: see http://requests.readthedocs.io/en/master/user/advanced/#socks
#    proxies :
#        http : http://127.0.0.1:8080
#        https: http://127.0.0.1:8080
# uncomment below section only if you have more than one network interface
# which can be the source of outgoing search requests
#    source_ips:
#        - 1.1.1.1
#        - 1.1.1.2

# External plugin configuration
# See http://asciimoo.github.io/searx/dev/plugins.html for more details
#
# plugins:
#   - plugin1
#   - plugin2
#   - ...
```

Can someone please tell me how to get it to listen on the correct IP, and then how it should be configured in my settings.yml? Should it be the reverse proxy URL (https://domain.tld/morty) or should it be the LAN IP behind the proxy server?
user: OliverGee
issue_2153: state: open
title: update information in docs is missing a step: change to source directory
body: This page
`https://github.com/asciimoo/searx/blob/master/docs/admin/update-searx.rst`
says to update
```
sudo -H -u searx -i
(searx)$ git stash
(searx)$ git pull origin master
etc
```
I think a step is missing after the first line: it should be as follows
```
sudo -H -u searx -i
(searx)$ cd searx-src
(searx)$ git stash
(searx)$ git pull origin master
etc
```
However, I am not confident enough to put in my own pull request.
user: ralphrmartin
issue_2145: state: open
title: Cleaner split between the UI and core: create a searx.core module
body: ### Why searx.core is important ?

https://github.com/asciimoo/searx/issues/2067 describes an architecture where different OS processes will execute the user queries: one proccess for one or more engines.

The communication between the different process needs to be simple and clear.

This issue intends to split the web UI from the core without changing the current architecture:
* cleaner code
* it paves the road for  https://github.com/asciimoo/searx/issues/2067

### Description

Requires https://github.com/asciimoo/searx/issues/2143 , https://github.com/asciimoo/searx/issues/2142 and https://github.com/asciimoo/searx/pull/2137

Basically:
* ```searx``` contains all the web components ( searx/webapp.py must remain in the same location)
* ```searx.core``` contains a (nearly) standalone module to send request. [utils/standalone_searx.py](https://github.com/asciimoo/searx/blob/master/utils/standalone_searx.py) will use this module.

More into the details:

searx:
* ```searx/autocomplete.py```
* ```searx/brand.py```
* ```searx/exceptions.py``` 
* ```searx/webadapter.py```:
	* [```get_search_query_from_webapp```](https://github.com/asciimoo/searx/blob/093dd42bb05feafb2cc77304d3b1a9a1a3016949/searx/search.py#L261). This function validate the token for the private engines (related to https://github.com/asciimoo/searx/commit/99435381a84072b110c32004b2fb778af9b96f77 ), so ```SearchQuery``` doesn't contain a reference to the preferences.
	* ```get_categories_from_webapp``` (as described in https://github.com/asciimoo/searx/issues/2142 )
* ```searx/webapp.py```
* ```searx/languages.py```
* ```searx/query.py```:
    * contains only the RawTextQuery class
* ```searx/preferences.py```
* ```searx/utils.py``` (messy usage between searx.core and searx)
* ```searx/settings_robot.yml```
* ```searx/settings.yml```
* ```searx/testing.py ```

searx.core:
* ```searx/core/https.py``` (currently searx/poolrequests.py)
* ```searx/core/search.py``` (currently searx/search.py)
    * contains the ```SearchQuery``` class (from currently searx/query.py)
	* modify ```SearchQuery``` to not include a reference to the preferences.
	* ```get_search_query_from_webapp``` move to ```searx/webadapter.py```
* ```searx/core/results.py``` (currently searx/results.py)
* ```searx/core/external_bang.py```
* ```searx/core/exceptions.py``` 
	* doesn't exist right now, exceptions inside the core (perhaps useless).

user: dalf
issue_2144: state: open
title: logicodev light
body: ## What does this PR do?

<!-- MANDATORY -->

<!-- explain the changes in your PR, algorithms, design, architecture -->

## Why is this change important?

<!-- MANDATORY -->

<!-- explain the motivation behind your PR -->

## How to test this PR locally?

<!-- commands to run the tests or instructions to test the changes-->

## Author's checklist

<!-- additional notes for reviewiers -->

## Related issues

<!--
Closes #234
-->

user: ghost
issue_2120: state: open
title: Add Gibiru.com
body: https://gibiru.com

```
  - name : gibiru
    engine : xpath
    paging : False
    search_url : https://gibiru.com/results.html?q={query}
    url_xpath : //div[@class="gs-title"]/a/@href # Sadly over google.com/url
    title_xpath : //div[@class="gs-title"]/a/text()
    content_xpath : //div[@class="gsc-table-result"]/div[@dir="ltr"]/text()
    categories : general
```

Sadly it does not work without JavaScript..
user: Singustromo
issue_2113: state: open
title: make logicodev follow OS/browser dark/light mode
body: ## What does this PR do?
Makes the default theme follow dark/light color scheme as set by OS/browser. Implemented as hree variants of the logico style; auto, dark and light. The default (auto) theme falls back to light mode if the setting is not supported in the OS and/or browser, that way this commit should not be disruptive.

<!-- MANDATORY -->

<!-- explain the changes in your PR, algorithms, design, architecture -->

## Why is this change important?
It is not, it is merely a suggestion. But it's nice for users that has their OS of browser set to dark mode to have searx respect their preference by default.

<!-- MANDATORY -->

<!-- explain the motivation behind your PR -->

## How to test this PR locally?
Change the color scheme of your OS or browser and refresh searx.

<!-- commands to run the tests or instructions to test the changes-->

user: mikeri
issue_2100: state: open
title: Add option for 'lightbox' or another gallery-style viewer for image results
body: Being able to go through the full-size image results quickly with the cursor keys would be awesome.
user: scottwallacesh
issue_2082: state: open
title: Using /autocompleter without setting autocomplete cookie?
body: Is there a way to use the /autocompleter Searx endpoint *without* having to set the autocomplete cookie? If not, would it be plausible to implement this functionality?

My use case: an embedded Searx search box which, upon setting some metadata, will use in-browser HTTP technologies to request this endpoint. Making the user manually set an autocomplete endpoint prior to using this *might* not be very viable. 
user: resynth1943
issue_2080: state: open
title: Brainstorming: on_result plugin / https_rewrite plugin
body: Different plugin ideas require to filter / modify the results according to the host of the URL. 

Usage examples:
* the https_rewrite plugin, and the current implementation fails to do so: https://github.com/asciimoo/searx/tree/master/searx/plugins/https_rules are outdated, and the number of rules is a fraction of the actual list to avoid an overhead. Here there is one lookup per .xml files: https://github.com/asciimoo/searx/blob/6e37255e59693d7a3768491b2b8d06441051131f/searx/plugins/https_rewrite.py#L140
* [Add support for Youtube and Twitter links rewrite PR #1726](https://github.com/asciimoo/searx/pull/1726) rewrite some URL too.
* [feature request: private user blocklists/blacklists #2001](https://github.com/asciimoo/searx/issues/2001) asks to remove some domain names from the results.

Currently, ```on_result``` plugin scan for each URLs and process them. 
What if we provide provide each plugin register for a list of domain.

Some technical solutions to create a static list of domains:
* a [trie](https://en.wikipedia.org/wiki/Trie). (This issue superseed this one https://github.com/asciimoo/searx/issues/936 )
* one hash table per label in the domain name: https://github.com/sethmlarson/hstspreload

According to https://www.eff.org/https-everywhere/rulesets#wildcard-targets the wildcard in HTTPS everywhere can be either:
* *.eff.org
* www.eff.*

A solution: two lookups in two different structures, one in reversed order (org -> eff -> *), one in normal order (www -> eff -> *).

Prototype: https://gist.github.com/dalf/26462c1627c8b00fdfacdd55525b08b6



The idea is provide: 
* a format to store the rules (either a binary or plain text format), with a module to create this output format.
* a plugin can register this structure: the searx core calls the plugin where there is a match.
* it is difficult to merge all trie without a lot of repetition, some most probably one "double trie" per plugin; but in simple cases I guess it can be done.

Note about the issue #2001:
* the choice of domains to remove is a preference, then the issue is not solved.
* if we can make some maintained list, then the issue is solved.

user: dalf
issue_2069: state: open
title: opensearch.xml: add documentation about the GET/POST methods.
body: https://github.com/asciimoo/searx/blob/6e37255e59693d7a3768491b2b8d06441051131f/searx/templates/__common__/opensearch.xml#L3 
If would be helpful to change this line to ```<ShortName>{{ instance_name }} ( {{opensearch_method}} )</ShortName>```.

It seems a lot of user get confused about the link between the "GET" / "POST" setting and the opensearch.xml behavior.

user: dalf
issue_2067: state: open
title: New architecture proposal
body: This [wiki page](https://github.com/asciimoo/searx/wiki/New-architecture-proposal) describes a new architecture.

Feel free to add comment here or send me a email (see my github profile)

Poke:
* everyone
* @nfk since you maintain a fork of searx.
* @unixfox as a maintainer of searx.be.

The purpose is to be able to rewrite some part of searx in golang:
* the front-end:
  * morty and filtron could be a library
  * the front-end would embed these two libraries and call the workers.
* the workers:
  * the XPath engines for example.

user: dalf
issue_2055: state: open
title: Add Lemmy
body: hello, there is a FOSS and decentralized alternative to Reddit called Lemmy: https://dev.lemmy.ml/. i would appreciate if you can add it
user: TheEvilSkeleton
issue_2052: state: open
title: What is the data lifecycle ?
body: Maybe I'm overthinking.

#### Which data ?

* DOI
  * https://github.com/asciimoo/searx/blob/52eba0c7210c53230fb574176d4bf1af771bf0b4/searx/settings.yml#L905-L911
  * Update script: No
  * Data source: various, https://www.wikidata.org/wiki/Q21980377 (the "official website" property) may help.
  * When it should be updated ? check every day (?)
  * When it is updated: never.
  * Is it a problem to not update ? ❌ outdated URL, disappointing user experience.
  * Is it a problem to update ? No.
* ```searx/data/bangs.json```:
  * Update script: none (can be updated automatically and then manually with some clean up)
  * Data source: [jivesearch](https://github.com/asciimoo/searx/pull/2027) (useful sources are DuckDuckGo bangs and Wikidata)
  * When it should be updated ? require manual checking / perhaps automatic checking (automatically extract the opensearch.xml, check the URL, etc...). Related to my out of topic comment https://github.com/asciimoo/searx/issues/2045#issuecomment-654043502
  * When is it updated ? N/A
  * Is it a problem to not update ? ❌ outdated URL, disappointing user experience.
  * Is it a problem to update ? No.
* ```searx/data/currencies.json``` : 
  * Update script: https://github.com/asciimoo/searx/blob/master/utils/fetch_currencies.py
  * Data source: https://github.com/asciimoo/searx/pull/993/files
  * When it should be updated: ?? check every month / year.
  * When it is updated: never
  * Is it a problem to not update ? ❔ should not be a problem.
  * Is it a problem to update ? No.
* ```searx/data/useragents.json```: 
  * Update script: https://github.com/asciimoo/searx/blob/master/utils/fetch_firefox_version.py
  * Data source: is https://ftp.mozilla.org/pub/firefox/releases/
  * When it should be updated: as soon there is a new Firefox version, but engines compatibility must be check before.
  * When it is updated: sometimes.
  * Is it a problem to not update ? ❔ An old Firefox version may be a problem with some engines.
  * Is it a problem to update ? Some engine may stop working.
* ```searx/data/engines_languages.json```: 
  * Update script: https://github.com/asciimoo/searx/blob/master/utils/fetch_languages.py
  * Data source: the source is the results of the ```fetch_supported_languages``` / ```_fetch_supported_languages``` functions.
  * When it should be updated: ?? check every week / month / year ??
  * When it is updated: sometimes when an engine is updated.
  * Is it a problem to not update ? ❔ I don't know. Most probably it doesn't change too much.
  * Is it a problem to update ? If the ```fetch_supported_languages``` function doesn't match the actual website, the update result may be worse.
* ```searx/engines```
  * It is code but it is related to ```searx/data/engines_languages.json``` and the life cycle is different from the core.
  * related to https://github.com/asciimoo/searx/issues/1559
* [certifi](https://github.com/certifi/python-certifi/releases) package
  * https://github.com/asciimoo/searx/blob/52eba0c7210c53230fb574176d4bf1af771bf0b4/requirements.txt#L1
  * No update script
  * When it should be updated: as soon there is a new version (is there a reason not to updated?)
  * When it is updated: rarely.
  * Is it a problem to not update ? ❔ for a security point of view, it would be better to update.
  * Is it a problem to update ? No.
* [HSTS preload](https://github.com/sethmlarson/hstspreload/releases) package (if ```httpx``` replaces ```requests```)
  * When it should be updated? as soon there a new version.
  * Is it a problem to not update ? ✔️ No, since engines use the https protocols (it can be safety net).
  * Is it a problem to update ? No.

#### Data and searx installation

After the data are updated in the git repository, once the searx get clone / install, the data remain the same as long searx is not updated.

#### How to update the data more often ?

1. do nothing, keep the same process.
2. keep the data in the searx git repository, add ````make data.update```` to update everything. 
    * When to call it ? 
       * manually : same problem as now.
       * cron in travis / github action : the script can create a PR.
3. create a different package ```searx-data```, automatically updated. It requires trust in this process.

user: dalf
issue_2051: state: open
title: Readable RSS Feeds (and how to use them)
body: Make RSS feeds readable using an XSL stylesheet. See realization: https://github.com/QupZilla/qupzilla/issues/1361#issuecomment-262802841

In addition, place text that explains - in short - what an RSS subscription is and how to subscribe to RSS feeds. **What is an RSS feed** and **How to subscribe to RSS feeds**.

Link to https://searx.me/introduction-to-rss/ for a _detailed_ explanation with benefits of subscription to web feeds.

Proposed informative message
________
**What is an RSS feed?**
‘RSS’ usually stands for ‘really simple syndication’, which ....

**How can I subscribe to RSS feeds?**
Copy the current webpage address (URL) to your RSS reader or browser which supports RSS. [More details...](https://searx.me/introduction-to-rss/)
________

See: [Hong Kong e-Legislation](https://www.elegislation.gov.hk/verified-chapters!en.rss.xml) ([style.xsl](https://www.elegislation.gov.hk/xsl/style.xsl)) ([GovHK: What is RSS?](https://www.gov.hk/en/about/rsshelp.htm))

![screenshot](https://user-images.githubusercontent.com/19249089/86916834-dbe28a00-c12c-11ea-88c6-a76c53062248.png)

Ref: https://github.com/sjehuda/syndication4humans/issues/14
user: sjehuda
issue_2050: state: open
title: [Feature Request] Theming Options Similar To DuckDuckGo (JS)
body: Would highly like to see the ability to theme (user side) to the extent of DuckDuckGo allows. 
Being able to set fonts, set colors (background, text, links, etc), show site favicons, adjust spacing/width, font size, page width, etc. To see the options refer to this page:https://duckduckgo.com/settings#appearance

Things DuckDuckGo doesn't have, but would be very awesome to see implemented, is maybe set a custom background image, change the Searx logo to whatever, write custom text under the main engine page, etc.

Instead of just being limited to a few themes, users can customize to their hearts desire. Personally if there's one thing I miss from DDG it's the theming. I know some of these things are customizable server side, but I'm talking about the ability to do all this user side, I think it'd be very awesome, especially because not everyone wants to run their own instance and from a privacy/anonymity stances it'd really be better to use an instance that a lot of people are on instead of a self-hosted one with one or two users.

_On a sidenote, the ability to import/export your Searx settings via a zip file would be amazing instead of using the long link._
user: seniorm0ment
issue_2048: state: open
title: settings.yml: check BASE_URL is a valid URL at startup.
body: https://github.com/asciimoo/searx/blob/3227695b0b587782b931c6163f993f3dae0a6d31/searx/settings.yml#L16

It would be useful to check the URL validity at startup:
https://github.com/asciimoo/searx/blob/3227695b0b587782b931c6163f993f3dae0a6d31/searx/webapp.py#L269-L277

Related to https://github.com/asciimoo/searx/issues/2042

user: dalf
issue_2035: state: open
title: "Page not found": displayed the requested path.
body: Currently, when a unknown page is requested, searx displays this:
![image](https://user-images.githubusercontent.com/1594191/85987736-50f7e600-b9ee-11ea-8cf7-e338451594fe.png)

It would be helpful to show the requested path.

Example: https://github.com/asciimoo/searx/issues/2033 . If the requested path is shown on the HTML page, it would help to adjust the NGINX configuration accordingly.

user: dalf
issue_2034: state: open
title: lets establish a build process for all the build products
body: We should no longer commit build products to the repository. ATM we are committing build products like minified CSS and JS from themes, which is the cause of ongoing merge-conflicts. 

Beside themes there are other topics we can generalize in a build phase. I think about the logo, there should be one logo image (e.g. a SVG used as the single source of definition) and derived logos in the themes.

More suggestions are welcome, add your toughs  ...


user: return42
issue_2022: state: open
title: archive.is: "no result" because of Google reCaptcha
body: As seen in searx engine stats: archive.is engine no longer works and does not provide any result: https://searx.space/#

Shall we remove this engine?
user: HLFH
issue_2019: state: open
title: Bing engine: "no results"
body: Bing most of the time does not provide any search results.
You can see in the searx engine stats that Bing does not work for any instance: https://searx.space/.
When you go on an instance where Bing supposedly works, it does not provide any search results, only if you retry and retry and retry again.

**I propose to remove this engine as it rarely works and searx core does not maintain it at this moment.**
user: HLFH
issue_2011: state: open
title: Youtube engine search results to include date of publishing and a link to channel
body: To mimic actual youtube search it would be nice to include information that is already available in there like: date of publishing, channel link and potentially info about playlist (will it require substantial modification of result display?)
user: gordon-quad
issue_2004: state: open
title: Google's show result for and content of feature snippet overlap
body: ### Description
Google's **show result for** and content of **feature snippet** for a search term is overlapped with each other.

![instant-answer](https://user-images.githubusercontent.com/28824347/84773761-691e3d00-afcc-11ea-9fc3-b5245f9c6bd0.png)
Fig: Search result for [!go see diff betwen currently edited and unmodified version of file in vim](https://darmarit.org/searx/?q=%21go%20see%20diff%20betwen%20currently%20edited%20and%20unmodified%20version%20of%20file%20in%20vim&categories=none&language=en-US)

It would be nice, if there will be at least one line separation between them. 

### Steps to reproduce
- Make slight spell mistake in search term for which Google will likely to show feature snippet.
For example: [!go see diff betwen currently edited and unmodified version of file in vim](https://darmarit.org/searx/?q=%21go%20see%20diff%20betwen%20currently%20edited%20and%20unmodified%20version%20of%20file%20in%20vim&categories=none&language=en-US).

### Actual output
No separation between **show result for** and **feature snippet**'s content.

### Expected output
There should be at least one line separation between **show result for** and **feature snippet**'s content. If possible also show source URL with instant answer.

![instant-answer-source](https://user-images.githubusercontent.com/28824347/84774872-f44c0280-afcd-11ea-9530-c6611041cfa9.png)

In above screenshot, source of feature snippet is present far below from its content and their is no way we can relate them to each other. A much better solution would be separate **search for** from **feature snippet**'s content and combine it with source URL just like Google, see below.

![feature-snippet](https://user-images.githubusercontent.com/28824347/84776025-548f7400-afcf-11ea-8bce-875500ede6d8.png)

### Additional
Related PR - https://github.com/asciimoo/searx/pull/1985; but I can also reproduce this @return42's instance.

user: etanot
issue_2001: state: open
title: feature request: private user blocklists/blacklists
body: please add a way to have lists of sites blocked automatically from search results.

for example I simply don't want to see results from certain "tech-sites" as they are full of ads. 

I'd consider that a killer feature.

Thanks for consideration. 
user: cocoonkid
issue_1987: state: open
title: Filtering or tagging Cloudflare and other Reverse Proxy hoster
body: ATM I do not have time, but  at least I want to left a remark here:

It might be a good to have a plugin or any other option to tag and/or filter reverse proxy hoster like Cloudflare

This issue was inspired by the discussion at https://github.com/asciimoo/searx/issues/1965#issuecomment-632548230

user: return42
issue_1980: state: open
title: turn off infobox?
body: Hello All,

Is there a way to turn off the infobox.

Some times I do not need it to be displayed and just want the results column
Thanks in advance
user: lonnietc
issue_1976: state: open
title: Too much wasted space in the "Simple" theme
body: Like the title says, there is too much wasted/unused space in the "Simple" theme (as shown with the blurple square)

![aaaaaaaaaaaaaaaaaaaaaa](https://user-images.githubusercontent.com/50847364/83224544-9f923600-a14b-11ea-8c06-562289e81d65.png)
IMO, the search results should be taking ~2/3 of the horizontal space instead of a half
user: TheEvilSkeleton
issue_1970: state: open
title: Add torrents-csv?
body: Project here https://gitlab.com/dessalines/torrents.csv
user: tiotrom
issue_1965: state: open
title: (Request) Add peekier.com as a Search Engine
body: > Peekier (pronounced /'pi·ki·er/): Privacy oriented search engines.
> categories : general
> [https://peekier.com/privacy](https://peekier.com/privacy)

Example in practice:
[https://peekier.com/#!searx](https://peekier.com/#!searx)

###### HEADERS:
- Request URL : https://search.peekier.com/search
- Request method : POST
- Remote address : 45.63.11.227:443
- Version : HTTP/2
	
###### CONNECTION:
- Protocol version: "TLSv1.2"
- Encryption suite: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
- Key exchange group: "P256"
- Signature algorithm: "RSA-PKCS1-SHA512"
- HTTP Strict Transport Security: "Enabled"
- Public Key Pinning: "Disabled"
- Host:	search.peekier.com
- Origin:	https://peekier.com
- Referer: https://peekier.com/
- content-type: application/json; charset=utf-8

###### FLOW DIAGRAM:
1. doc    => https://peekier.com/#!{query}
2. script  => https://peekier.com/assets/engine.js     ( *use for parse opts )
3. xhr      => https://search.peekier.com/prewarm
4. xhr      => https://search.peekier.com/suggestions
5. xhr      => https://search.peekier.com/search

###### FORM DATA:
q : 'firefox'
opts: '{ "page" : 0, "region" : "FR", "safe" : 0, "age" : 0 }'
prefetch : '12'                                        (???)

###### ACCEPTED REGIONS: according from https://peekier.com/assets/engine.js
o={AR:"Argentina",AU:"Australia",AT:"Austria",BE:"Belgium",BR:"Brazil",CA:"Canada",CL:"Chile",DK:"Denmark",FI:"Finland",FR:"France",DE:"Germany",GR:"Greece",HK:"Hong Kong",IN:"India",ID:"Indonesia",IE:"Ireland",IL:"Israel",IT:"Italy",JP:"Japan",KR:"Korea",MY:"Malaysia",MX:"Mexico",NL:"Netherlands",NZ:"New Zealand",NO:"Norway",CN:"China",PL:"Poland",PT:"Portugal",PH:"Philippines",RU:"Russia",SA:"Saudi Arabia",SG:"Singapore",ZA:"South Africa",ES:"Spain",SE:"Sweden",CH:"Switzerland",TW:"Taiwan",TH:"Thailand",TR:"Turkey",GB:"United Kingdom",US:"United States"}

###### JSON RESULTS    (*title, *snippet, *url)
{
"success":true,"results":[{"title":"Télécharger Firefox — Navigateur web gratuit — Mozilla","snippet":"Téléchargez Mozilla Firefox, un navigateur web gratuit. Firefox est créé par une communauté mondiale, à but non lucratif, qui œuvre pour que les utilisateurs gardent le contrôle de leur vie en ligne. Téléchargez Firefox pour Windows, macOS, Linux, Android et iOS dès maintenant !","url":"https://www.mozilla.org/fr/firefox/new/","display":"https://www.mozilla.org/fr/firefox/new","preview":"00587e51c82865"},{"title":"Firefox – Une gamme de produits qui protègent votre vie privée","snippet":"Firefox est bien plus qu’un navigateur. C’est toute une gamme de produits qui traitent vos données et votre vie privée avec respect, où que vous soyez sur Web.","url":"https://www.mozilla.org/fr/firefox/","display":"https://www.mozilla.org/fr/Firefox","preview":"de666f71ce889b"},...]
}


```
await fetch("https://search.peekier.com/search", {
    ...
    "headers": {
        ...
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "Accept-Language": "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
    },
    "referrer": "https://peekier.com/",
    "body": "q=firefox&opts=%7B%22page%22%3A0%2C%22region%22%3A%22FR%22%2C%22safe%22%3A2%2C%22age%22%3A0%7D&prefetch=12",
    "method": "POST",
    "mode": "cors"
});
```
user: K-mikaZ
issue_1964: state: open
title: Duplicated results with invidious / youtube
body: How to reproduce: with default configuration, search something in video or music, you'll get duplicated results with YouTube & Invidious.

In fact, results are technically not duplicated because the URLs are different, but in practice results are exactly identical.

But something should be done, it's a waste of ressources on user, searX instance and Invidious side. Also, user experience is degraded because they see results twice.

- Maybe invidious should be disabled by default to reduce load on their server?

- Maybe YouTube should be disabled by default for privacy or stability reasons?

- Maybe results should be merged together like on this screenshot: 
![searx_merged_results](https://user-images.githubusercontent.com/58657617/82504024-b1942900-9afa-11ea-9f52-84ea67ef2028.png)? But then should we use Invidious URLs or YouTube URLs?

I'm personally for merging results to Invidious URLs if both are enabled, and also disabling YouTube by default because anyway it won't increase load on Invidious, it's already used by default but for duplicate results only.
<sub>Meanwhile if you are hosting an instance and see this message, you can decide now.</sub>
user: B0pol
issue_1957: state: open
title: Any way to just return infoboxes in JSON?
body: Hello,

Hope that everyone is doing well today.

I am playing around with the JSON returns from SearX and was wondering if there is any way to make an API call that would return only the "infoboxes" or first "infobox"  without the search results?

I know that I can make a query and get back all of the information including the infoboxes and results, but sometimes I just need the infobox stuff and would like to be able to save having to get back all of that JSON data just to see the infoboxes.

Any ideas?
Cheers
user: lonnietc
issue_1956: state: open
title: add leo.org bang
body: please add a leo.org bang
user: Ozymandias42
issue_1948: state: open
title: [Feature Request] Aggregate result by website
body: Hello

First of all: thanks for this wonderful work, really helpful as I'm in the process of de-googling my life... ;-)

A problem that I see regularily with search engine is that they return "web pages"... but there's no way to aggregate them by website. So, for some common queries, the first pages are filled with a few carefully SEOd websites with many links, and it makes a lot of "noise"...  :-(

A "simple" solution would be to simply "drop" an already printed website or, if possible, accumulate/aggregate them under the first result. Something like:
- WEBSITE.COM : top-most link
     - other link from WEBSITE.COM
     - other link from WEBSITE.COM
     - link to a search to get all the links for WEBSITE.COM only
- WEBSITE2.FR : topmost link

The "others links" may be hidden with some javascript at first.

Of course, aggregation require a lot mot datas so maybe it should be required to limit the number of sources of aggregation (let's say: the first 100 or 300 results by default). The user may be able to specify how many results to aggregate (more result = more time to wait for an answer)

There may be a link to rerun the same query, filtering a single website, so the search process would be:
- running the query
- getting all the different websites
- selecting a website and re-running the query for this website only to get all the pages for this website specifically

Moreover, this strategy should be applied to search engine (google, duckduckgo) but is less relevant for encyclopedia like wikipedia, where every page is a different content (and there's no "keyword stuffig" for SEO).

I was looking at plugins but it look like they're operating only on single result line and not on result list. It seem that searX can output JSON too - so maybe it would be a good solution (getting result as json using searX as backen then filtering) but couldn't find detailled technical documentation...

Would you consider this as a potential feature ? Or dou you have an idea of how this could be implemented roughly (I don't know python but I can program so I should be able to find a way)

Thanks a lot for this amazing work and for your help
Olivier
user: olivier-duval
issue_1908: state: open
title: Utilizing WebTorrent to apply features using client-side
body: > [WebTorrent](https://webtorrent.io/) is a streaming torrent client for the web browser.
> 
> WebTorrent is written completely in JavaScript – the language of the web – and uses WebRTC for peer-to-peer transport whenever possible. No browser plugins, extensions, or installation is required to use WebTorrent in your browser.

Following CPU-demanding features specified in tickets #407 #537 #552 #636 #1907
_Perhaps it is to possible to put all the load on client-side. How?_

### WebTorrent
A trimmed version of WebTorrent will be utilized, and will be downloaded to client's Offline Storage (similarly to Telegram Web or WhatsApp Web webapps).

### Database Sharing
Using WebTorrent, users will be able to share a given Blacklist Database (the most up to date one published by searx) that will be utilized with Javasript scripts that put load on client-side. _Of course [Web Seeds](https://techie-buzz.com/how-to/what-are-web-seeds-bittorrent.html) could also be present for reliability or backup (in case WebTorrent finds no sources)._

### No Javascript
In case Javascript isn't present, user would not "enjoy" result filtering, unless result filtering would be also programmed on server-side for those who don't have Javascript available.

_* I don't this that the lack of Javascript could not be a problem today due to headless browses like [PhantomJS](https://phantomjs.org/) (code: [ariya/phantomjs](https://github.com/ariya/phantomjs)) that can be easily incorporated by bots and with caching proxy software such as Privoxy or Squid Cache._
user: GreenLunar
issue_1895: state: open
title: Request: Reverse Image Searching
body: Requesting ability to reverse image search. Provide an image, and Searx tells you information on where it's from, etc. This information could be scraped from Google's reverse image searching, and I'm sure other major engines have it too, but Google is the first that comes to mind. 

Example: https://www.google.com/searchbyimage?image_url=https://upload.wikimedia.org/wikipedia/commons/5/5c/Linus_Torvalds_%28cropped%29.jpg&safe=off
user: BurnyBoi
issue_1890: state: open
title: Search engines are bangs, why not categories?
body: Specifying a particular search engine with a bang makes sense (c.f. #1327, #1146).  The bang is merged with the search term and is processed normally.  Categories, however, are not processed the same way.  They're an additional argument to the URL.  Why was it done this way?  How difficult would it be to alias them to bangs (!files, !video), or outright change them?  What would the downstream impact be like?
user: virtadpt
issue_1889: state: open
title: [engine] add torznab
body: None of the currently available torrent engines really worked for me and I need a way to get those Linux .iso-s (obviously), so here is my solution.
Torznab is a feed format provided by Jackett to search for torrents. This would make it possible to add any tracker (as long as it's supported by Jackett) to searx, though it requires a local Jackett server to turn the indexer into a torznab feed.

This is my first PR for an opensource project, so I apologize in advance.
user: boapps
issue_1881: state: open
title: What is the preferred way to add plugins to searx?
body: Hi there,

I'm working with few couple of folks at the Green Web Foundation, and we're trying to figure out how best to make a plugin, so that it can easily be used in Searx.

You can see the PR here as we make the plugin, and by default we've made a PR, but I'm not sure if you'd prefer a separate plugin that might be installable with Pip, or how to expose the settings in a UI beyond the one on/off option.

I've seen how lines like this in a plugin:

```python
name = gettext('Only show green hosted results')
description = gettext('Any results not being hosted on green infrastructure will be filtered')
default_on = True
preference_section = 'privacy'
```

Allow for options like this:

![Screenshot 2020-03-03 at 16 24 18](https://user-images.githubusercontent.com/17906/75793200-4d6d8e80-5d6f-11ea-855d-66a335b0c57d.png)

Is there official support for further options? I had a look in the settings.yml file, and that seemed to be focussed more on engines, not plugins.

user: mrchrisadams
issue_1880: state: open
title: Search results as suggestions for OpenSearch
body: The [Cliqz browser](https://cliqz.com/en/desktop) (along with its search engine) has a unique feature - instead of search _suggestions_, it displays three search _results_ in the address bar autocomplete.

That made me think - why couldn't Searx do the same? There is already an option to download results as CSV/JSON/RSS, so I think that feature could just be reused for this.

Yes, it would be slow and probably harmful for public instances due to enourmous amount of requests, but for private instances it really could improve the UX for the users.

Related: #1616
user: Madis0
issue_1878: state: open
title: Add plugin to allow filtering of domains by whether they run on green infrastructure
body: This PR adds checking against every search engine against a local snapshot of the Green Web Foundation database we make available as the url2green dataset at the link below:

https://www.thegreenwebfoundation.org/green-web-datasets/

This allow us to return only results that are running on internet infrastructure known to be running on green/renewable power.

It also provides a fallback to the API when we can't find a local database.

By default this is set not to default to looking up urls, as a privacy safeguard.
user: mrchrisadams
issue_1871: state: open
title: Python3: morty settings create hmac error
body: With python3 and morty proxy settings every query crashes:
```
  File "/usr/share/searx/searx/webapp.py", line 339, in image_proxify
    return proxify(url)
  File "/usr/share/searx/searx/webapp.py", line 321, in proxify
    hashlib.sha256).hexdigest()
  File "/usr/lib/python3.7/hmac.py", line 153, in new
    return HMAC(key, msg, digestmod)
  File "/usr/lib/python3.7/hmac.py", line 49, in __init__
    raise TypeError("key: expected bytes or bytearray, but got %r" % type(key).__name__)
```

and this looks like #968. Allready fixed it: patch follows.
user: cy8aer
issue_1836: state: open
title: Document private engines
body: A new option is introduced in #1823 which lets admins configure tokens for engines.
This feature need proper documentation, possibly with suggestions.
user: kvch
issue_1826: state: open
title: [Feature request] Morty Proxy only for images
body: It would be nice to be able to use Morty Proxy only for images.
user: sevospl
issue_1816: state: open
title: Improvement: Move results URL above summary
body: Hi there, thanks a lot for creating SearX.

Would it be possible to add a UI option that moves the placement of the URL above the result summary, or even at the very top of each result? I almost always give priority to the URL when scanning through results, and having it at the bottom of the result makes my eyes jump around more and slows me down. The "legacy" theme does have this the way I like it, but it's missing many of the niceties of the newer themes. It would be nice if this option could be independent of the theme.

Thanks!
user: geckolinux
issue_1813: state: open
title: share data between uwsgi workers
body: ## Why
Currently data between uwsgi workers are not shared.
It's include:
* engine statistics: the /stats page is not accurate: see https://github.com/asciimoo/searx/issues/162 and https://github.com/asciimoo/searx/issues/199 : https://github.com/asciimoo/searx/blob/5796dc60c9de4f8c54452bb0bd64ed993378e503/searx/engines/__init__.py#L129-L136
* engine error / suspend time: so an engine can be suspended in one worker, but the others : https://github.com/asciimoo/searx/blob/5796dc60c9de4f8c54452bb0bd64ed993378e503/searx/engines/__init__.py#L54-L55
* wolframalpha_noapi token: this token is asked by each worker: https://github.com/asciimoo/searx/blob/5796dc60c9de4f8c54452bb0bd64ed993378e503/searx/engines/wolframalpha_noapi.py#L36-L37
* https://github.com/asciimoo/searx/issues/1812 requires this feature.
* Embeddeding searx-checker (https://github.com/asciimoo/searx/issues/1559) requires an way to make sure it runs only once per (day|hour|whatever).

## How ?

I don't have an answer to that question. Most probably this issue is already solved somewhere in a way I don't think about.

#### uwsgi: SharedArea
https://github.com/asciimoo/searx/issues/415 suggests to use [SharedArea](https://uwsgi-docs.readthedocs.io/en/latest/SharedArea.html).

It's an array of bytes, so an abstraction must be built on top of it.

An very API simple can be built:
* allocate an int, bind this value to this key.
* allocate an str of xx bytes, bind this value to this key.
* allocation are possible when the workers starts, forbidden later.
* read value bound to a key.
* write value bound to a key.

If the structure is the same for all workers, it will work as expected. An checksum of the allocation can be added at the begin of the structure, so all workers can make sure they don't corrupt the data. Compare to mmappickle (see below), it would be way faster.

#### uwsgi: Caching Framework
I've tried the [Caching Framework](https://uwsgi-docs.readthedocs.io/en/latest/Caching.html): it works as intended, and allows to share data between the workers.

Without any abstraction it includes a hard dependency on uwsgi.

Note if we look in the future (?): I haven't seen similar feature with [asgi servers](https://asgi.readthedocs.io/en/latest/implementations.html)

#### uwsgi: Signal

I've tried uwsgi Signals: it doesn't seems possible to send an Signal to all the workers despite what says the documentation.

Signal could be use to store the data somewhere than asks all other workers to read the update.

#### multiprocessing.shared_memory
The python package  [multiprocessing.shared_memory](https://docs.python.org/3/library/multiprocessing.shared_memory.html) allows to share data between processes.
Unfortunately it's only works from Python 3.8.

The github project [SleepProgger/py_shared_memory](https://github.com/SleepProgger/py_shared_memory) extracts this feature, but it doesn't compile on Python 3.6, but only from the version 3.7: _PyArg_ParseStackAndKeywords [has been renamed](https://mail.python.org/pipermail/python-checkins/2017-January/148146.html), but that's not the only thing to make it work. Anyway if we can avoid to compile C code it would be nice.

#### mmap file

https://docs.python.org/3.0/library/mmap.html

Same comment as the SharedArea.

The "simple" API (as described in the ShareArea section but applied to mmap) could be a way to solve this issue without an additional server .... or perhaps the performance wouldn't be good.

#### mmappickle

The github project [UniNE-CHYN/mmappickle](https://github.com/UniNE-CHYN/mmappickle) provides a Python dict over a mmap.

```python
import timeit
print(timeit.timeit("for u in d: z[u] = u", setup="d = [ 'A' + str(i) for i in range(10) ]; z = {}", number=100))
print(timeit.timeit("for u in d: z[u] = u", setup="from mmappickle.dict import mmapdict; d = [ 'A' + str(i) for i in range(10) ]; z = mmapdict('/tmp/bench_mmap.pickle')", number=100))
print(timeit.timeit("for u in d: z[u]", setup="from mmappickle.dict import mmapdict; d = [ 'A' + str(i) for i in range(10) ]; z = mmapdict('/tmp/bench_mmap.pickle')", number=100))
```
```
0.00021737698989454657
21.098201046013855
0.2509144829964498
```

Damn slow.

#### multiprocessing.Pipe

If searx creates the processes by itself, [multiprocessing.Pipe](https://docs.python.org/3.6/library/multiprocessing.html#multiprocessing.Pipe) can be used.

#### lmdb

https://lmdb.readthedocs.io/en/release/
> LMDB is a tiny database with some excellent properties:
> * Reader/writer transactions: readers don’t block writers, writers don’t block readers. Each environment supports one concurrent write transaction.
> * Read transactions are extremely cheap.
> * Environments may be opened by multiple processes on the same host, making it ideal for working around Python’s GIL.
> * Memory mapped, allowing for zero copy lookup and iteration. This is optionally exposed to Python using the buffer() interface.
> * Maintenance requires no external process or background threads.
> * No application-level caching is required: LMDB fully exploits the operating system’s buffer cache.

From https://github.com/asciimoo/searx/issues/967

#### posix_ipc

https://github.com/osvenskan/posix_ipc

Provide lock and shared memory using the POSIX API (so some C code has to be compiled).

#### external server: Redis

* package [redis](https://pypi.org/project/redis/) 
* package [aioredis](https://github.com/aio-libs/aioredis)

This could be optional: the default configuration wouldn't share anything, but once redis is configured data are read & write from / to it.

I think that's the usual way to solve this issue.

user: dalf
issue_1808: state: open
title: Add TOR proxy to the results
body: It would be nice to add a tor proxy to the results.
Weboproxy for example, gives the option.

TOR proxy:
https://tor.weboproxy.com/index.php?url=https://www.facebook.com
Canada Proxy:
https://ca.weboproxy.com/index.php?url=https://www.facebook.com

regards
user: wuniversales
issue_1801: state: open
title: SPDX License Identifier
body: We should stop C&P the license text into every file.  We have one https://github.com/asciimoo/searx/blob/master/LICENSE in the root folder and the source files should be tagged with a [SPDX License Identifier](https://spdx.org/using-spdx-license-identifier):

     SPDX-License-Identifier: AGPL-3.0-or-later

SPDX reduces redundant work by providing a common format for companies and communities to share important data about software licenses, copyrights, and security references, thereby streamlining and improving compliance.
user: return42
issue_1796: state: open
title: Replace link box with dropdown button
body: **Type:** Feature Request

This enhancement proposal is a continuation of @dalf's [feedback](https://github.com/asciimoo/searx/pull/1781#pullrequestreview-338364659) on PR https://github.com/asciimoo/searx/pull/1781 to track proposal.

### Description
After accepting PR https://github.com/asciimoo/searx/pull/1781, along with Info box, Suggestion, and Link box moved to top of page in low width devices, so replacing Link box with dropdown button has following advantages

- Cleaner UI
- No issue with infinite scrolling

user: etanot
issue_1790: state: open
title: How does the Ranking work?
body: Hi Guys,

I searched the internet for a "configurable meta search engine", and I found THIS! Amazing, that was exactly what I was looking for. I really like your project and at the moment I am getting familiar with Searx. However, I have to say, for my taste the documentation (for users) is very poor. There are a lot of questions popping up my mind, for which I can't find an answer here or elsewhere.

One of the most important questions is: How does the website ranking work in Searx? We know that different search engines use different metrics and therefore the order of the websites differ (and also, which websites are shown at all and which are not). At least, that is the reason why you would use a meta search engine. To collect the result from multiple sources.
So the question is: How does the Searx algorithm decide, which result from which engine will be featured at position 1, 2, etc...? I tried to figure this out, but without success. Depending on the keyword, different search engines overweight. And at the beginning (page 1), two search engines often present their result in turns, while on the next page, all results are only from one search engine (however, the other search engine must have a lot more results, too?)

Also (this maybe could be a separate feature request, if it does not exist yet), is there an easy way to filter for special search engines right in the window with the search results? (Without going to preferences, toggling switches, and repeating the search? This seems very laborious...) 

So far: I wish you success for the next year, and I am looking forward to start testing and tweaking Searx a bit more.
user: maximilianpreisinger
issue_1788: state: open
title: Clear field icon inside the search box
body: Type: Feature request

### Description
There is no `Clear Field` icon present inside the search box.

### Use Case
It's very difficult to clear text field on mobile devices, we've to either long or constantly press backspace key to clear text field. It'd be nice if search box contains a `Clear Field` icon, when text present in the box, which clears the text field in a single click. This feature would be also helpful for desktop users, because they've to also either select all text (by pressing `ctrl+a` or triple clicking using mouse) then press backspace or long press backspace.

![ddg-search-box](https://user-images.githubusercontent.com/28824347/71411696-5987f200-2642-11ea-9786-e625309b0fe5.png)

Fig 1: DDG search box contains a clear text field (cross) icon
user: etanot
issue_1785: state: open
title: Move away the documentation from the Wiki
body: To do after https://github.com/asciimoo/searx/pull/1776 is merged : see https://github.com/asciimoo/searx/pull/1776#issuecomment-568264083

Most of the wiki content should be moved away to the reST documentation:
- [x] settings.yml : https://github.com/asciimoo/searx/wiki/settings.yml : description of the general settings to move away & update.
- [x] docker: https://github.com/asciimoo/searx/wiki/Docker-developement-environment : to merge/remove most probably (could be use https://github.com/searx/searx-docker )
- [x] engines: https://github.com/asciimoo/searx/wiki/existing-engines : to remove, since it is generate automatically with the PR #1776   see [engines](https://asciimoo.github.io/searx/admin/engines.html)

About the reverse proxy configuration / installation:
- [x] https://github.com/asciimoo/searx/wiki/How-to-create-and-configure-SSL : https://ssl-config.mozilla.org/ will provide better up to date configuration BUT it should include the HTTP headers (another way to deal with HTTP headers : https://github.com/asciimoo/searx/issues/715 )
- [ ] https://github.com/asciimoo/searx/wiki/Searx-with-haproxy : same as the previous link.
- [x] https://github.com/asciimoo/searx/wiki/Web-server-hardening-(Apache) : to remove (?) see below.
- [x] https://github.com/asciimoo/searx/wiki/Installation-on-RHEL-7---CentOS-7 : it seems only the "yum install" part is different (use tabbed views from https://github.com/return42/searx/commit/92afe68d6532c and provide installation instructions with one tab per distrubution)
- [x] https://github.com/asciimoo/searx/wiki/Installation : to remove.

A way to deal with the reverse proxy configurations (if possible):
* define some variables (from [this](https://github.com/searx/searx-docker/blob/f2e6ca4a610d9ccf66d4e16ac210bdb1bd4fff0c/Caddyfile#L19) or somewhere else)
* generate the Apache, nginx, caddy, haproxy configurations using some templates, useful especially for the HTTP headers (Content-Security-Policy header etc...). 

It would avoid different versions of the configuration.

Perhaps, each reverse proxy should have it's own page in the reST documentation.

user: dalf
issue_1779: state: open
title: [Discussion] Isn't container port address incorrect?
body: While I try to set-up Searx development environment (docker), I stumbled at "The connection was reset" error. After number of tries, I realized that on [installation page](https://asciimoo.github.io/searx/dev/install/installation.html#docker), we've mentioned wrong port address of container (i.e. it should be $PORT:8080 instead of $PORT:8888), because container port address is 8080 not 8888. Please, feel free to correct me, if I'm wrong.
user: etanot
issue_1755: state: open
title: [Request] DuckDuckGo as a map search engine
body: OSM lacks many street addresses and Photon lacks building numbers, so it would be good to have DDG as a map search engine.
user: smnthermes
issue_1743: state: open
title: Wish: Statistics and visualisation on searches
body: When I last saw this: https://nitter.net/reg_nerd/status/1195106407856705538 I wondered if it would be possible to make such statistics with searx too. In this case it is based on news and the date of publishing. Parameters like this are available after a search. 

Creating a graph like in this example could be a cool feature for e. g. researching.
user: cy8aer
issue_1717: state: open
title: [feature suggestion] Alternative web archive domain
body: The web archive is blocked in a few places by several Governments and ISPs due to the possibility of finding a way around the porn-block, or being able to access snapshots of VPN sites, or much worse.

Due to privacy and censorship concerns the web archive setup a distributed "DWeb" p2p version last year https://www.bleepingcomputer.com/news/technology/archiveorg-has-created-a-decentralized-or-dweb-version-of-their-site/
Not many people use it yet so it is not very fast.
I would like to suggest this is added as an option.
https://dweb.archive.org
user: Dr-Flay
issue_1715: state: open
title: SHODAN API?
body: Has anyone considered writing a module for Searx that would plug into [SHODAN](https://shodan.io/)?  It would have to be API-only, so it wouldn't be enabled by default.
user: virtadpt
issue_1713: state: open
title: [Feature] Make Searx a PWA
body: I was showing Searx to colleague when I thought that it might actually be nice to make it a Progressive Web App (PWA) and be able to install on my phone almost as if it was a Native App.

The [checklist to become a PWA](https://developers.google.com/web/progressive-web-apps/checklist) is rather simple: 
* Served over HTTPS (outside of the scope of this repo)
* **Provide a [Service Worker](https://developers.google.com/web/fundamentals/primers/service-workers/) to allow to load the app offline**
* **Provide a [Web App Manifest](https://developers.google.com/web/fundamentals/web-app-manifest) to describe the application's metadata**

The last points are rather easy to develop (already done it for custom apps), so if you're interested I might be able to help with this 😉 

user: madmath03
issue_1710: state: open
title: Option to rewrite YT and Twitter links
body: Searx has a plugin system and it should be possible to rewrite YouTube and Twitter links to use Invidious and Nitter respectively.
user: dimqua
issue_1708: state: open
title: Startpage Images and Videos engines
body: It's possible to use the startpage engine to search images and videos, but it's currently not supported. For instance:
https://www.startpage.com/do/search?cat=pics&query=searx
https://www.startpage.com/do/search?cat=video&query=searx
user: dimqua
issue_1706: state: open
title: Multiplie autocompletion providers
body: Please consider to add a possibility to select at least two different options for autocompletion. For example, google and duckduckgo. In addition it'd be nice to be able to prioritize them the same way as #1120 suggests.

See also: #191.
user: dimqua
issue_1690: state: open
title: [Feature request] Show icon of domain URLs
body: Like DDG's info-box, show icon of source instead of its name (inside a green colored box in info-box). This will increase readability and user can easily differentiate between similar words like Wikipedia and Wikidata. And, in some cases, same name is being used for different sources for example same keywords like `Official website`, `Source code repository` etc (see below).

![debian1](https://user-images.githubusercontent.com/28824347/64034472-448ccd80-cb3e-11e9-9bbc-2c42378b3f56.png)
Image: Search result for [debian](http://search.disroot.org/?q=debian&categories=general&language=en-US) keyword.

For source-code-repository section we have three options [Github](https://github.com/debian), [Sources](https://sources.debian.net) and [Salsa](https://salsa.debian.org) and we have to hover on it to know which source repository of Debian (in this case) it points to. If this would be icon, we can easily differentiate between them.

![debian](https://user-images.githubusercontent.com/28824347/64034434-2c1cb300-cb3e-11e9-9956-cf2eef19c122.png)

See: DDG's info-box uses icon instead of name which is a certainly better UI design.

We can fetch these icons from their corresponding URL domains.

![icon](https://user-images.githubusercontent.com/28824347/64064313-3ea2f500-cbef-11e9-9e0f-6eb1074d3fa2.png)

And if possible, do this for **all URL domains** present in search results. And prefix it with URL like all other search engine does.

user: etanot
issue_1688: state: open
title: Preselect defaut categories
body: Hi,

is there curently a way to preselect certain default categories such as "general, map, images" by settngs.yml ?
user: Flunkyball
issue_1634: state: open
title: About searx
body: I feel the issue https://github.com/asciimoo/searx/issues/1228 as become "what is the future of searx ?"

To answer that question, I would like to list some of the important topics to show that the searx maintenance is a full time job.

Disclaimer : it is only my opinion as an individual.

### Engines keep stop working
It is a recurrent endless task.
But also it means that searx administrators have to update frequently. 
So in the end, searx have to be easy to deploy and update.

### How to install searx ?
You can pick an answer according to the day of the month:
- directly from git, with or without uwsgi using the [documentation](https://asciimoo.github.io/searx/admin/installation.html) or an [older documentation](https://github.com/asciimoo/searx/wiki/Installation)
- pypy: https://pypi.org/project/searx/
- YunoHost: https://github.com/YunoHost-Apps/searx_ynh
- Debian: https://packages.debian.org/buster/searx
- Arch Linux: https://aur.archlinux.org/packages/searx/ and https://aur.archlinux.org/packages/searx-git/
- Snap: https://snapcraft.io/install/searx/fedora
- Docker image: https://github.com/Wonderfall/docker-searx
- Another docker images: https://hub.docker.com/r/woahbase/alpine-searx or https://github.com/iiiiiii1/Docker-Searx
- Make your own docker images: https://www.21x9.org/en/searx.html or https://www.moerats.com/archives/875/ or https://www.uedbox.com/post/54791/
- and I don’t count the number of websites copying / pasting / modifying the previous links.

So:
- the easy to update is ... difficult to implement. 
- when someone creates an issue saying "the searx docker image is not working", how the image was built, from what?
- when someone want to install searx with an existing configuration, help means to understand this configuration.

This doesn't help the next topic: Security.

### Security & Privacy.
There is always the risk of tracking and/or malicious code getting into the results since searx fetches content from elsewhere (and the [web living standard](https://whatwg.org/) ).
Two ways to avoid that: review the code and rely on the browser security (HTTP headers).
It is possible to do this first point here in the repository, but not the second one since there are a lot of different ways to install searx. 
So in the end, the security may vary depending of the instance you choose.
See https://stats.searx.xyz/ (BTW https://github.com/asciimoo/searx/issues/1560). 
Side effect of the HTTP security headers: some searx features don't work anymore without for the user (autocomplete for example).
Basically, if I want to use searx without thinking, I want a less secure instance because at least the UI works as intended.
Moreover, what we don't see in the stats.searx.xyz table is the fact that some instances use CloudFlare as a front-end, which defeat the purpose of privacy. 
And actually, I understand why, see next topic.

### Bots
searx is really interesting for some people to harvest data. Sooner or later an new searx instance will be found and hammered with bot requests. Since there are a lot of different ways to install searx, it's not easy to give recommendations. Moreover, currently the reverse proxy [filtron](https://github.com/asciimoo/filtron) doesn't provide a good default configuration, and is not referenced in the searx documentation.
In fact, this is a huge topic to deal with. Sooner or later, the users won't be able to use some engines.

Note the dealing with bots problem means keep a state somewhere (for example : keep in memory, the number of request per minute and per IP address). 

### Trust
The last but not the least: Trust.
Some searx instances are modified:
- Obvious and cool when it is about the theme (BTW sorry the maintenance is not easy).
- Less obvious and less cool when it is about modifying links to a shopping website (basically to create affiliate links).
- Less obvious it is about adding a [Matomo](https://matomo.org/) tracking.

What about the logs? For example, when there is an error in an engine (timeout, whatever), the requested url may be logged.
The image proxy, [morty](https://github.com/asciimoo/morty) logs all request on stdout.
And basically, I don't know if some instances do not keep the logs to do some data mining, sell the data.

[edit] Some instance store the results in a temporary cache, and may use proxies to send the requests to the actual search engines.

### Sum up
- searx may work or not randomly because of broken engines, bot hammerings, HTTP headers. 
- the UI/UX may be broken (because of the HTTP headers)
- requests and/or results may be logged and/or tracked.

Okay. So what to do?

### CHATONS

In my opinion, searx fits in to this [CHATONS initiative](https://chatons.org/en) : 
    > CHATONS is a collective of independent, transparent, open, neutral and ethical hosters providing FLOSS-based online services.
	
Each host (named kitten) may have different services (etherpad, wallabag, zerobin, etc), and different policy.
Often it means you know the person(s) hosting the kitten.
For some kitten, the searx instance is password protected.
So, there is more trust, and no bots.

I know that most of people won't agree to do that.

### One size won't fit all

The [searx-docker](https://github.com/searx/searx-docker) project has been created to find an intermediate solution :
- easy to install and update.
- good security by default without killing the UI/UX.
- one drawback: it won't fit in the existing configurations.
- one unresolved big issue : bots (I'm afraid there is no easy solution).

The second step is the [Embedded searx-checker](https://github.com/asciimoo/searx/issues/1559) so an user can clearly see what engines are not working.

After that, the user experience will be better. Of course, if during this time most of the engines stop working, it won't be useful.

user: dalf
issue_1624: state: open
title: integration of tools
body: people use tools like calc, calendar, watch, weather, etc usually  
user: sohel1001
issue_1610: state: open
title: Ability to disable CSV, JSON and RSS results
body: As a Searx public instance owner I'm getting loads of traffic from bots that abuse the CSV, JSON and RSS results. I haven't seen any human using it since I made my instance available to the public.

With a view to providing an anti bot program for the community that manage public Searx instances it would be great to have an ability to disable these CSV, JSON and RSS results in the settings because it's very hard to detect if it's a bot that does a request to that kind of results or a browser with a real human behind it due to the fact that it's not an HTML page.

Right now the only way to disable that kind of results is to modify directly the [`webapp.py`](https://github.com/asciimoo/searx/blob/master/searx/webapp.py).
user: unixfox
issue_1575: state: open
title: replace fromstring(html) by fromstring(html, parser=newparser)
body: It is a **possible** speed improvement : lxml.html.fromstring without a specific parser doesn't benefit from multithread. See :
https://stackoverflow.com/questions/32285453/why-does-multithreading-do-not-speed-up-parsing-html-with-lxml

I confirm the benchmark, but the result may be different with searx since fromhtml function is called at different time. 

So in duckduckgo.py for example :
```python
def response(resp):
    results = []
    doc = fromstring(resp.text)
```

should be replace by 

```python
def response(resp):
    results = []
    parser = HTMLParser()
    doc = fromstring(resp.text, parser=parser)
```

Most probably it would convenient to add utility function doing that in searx.utils module : 
```python
from lxml.html import fromstring, HTMLParser

def htmlfromstring(str, **kwargs):
    parser = HTMLParser()
    return fromstring(resp.text, parser=parser, **kwargs)
```

----

Note : [selectolax](https://github.com/rushter/selectolax) is faster than lxml.
user: dalf
issue_1557: state: open
title: Extend a theme / override theme specific files
body: Hi, we are a providing a public instance on searx.infini.fr a we use a personal theme based on Frama theme #276. Our theme is available here https://framagit.org/infini/themes-outils-libres/tree/master/searx and as you can see it override almost all of the files of oscar theme.

I'd like to switch our instance on simple theme and customize it a bit (just changing the favicon and add a link to a personal script in order to insert the top navbar we use on our public tools). For now, i haven't found a clean and maintainable way to extend an existing theme :

- some people advice to copy all theme files and customize them as here https://github.com/asciimoo/searx/issues/875#issuecomment-286033583
- or, worst, to directly patch the base theme https://github.com/asciimoo/searx/issues/791#issuecomment-269315805 which "might conflict with future patches of searx"

I've seen thath jinja API propose `join_path(template, parent)` http://jinja.pocoo.org/docs/2.10/api/#jinja2.Environment.join_path but i'm not sure this is what i'm looking for and it doesn't seem to be used in searx.

So, is there a way to "make a theme based on another one" ?

PS : it may be related to #1042 
user: brunob
issue_1548: state: open
title: [Feature Request] Shipping Tracking Info
body: It nice when you put a tracking number in google it searches for relevant tracking info. It would be nice if this could do the same. 
user: 12nick12
issue_1546: state: open
title: Fields other than "General" in search with Arabic language enteries do not work perfactly !
body: Hi. Thank you very much for your very hard efforts to add Arabic language & support it ! I started to use searx.me since it was 0.13.0 then 0.14.0 & stop from it's use due to bad result when I enter Arabic language search entries. But 2 days ago, I return to searx.me to re-examine it again & I noticed that there is great jump in support Arabic language ! 

However, I noticed that result will be good if I use "General" type of search. But if I use others, like "Images" , "Files", "Map" ........ result will be disappointing as following:

- I received non relevant result in English (when I say "non relevant" I mean really non relevant). This specially with "Files" type of search.
or,
- received "Error! Engines can not retrieve results. ........ PLease try again later or find other searx instances". This specially with "It" type of search.

Kindly, your fix for that.
user: Nokia808
issue_1541: state: open
title: API for results 
body: Hi

Is there a way from the API to get the number of results per page? I understand that the number of results differs per settings, but I would like to get to the last page before I run into "Sorry! No more results" and be able to save as json the results per page. Also, when you go forward with "Next page"  and try to download via json in the UI, the number of results changes and cannot figure it on the basis on what.

Also, is there a way to get all results in one go?

Thanks
user: r00t1ng
issue_1535: state: open
title: [Engine] librestock.com, pixabay.com, pexels.com, foter.com - Image search
body: Request to add a few more "use for any purpose" image searches such as [Librestock.com](https://librestock.com), [Pixabay.com](https://pixabay.com), [Pexels.com](https://pexels.com) and/or [Foter.com](https://foter.com).

Since Google Images and some others seem to be having issues it wouldn't hurt to have more choices. Maybe some of these new entries will be friendlier.

They all seem to focus on Creative Commons (CC0) licenses or "use for any purpose type photos" and the quality looks good.

Librestock.com pulls images from these sites (based on a few sample searches) https://negativespace.co, https://gratisography.com/ and https://stocksnap.io.

Foter.com pulls only CC0 licensed images from Flickr.com.

Pixabay.com says no hot linking in their FAQ, not sure if that excludes it from Searx but they also have an [API](https://pixabay.com/service/about/api/).

Pexel [API](https://www.pexels.com/api/)
user: ghost
issue_1531: state: open
title: Make category for search field bookmarkable
body: Firefox has a feature to bookmark search fields (right click on a search field > add a keyword for this search) and then use that bookmark to directly query the search engine from the URL bar. It appears that the bookmark it sets does not include the searx.org category. If it did, I could create different keyworded bookmarks: e.g. `sx` for a general search, `sxit` for an IT-related search, `sximg` for images, and so on.
user: devurandom
issue_1526: state: open
title: NewsAPI.org engine?
body: I think it's a good candidate: https://newsapi.org/.
It can be used like this:
`https://newsapi.org/v2/everything?q={query}&apiKey={apikey}&language=ru`
user: dimqua
issue_1525: state: open
title: Petey Vid
body: A video search engine catering to non-YouTube results. 

[Petey Vid](https://www.peteyvid.com/) was created for finding non YouTube videos from all the other networks and some new ones as well including videos embedded in webpages.
user: dimqua
issue_1518: state: open
title: some engines that I finded, maybe candidates to be add
body: http://www.exalead.com/search/
http://www.witch.de/
https://www.fastbot.de/
http://www.bigfinder.de/
http://www.exactseek.com/
user: T4eus
issue_1506: state: open
title: query negations are sometimes ignored
body: Searching [this instance](http://o2jdk5mdsijm2b7l.onion/) for "macaroni and cheese recipe -oven -baked" yields in the 4th slot: 

"Baked Macaroni and Cheese Recipes - Southern Living" *(DuckDuckGo)*

The large search engines seem to all drift in this direction of thinking they know better than the user and ignore users' explicit negations.  It is wrong to do so, as it insults the user's intelligence and gives bad results.  I'm not sure if Searx is simply trusting the results of the crawlers but it should not.  Searx should remove the non-matching results.
user: ghost
issue_1494: state: open
title: [Request] Add Basque language as search language
body: Hi! The 0.15.0 release added the basque translation to the interface but, could it be added also as a selectable language when performing a search? Thank you very much.
user: beriain
issue_1472: state: open
title: [Feature] LibreJS Compliant
body: **Description**: Make searx.me LibreJS compatible? 
I've been messing around with thus extension, LibreJS. Seeing which sites are labeled as FLOSS. SearX seems to have mistakenly been labeled non-free.
Here is the documentation to change this: https://www.gnu.org/software/librejs/free-your-javascript.html

It appears to flag the following:

- https://searx.me/static/js/bootstrap.min.js

- https://searx.me/static/js/require-2.1.15.min.js

- https://searx.me/about#%20Intrinsic%20event%201%20[onclick]

- https://searx.me/static/themes/oscar/js/searx.min.js

- https://searx.me/static/plugins/js/search_on_category_select.js

There might be more.
user: gjhklfdsa
issue_1468: state: open
title: Set multilingual tests
body: Some tests are written for english language only, it could be great to make the test works with the current defined language.

For example, the function `test_stats(self)` in `tests/unit/test_webapp.py` will assert an error if it doens't match this string: `<h2>Engine stats</h2>`.
However on my french instance, this sentence is updated to : `<h2>Statistiques des moteurs</h2>`.
user: bourrel
issue_1466: state: open
title: getting hybrid with Spot-On search engine URL Database (also distributed)
body: Hello Asciimoo and all,

Searx is a great project with distributed servers like Yacy.
The interface is very nice.

There is another URL-Search tool called: spot-on.sf.net
The difference and maybe advantage here is, that 
- the URL repository is encrypted, 
- and the transfer of URLS is encrypted 
- and third, that the search for the queryhit of a term is not distributed, it is searched in localhost, instead, the full URL Database is shared with all neighbors.
- Fourth, there is the option to distribute the full website with the URL, so that the Website can be read at any time free of censoring.
- it is the only search engine, which allows to open source download also the URL Database, not only the open code with the engine or gui.

The interface of Spot is currently Qt. 
A pyhton interface is needed for a webpage, as only python has the needed AES crypto. 

Is anyone interested to evaluate this and possibly add an example domain with a web interface in python?

This is the only websearch, which is not only distributed and open source, but also provides an open source downloadable URL Database. Next to SQLite also PostGres is possible.

Maybe the searx project is interested to get hybrid with it or provide possibly an interface a bridging to get the results also from Spot-On?

Kind Regards
user: webermike
issue_1465: state: open
title: Feature startpage pagination
body: enable paginated searches with startpage
this PR unfortunately interferes with my dual language search approach (#1419): only every second page contains results of booth languages
user: miicha
issue_1462: state: open
title: Multiplie autocomplete backends
body: Please allow to use multiple autocomplete backends: a primary and secondary one, for example.
user: dimqua
issue_1456: state: open
title: Add Hacker News
body: It would be nice to add this search engine: https://news.ycombinator.com.
user: InnovativeInventor
issue_1436: state: open
title: Configuration for limiting the number of available languages.
body: Hello, I've been using different instances of searx for 2 years now, and now I decided to run my own.
I have been fiddling with the configuration for about a few hours and I really like that there is a **searx/settings.yml** which can configure pretty much everything that is also available in the preference page.

Now what I am trying to accomplish is to limit the language choice to only the 3 languages I use and I wonder how to do it from within **searx/settings.yml** (what I've done for now is to comment the non-needed entries in **searx/languages.py**). Is such a config option possible? if not maybe it should be considered as enhancement.
user: dasj19
issue_1426: state: open
title: Image Filters
body: Allow filter images with options such as (by order of importance):

Type (eg: Photos, Animated images such as gif, apng, webp)
size
color
format
...



user: maverick74
issue_1420: state: open
title: clearer results list
body: Nicer results list "inspired" by google. I guess it would be a better user experience for someone coming from google...
user: miicha
issue_1417: state: open
title: Problem with the search language
body: Hello,
I have a very annoying problem and I do not know how to solve this problem.

On Google, Bing, Qwant etc ... when we do a search, we have a general result and the most important links are first.

On Searx, this is not the case because it takes into account the language. How to configure Searx so that it looks on several languages at the same time please?

Thank you in advance and sorry for my english.

Google example
https://i.imgur.com/s635pzp.png

Example on Searx French language
https://i.imgur.com/6EFlU1n.png

Example on Searx English language
https://i.imgur.com/xXkqMX2.png
user: PoseidonFR
issue_1416: state: open
title: Adding support for SymbolHound
body: 
Symbol Hound, @ http://symbolhound.com/ , which has the tag line “Search Better. Code Better”,  has this to offer by way of description: 

“SymbolHound is a search engine that doesn't ignore special characters. This means you can easily search for symbols like &, %, and π. We hope SymbolHound will help programmers find information about their chosen languages and frameworks more easily.”

It would be nice if searx supported this engine too. 

(Thanks for making searx happen!)
user: UdeRecife
issue_1414: state: open
title: [engine] add missing engines from a list provided by F. Piron
body: Source: https://www.projetsoha.org/?page_id=1040

List:

>
    Directory of Open Access Journals (Répertoire mondial des revues en libre accès – plus de 10 000 revues archivées) : http://doaj.org
    Deux répertoires mondiaux des archives numériques universitaires en accès libre :
        OpenDOAR – Directory of Open Access Repositories qui répertorie plus de 2 600 archives ouvertes universitaires
        ROAR – Registry of Open Access Repositories (USA) qui moissonne plus de 3 500 serveurs d’archives ouvertes universitaires
    Open Science Directory : un portail scientifique de 13 000 revues : http://www.opensciencedirectory.net/
    Des répertoires de thèses : https://tel.archives-ouvertes.fr/, http://search.ndltd.org, et http://www.dart-europe.eu/basic-search.php
    L’archive numérique du CNRS pour la Francophonie, l’Afrique et l’océan indien : HAL-AUF
    HAL – l’archive numérique du CNRS (France)
    Directory of Open Access Books : http://www.doabooks.org/
    Des plateformes francophones de revues et de livres scientifiques (Attention : tout n’y est pas en libre accès immédiat et elles sont plutôt en sciences sociales et humaines)
        en France : openedition.org
        au Canada : erudit.org
        en France : http://www.persee.fr/
        Le site français Mir@bel comporte plus de 5000 revues francophones de sciences humaines et sociales.
        La plateforme sign@l comporte 450 revues francophones en sciences humaines et sociales.
    Quelques plateformes anglophones :
        https://pkp.sfu.ca/ (les revues qui utilisent le logiciel Open Journal systems),
        PloS : https://www.plos.org/,
        Bioline (en santé, pour les pays des suds) : http://www.bioline.org.br/
        OpenAIRE : https://www.openaire.eu/
    Plateformes en espagnol et portugais :
        SciELO (Brésil) : http://www.scielo.org/php/index.php
        Red Iberoamericana de Innovación y Conocimiento Cientifico (Amérique latine et Espagne) https://www.redib.org
        Recolecta (Espagne) : https://www.recolecta.fecyt.es/
        Redalyc (Mexique) : http://www.redalyc.org/home.oa
        CLACSO open access and dissemination : http://www.clacso.edu.ar/acceso_abierto_y_difusion/presentacion.php
    Plateformes africaines, qui contiennent des revues en français et en anglais :
        African Journals online : http://www.ajol.info
        SciELO Afrique du Sud : http://www.scielo.org.za/scielo.php
        African Language Materials Archive, qui privilégie des documents en langues africaines : http://alma.matrix.msu.edu/
        African Online Digital Library (AODL), plateforme anglophone : http://www.aodl.org/
        African Journal Archive (AJA) : http://www.ajarchive.org/

Il existe aussi de nombreuses archives numériques disciplinaires que vous pouvez explorer :

    Les Classiques des sciences sociales, avec plus de 6200 documents en ligne : http://classiques.qc.ca
    Manioc (Bibliothèque numérique Caraïbes, Amazonie, Plateau des Guyanes) : http://www.manioc.org/
    Social Science Research Network (SSRN) : http://www.ssrn.com/en/ (Mais tout n’y est pas en libre accès)
    arXiv, un site qui héberge depuis 1991 plus d’un million d’articles en mathématiques, physique, informatique, biologie quantitative, statistiques : http://arxiv.org/
    La plateforme biomedcentral (médecine) : http://www.biomedcentral.com/
    Les articles en libre accès de la plateforme PhilPapers en philosophie : http://philpapers.org/archives/list.html
    Dictionnaire médical de l’académie de médecine, en libre accès : http://dictionnaire.academie-medecine.fr/
    Mathematical Physics Preprint Archive 
    Mathdoc : http://www.mathdoc.fr/
    La bibliothèque numérique française de mathématiques (http://www.numdam.org/)
    MathOa : http://www.mathoa.org
    NetEc (1993) qui est devenu EconPapers
    Cogprints : psychologie, sciences cognitives
    CiteSeer : informatique
    EDUQ.info : Archive ouverte en éducation post-secondaire ou pré-universitaire http://eduq.info

user: jibe-b
issue_1411: state: open
title: [engine] add Communecter.org
body: Search engine (and social network) returning NGOs, etc working on environmental, social issues etc

cc @Drakone from Communecter. Is it ok for you to support the traffic load?
user: jibe-b
issue_1401: state: open
title: Yahoo need stronger language hints
body: For cross-language queries eg "ronaldinho" or "currywurst" the main site search.yahoo.com has a strong English bias and returns mostly English results even with a language specified the CGI parameters, eg "vl=lang_FR". Some languages/countries have separate subdomains that generate better results for that language. This PR adds support for those languages/countries where stronger hints are possible.
user: isj-privacore
issue_1398: state: open
title: CGI parameter 'lang' vs. 'language'
body: The documentation on asciimoo.github.io/searx/dev/search_api.html says that the parameter is called 'lang', but the code uses 'language' (search.py:get_search_query_from_webapp())

Because other programs already rely on the parameter being called 'language' I suggest fixing the documentation.

(sorry if this is the wrong place to report this error)
user: isj-privacore
issue_1394: state: open
title: Force entering the URL for base_url
body: -initialcomment-

In Firefox, when I choose searx.org as a default search engine and enter some search string into the browser's default screen, it just opens searx.org but the string disappears.

Expected behavior: screen with Searx.org search results should open right away.

It works with Gооglе, Вing, Twitter, just not with searx.org.

-end of the initial comment-

-----

Actual feature request:

Here is a suggested solution: allow 3 possible values: ```Invalid```, ```None```, ```URL```. Ship with ```Invalid```, but don't allow to start searx with ```base_url: Invalid```. searx should require the user to either set it to ```None``` or to ```URL```.

This would prevent the user from leaving ```base_url: None``` accidentally. He can only set ```None``` consciously.

user: yurivict
issue_1381: state: open
title: Choose which language to have in the fast language select drop-down list
body: I know we can use special symbols for fast language selection (for example :ja )
Unfortunately, this is hard to do when searching on a mobile phone,
on mobile, I prefer to scroll down and click the language I want.
Would be nice to choose which language to have in the drop-down list, for example, we can keep only 3 languages in the drop-down list for fast selection.
user: aliceinwire
issue_1376: state: open
title: Support question: No way to install customized plugin withOUT prefs in URL bar?
body: Is there currently no way (for anyone) to create a customized Searx plugin and install in Firefox without the customized preference string showing in the URL bar?

I looked at opensearch plugin makers as well as several user created ones on http://mycroftproject.com/search-engines.html?name=searx.

It appears if you want to install a plugin with non-default settings in Firefox's search engine manager, there's no way to do it so the preferences don't load in the URL bar?  Which to trackers is kind of a neon sign with your personal ID number.

Why are StartPage / Ixquick able to allow changing default prefs, and create plugins that don't load the custom prefs in the URL bar, but Searx and I believe Duck,Duck,Go aren't able to do that?  

Or if Searx could do that but chooses not to, what's the reason for that decision?

Is it so much work to duplicate what Startpage does that it's not worth it to Searx collaborators?

I'd like to use the customized searx.me in Tor Browser as well as Firefox.
I'm not sure there's a way in Tor Browser to "automatically" protect cookies from deletion at shutdown, even if they're permanent cookies.  I haven't found one.

You'd have to copy / paste backup copies of cookies.  Using addons in Tor Browser (to manage cookies) isn't recommended.
Thanks.
user: bendover22
issue_1344: state: open
title: [Suggestion] More then only one search language
body: I have to choose a language for the search. Thst's ok. But often this is not enough.
In other search engines, like duckduckgo or google I can choose the search language too, but they show me also some english results.

I'm a software developer and I often search for some code or solutions. I want to search in my language (german) but often the solutions I'm looking for are in english. In other search engines I have both. In searx I have to switch the language everytime I want the english results too.
user: GambaJo
issue_1322: state: open
title: New search engines
body: It could be amazing if you add for example:
1.Yippy
2.Ahmia
3.Shodan
4.Censys
4.ZoomEye
5.PunkSPIDER
6.IVRE
7.Minds.com
8.BitChute
user: toxub23
issue_1316: state: open
title: Calculator
body: Would be nice to have a calculator integration like google, duckduckgo, startpage etc.
user: NotaWindowsUser
issue_1297: state: open
title: Suggestion for the search results
body: It would be nice if it showed page numbers in between the Previous Page and Next Page buttons.
user: Zero3K
issue_1296: state: open
title: Suggestion for the video search
body: The Preferences should have an option for choosing whether to view Youtube videos in their normal embedded/regular player or use Hooktube's embedded/regular player.
user: Zero3K
issue_1258: state: open
title: [feature] Add support for more smart keywords.
body: Similar to 'ip' and 'useragent' you can add the following:
- cache:[url] (to show a cached version of the input link, e.g. using archive.org)
- calculator
- dl [download_link](e.g. links from video sharing sites)
- ipv4
- ipv6
- weather
- whois [query]


An example for dl:
dl -720p -mkv https://youtube.com/watch?v=EdjVKQoBzVM
And it would automatically navigate to the video's download link.
You can use free services like keepvid.com or savefrom.net for this matter.
user: aurora-anon
issue_1251: state: open
title: No option to add search plugin with customized preferences
body: The about page provides a method to add searx to Firefox as a custom search engine, but it doesn't retain any user customizations. StartPage provides a method for adding their search engine to Firefox with custom parameters. Like searx, StartPage provides a custom URL with custom settings embedded, and it uses this as the basis for adding the custom search plugin. Searx should provide the same so that settings like safesearch and locale are preserved even after deleting cookies.
user: Poorchop
issue_1235: state: open
title: [Request ]possiblity of complex request ?
body: Hello

With SearX is it possible to doing complex request 
with boolean expression. 



user: astrowalker2013
issue_1225: state: open
title: Plugin architecture improvement and ideas.
body: Right now, all plugins are synchronized (see [SearchWithPlugins](https://github.com/asciimoo/searx/blob/master/searx/search.py#L414)) :
* first the pre_search is called
* if it's pre_search allows it, the normal search is done (without plugin)
* then post_search is called
* then on_result is called for each result

The on_result can takes time, and may not modify the results (the current implementation of the HTTPS everywhere plugin for example).

There are two type of plugins for now.

A first type modifies the results :
* OA DOI rewrite (modify the results)
* Tracker remover (modify the results)
* HTTPS rewrite (modify the results)
* self IP (modify the answers, not the results)

A second type modifies the UX/UI using javascript / css :
* vim
* infinite scroll
* search on category select
* open results in a new tab (actually dead code?) 

We can imagine a third type: slow but doesn't modify the results or the UI/UX. The plugin is just notify of the results.

## Improve the response time

The ```on_result``` functions inside the plugins are after all results have been collected by the engines. See the call in [search.py](https://github.com/asciimoo/searx/blob/master/searx/search.py#L427), at this line :
```
plugins.call(self.ordered_plugin_list, 'on_result', self.request, self, result)
```

One way to improve the result time is to call "on_result" as soon one engine gives some results. To do that, ResultContainer must call ```on_result```: no global wait at the end of the process.

```python
class SearchWithPlugins(Search):
    ...
    def processResult(result):
        plugins.call(self.ordered_plugin_list, 'on_result', self.request, self, result)
    ...

class ResultContainer(object):
  def __init__(self, process_result):
    ...
    self.process_result = process_result

  def extend(self, engine_name, results):
    ...
    # if there is no duplicate found, append result
    else:
            result['positions'] = [position]
            self.process_result (result)
            with RLock():
                self._merged_results.append(result)
    '''
       should be thread safe?
       is not, the same URL may be processed multiple time
       (should not be a problem)
    '''
    def processUrl(url):
        if url in self.processedUrl
            # self.ordered_plugin_list and self.request, self.search must be initialized.
            self.processedUrl['url'] = plugins.call(self.ordered_plugin_list, 'on_result', self.request, self.search, url)
        return self.processedUrl['url']
```

I'm not very happy with this solution because ResultContainer gets references from everything.
One solution :  define ```processUrl(url)``` inside search.py, and ResultContainer gets a reference to that function.

## Implement a third type of plugin: asynchronous notification 

Use case: plugins which won't modify the results but which are slow. Example: store the results, make some statistics on the results, etc... 
Note: most probably these use cases break the stateless status of searx.

as @asciimoo has suggested in #1224, it can be done using the current plugin architecture : 
```python
import threading

name = 'Save results'
description = 'Save results'
default_on = True


def save_results(results):
    # TBD..
    print(results)


def post_search(request, search):
    results = search.result_container.get_ordered_results()
    threading.Thread(target=save_results, args=(results,)).start()
    return True
```

The drawbacks : 
* it creates one thread per plugin and per request (decrease the global response time)
* the plugin is not sure to have the fully processed URL (some other plugins may be modified the URL after that call)

If this is a problem, a solution: we can imagine one ```Queue```, and one thread processing the results. The thread gets ```result``` from the ```Queue```, and calls the ```on_notify_result``` function of the plugins (```on_notify_result``` can't modify the results, but can be slow).

The drawback of the solution: if one plugin hangs indefinitely, the asynchronize processing stops. 
The solution of the solution: one Queue/thread per plugin.

## To sum up

search.py: 
```python
class SearchWithPlugins(Search):

    def __init__(self, search_query):
        # init vars
        super(Search, self).__init__()
        self.search_query = search_query
        self.result_container = ResultContainer(self.processResult)   

    def processResult(result):
        plugins.call(self.ordered_plugin_list, 'on_result', self.request, self, result)

    def search(self):
        if plugins.call(self.ordered_plugin_list, 'pre_search', self.request, self):
            super(SearchWithPlugins, self).search()

        plugins.call(self.ordered_plugin_list, 'post_search', self.request, self)

        # ResultContainer will call processResult which will call on_result for each plugins.
        results = self.result_container.get_ordered_results()

        for result in results:
            plugins.async_on_result(self.ordered_plugin_list, self.request, self, result)

        return self.result_container
```

results.py: 
```python
class ResultContainer(object):
  def __init__(self, process_result):
    ...
    self.process_result = process_result

  def extend(self, engine_name, results):
    ...
       # if there is no duplicate found, append result
       else:
            result['positions'] = [position]
            self.process_result (result)
            with RLock():
                self._merged_results.append(result)
```

plugins.py: 
```python
from multiprocessing import Queue
from threading import Thread

def worker(queue):
    while 1:
            f, args, kwargs = queue.get()
            try:
                f(*args, **kwargs)
            except e:
                # todo : log
                print(e)

class QueueThread():
    
    def __init__(self, name):
        self.queue = Queue(100)
        self.thread  = Thread(name='plugin-' + name, target=worker, args=(self.queue,))
        self.thread.daemon = True
        self.thread.start()
        
    def call(self, f, *args, **kwargs):
        self.queue.put((f, args, kwargs))

class PluginStore():
    
    def __init__(self):
        self.plugins = []
        self.pools = {}
    
    def start_async(self):
        for plugin in self.plugins:
            if hasattr(plugin, 'on_async_result'):
                self.pools[plugin] = QueueThread(plugin.name)
                
    def async_on_result(self, ordered_plugin_list, *args, **kwargs):
        for plugin in ordered_plugin_list:
            if plugin in self.pools:
                f = getattr(plugin, 'on_async_result')
                self.pools[f].call(f, request, *args, **kwargs)

```
user: dalf
issue_1214: state: open
title: Filter image by size
body: Hi,

it would be great to be able to filter images by size (small, medium, large, very large), as Google or DuckDuckGo do.

Best

Meaz
user: meaz
issue_1209: state: open
title: Splitting settings.yml
body: Hi,

currently, `settings.yml` maintains the site-specific *settings* (language, secret key, proxy settings...) as well as the list of engines and list of languages.

Problems arise when upgrading searx from one version to the next. While settings like language, secret key and proxy settings probably should stay the same, the `settings.yml` has to be adapted to incorporate any added or removed languages or engines. This means, that currently, upgrading searx involves some manual work.

This manual work could be avoided if `settings.yml` were somehow split into more than one file. I can imagine two scenarios:

`settings.yml` only contains the site-specific settings (like language, secret key, proxy settings) while a new configuration file `engines.yml` contains the list of engines and `languages.yml` contains the list of languages. `settings.yml` would live in `/etc/searx` because it is definitely a site-specific configuration option which does *not* change on each upgrade. `engines.yml` and `languages.yml` could live in `/usr/share/searx` because those files *do* change upon each upgrade. Site admins who wish to override their `engines.yml` or `languages.yml` could add these files into `/etc/searx` but would then naturally have to take care to keep these up to date with their specific requirements when upgrading searx. searx itself would then prefer files in `/etc/searx` over files in `/usr/share/searx` but fall back to the latter if the former doesn't exist.

The second scenario, similar to the first one, maintains a minimal `settings.yml` in `/etc/searx` and a `languages.yml` in `/usr/share/searx` but instead of putting engine information into a `engines.yml`, each engine would have their own small yml file in `/usr/share/searx/engines`. Adding and removing engines by searx upgrades would then work by adding and removing files from that directory. If a system admin wants to overwrite the available engine, then they can create a `/etc/searx/engines.d` which contains all engine files that they want active. These could just be symlinks to the desired files in `/usr/share/searx/engines`. This concept is similar to what for example apache does with its `sites-enabled` and `sites-available` directories.

What do you think?
user: josch
issue_1200: state: open
title: [feature request] Add a Transparency Report template.
body: Read about warrant canaries at <a href="https://en.wikipedia.org/wiki/Warrant_canary">Wikipedia</a>
user: aurora-anon
issue_1192: state: open
title: [Feature Request] Add a section in the settings.yml to set information of the site owner
body: I've been asked by users of my new searx instance why I haven't added an "Impressum" (imprint). Of course I could add this manually to the about page but from my point of view it would be nicer to set this in the settings.yml (just one place to edit settings of the site).
 
This would certainly benefit the trustworthiness of the search-site.

The information set in the settings should then, if possible, supplement the general information on the about page.
user: scroom
issue_1151: state: open
title: Mention the shortcuts and langage in the engine page in the settings
body: Hi,

Correct me if I'm wrong but I'm pretty sure that there is no mention of how to use !bangs and :langage anywhere outside of github, I discovered them by chance when lurking here.

Bangs were my top priority for a search engine and I missed them for quite some time when trying out Searx. That is not very user friendly and I think you should add in the settings page a text in the `engine` page mentionning how to use them. So far there is just a variable name in the `shortcut` field of the engine configuration list with `wp` for wikipedia for example and no explanation as to how they work. That is not straightforward at all. The same goes for the `:langage` function to specify langages.

To ease your workload I propose to add these texts at the bottom of the page, just above the part about cookies : *(dont hesitate to ignore this completely)* : 
* >To use the shortcuts : precede your shortcut with an exclamation mark (!) before typing your keywords. For example : *!wp New York City* will show you the result for *New York City* from the wikipedia search bar straight from searx !
* >You can also specify a langage for the results by preceding your keywords with *:langage*. For example : *:french cordon bleu* will show you the results in french for *cordon bleu*. Of course you can combine !shortcuts and :langage to be even more specific.
user: thiswillbeyourgithub
issue_1144: state: open
title: Shopping tab?
body: I noticed searx has no shopping tab. Would it be a good idea to have a tab for shopping, that searches places like ebay, amazon, walmart, craigslist, etc.?

I suppose this would be considered a feature request.
user: Silent-Hunter
issue_1143: state: open
title: Langue missing [Occitan]
body: Hello,
the Occitan is missing, I saw another issue that explains it's because it's not part of another project.
But things have changed and now the Occitan is part of it, and well documented I have to say.
Can the troubadours's language be included now?
Best regards !
user: Quenty31
issue_1142: state: open
title: allow !bangs and :language in any order
body: Hi,

It seems like when typing `pasta !videos :it` and `!videos :it pasta`, only the second form will be recognized as looking for italian videos. It would be great to allow any order for !bangs and for the :langage shortcut.

It is frequent for me to think of the langage and domains (videos or images) only *after* figuring out which keywords to look for so it makes more sense to add them at the end for me.

What do you think of this ? :) awesome work on searx btw
user: thiswillbeyourgithub
issue_1139: state: open
title: Display video duration with video results
body: Right now when searching `!yt keyword` there is not other way to know the length of a video than to click on it. Same with other video providers apparently.

That would be great to have them displayed somewhere next to the video title in the search results.
user: thiswillbeyourgithub
issue_1087: state: open
title: Make a URL to Preselect Settings in Preferences
body: Just as the «Search URL of the currently saved preferences» launches a search, generate another URL i.e. `../preferences?preferences=*` which preselects the encoded or plaintext variables, and highlights those not included in the URL.  `¶`This helps if cookies get cleared, even in a browser crash, or if trying another hosted instance of Searx, or setting up another browser for Searx, your own or a friend's.  `¶`Thanks.
user: MilkManzJourDaddy
issue_1086: state: open
title: Standardization of settings url across instances
body: Please standardize the 'Search URL of the currently saved preferences' to something shorter. Currently searx.me for exaple has it's own search url in which preferences takes the value of a huge string while other just enumerate the changed values. Some up to date searx instances don't even provide this feature.

Also why does this return an error ? This only happens on 0.12
https://searx.me/?q=%21go%20hotline%20miami&categories=none
user: qutetemp
issue_1065: state: open
title: [Engine] Add Jackett instance for files search
body: [Jackett](https://github.com/Jackett/Jackett) is a self hosted proxy server for torrent queries. It does have it's own API however, I'm currently unable to find any documentation on it.
user: jpope777
issue_1057: state: open
title: [Engine] add Scholia to category science
body: Scholia returns statistics about number of publications per year/per author contained in Wikidata.

Link: https://tools.wmflabs.org/scholia/

Scholia could be an (optional, as returning incomplete data) index used in the science category

self-assigned
user: jibe-b
issue_1052: state: open
title: suggestion of new tab "annotations" or "reviews"
body: Hypothes.is, publons.com and other services enable users to annotate content, be it webpages or scientific publications.

The engines to get their results will be under already existing tabs, such as "general" or "science but _could_ also be under a different tab that would be focused on annotations ans peer reviews.

This tab would differ from "image", "video", "map" in that it is not about the type of result, but about the process in which they have been produced.
user: jibe-b
issue_1051: state: open
title: Larger and more efficient syntax library
body: ## **_Is there anyway to expand the current syntax library?_** 
_(Based on this reference: [https://asciimoo.github.io/searx/user/search_syntax.html](url))_

I feel like it could be expanded upon for better searching efficiency. I don't know if these have actually been implemented or not, I couldn't find anything referring to it.


**_Some suggestions:_**

-  **To exclude certain sites/domains**
_ex. - Youtube can worm it’s way into results still even after unchecking it from preferences because it’s used on so many of the other engines. Video searches can get super annoying since the same Youtube results are constantly repeated on top of that. It would be helpful to do a search to exclude **ALL** "youtube.com" link results sometimes._

-  **For _ONE_ specific site/domain**
_ex. - Searching for "festivals" on **only** example.com_

-  **For _SEVERAL_ specific sites/domains**
_ex. - Searching for "carnivals" on **just** sites: example.com, example2.com, example3.com_

-  **Exact/specific quotations**
_ex.  - Searching for quotes, phrases, or a group of terms in a particular order --> “Manhattan Ballet” or “Blue Man Group” or "veni vidi vici"_

-  **Must include/have**
_ex. - Searching for a group of specific terms but have no particular order --> “present, dad, electronics" for any results regarding electronic gifts for your dad_

-  **Abbreviation codes for SE sites _AND_ languages**
_It's a hassle to constantly have to go back and forth to the preferences page and trying to decode what code goes to what._


**Additional Syntax Question**:  Do syntax operators like - **AND**, **OR**, or **+ (the plus sign)** work on searx? 
_I can’t really tell._


I recommend putting the syntax in a basic Excel-like table and use two different font colors; one color for the syntax operator symbol/word and the other color for the description of the syntax and how and what it is used for. If not colors, then two different styles, like bold for one and regular for the other.

When I first saw https://asciimoo.github.io/searx/user/search_syntax.html, I initially thought the site was just broken on my browser and not displaying the content correctly. 
While it is a simplistic layout yes, I feel like may be **_too_** simplistic that it can easily be mistaken as being an unfinished page or broken page like I did. With a simple table with two different font colors or styles, it would be easier and much clearer for users to divulge and use.

================

**_Not syntax related, but requests/suggestions for search results._**


-  **Having search results go further back than a year**
_ex. - Sometimes there's a need to go further back than a year. Like a search for a specific day or event from decades before for a school assignment._

-  **Narrow search results to a certain time frame**
_ex. - A search for news articles from May 1, 2017 to July 30, 2017._



That's all I can think of right now request/suggestion wise. If I think of any more, I'll add on to this.

user: siennk
issue_1049: state: open
title: [tests] generalize engine testing+
body: Tests of engines are quite redundant and can be generalized.

Can be done _ad hoc_ or using for example https://hypothesis.readthedocs.io/

I'd like to tackle this. Has there been already something done on this track? Any advice so that it fits best with the design of Searx?
user: jibe-b
issue_1042: state: open
title: settings.yml : multiple values for templates_path and static_path 
body: Some searx instances have a one or more dedicate themes.

Most of them are not updated. I don't know the real reason. 
Perhaps it would be convenient for searx administrator to be able to specific more than theme and static paths . The defaults themes / static would be updated as usual (git, package, whatever) without fever to erase the specific themes.


user: dalf
issue_1041: state: open
title: travis build : add a call to kvch/searx-checker at the end of the build ?
body: In the ```after_success``` section, so it doesn't block the build.
user: dalf
issue_1028: state: open
title: limit virtual interfaces to specific engines
body: Because so many people have problems with google blocking results due to a single IP making many queries (see #729), it seems the only way to get around this is to have a pool of IPs that can be used to make queries, spreading the load around. 

This can be done by setting the outgoing interfaces in virtual interfaces in https://github.com/asciimoo/searx/blob/master/searx/settings.yml#L43, it works fine if you have an excess of IPv4 addresses to spare for this purpose. However, most people do not have spare IPv4. Many people do have large numbers of ipv6 addresses, but if you configure several virtual interfaces to use ipv6 addresses, then the engines that do not support ipv6 will fail.

It would be good if there were a possibility to configure which engines are used in virtual interfaces, so you can configure a bunch of ipv6 virtual interfaces, but only limit them to those engines that support ipv6.
user: micah
issue_1025: state: open
title: Simple theme : bug fixes, improvements
body: ### General : UI
- [ ] center or move the results to the right.
- [ ] footer at the botton of the page ( https://codepen.io/cbracco/pen/zekgx http://matthewjamestaylor.com/blog/keeping-footers-at-the-bottom-of-the-page )
- [x] use https://gist.github.com/dalf/1ace543608ccc04ac8a5c6068eaa693e

see https://joe-crick.github.io/pure-css-components/

### General : UX
- [x] Display "Search URL of the currently saved preferences" in the preferences.
- [x] Show "Answerers" somewhere.
- [ ] do the RTL style 
- [ ] engine crash warning : add a close button
- [ ] infinite_scroll plugin
- [ ] infoboxes : some properties value should be a link to another search ( ```Programming language :Python```  --> be able to click on ```Python``` to search that on searx)

###  Search
- [x] add a clear text button on the left of the search button
- [ ] add safe search right to Language combobox and Time combobox
- [ ] apply #1226 to Simple theme

### On mobile
- [ ] do not set the focus on the search input text : the keyboard hides the results.
- [ ] make the search input smaller when without focus to give space for the searx logo and the preferences button. With focus, make it full width wide as now.
- [ ] embedded videos on mobile : too large, outside the screen
- [ ] selected category on mobile : scroll to the first selected category.

### Image category
- [ ] image category : improve display ( https://www.sitepoint.com/recreating-google-images-search-layout-css/ ?)
- [x] image category : full screen width when there is only images.

### Reduce the network usage
- [x] remove searx/static/themes/simple/img/loader.gif using https://projects.lukehaas.me/css-loaders/
preferences button.
- [ ] create a small bandwidth version using javascript (use JS to add languages choices, cached links, categories)
user: dalf
issue_1023: state: open
title: [CSS] resource: a font to add icons only in CSS
body: As Searx prefers CSS over other forms of graphism, Icofont font may be of interest:

http://icofont.com/ is a set of icons

For example `<i class="icofont icofont-angry-monster"></i>` adds a small monster ;)
user: jibe-b
issue_1011: state: open
title: when a request is made using the POST method, don't set the title of the HTML page.
body: Right now, the query is displayed in the title of the HTML page.

When the GET method is used, the history of the browser will keep the URL anyway.

The POST method allows to hide the query : 
* from the server logs (the explicit rules is not to log queries)
* from the browser history
* something else ?

When the POST method is used, the history of the browser won't keep the URL, but it will keep the different titles, which means the different queries.

It would make sense not to show the query in the HTML page title when the POST method is used.
user: dalf
issue_1008: state: open
title: Search only on certain sites
body: Please consider to add a possibility to search only on user-defined websites, see Google's Custom Search as an example.
user: dimqua
issue_981: state: open
title: [request] NZBsearch
body: On bookmark engine "files" is just torrents, maybe add usenet too?

most popular: https://binsearch.info/

EDIT: i see interest project: https://github.com/bram2268/NZBSEARCH of course in python
user: kompowiec
issue_957: state: open
title: [Feature] in "Science" tab parse response to extract DOI
body: In the response from an index, there may be a DOI.

Parsing the response and extraction a DOI could enable to add a "direct link".
user: jibe-b
issue_954: state: open
title: [Request] Scholarpedia
body: I see you have Wikipedia. What about adding the [peer-reviewed version](http://www.scholarpedia.org/article/Main_Page) too?
user: lcpz
issue_948: state: open
title: Extend global timeout when there is no result
body: Currently, if all search engines timeout, the user doesn't have any result to read.
In this scenario, the user usually refresh the page to make sure there is really no result : and sometimes it displays some results.

Technically, this can happen when the HTTPS connections have been closed. On the second try, the connections are already opened, and the results arrived before the global timeout. 

See : https://news.ycombinator.com/item?id=14579491#14581065

I see two solutions (most probably there are a lot of more) : 
* advise the administrator to increase the global timeout in this case. How ?
* change the searx behavior : if there is no results after the timeout, double the timeout and wait more.

user: dalf
issue_936: state: open
title: rewrite https_rewrite.py using diracdeltas/unapplied-rule-finder project
body: https://github.com/diracdeltas/unapplied-rule-finder uses a trie to found out the rules to apply.
( see also https://github.com/hiviah/https-everywhere-checker/tree/master/src/https_everywhere_checker to have a more recent version ?)

It may improve the performance of the https_rewrite.py

Perhaps it could load all the HTTPS rules : the issue would be the memory usage (but not anymore the CPU usage).

[EDIT] The PR for the current implementation : https://github.com/asciimoo/searx/pull/97
user: dalf
issue_934: state: open
title: Improve searx image proxy ?
body: Privacy :
- Remove the ```If-Modified-Since``` and ```If-None-Match``` sent headers.
- Remove the ```Last-Modified```, ```Expires```, ```Etag``` received headers.

Ressource usage improvement:
- http://flask.pocoo.org/snippets/118/

user: dalf
issue_927: state: open
title: /config URL : add "no_result" for each engine
body: Add a "no_result" field for each engine.

The value would be true only if : 
* the engine was used
* for all requests, there were no result

It would help to know quickly which searx engine doesn't work (it shouldn't be a privacy issue ?).

If the value is true, it doesn't mean the engine is broken. For example for the currency engine, as long there is no valid request, the value would be true.

Moreover, for now, the statistics are not shared between the different workers in uwsgi, so different calls to the /config url may gives different results.
user: dalf
issue_918: state: open
title: Search for books feature
body: Would be nice if it was possible to search for books, for example by using Goodreads, Amazon and Google Books. The search could be done by author, serie, title etc.
user: ghost
issue_917: state: open
title: maps: open-location-code
body: an alternative to what3words: open-location-code. No external servers for calculating the coordinates. Unfortunately no native python code by now.

http://www.openlocationcode.com/
https://github.com/google/open-location-code

user: cy8aer
issue_916: state: open
title: new engines, search user-defined macros by topics (eg. academic papers, code search)
body: Hi guys,

Hope you are all well again !

As mentioned in this issue, I am hacking a little bit searx for my own use and some suggestions popped in my mind and wanted to know your point of view on them.

Here is the last chunk of ideas about additional metacontent to index or query for extended and contextual results.

**Extend metasearch mode:**

- **Forums/Issues:**
   - Add Stackoverflow
   - Add Reddit
   - Add Quora
   - Add unity3d Forum: https://forum.unity3d.com
   - Add qiita http://qiita.com/ (Loads of awesome tutorials and content but in Japanese)
   - Add howdoi, instant coding answers (https://github.com/gleitz/howdoi)

- **Academic metasearch(es):**
   - Add Arxiv papers and extract github repositories meta info, match or star matched repositories
     - refs:
        - https://github.com/thoppe/arXiv2git (Python) (provided with a chrome extension)
        - https://github.com/bobinette/papernet (Go)

-  **Named entity extraction** 
     - Add Graphql requests for additional results 
         - from local imports of wikidata or wikipedia
         - from private knowledge bases.
         - refs:
             - https://github.com/dgraph-io/dgraph (Go)
             - https://github.com/dgraph-io/pydgraph (Python Client)
     - Matching named entity from specific thesaurus, corpus
        - refs:
          - [MITIE](https://github.com/mit-nlp/MITIE), [NER](https://pypi.python.org/pypi/ner/0.1), [PolyGlot](https://github.com/aboSamoor/polyglot),  [FastText](https://github.com/facebookresearch/fastText) from Facebook Reasearch, [Spacy](https://github.com/explosion/spaCy/tree/master/examples)
       - projects: 
           - https://github.com/wowdd1/xlinkBook
     - **Generate contextual keywords suggestions:**
     - create custom corpus(es) of named entities
        - eg: project names ( OpenCV, DLIB, Boost)
        - refs:
          - textacy: https://github.com/chartbeat-labs/textacy
     - **create a hierarchical tagging system with a context.**
        - would be easy to manage with a chrome extension as mentioned in the first [issue 914](https://github.com/asciimoo/searx/issues/914). 
        - eg. 
     - **manage keyword similarity and train some text classification mappings/aliases:**
        - refs. 
          - with Word2Vec      https://github.com/k0105/WordEmbeddingsBackend/blob/master/WordEmbeddingsBackend.py

-  **Code/VCS search** 

     - Add and parse Awesome list available on github to generate suggestions for code searches as it contains articles, repositories, templates, tutorials and boilerplates.
        - refs:
     - Index **tech stats**:
          - https://github.com/donnemartin/viz
     - Index **trending projects**:
          -  refs:
            - https://github.com/thedillonb/GitHub-Trending (Nodejs)
            - https://github.com/thedillonb/GitHub-Trending (Go)
      - Index curated list of projects:
            - https://github.com/chaconnewu/awesome-augmented
      - Index local project code, and generate contextual suggestions about academic papers, issues, wikis, stargazzers:
          -  refs:
             - https://github.com/google/codesearch
             - https://github.com/blevesearch/bleve-wiki-indexer
             - https://github.com/spencerkimball/stargazers (Go)
      - Load/Search/ github stars
             - highlight any github star matching a user starred repository
             - refs:
               - https://github.com/ebber/admitScript (Python)
               - https://github.com/motemen/github-list-starred (Go)
               - https://github.com/hoop33/limo#list-all-your-stars (Go), 
       - Repo classifiers:
           - Detect Repo languages (C, C#, C++, Python) with Naive Bayesian model.
               - refs:
                 - https://github.com/douban/linguist
                 - https://github.com/Mondego/pyreco 
           - Detect repo category from your github starred list or github api search results. (SVM or Deep Learning)
             - refs (mainly form InformatiCup2017)
                - https://github.com/InformatiCup/InformatiCup2017/blob/master/results/README.md
                   - 1st winner  [Github-Classifier ](https://github.com/Ichaelus/Github-Classifier), uses bottle, keras, sklearn, nltk, gensim, pattern, theano, demjson)
                   - 2nd place [repo-classifier](https://github.com/linkvt/repo-classifier), uses numpy, scikit-learn, scipy,...) 
                   - 3rd place [git_better](https://github.com/WGierke/git_better), uses google's tensorflow, theanets and xgboost. 
                      - **Important note**: **I think that adding a classifier could apply for any text classification through searx and create dynamic groups of bookmarked links or favs. it would be  so awesome to have a recommendation/suggestion engines on the top of **searx** aggregated results; it is really something missing in search engines.**

- **fingerprint action**
  - get more information about a named entity from Viadeo search,Linkedin search, Reverse email whois, Reverse ip whois, SQL file forensics ...
  - refs:
     - https://github.com/graniet/operative-framework (Python)

- **use case**
   -  Auto-suggest alerts that are scanning a cluster/list of linked entities based on their popularity. 
      - eg1. 
          - create aliases between ios.cmake, ios.toolchain.cmake, iphoneos.cmake
          - suggest combination with keywords like: darwin, armv7, armv64, APPLE
      - eg2. I look for some C++ projects links written with Qt and compatible with iOS and/or Android.
              - keywords combinations:
                 - Qt5 ios.cmake github
                 - Qt5 ios cmake toolchain
                 - Qt5 android.toolchain.cmake caffe mobile
                 - Qt android.toolchain.cmake caffe mobile
                     - hint: The [exrex](https://github.com/asciimoo/exrex)  would be interesting to manage these combinations in someway as they would be humanly readable and easy to setup through a web-form.
                     - eg. exrex.generate(\'caffe (qt5 (android.toolchain.cmake|android cmake|mobile)|qt (apple|ios.cmake|crossbuild))\')

Thanks for reading so much suggestions, but I had to unload and share those with you in order to start so experimental tests about them.

Cheers,
Richard
user: roscopecoltran
issue_915: state: open
title: Agents / CLI Mode / Additional data engines/modes /User-defined  Distributed Tasks/Macros
body: Hi guys,

Hope you are all well again !

As mentioned in this issue, I am hacking a little bit searx for my own use and some suggestions popped in my mind and wanted to know your point of view on them.

Here is a second chunk of ideas much more related to caching and loading and binding some sub-datasets to enhance some contectual results in the really awesome **searx** :-) .

**Agents/Wachdogs:**
  - Add a queries/alerts manager (like Google Alerts) but with message queuing and moderation/scaling rules for the bandwidth usage.
    - refs:
      - [Huggin](https://github.com/huginn/huginn), allowing to create agents that monitor and act on your behalf . Could not find any interesting alternative in Go or Python ? Maybe you know something cool and promising about this feature. ^^

**Distributed search/requests**
  - Goal: optimize some resources consumption (memory, network), create custom templates for results and sub-macros for a specific providers or search type.
  - Surveyor pattern with Nanomsg:
     - https://github.com/clchiou/garage/tree/master/py/nanomsg/examples/survey-asyncio (Nanomsg and Asyncio)
     - https://daniel-j-h.github.io/post/distributed-search-nanomsg-bond/ (Nanomsg, video, image and text searches)
  - Aggregate results from several sources with user-defined template:
     - https://github.com/devopsfaith/krakend#motivation (Go)

**Cache and bookmark some meta data:**
   - Graph database to structure the history results and things you bookmark 
   - **Important**:  mananging bookmarks and results with a context and structured nodes ! This is mainly what I would like to add to searx; a search buddy/assistant :-)
     - refs:
       - https://github.com/jhb/graphagus/tree/master/graphagus/example (I already merged zerodb and graphgus)
       - https://github.com/zerodb/zerodb ( end-to-end encrypted database)
       - https://github.com/zerodb/zerodbext.catalog
     - projects:
       - https://github.com/thedillonb/CodeHub
       - https://github.com/thedillonb/appreciateui-web
       - https://github.com/thedillonb/RepoStumble

**Save logs/data in different engines with an abstraction layers:**
   - Reason: Scalability 
   - Local storage for the cli to speed up processing
      - Sqlite3, TinyDB, ZoDB, ZeroDB (for privacy)
        - nb. (unfortunately only for Go), BoltDB is really cool.
   - Large Scale: Elasticsearch 
      - create a batch script to inject logs, data into an elasticsearch cluster. 
      - easily deployable through a docker-compose template for a self-hosted mode.
      - [Searchkit](https://github.com/searchkit/searchkit), a nice HTML search interface, easy to integrate with elasticsearch into a chrome extension or any web ui.

 **CLI Mode / commands and sub-commands** 
- Manage commands easily and smoothly with a sub-commands manager
    - refs: https://github.com/marekjm/clap
         -eg: https://github.com/marekjm/clap/blob/devel/examples/nested.json (Can be comverted to a yaml file easily)
- Would allow the hackable side of searx to be preserved and none intrusive with the core developpement of searx.
        -projetcs: https://github.com/jarun/googler/blob/master/googler

Cheers,
Richard

user: roscopecoltran
issue_910: state: open
title: [ENGINE] Sci-hub
body: "Sci-hub" is very important in the scientific community and students around the world.
It would be a plus to have it in the searx engine.
Problem is that the website is behind by the MITM services cloudflare and the google tracking captcha system (when you use tor it always ask for captcha, except when you use the IP instead of the URL).
Please add it when feasable.

Note: my usage of the tor network is a bit esoteric that's why I often trigger the cloudflare security.
But anyway cloudflare is still a very bad system.
user: mangeurdenuage
issue_908: state: open
title: [ENGINE] btdb 
body: Some anon shared this [search engine](https://en.btdb.in/) that permits to look for public magnets and torrents.
Problem is that the website is behind by the MITM services cloudflare and the google tracking captcha system (when you use tor it always ask for captcha)
Is it a problem for the searx engine ?
user: mangeurdenuage
issue_907: state: open
title: [ENGINE] Libre.fm
body: Hello,
Would it be possible to add libre.fm in the music section of the search engine ?
Libre.fm references musics that are under a copyleft license.
It isn't necessary to  make an account to listen to music or to search it.

I wish you all a good day
Freely
mdn
user: mangeurdenuage
issue_904: state: open
title: Replace Flask by another framework.
body: Flask is slow compare to other framework.

webapp.py is the only file to directly depends of Flask (other files uses Flask-Babel). 

Some frameworks :
* [falcon](https://github.com/falconry/falcon) was updated recently.
* [wheezy](https://bitbucket.org/akorn/wheezy.web) hasn't been updated since may 2016.
* [sanic](https://github.com/channelcat/sanic) only supports python 3.5 

Some links : 
* https://klen.github.io/py-frameworks-bench/
* https://www.reddit.com/r/Python/comments/57i301/what_if_flask_was_async_and_6x_faster_out_of_the/
* https://news.ycombinator.com/item?id=8835776

user: dalf
issue_899: state: open
title: Support HTTP2 connection 
body: [Hyper](https://github.com/Lukasa/hyper) provides a [Requests integration](https://hyper.readthedocs.io/en/latest/quickstart.html#requests-integration)

A change to [this line](https://github.com/asciimoo/searx/blob/master/searx/poolrequests.py#L22) should be enough.

...when hyper will be [thread safe](https://hyper.readthedocs.io/en/latest/advanced.html#multithreading)
user: dalf
issue_814: state: open
title: Minified javascript/css without source
body: Hi,

to package searx for Debian I need to find the unminified source for some javascript files that I only find in their minified versions:

 - `./searx/static/js/mootools-autocompleter-1.1.2-min.js` points to https://github.com/angelsk/mootools-autocompleter which is 404
 - `./searx/static/css/bootstrap.min.css` sounds like `bootstrap.css` but its content points to `normalize.css` without specifying the copyright holder or where the unminified source came from
 - I assume you got `./searx/static/js/html5shiv.min.js` from https://github.com/aFarkas/html5shiv ?

Thanks!

cheers, josch
user: josch
issue_802: state: open
title: Preferences : what if the plugins were hidden from the user point of view ?
body: The preferences could look like this : 

### General
* Default categories
* Search language
* Interface language
* Autocomplete
* SafeSearch

### Engines
* as now

### Privacy
* Image proxy
* Method
* HTTPS rewrite
* Tracker URL remover

and then display the cookies

### UI
* Themes
* Style
* Search on category select
* Vim-like hotkeys
* Results on new tabs
* Infinite scroll

### Misc
* DOAI rewrite

I think it would be more user friendly.
It's require searx to be able to include plugin choice into different tabs.
Note than the plugin on/off widget is different from the "Results on new tabs" on/off widget. Is there a particular reason to do so ?

The current Answerers tab is more a documentation than a set of choice, it should be moved to a documentation page ? 
user: dalf
issue_795: state: open
title: An option to filter non-Tor accessible(NOT OPEN) webpages.
body: I'm tired to see Cloudflare's one more step.

Please add an option to remove all links from the result which use Cloudflare as a server.
This can be done by lookup each FQDN's IP address(IP blocklist) or use "List of fqdn which use Cloudflare(can be found on Github)".
user: ghost
issue_792: state: open
title: P2P idea
body: For one user request there are most of the time different engine requests. among other searx instances (in the general category : wikipedia, wikidata, qwant, google, etc...)

### Purpose

For one user request, the purpose is to spread the individual engine requests to different searx instances. Of course, It's required trust in other searx instances from the searx administrator and from the users. 

### How 

Let's call :
* the searx instance receiving the user request, main instance. 
* the other instances, peer instances.

The first step, searx should improve response time measures :
* the main searx should measure the median response time, and the 95th percentile response time (95% of the time the response time is bellow that measure) :
** for each engine of the main instance
** for each (peer instance, engine) couple.

For example (YMMV) : There are slow and fast engines : wikipedia is fast, google is slow (double). So for user request using google and wikipedia, the main instance can send the request for the google engine, and use a peer instance for the wikipedia. The user response time won't change, since the google response time set the upper limit.

So one way to spread the requests is :
* for slow engines : do it in the normal way on the main instance.
* for fast engines : use a peer instance to proxy the request.

The global response time should not change too much.

So when there is user request on the main instance :
* the main instance guesses the global response time without peers, using the maximum the median of each engine of the user request (not sure if the median is the best choice).
* the main instance selects a peer instance for each engine according to the guessed p95 response time of the couple (peer instance, engine). Using the p95 gives the worst case scenario (or nearly).
* the main instance spreads the request to the different peers.
* the response time of each (peer instance, engine) improves the statistics.

### Problems not solved
* How to select a (peer instance, engine) if no request has been sent to it ? Perhaps the main instance should bootstrap by sending one or two requests for each (peer instance, engine). And here, starts the problem of flood.
* How the main instance and the peer instances should communicate ? Using the rss API ? Using something similar to morty with a Hash ?

[EDIT] clarification.
user: dalf
issue_777: state: open
title: feature: sorting
body: please consider adding a "latest" option to the sorting options
user: atomGit
issue_772: state: open
title: [feature req] engine name points to their cached page
body: in the search results, it would be nice if the index/engine name (google, yahoo, etc.) were linked to that particular engines cached page (and then change the label of 'cached' to 'archived')
user: atomGit
issue_770: state: open
title: [Feature Request] Search API - site parameter
body: Having a "site" parameter in the Search API makes it easier for other websites to integrate your search into their website. So the following HTML code can be used to integrate a search in a specific website:
```
<form action="https://searx.me/?" method="get">
    <input type="text" name="q" />
    <input type="hidden" name="site" value="mypersonalsite.com" />
    <input type="submit" />
</form>
```

Result would be same as:
https://searx.me/?q=site%3Amypersonalsite.com%20SEARCH_KEYWORD

user: nixoeen
issue_757: state: open
title: yacy doesn't work
body: The ``yacy`` search engine doesn't work on the few instances that provide it as an option. This includes

https://searx.at/
https://search.static.lu
user: ghost
issue_742: state: open
title: Engine > Science > Share
body: SHARE https://share.osf.io/ is metadata harvester focusing on new open access scientific publications – hence results are not expected to be dating back to more that 201\* (in beta version).

There is an open API:
https://share.osf.io/api/v2/

I'll post when I start implementing this engine.

user: jibe-b
issue_740: state: open
title: Use of ThreadPoolExecutor
body: ThreadPoolExecutor has been backport to python 2.7 : 
- `pip install futures`
- source code : https://github.com/agronholm/pythonfutures
- examples : https://github.com/agronholm/pythonfutures/blob/master/docs/index.rst#threadpoolexecutor-example

I think this would reduce the cost of[ creating / destroying many threads](https://github.com/asciimoo/searx/blob/master/searx/search.py#L63). 
May be the code has to be optimize for searx to handle timeout (or may be just let the threads finish)

Big question : how to defined the maximum number of thread.

Note : there is exactly the same issue with werkzeug. See : 
- [app in Flask](https://github.com/pallets/flask/blob/7186a5aaf571e1d08a617138867998cbea518522/flask/app.py#L842) (`**options` contains [`threaded=True`](https://github.com/asciimoo/searx/blob/master/searx/search.py#L63))
- https://github.com/pallets/werkzeug/blob/master/werkzeug/serving.py#L541 
- https://hg.python.org/cpython/file/2.7/Lib/SocketServer.py#l604

user: dalf
issue_729: state: open
title: Google Captcha
body: Hey,

i have the problem that google gives me captchas. Therefor i cant see google results. My Server is not blacklistet anywhere. So im wondering what i can do to get rid of the captchas. My instance is not hosted under https. Is that maybe a reason for the google captchas?

Thanks!

user: sut12
issue_718: state: open
title: Use ATOM instead of RSS
body: Apparently, RSS 2.0 is [copyrighted](http://wayback.archive.org/web/20141015100359/http://atompub.org/2005/07/11/draft-ietf-atompub-format-10.html); Atom is an open IETF [standard](https://tools.ietf.org/html/rfc4287), which means that it is more likely to be subjected to new developments, in future, such as PubSubHubbub.

While RSS requires `description`, `link`, and `title`, ATOM requires `author`, `id`, `link`, `title`, and `updated`,

user: GreenLunar
issue_717: state: open
title: Improvement: Search engines pointing to the website of itself
body: Hello,

I've got an idea for improvement. 
A lot of search engines are unknown, how it would be the search engine would point as URL to itself or the project site? It would help to figure out what search engine it is.

Regards
Gino

user: ThraaxSession
issue_709: state: open
title: feature: add more date search options to combo control
body: right now it's day, week, month - would like to see 3, 6 and 12 months also

user: atomGit
issue_706: state: open
title: Pull unreviewed translations
body: Currently translations which aren't reviewed aren't pulled. Normally there's nothing wrong with unreviewed translations, and reviewed translations can still be wrong if the reviewer made a mistake, so it makes more sense to just pull everything and have a lot more complete translations of searx.

user: ghost
issue_682: state: open
title: "Standard" search button in advance search
body: Hey guys!

I just configured my standard search categories "general, IT and so on" ... then I went to main page and clicked advance and ticked "music" ... afterwards I figured out that that my "standard" categories are removed.

Is it possible to add a "standard" button, which selects all categories which I configured?

**UPDATE** this happens only in **oscar theme** if I use another one for example courgette, I can add/remove any additional category by clicking on it. Is this by design? 

**UPDATE** all those themes seem no consequent with the default categories behaviour. Still think a "standard" button for categories would be useful to reset the current selected categories. What do you think?

Regards
Gino

user: ThraaxSession
issue_636: state: open
title: [Safe Search] Javascript script to hide results
body: Safe search does not always work.  I suggest to provide a Javascript script, for client-side, that would hide suspected results.

user: GreenLunar
issue_598: state: open
title: Show users whether a website/file is safe (support for Web of Trust, URLVoid, Virus Total, etc.)
body: For instance, by displaying a small icon near search results (like DuckDuckGo or [Qrobe](https://qrobe.it/) do). Of course, this should rather be optional.

Also, it would be nice to have a setting to hide dangerous sites completely. So that inexperienced users won't click on them by mistake.

user: jan-kleks
issue_592: state: open
title: maps: what3words
body: what3words defines a 3x3m grid across the world. Every grid has its bijective three.word.definition, e. g. eiffel tower is prices.slippery.traps - see http://w3w.co/prices.slippery.traps 

Mongolia postal service will use these three words addresses for mail delivery! w3w is language sensitive (en, de, fr, it, pt, sv, tk, ru...)

There is an api definition https://docs.what3words.com/sdk/v2/ for coordinates conversion. Needs an api key. Would be a cool extension for maps (search three.word.definition and output the three words when searching a place. Output coordinates can be put into osm-map search).

user: cy8aer
issue_591: state: open
title: Dictionary: Linguee
body: Remember dict.cc (https://github.com/asciimoo/searx/issues/334)? What about Linguee? 

http://www.linguee.de

https://github.com/ohmic/linguee-translator

user: cy8aer
issue_589: state: open
title: Internet Archive search?
body: An engine that interfaces with the Internet Archive's search API could be useful as a corner case, i.e., with shortcuts only to search for historical sites.

user: virtadpt
issue_568: state: open
title: Use adblocking list to limit search results to adfree websites
body: Hi, I asked the question on IRC last year and was told there would be a plugin for that. Any news?

user: hdkw
issue_562: state: open
title: after opening an image ability to go to next image with right arrow key would be nice
body: along with having next and previous buttons to click on.

user: nixoye
issue_541: state: open
title: Engine > Files > Burnbit - BitTorrent for every file
body: If a file exists, there is torrent of it. If not, it will be burned
Link: http://burnbit.com/

This is a very good torrent hosting website.  It generates torrent files from remote files.
Results, as usual, should be linked to .torrent files, along with a "download directly" link.

I did not post this at https://github.com/asciimoo/searx/wiki/possible-search-engines#files because it seems to be unique enough to have its own issue.

user: GreenLunar
issue_537: state: open
title: [plugin] download video
body: Offer a plugin that, in addition to show/hide video, would provide a selection of available qualities of a given video to be downloaded.

user: GreenLunar
issue_511: state: open
title: StarDict in InfoBox and Suggestions drop-down
body: Plugin to incorporate StarDict with Searx.

There is a web based version of [StarDict](http://www.stardict.org/ajax.php). but I am asking to write a plugin to directly incorporate a local StarDict instance with searx (i.e. not in meta-search manner).

You might want to consider to contact the StarDict developer, who appears to be a diligent developer, and ask for his assistance or guidelines.

Links
http://www.huzheng.org/stardict/
https://github.com/huzheng001/stardictd (StarDict server and on-line dictionary website)
https://github.com/tuxor1337/stardict.js (JavaScript library for handling dictionaries in StarDict format)

Dictionaries
http://wiki.webz.cz/dict/
http://www.dictinfo.com/
http://dicts.info/dictionaries.php
http://wiktionary-export.nataraj.su/en/
https://sourceforge.net/projects/freedict/
https://sourceforge.net/projects/glossary-fa/
https://sourceforge.net/projects/xfardic/files/XDB%20Word%20Databases/

---

Note: Even if this issue would be valid, I think that issue #334 is worthy enough to take care of, because of the openness, high quality and popularity of Dict.cc.

user: GreenLunar
issue_488: state: open
title: [ENGINE] Oscobo
body: https://oscobo.co.uk
I am just looking for API stuff of this engine...

user: cy8aer
issue_479: state: open
title: Sort by seeds on Files?
body: Is it possible to sort Files by highest amount of seeders on the Files search? This would be really useful.

user: nixoye
issue_449: state: open
title: idea to use homogeneous datamodel
body: In my optinion, the current datamodel hase some problems for further applications/better search results:
- we are not able to merge infoboxes
- we are not able to merge infoboxes with normal results
- we cannot represent logical connections (wiki article and official website)
- we cannot merge results in a clean way (keys can be lost, when maps are merged, we cannot merge/display results which are meaning the same thing, but splitted in parts (for example osm streets))

My Idea would be using a datamodel designed to create structured datamodels for the web, more specific I think the schema described on https://schema.org/ should be sufficient for 99% of all possible uses. If done right, searx could also handle databases in much better way (as currently done with wikidata).

I started brainstorming, but there has to be done much more to get a suitable datamodel for searx (what keys are supported,... I started with RDF, but schema.org is much better because it provide a full set of usable keys instead of defining our own or searching for something useful)

https://github.com/pointhi/searx/wiki/idea-for-using-structured-data-to-represent-search-results

When using that model, we could remove the  `template` parameter and replacing it with `'@type'`, and the template would instead aggregate the results in the best way. (for example multible images and some text, and a little map). If done correct this would't require much more template code.

That's only a rough idea, but when done correct we could probably merging/display all kind of data from very different sources, and display them in a very logical/connected way. (As long as searx understand the keys). The disadvantage could be little increased computation time, but when done correctly this shouldn't be a problem.

Feel free to improve my current idea. There are many unclear things left.

user: pointhi
issue_418: state: open
title: Provide results from peer-to-peer (P2P) networks under Files category
body: Retrieve results also with Advanced Direct Connect (ADC), Ares, eDonkey2000 (eD2k), giFT, Gnutella, Gnutella2 (G2), Kad (Kademlia), OpenFT, OpenNap (Napster), Soulseek, Tribler, WASTE.

The priority for eD2k, Gnutella and Kad is not urgent because, as far as I know, every file sharing program that supports eD2k, Gnutella and Kad already has a built-in search engine for eD2k, Gnutella and Kad, but that would be a killer feature, non the less.

While I would not mind having engines for websites that index eD2k links, I meant to bind searx directly to eD2k (or Gnutella or whatever) file indexers that do aMule, eMule, Shareaza, Quazaa and others.


user: GreenLunar
issue_415: state: open
title: refactoring ideas
body: In my view, it look like searx would need some refactoring.
#### For example

When I try to change something in search.py, I am faced with a big bunch of code, which is partly very hard to understand. We could split the scoring algorithm into a new source file, and divide the code into more logical parts.
#### Other ideas
- change variables/functions to python standard names
- remove redundandency (for example: every preference.html has the same forms)
- improve code (for example: using a config file to load plugins)
- think about multi threading capability of objects (for example: changing query.py into an immutable Object)
- think about return values of functions (to be more generic, easier to read and to extend)

I think, before starting some refactoring, we should discuss how, and which parts should be refactored, and what issues are suitable to be fix while refactoring.
#### Some issues which could be solved by refactoring
- #396 creating a generic apporach to handle cookies, and one to manage settings in the preferences
- #387 think about handling/merging of complex results (wikidata, map, ddg_definitions)
- #383 improving scoring algorithm, add communication between workers: [uWSGI SharedArea](https://uwsgi-docs.readthedocs.org/en/latest/SharedArea.html)
- #342 improving threaded search code
- #337 improve autocompletion code
- #334 supporting special search methodes (probably as plugin?)
- #302 adding more informations about the engines (use https, allow safe search, use API)
- #294 thinking about template independently result passing (without html/css tags)
- ...

user: pointhi
issue_413: state: open
title: request for .onion searches
body: I might take a look at this later and try to write some plugins for tor search engines.

It would be nice to be able to directly address those searches.
Although I am not sure if this would have to be filtered or displayed in some way like ahmia.fi does it, where they include things like "SCAM!" or "MALICIOUS" or similar in their results.

user: ghost
issue_393: state: open
title: Add P2P communication with MySearch, Seeks and YaCy nodes
body: Add peer-to-peer communication with Seeks nodes, if is not already possible.

It would be great.  When some decentralized search engine platforms would add mutuality features with other decentralized search engine platforms, we might be able to form some sort of standard to manage bibliographical references.

**_Bibliographical database search library**_

_EndNote is a pretty heavy-duty bibliography manager for Mac and Windows, with a heavy-duty cost attached to it. But really it's not doing much more than providing a handy interface to online bibliographical databases. It would be nice to see an extensible libbib. It even rhymes._  From [Project ideas - Movementarian.org](http://movementarian.org/code/projectideas/)

user: GreenLunar
issue_389: state: open
title: Add DIASPORA* or GNU Social under More about searx in page /about
body: Please provide official decentralized communication means to engage with searx.

I am using [Diaspora*](https://diasporafoundation.org/), [GNU social](https://gnu.io/social), [Mastodon](https://mastodon.social/), and [RedMatrix](https://redmatrix.me/).

~~You might want to use [Friendica](http://friendica.com/) as a universal communication mean.~~

**You might want to use [RedMatrix](https://redmatrix.me/), which appears to be an alternative to Friendica, also an All-In-One medium, and there is even a [WordPress to RedMatrix plugin](https://github.com/friendica/redmatrix_wp).**

_Such plugin is also available for [Diaspora*](https://github.com/meitar/diasposter), if, for some reason, you would prefer only to use Diaspora\* instead of RedMatrix._

For more communication means, see https://prism-break.org/en/subcategories/servers-social-networks/

user: GreenLunar
issue_384: state: open
title: implement sympy as plugin (CAS-System)
body: I implemented a Computer Algebra System as plugin, using [SymPy](http://www.sympy.org).

current Features:
- calculation of simple equations like: `1+2*3/5`, `sin(1)`, `sqrt(2)`,...
- solving of equations with one unknow variable: `15*a+3=30`, `sin(3)=x*2`,...
- solving of simple integrals: `integral of sin(x) dx`, `integrate e^2*x dx`,...

TODO:
- graphical output of functions
- add possibility to insert most SymPy Commands and output them with correct formating

Because I have to use MathML for formating, I changed the answere system to work more similare linke the results (to allow different key-value pairs). Now Answers could contain html-code, or simple text. I think we should improve the answere system in the future, to allow things like thumbnails,...

user: pointhi
issue_379: state: open
title: [ENGINE] Jamendo, Kahvi, YourBeats and ccMixter
body: Jamendo - Royalty free music downloads - Licensing
https://www.jamendo.com/

[Kahvi Collective Audio Sculptors - fa8 V3]
http://kahvi.org/

Free Beats under Creative Commons YourBeats.com is a Creative Commons Partner
http://yourbeats.com/

user: GreenLunar
issue_342: state: open
title: idea to speedup results
body: I have an idea, which could speedup searx-results. Negative effects would be less results, so I would recommend that the user should activate this modus/plugin explicite.

The big response time is mostly causes by a few engines. Categories like general containing such a large number of engines, we could skip 10-20% of the slowest engines. In other words, when 80% of the engines returning something, we wait a little bit (50ms or so to let little faster engines pass) and aborting all other requests. As a result, single engines which causing a timeout or requiring to much time are ignored and don't decrase the response time to the maximum allowed value.

It should be clear, that this algorithm should only work, when at least 10 results are returned, and should also not be activated if engines are enabled explicite.

user: pointhi
issue_338: state: open
title: "Search on category select" plugin and bang
body: If I input "!ddg test" and click on "Files" with the "Search on category select" plugin, what should searx do ?

For now, the search is done with duckduckgo, the "Files" category is ignored, which can be disturbing.

Some ideas to improve this : 
- the click does nothing because there is a bang (with a warning to the user)
- the search is done with the bang removed
- the search is done with the "file" category and the duckduckgo engine.
- there is no issue :)

user: dalf
issue_334: state: open
title: [ENGINE] Dict.cc
body: https://github.com/rbaron/dict.cc.py seems to have an api for dict.cc. Main problem: how to tag this?
!en-de house

user: cy8aer
issue_316: state: open
title: tracking/affiliate link remover plugin
body: I would propose a plugin idea, to remove known tracking and affiliate links from the result url.

For example, amazon urls sometimes containing the url argument `tag` which is an affiliate-id. We could improve that list with other known url arguments of sites, which are only used for tracking and affiliat, and create a plugin which is deleting those parts of the url.

user: pointhi
issue_311: state: open
title: news categories : digg results separated from the others.
body: Look at http://searx.me/?q=android&category_news=on

The digg engine displays thumbnails using the video template. The drawback ( ? ) is that all digg articles are grouped together, even if it should be the case in this situation (code in https://github.com/asciimoo/searx/blob/master/searx/search.py#L212 )

Two solutions : 
- Add thumbnail to the default template.
- The grouping algorithm only takes into account the categories, not the template (it was useful when the google engine returns some images). Note sure it's work nicely in every situation.

I vote for the first solution. In fact we go for the second solution, is using the videos.html template the right solution to display thumbnails in news category ?

Note : the google news engine can have thumbnails (in fact images, thumbnails are too small). In this case, it's the bing_news and the yahoo_news engines that will have theirs results separated from the others.

Code for google_news  : 

``` python
    # parse results                                
    for result in search_res['responseData']['results']:
        # parse publishedDate                                             
        publishedDate = parser.parse(result['publishedDate'])
        if 'url' not in result:
            continue

        # thumbnail
        thumbnail = result['image']['url']

        # append result
        results.append({'url': result['unescapedUrl'],
                        'title': result['titleNoFormatting'],
                        'content': result['content'],
                        'template': 'videos.html',
                        'publishedDate': publishedDate,
                        'thumbnail': thumbnail})
```

user: dalf
issue_294: state: open
title: generic answere templates
body: Now, we can create plugins, but currently answeres are limited to 1. paragraph, without link or other stuff.

I would propose that we create some generic answere templates, which are available inside every template.

I think a generic template which can show a thumbnail, text with multible paragraphs and a map would be a good start. This functionality should work for most answers.

Another templates could be added later on for special needs like displaying multible images, or to serve specific tasks like a calculater. But we should make it possible to allow fallback solutions if a template doesn't support a specific answere template.

Probably we should create a generic data-structure to display formated text (including urls, paragraphs, bold text,..), without obstructing templates to do own formating. (like adding custom classes)

thx, pointhi

user: pointhi
issue_265: state: open
title: split core and ui
body: For now, the core and ui are not clearly separated.

Example : search.py use directly request.cookies from flask framework.

A clear split between the two parts would help : 
- to switch to another UI framework is needed (to solve the the database "issue", or some other reason)  
- to create a nice command line tool easily

A suggest to create two python packages : `searx.core` and `searx.flask`.
`webapp.py` could stay in the same location to avoid trouble with existing installations (uwsgi to reconfigure etc...).

There is no hurry, and may be not relevant.

user: dalf
issue_263: state: open
title: record ssl certificates and resolved IP, monitor change, and compare them to other searx instances.
body: Record 
- ssl certificates
- resolved IP ( google.com, search.yahoo.com etc...)
  and :
- compare the change over time.
- accept them or deny some even there are not trusted in a browser (self signed certificates).
- export the different certificates through a REST API.

This would improve the security / trust.

This is more or less the idea of certificate patrol extension ( https://addons.mozilla.org/fr/firefox/addon/certificate-patrol/ )

user: dalf
issue_260: state: open
title: better result merging
body: this bug is especially for map-results. Merging of 'normal' text results are not problematic, but map results especially need advanced techiques to be merged correctly. For example: using the better geojson of an result, or merging osm tags together.

Probably also merging streets with the same name together, if they are also connected together. But then we have the problem, how we should display the answere, because it would pointing to multible urls.

user: pointhi
issue_255: state: open
title: result cache / temporary save
body: a search engine find results, store them and then serve prepared results in a very fast way.

actual searx work as a very great metasearch engine.

but to make it server restuls a faster way
would there any practical way to cache pages results for some time

so that during that period of time searx only serve the results very fast without searching again for them ?

as you know better searx code than me
at what level would you recommend me do try that ?

any searx function ?
uWSGI cache function ?
nginx cache function ?

thank you

user: xavierle
issue_242: state: open
title: sub categories, primary-secondary categories
body: currently, if we activate a categorie, we use all engines which can be used. Actually the engines are very general, so it's no problem.

But for example, if we implement some icon search-engines, we would pollute the image results with icons every time, although nothing was wanted in this kind.

A other case are for example video-results. Torrent results are somehow correct at this place, but we should limit results which are probably not wanted in that category (displaying fewer results in secondary categories of an engine if possible).

user: pointhi
issue_238: state: open
title: Streamline transifex and translations
body: I'm playing with Transifex and the whole translation process, so don't be alarmed by anything you can see out there.

There are a few issue I want to iron out before submitting anything. But I think I will have something tonight.

I'll post it here.

user: Cqoicebordel
issue_226: state: open
title: improve user experience
body: searx is greate, but there are some things where new users get problems. I think we should collect those issues and thinking for sollutions.

This are my known problems for new users:
- they don't know about the preferences (probably using icons)
- they ask why there is no autocompletion
- they ask why all results are in english, and not in there own language
- selecting categories is different as in all the other search engines

If possible, we should use a friend or someone from our family to try searx it's first time without help, and note problems which are occour. Like in the following commic :):

![Houswife Test](http://www.commitstrip.com/wp-content/uploads/2014/01/Strips-Le-test-de-ta-m%C3%A8re-650-finalenglish.jpg)

based on the comment from @Cqoicebordel in #222

user: pointhi
issue_218: state: open
title: openstreetmap: implement paging
body: It would be really usefull if we can implement paging for the openstreetmap. The problem is, nominatim can search for future results, but require the last results to do it. More informations are in the [api-reference](https://wiki.openstreetmap.org/wiki/Nominatim#Parameters) -  `exclude_place_ids`.

To do it, we have to store the last results of a search-query either in the result-page or in a database (for a certain time).

user: pointhi
issue_211: state: open
title: Combine results from the same domain name
body: Title is self explanatory. It could be a good idea to combine results from differents engines (or not) belonging to the same domain name.

Of course, it would raise some issues, like defining what the same domain name means (does xxx.yyy.zz has the same domain name as yyy.zz ?), and it would only be applicable to some results not based on an engine returning only results from the same domain name (we don't want to group every torrent from kickass, or every video of youtube).

user: Cqoicebordel
issue_191: state: open
title: intelligent autocompleter
body: It would be greate, if there would be a mode, in which the autcompleter allways using the best choise of autocompletion (as example: `google` for `general`, `photon` for `map`,...)

user: pointhi
issue_138: state: open
title: improve template system
body: I think it should be a good idea to improve the current template system:
- preference options should not build in raw in the template, more a config parser which draw the correct input field from a config
- templates can have special cookies for new features
- a abstract system to parse the return from the preferences
- an file which describe basic informations,.. about the template

I would recommend to add a template.py in every template directory, which include a class which is inherit from a basic Template class. This basic class handle the connection between the searx main part and the template, and if required it can rewrite parts like cookie handling for special purpose.

This is a idea, to improve template handling in the future, and giving more flexibility for template creation and changes in the searx main body.

thx, pointhi

user: pointhi
issue_108: state: open
title: result icon, using url instead of search-engine
body: Currently, we display specific icons if results come as example from the youtube engine.
Other results, which are also pointing to youtube doesn't have that icon.

parsing the hostname and displaying a icon if it match can resolve that.

Furthermore, I would recommend to specific that rules in a special template.py or template.yml, contained in the specific template folder. So every template can specific the hostnames, for which it would show a icon.

This template.py or .yml can also be used to provide additional template specific informations to searx

user: pointhi
issue_83: state: open
title: sorting news instead of normal ranking heuristic with publishing date
body: normaly, newer news are more important, so they should be ranked higher.

user: pointhi
issue_80: state: open
title: Add "Remove Top {number} Sites" Feature
body: I would find it useful, if Searx could also behave like https://millionshort.com/

user: Zeriuno
issue_68: state: open
title: showing geodata on searx (openstreetmap
body: Currently searx has normal results, images, music,...

Displaying a map including route-machine would be nice, and no big overhead. But I'm not sure how it could be implemented in the interface nicely. I think a seperate Map-Site would be the best idea.

I think a combination of:
- [Leaflet](http://leafletjs.com/) JS Framework to display Maps
- [OSM](https://www.openstreetmap.org) OpenStreetMap (very detailed, I'm one of million contributors there)
- [Nominatim](http://nominatim.openstreetmap.org/) Searching in the OSM database
- [OSRM](http://map.project-osrm.org) Very fast and accurate Routing with OSM

would be nice, and could be extended every time.

I would make the client-side, and most of server-side of that, but I would discuss about how to make it before starting coding.

I have experience with OSM, and coding maps (http://map.ham-radio.oe5tpo.com), so I think it would be no big problem.

thx, pointhi

user: pointhi
issue_60: state: open
title: adding Widget support
body: Currently I'm work to get and display weather-data like google. I have code it as engine with custom template, but I think, it would an nice idea, to add support for widgets.

As widget, I would define special functions, like displaying weather data, a calculator,... if required. So, It parse the querry, and when required it display special widgets on the result list (on the top).

user: pointhi
issue_59: state: open
title: patch displays how many commits an instance is behind the master repo
body: possibly needs some polishing. however ghcheck.py should be working autonomously, can be called from shell even.

user: stef