@@ -1,59 +0,0 @@
1−# -*- coding: utf-8; mode: sh -*-
2−# SPDX-License-Identifier: AGPL-3.0-or-later
3−# shellcheck shell=bash disable=SC2034
5−# This environment is used by ./utils scripts like filtron.sh or searx.sh. The
6−# default values are *most flexible* and *best maintained*, you normally not
7−# need to change the defaults (except PUBLIC_URL).
9−# Before you change any value here you have to uninstall any previous
10−# installation. Further is it recommended to backup your changes simply by
11−# adding them to you local brand (git branch)::
15−# The public URL of the searx instance: PUBLIC_URL="https://mydomain.xy/searx"
16−# The default is taken from ./utils/brand.env.
18−PUBLIC_URL="${SEARX_URL}"
20−if [[ ${PUBLIC_URL} == "https://searx.me" ]]; then
21− # hint: Linux containers do not have DNS entries, lets use IPs
22− PUBLIC_URL="http://$(primary_ip)/searx"
28−# SEARX_INTERNAL_URL="127.0.0.1:8888"
29−# SEARX_SETTINGS_TEMPLATE="${REPO_ROOT}/utils/templates/etc/searx/use_default_settings.yml"
31−# Only change, if you maintain a searx brand in your searx fork (GIT_URL) which
32−# is not hold by branch 'master'. The branch has to be a local branch, in the
33−# repository from which you install (which is most often the case). If you want
34−# to install branch 'foo', don't forget to run 'git branch foo origin/foo' once.
35−# GIT_BRANCH="${GIT_BRANCH:-master}"
40−# FILTRON_API="127.0.0.1:4005"
41−# FILTRON_LISTEN="127.0.0.1:4004"
42−# FILTRON_TARGET="127.0.0.1:8888"
47−# morty listen address
48−# MORTY_LISTEN="127.0.0.1:3000"
49−# PUBLIC_URL_PATH_MORTY="/morty/"
54−# Common $HOME folder of the service accounts
55−# SERVICE_HOME_BASE="/usr/local"
57−# **experimental**: Set SERVICE_USER to run all services by one account, but be
58−# aware that removing discrete components might conflict!
@@ -1,6 +1,15 @@
2branch = True
2branch = True
3−source = searx
3+source =
7+ searx/https_rewrite.py
6show_missing = True
15show_missing = True
@@ -25,7 +25,7 @@
25;; Alternatively create the virtualenv, source it and install jedi + epc
25;; Alternatively create the virtualenv, source it and install jedi + epc
26;; (required by `emacs-jedi <https://tkf.github.io/emacs-jedi>`_)::
26;; (required by `emacs-jedi <https://tkf.github.io/emacs-jedi>`_)::
28−;; $ python -m venv ./local/py3
28+;; $ virtualenv --python=python3 "--no-site-packages" ./local/py3
30;; $ source ./local/py3/bin/activate
30;; $ source ./local/py3/bin/activate
31;; (py3)$ # now install into the activated 'py3' environment ..
31;; (py3)$ # now install into the activated 'py3' environment ..
@@ -4,9 +4,6 @@
@@ -39,18 +36,6 @@ robot_report.html
39test_basic/
36test_basic/
43node_modules/
39node_modules/
.github/ISSUE_TEMPLATE/bug-report.mddeleted−39
@@ -1,39 +0,0 @@
3−about: Report a bug in Searx
9−<!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->
11−**Version of Searx, commit number if you are using on master branch and stipulate if you forked Searx**
12−<!-- If you are running on master branch using git execute this command
13−in order to fetch the latest commit ID:
17−If you are using searx-docker then look at the bottom of the Searx page
18−and check for the version after "Powered by searx"
20−Please also stipulate if you are using a forked version of Searx and
21−include a link to the fork source code.
23−**How did you install Searx?**
24−<!-- Did you install Searx using the official wiki or using searx-docker
25−or manually by executing the searx/webapp.py file? -->
27−<!-- A clear and concise description of what the bug is. -->
30−<!-- How can we reproduce this issue? (as minimally and as precisely as possible) -->
33−<!-- A clear and concise description of what you expected to happen. -->
35−**Screenshots & Logs**
36−<!-- If applicable, add screenshots, logs to help explain your problem. -->
38−**Additional context**
39−<!-- Add any other context about the problem here. -->
.github/ISSUE_TEMPLATE/config.ymldeleted−14
@@ -1,14 +0,0 @@
1−blank_issues_enabled: true
3− - name: Installation issue using the official wiki
4− url: https://github.com/searx/searx/discussions/new?category_id=32001257
5− about: Ask for help if you are having some issue with installing Searx using the official wiki.
6− - name: Installation issue using searx-docker
7− url: https://github.com/searx/searx/discussions/new?category_id=32001259
8− about: Ask for help if you are having some issue with installing Searx using searx-docker.
9− - name: Installation issue without using the official wiki nor searx-docker
10− url: https://github.com/searx/searx/discussions/new?category_id=32001260
11− about: Ask for help if you are having some issue with installing Searx manually without using the wiki nor searx-docker.
12− - name: Report a bug on a public Searx instance
13− url: https://github.com/searx/searx/discussions/new?category_id=32001412
14− about: Report a bug that you discovered on a public Searx instance.
.github/ISSUE_TEMPLATE/engine-request.mddeleted−31
@@ -1,31 +0,0 @@
3−about: Request a new engine in Searx
5−labels: enhancement, engine request
9−<!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->
11−**Working URL to the engine**
12−<!-- Please check if the engine is responding correctly before submitting it. -->
14−**Why do you want to add this engine?**
15−<!-- What's special about this engine? Is it open source or libre? -->
17−**Features of this engine**
18−<!-- Features of this engine: Doesn't track its users, fast, easy to integrate, ... -->
20−**How can Searx fetch the information from this engine?**
21−<!-- List API URL, example code (using the correct markdown) and more
22−that could be useful for the developers in order to implement this engine.
23−If you don't know what to write, let this part blank.>
25−**Applicable category of this engine**
26−<!-- Where should this new engine fit in Searx? Current categories in Searx:
27−general, files, images, it, map, music, news, science, social media and videos.
28−You can add multiple categories at the same time. -->
30−**Additional context**
31−<!-- Add any other context about this engine here. -->
.github/ISSUE_TEMPLATE/feature-request.mddeleted−21
@@ -1,21 +0,0 @@
3−about: Request a new feature in Searx
9−<!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF SEARX -->
11−**Is your feature request related to a problem? Please describe.**
12−<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
14−**Describe the solution you'd like**
15−<!-- A clear and concise description of what you want to happen. -->
17−**Describe alternatives you've considered**
18−<!-- A clear and concise description of any alternative solutions or features you've considered. -->
20−**Additional context**
21−<!-- Add any other context or screenshots about the feature request here. -->
.github/dependabot.ymldeleted−10
@@ -1,10 +0,0 @@
1−# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
4− - package-ecosystem: "pip"
9− open-pull-requests-limit: 5
10− target-branch: "master"
.github/workflows/data-update.ymldeleted−66
@@ -1,66 +0,0 @@
1−name: "Update searx.data"
9− name: Update data - ${{ matrix.fetch }}
10− runs-on: ubuntu-20.04
11− if: ${{ github.repository_owner == 'searx'}}
15− - update_ahmia_blacklist.py
16− - update_currencies.py
17− - update_external_bangs.py
18− - update_firefox_version.py
19− - update_languages.py
20− - update_wikidata_units.py
23− uses: actions/checkout@v2
25− - name: Install Ubuntu packages
27− sudo ./utils/searx.sh install packages
29− - name: Set up Python
30− uses: actions/setup-python@v2
32− python-version: '3.10'
35− - name: Install Python dependencies
41− FETCH_SCRIPT: ./searx_extra/update/${{ matrix.fetch }}
43− V=1 ./manage pyenv.cmd python "$FETCH_SCRIPT"
45− - name: Create Pull Request
47− uses: peter-evans/create-pull-request@v3
49− token: ${{ secrets.DATA_PR_TOKEN }}
50− commit-message: Update searx.data - ${{ matrix.fetch }}
51− committer: searx-bot <noreply@github.com>
52− author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
54− branch: update_data_${{ matrix.fetch }}
57− title: 'Update searx.data - ${{ matrix.fetch }}'
59− Update searx.data - ${{ matrix.fetch }}
63− - name: Check outputs
65− echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
66− echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
.github/workflows/integration.ymldeleted−151
@@ -1,151 +0,0 @@
11− name: Python ${{ matrix.python-version }}
12− runs-on: ubuntu-20.04
16− python-version: [3.7, 3.8, 3.9, "3.10"]
19− uses: actions/checkout@v2
20− - name: Install Ubuntu packages
22− sudo ./utils/searx.sh install packages
23− sudo apt install firefox
24− - name: Set up Python
25− uses: actions/setup-python@v2
27− python-version: ${{ matrix.python-version }}
29− - name: Cache Python dependencies
31− uses: actions/cache@v2
34− key: python-${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('requirements*.txt', 'setup.py') }}
35− - name: Install Python dependencies
36− if: steps.cache-python.outputs.cache-hit != 'true'
39− make V=1 gecko.driver
41− run: make V=1 ci.test
42− - name: Test coverage
43− run: make V=1 test.coverage
44− - name: Store coverage result
45− uses: actions/upload-artifact@v2
47− name: coverage-${{ matrix.python-version }}
53− runs-on: ubuntu-20.04
56− uses: actions/checkout@v2
57− - name: Install Ubuntu packages
58− run: sudo ./utils/searx.sh install packages
59− - name: Set up Python
60− uses: actions/setup-python@v2
62− python-version: '3.9'
64− - name: Cache Python dependencies
66− uses: actions/cache@v2
69− key: python-ubuntu-20.04-3.9-${{ hashFiles('requirements*.txt', 'setup.py') }}
70− - name: Install node dependencies
71− run: make V=1 node.env
73− run: make V=1 themes.all
77− runs-on: ubuntu-20.04
80− uses: actions/checkout@v2
83− persist-credentials: false
84− - name: Install Ubuntu packages
85− run: sudo ./utils/searx.sh install buildhost
86− - name: Set up Python
87− uses: actions/setup-python@v2
89− python-version: '3.10'
91− - name: Cache Python dependencies
93− uses: actions/cache@v2
96− key: python-ubuntu-20.04-3.9-${{ hashFiles('requirements*.txt', 'setup.py') }}
97− - name: Build documentation
99− make V=1 docs.clean docs.html
101− if: github.ref == 'refs/heads/master'
102− uses: JamesIves/github-pages-deploy-action@3.7.1
104− GITHUB_TOKEN: ${{ github.token }}
107− CLEAN: true # Automatically remove deleted files from the deploy branch
111− if: github.ref == 'refs/heads/master'
117− DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
118− runs-on: ubuntu-20.04
121− if: env.DOCKERHUB_USERNAME != null
122− uses: actions/checkout@v2
124− # make sure "make docker.push" can get the git history
126− - name: Set up Python
127− uses: actions/setup-python@v2
129− python-version: '3.9'
131− - name: Cache Python dependencies
133− uses: actions/cache@v2
136− key: python-ubuntu-20.04-3.9-${{ hashFiles('requirements*.txt', 'setup.py') }}
138− if: env.DOCKERHUB_USERNAME != null
139− uses: docker/setup-qemu-action@v1
140− - name: Set up Docker Buildx
141− if: env.DOCKERHUB_USERNAME != null
142− uses: docker/setup-buildx-action@v1
143− - name: Login to DockerHub
144− if: env.DOCKERHUB_USERNAME != null
145− uses: docker/login-action@v1
147− username: ${{ secrets.DOCKERHUB_USERNAME }}
148− password: ${{ secrets.DOCKERHUB_TOKEN }}
149− - name: Build and push
150− if: env.DOCKERHUB_USERNAME != null
151− run: make -e GIT_URL=$(git remote get-url origin) docker.push
@@ -1,7 +1,6 @@
1# to sync with .dockerignore
1# to sync with .dockerignore
5.installed.cfg
4.installed.cfg
@@ -15,9 +14,8 @@ setup.cfg
20−/node_modules
18+node_modules/
@@ -26,5 +24,3 @@ dist/
28searx.egg-info/
26searx.egg-info/
@@ -12,7 +12,7 @@
12# A comma-separated list of package or module names from where C extensions may
12# A comma-separated list of package or module names from where C extensions may
13# be loaded. Extensions are loading into the active Python interpreter and may
13# be loaded. Extensions are loading into the active Python interpreter and may
14# run arbitrary code
14# run arbitrary code
15−extension-pkg-whitelist=lxml.etree
15+extension-pkg-whitelist=
17# Add files or directories to the blacklist. They should be base names, not
17# Add files or directories to the blacklist. They should be base names, not
@@ -59,7 +59,7 @@ confidence=
59# --enable=similarities". If you want to run only the classes checker, but have
59# --enable=similarities". If you want to run only the classes checker, but have
60# no Warning level messages displayed, use"--disable=all --enable=classes
60# no Warning level messages displayed, use"--disable=all --enable=classes
61# --disable=W"
61# --disable=W"
62−disable=bad-whitespace, duplicate-code, consider-using-f-string
62+disable=bad-whitespace, duplicate-code
64# Enable the message, report, category or checker with the given id(s). You can
64# Enable the message, report, category or checker with the given id(s). You can
65# either give multiple identifier separated by comma (,) or put this option
65# either give multiple identifier separated by comma (,) or put this option
@@ -0,0 +1,56 @@
13+ - ./manage.sh install_geckodriver ~/drivers
14+ - export PATH=~/drivers:$PATH
15+ - ./manage.sh npm_packages
16+ - ./manage.sh update_dev_packages
17+ - pip install codecov
20+ - ./manage.sh grunt_build
23+ - ./manage.sh py_test_coverage
29+ if: branch = master AND type != pull_request AND env(DOCKER_USERNAME) IS present
46+ - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
47+ - ./manage.sh docker_build push
53+ - "irc.freenode.org#searx"
55+ - "%{repository}/#%{build_number}/%{branch} (%{author}): %{message} %{build_url}"
@@ -1,4 +1,4 @@
1−Searx was created by Adam Tauber and is maintained by Adam Tauber, Noémi Ványi, @pofilo, Gaspard d'Hautefeuille and Émilien Devos.
1+Searx was created by Adam Tauber and is maintained by Adam Tauber, Alexandre Flament, Noémi Ványi, @pofilo and Markus Heiser.
3Major contributing authors:
3Major contributing authors:
@@ -11,10 +11,8 @@ Major contributing authors:
11- Marc Abonce Seguin @a01200356
11- Marc Abonce Seguin @a01200356
13- Markus Heiser @return42
13- Markus Heiser @return42
14−- Émilien Devos @unixfox
17−People who have submitted patches/translations, reported bugs, consulted features or
15+People who have submitted patches/translates, reported bugs, consulted features or
18generally made searx better:
16generally made searx better:
20- Laszlo Hammerl
18- Laszlo Hammerl
@@ -67,6 +65,7 @@ generally made searx better:
67- @firebovine
65- @firebovine
68- Lorenzo J. Lucchini @luccoj
66- Lorenzo J. Lucchini @luccoj
69- @eig8phei
67- @eig8phei
71- Jannik Winkel @kiney
70- Jannik Winkel @kiney
72- @juanitobananas
71- @juanitobananas
@@ -97,72 +96,7 @@ generally made searx better:
97- Alice Ferrazzi @aliceinwire
96- Alice Ferrazzi @aliceinwire
98- @LiquidLemon
97- @LiquidLemon
100−- Václav Zouzalík @Venca24
99+- @Venca24
102- Ivan Skytte Jørgensen @isj-privacore
101- Ivan Skytte Jørgensen @isj-privacore
104−- Étienne Deparis @milouse
106−- Denis Wernert @d-tux
107−- Robin Hallabro-Kokko @hallabro
108−- Jonas Zohren @jfowl
109−- Elias Ojala @theel0ja
111−- Nick Espig @nachtalb
112−- Rachmadani Haryono @rachmadaniHaryono
113−- Frank de Lange @yetangitu
116−- Mathieu Brunot @madmath03
119−- Robby O'Connor @robbyoconnor
125−- Robin Schneider @ypid
127−- Lukas van den Berk @lukasvdberk
129−- Jason Kaltsikis @jjasonkal
130−- Sion Kazama @KazamaSion
132−- Mostafa Ahangarha @ahangarha
134−- Sophie Tauchert @999eagle
136−- Michael Ilsaas `<https://mikeri.net>`_
138−- rachmadani haryono @rachmadaniHaryono
139−- Mohamad Safadieh @msafadieh
145−- Lukáš Kucharczyk @KucharczykL
146−- Lynda Lopez @lyndalopez544
147−- M. Efe Çetin @efectn
148−- Nícholas Kegler @nicholasks
150−- Scott Wallace @scottwallacesh
167−- @OliveiraHermogenes
168−- Paul Alcock @Guilvareux
@@ -1,374 +1,3 @@
7−- drop support for Python 3.5 ( #2459 )
8−- add support for Python 3.9 ( #2397 #2459 )
9−- update Python dependencies ( #2428 #2459 #2206 ) ⚠️ pyopenssl is not longer required
10−- automatic update of searx.data ( #2555 #2585 #2595 #2592 #2600 )
11−- update searx.data ( #2604 #2605 #2606 #2607 #2415 )
12−- add ability to send engine data to subsequent requests ( #2615 )
13−- add checker ( #2419 #2476 #2481 #2682 #2682 #2657 )
14−- by default allow only HTTPS, not HTTP ( #2641 #2659 )
15−- replace /translations.js with an embedded JSON ( #2660 )
16−- activate raise_for_error by default ( #2557 )
17−- don't dump traceback of SearxEngineResponseException on init ( #2635 )
22−- update nginx configuration ( #2618 )
23−- document workaround for using 2 languages simultaneously ( #2479 )
24−- improve admin-docs about result proxy (morty) configuration ( #2509 )
25−- fixed typo ( #2457 )
30−- `general.contact_url` : add link to contact instance maintainer to footer of each page ( #2391 14c7cc0e118f1d0873b32b34793cdec2c5c9c13e #2412 )
31−- `brand` : move brand options from Makefile to settings.yml ( #2408 #2473 )
36−- oscar: Hide links panel in mobile screens ( #2458 )
37−- oscar: upgrade dependencies ( #2346 #2673 #2662 )
38−- remove legacy, courgette and pix-art themes ( #2344 )
39−- add hyperlink to searx instances list in error message ( #2387 )
40−- preferences: a tooltip is shown when the mouse is over the engine names ( #2661 )
41−- Ignore double-quotes when highlighting query parts ( #2553 )
42−- update autocomplete ( #2593 )
48−- mediathekviewweb ( #2541 )
49−- solidtorrents ( #2626 )
57−- apk_mirror ( #2556 #2642 )
59−- duckduckgo ( #2560 #2559 )
60−- library genesis ( #2448 )
61−- ina ( 0ba71c3644c4d20f70528c10eed1385399ec1c82 )
63−- json_engine ( #2562 )
65−- google images ( #2482 )
66−- google play apps ( 88657fe9c2a41b9be38ee5146e5870672416db12 )
67−- google play movies ( 50ba2b9e87ef61e96da124f906d3aff4c7870e3f )
68−- google news ( #2483 #2498 )
69−- google scholar ( #2611 )
70−- google video ( #2482 )
71−- hoogle ( 6255b33c9dcf0d28f0a3307af988565f69259ce2 )
73−- semantic schollar ( f596f5767bed915a5c3bed59ae26283e53f975ca f596f5767bed915a5c3bed59ae26283e53f975ca )
75−- seznam ( #2564 28286cf3f2308113bf440fb6e7cf326c6ed07889 )
76−- wikipedia ( #2554 #2565 #2681 #2681 )
78−- yahoo news ( #2640 #2655 )
83−- duckduckgo ( 5f450fda74e80bf350eb1493f66cfa61deaf5cea )
84−- geektimes ( 45f0e1a859fa12ce2ae0c24dc356922fcad50c8d )
85−- lobste.rs ( 06b754ad67aa6066aed6df77b5ffb74aabebb040 )
86−- soundcloud ( #2671 )
89−- yggtorrent ( #2573 )
95−- google_play_music ( #2558 )
103−- Fix empty colon in query from selecting Chinese ( #2454 )
104−- Get correct locale with country from browser ( #2531 )
106−Code refactoring / reduce the technical debt
107−~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
109−- refactor searx.search.SearchQuery and searx.search.EngineRef ( #2398 )
110−- dynamically set language_support variable ( #2499 )
111−- engines: add about variable ( #2460 )
112−- processors ( #2225 5c6a5407a0b124c3323e73c33b81ec1fbd7d2fce )
113−- remove Fabric file ( #2494 )
114−- use unittest from py3, remove unittest2 from py2 ( #2608 )
119−- add notice for the issue templates ( #2447 )
120−- every Sunday, call utils/fetch_*.py scripts and create a PR automatically ( #2500 728e09676400221a064627509a31470d8f6e33bf )
121−- minor change: replace "travis" by "CI" ( #2528 )
126−- update secret key check ( #2411 )
127−- fix makefile targets `books/{name}.*` and `books/user.pdf` ( #2420 #2530 )
128−- upload-pypi-test & linuxdoc has been released on PyPi ( #2456 )
129−- fix makefile target `gh-pages` : flatten history of branch gh.pages ( #2514 )
130−- optimize creation of the virtualenv & pyenvinstall targets ( #2421 )
131−- update pyenv pyenvinstall Make targets ( #2517 )
132−- makefile.python: remove duplicate pyenv-(un)install targets ( #2418 )
133−- [fix] make targets engines.languages and useragents.update ( #2643 )
134−- [fix] utils/serax.sh create_pyenv() - drop duplicate 'pip install .' ( #2621 )
139−- drop Ubuntu 16.04 (Xenial Xerus) support ( #2619 )
140−- replace ubu1910 image by ubu2010 image ( #2435 )
141−- LXC switch to Fedora 33 / Fedora 31 reached its EOL #2634 ( #2634 )
142−- add package which to CentOS-7 boilerplate ( #2623 )
143−- use SEARX_SETTINGS_TEMPLATE from .config environment ( #2417 )
144−- determine path to makefile.lxc in a LXC ( #2399 )
145−- remove unused code ( #2401 #2497 )
146−- support git versions <v2.22 ( #2620 )
151−We, the searx maintainer team, would like to say a huge thank you for everybody who had been involved in the development of searx or supported us in the past 7 years - making our first stable release available. Special thanks to [NLNet](https://nlnet.nl) for sponsoring multiple features of this release.
160−- drop Python 2 support ( #2137 #2244 )
161−- separate index and search routes ( #1681 ). ⚠️ add & remove your searx instance(s) from your browser.
162−- add external_bang ( #2027 #2043 #2059 )
163−- add external plugins supports ( #2074 )
164−- add plugin converting strings into hash digests ( #1246 )
165−- new category: Onions ( #565 )
166−- allow searx query parts anywhere in the query ( commit aa3c18dda9329fff875328f6ba97483c417b149a 2aef38c3b9d1fe93e9d665a49b10151d63d92392 )
167−- preferences: use base_url for prefix of sharing 'currenly saved preferences' (#1249 )
168−- upgrade to request 2.24.0, pyopenssl is optional ( #2199 )
169−- force admins to set secret_key if debug mode is disabled ( #2256 )
170−- standalone searx update ( #1591 )
171−- architecture clean up ( #2140 #2185 #2195 #2196 #2198 #2189 #2208 #2239 #2241 #2246 #2248 )
172−- record detail about engine error ( #2332 #2375 #2350 ). Add a new API endpoint: ``/stats/errors``.
173−- display if an engine does not support HTTPS requests ( #2373 )
178−- ``use_default_settings``: user settings can relied on the default settings ( #2291 #2362 #2349 )
179−- ``ui.results_on_new_tab: False`` - for opening result links in a new tab ( #2167 )
180−- ``ui.advanced_search`` - add preference for displaying advanced settings ( #2327 )
181−- ``server.method: "POST"`` - Make default query submission method configurable ( #2130 )
182−- ``server.default_http_headers`` - add default http headers ( #2295 )
183−- ``engines.*.proxies`` - Using proxy only for specific engines ( #1827 #2319 ), see https://searx.github.io/searx/dev/engine_overview.html#settings-yml
184−- ``enabled_plugins`` - Enabled plugins ( a05c660e3036ad8d02072fc6731af54c2ed6151c )
185−- ``preferences.lock`` - Let admins lock user preferences ( #2270 )
190−- update infobox ( #2131 )
192− - Make infoboxes shorter by default.
193− - Hide the main image by default as well and set a maximum height even when expanded.
194− - Add a toggle at the bottom of the infobox to expand it or to shrink it again.
196−- query suggestion does not keep the language tag of the original query ( #1314 )
197−- fix the clear button ( #2306 )
202−- Fix autocomplete ( #2205 )
207−- ahmia, not_evil ( #565 )
209−- command line engines: git grep, find, etc. ( #2128 #2250 )
210−- elasticsearch ( #2292 )
213−- opensemanticsearch ( #2271 )
216−- sepiasearch ( #2227 )
223−- duckduckgo_definitions ( #2224 #2356 )
225−- invidious ( #2116 )
228−- soundclound ( #2365 )
229−- wikipedia ( #2178 #2363 #2354 )
230−- wikidata ( #2151 #2224 #2353 ) - faster response time
231−- yaCy ( #2255 ) - support HTTP digest authentication.
232−- youtube_noapi ( #2364 )
238−- answer 'random sha256' ( #2121 )
239−- bing image ( #1496 )
240−- duckduckgo ( #2254 )
243−- google image ( #2115 )
244−- lobste.rs ( #2253 )
245−- piratebay ( #2133 )
246−- startpage ( #2385 )
253−- searchcode_doc ( #2372 )
256−- yggtorrent ( #2099 #2375 )
258−Install scripts & documentation
259−~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
261−- install script & documentation ( #2384 #2380 #2362 #2287 #2283 #2277 #2223 #2211 #2118 #2117 #2063 )
266−- use Alpine 3.12 ( #1983 )
267−- uwsgi serves the static files directly. ( #1865 )
268−- fix k8s support ( #2099 )
269−- make docker produces clean tag version ( #2182 )
274−- searx.utils.HTMLTextExtractor: invalid HTML don't raise an Exception ( #2190 )
275−- Fix static URL ( commit da8b227044f45127f705f6ea94a72d368eea73bb )
276−- Fix autocomplete ( #2127 )
277−- Fix opensearch.xml ( #2132 #2247 )
278−- Fix documentation build ( #2237 )
279−- Some fixes in the fetch languages script ( #2212 )
281−Special thanks to `NLNet <https://nlnet.nl>`__ for sponsoring multiple features of this release.
298− - Engine fixes (google, google images, startpage, gigablast, yacy)
299− - Private engines introduced - more details: https://searx.github.io/searx/blog/private-engines.html
300− - Greatly improved documentation - check it at https://searx.github.io/searx
301− - Added autofocus to all search inputs
302− - CSP friendly oscar theme
303− - Added option to hide engine errors with `display_error_messages` engine option (true/false values, default is true)
304− - Tons of accessibility fixes - see https://github.com/searx/searx/issues/350 for details
305− - More flexible branding options: configurable vcs/issue tracker links
306− - Added "disable all" & "allow all" options to preferences engine select
307− - Autocomplete keyboard navigation fixes
308− - Configurable category order
309− - Wrap long lines in infoboxes
310− - Added RSS subscribtion link
311− - Added routing directions to OSM results
312− - Added author and length attributes to youtube videos
313− - Fixed image stretch with mobile viewport in oscar theme
314− - Added translatable JS strings
315− - Better HTML annotations - engine names and endpoints are available as classes
316− - RTL text fixes in oscar theme
317− - Handle weights in accept-language HTTP headers
318− - Added answerer results to rss/csv output
319− - Added new autocomplete backends to settings.yml
320− - Updated opensearch.xml
321− - Fixed custom locale setting from settings.yml
322− - Translation updates
323− - Removed engines: faroo
325−Special thanks to `NLNet <https://nlnet.nl>`__ for sponsoring multiple features of this release.
326−Special thanks to https://www.accessibility.nl/english for making accessibilty audit.
331−- @HLFH joined the maintainer team
332−- Dropped Python2 support
352−- Engine fixes (wolframalpha, google scholar, youtube, google images, seznam, google, soundcloud, google cloud, duden, btdigg, google play, bing images, flickr noapi, wikidata, dailymotion, google videos, arxiv, dictzone, fdroid, etymonline, bing, duckduckgo, startpage, voat, 1x, deviantart, digg, gigablast, mojeek, duckduckgo definitions, spotify, libgen, qwant, openstreetmap, wikipedia, ina, microsoft academic, scanr structures)
354−- Speed optimizations
355−- Initial support for offline engines
356−- Image format display
357−- Inline js scripts removed
358−- Infinite scroll plugin fix
359−- Simple theme bugfixes
360−- Docker image updates
361−- Bang expression fixes
362−- Result merging fixes
363−- New environment variable added: SEARX_BIND_ADDRESS
369−- @return42 joined the maintainer team
370−- This is the last release with Python2 support
3720.15.0 2019.01.06
10.15.0 2019.01.06
373=================
2=================
@@ -425,8 +54,8 @@ News
426- Bug fixes
55- Bug fixes
428− - https://github.com/searx/searx/issues/1088
57+ - https://github.com/asciimoo/searx/issues/1088
429− - https://github.com/searx/searx/issues/1089
58+ - https://github.com/asciimoo/searx/issues/1089
431- Dependency updates
60- Dependency updates
@@ -595,7 +224,7 @@ News
598−New documentation page is available: https://searx.github.io/searx
227+New documentation page is available: https://asciimoo.github.io/searx
6010.8.0 2015.09.08
2300.8.0 2015.09.08
CONTRIBUTING.mddeleted−49
@@ -1,49 +0,0 @@
3−## Resources in the documentation
5−* [Development quickstart](https://searx.github.io/searx/dev/contribution_guide.html)
6−* [Contribution guide](https://searx.github.io/searx/dev/contribution_guide.html)
10−Please follow the provided PR template when writing a description for your changes.
12−Do not take criticism personally. When you get feedback, it is about your work,
13−not your character, personality, etc. Keep in mind we all want to make the project better.
15−When something is not clear, please ask questions to clear things up.
17−If you would like to introduce a big architectural changes or do a refactoring
18−either in the codebase or the development tools, please open an issue with a proposal
19−first. This way we can think together about the problem and probably come up
20−with a better solution.
22−## Coding conventions and guidelines
26−* Always write descriptive commit messages ("fix bug" is not acceptable).
27−* Use the present tense ("Add feature" not "Added feature").
28−* Use the imperative mood ("Move cursor to..." not "Moves cursor to...").
29−* Limit the first line to 72 characters or less.
30−* Include the number of the issue you are fixing.
34−As a Python project, we must follow [PEP 8](https://www.python.org/dev/peps/pep-0008/) and [PEP 20](https://www.python.org/dev/peps/pep-0020/) guidelines.
36−Furthermore, follow the Clean code conventions. The most important
37−in this project are the following rules:
39−* Simpler is better. [KISS principle](https://en.wikipedia.org/wiki/KISS_principle)
41−* Every function must do one thing.
42−* Use descriptive names for functions and variables.
43−* Always look for the root cause.
44−* Keep configurable data high level.
45−* Avoid negative conditionals.
46−* Prefer fewer arguments.
47−* Do not add obvious comment to code.
48−* Do not comment out code, just delete lines.
@@ -1,22 +1,28 @@
1−FROM alpine:3.15
1+FROM alpine:3.10
2ENTRYPOINT ["/sbin/tini","--","/usr/local/searx/dockerfiles/docker-entrypoint.sh"]
2ENTRYPOINT ["/sbin/tini","--","/usr/local/searx/dockerfiles/docker-entrypoint.sh"]
4VOLUME /etc/searx
4VOLUME /etc/searx
5VOLUME /var/log/uwsgi
5VOLUME /var/log/uwsgi
7+ARG VERSION_GITCOMMIT=unknown
8+ARG SEARX_GIT_VERSION=unknown
7ARG SEARX_GID=977
10ARG SEARX_GID=977
8ARG SEARX_UID=977
11ARG SEARX_UID=977
10RUN addgroup -g ${SEARX_GID} searx && \
13RUN addgroup -g ${SEARX_GID} searx && \
11 adduser -u ${SEARX_UID} -D -h /usr/local/searx -s /bin/sh -G searx searx
14 adduser -u ${SEARX_UID} -D -h /usr/local/searx -s /bin/sh -G searx searx
16+ARG TIMESTAMP_SETTINGS=0
13ENV INSTANCE_NAME=searx \
21ENV INSTANCE_NAME=searx \
14 AUTOCOMPLETE= \
22 AUTOCOMPLETE= \
15 BASE_URL= \
23 BASE_URL= \
16 MORTY_KEY= \
24 MORTY_KEY= \
17− MORTY_URL= \
25+ MORTY_URL=
18− SEARX_SETTINGS_PATH=/etc/searx/settings.yml \
19− UWSGI_SETTINGS_PATH=/etc/searx/uwsgi.ini
21WORKDIR /usr/local/searx
27WORKDIR /usr/local/searx
@@ -38,43 +44,29 @@ RUN apk upgrade --no-cache \
38 ca-certificates \
44 ca-certificates \
47 uwsgi-python3 \
52 uwsgi-python3 \
49− && pip3 install --upgrade pip wheel setuptools \
53+ && pip3 install --upgrade pip \
50 && pip3 install --no-cache -r requirements.txt \
54 && pip3 install --no-cache -r requirements.txt \
51− && apk del build-dependencies \
55+ && apk del build-dependencies
52− && rm -rf /root/.cache
54−COPY searx ./searx
57+COPY --chown=searx:searx . .
55−COPY dockerfiles ./dockerfiles
57−ARG TIMESTAMP_SETTINGS=0
59−ARG VERSION_GITCOMMIT=unknown
61−RUN /usr/bin/python3 -m compileall -q searx; \
59+RUN su searx -c "/usr/bin/python3 -m compileall -q searx"; \
62 touch -c --date=@${TIMESTAMP_SETTINGS} searx/settings.yml; \
60 touch -c --date=@${TIMESTAMP_SETTINGS} searx/settings.yml; \
63 touch -c --date=@${TIMESTAMP_UWSGI} dockerfiles/uwsgi.ini; \
61 touch -c --date=@${TIMESTAMP_UWSGI} dockerfiles/uwsgi.ini; \
64 if [ ! -z $VERSION_GITCOMMIT ]; then\
62 if [ ! -z $VERSION_GITCOMMIT ]; then\
65 echo "VERSION_STRING = VERSION_STRING + \"-$VERSION_GITCOMMIT\"" >> /usr/local/searx/searx/version.py; \
63 echo "VERSION_STRING = VERSION_STRING + \"-$VERSION_GITCOMMIT\"" >> /usr/local/searx/searx/version.py; \
67− find /usr/local/searx/searx/static -a \( -name '*.html' -o -name '*.css' -o -name '*.js' \
68− -o -name '*.svg' -o -name '*.ttf' -o -name '*.eot' \) \
69− -type f -exec gzip -9 -k {} \+ -exec brotli --best {} \+
71−# Keep these arguments at the end to prevent redundant layer rebuilds
66+
67+# Keep this argument at the end since it change each time
72ARG LABEL_DATE=
68ARG LABEL_DATE=
74−ARG SEARX_GIT_VERSION=unknown
77−LABEL maintainer="searx <${GIT_URL}>" \
69+LABEL maintainer="searx <https://github.com/asciimoo/searx>" \
78 description="A privacy-respecting, hackable metasearch engine." \
70 description="A privacy-respecting, hackable metasearch engine." \
79 version="${SEARX_GIT_VERSION}" \
71 version="${SEARX_GIT_VERSION}" \
80 org.label-schema.schema-version="1.0" \
72 org.label-schema.schema-version="1.0" \
@@ -84,11 +76,4 @@ LABEL maintainer="searx <${GIT_URL}>" \
84 org.label-schema.vcs-ref=${LABEL_VCS_REF} \
76 org.label-schema.vcs-ref=${LABEL_VCS_REF} \
85 org.label-schema.vcs-url=${LABEL_VCS_URL} \
77 org.label-schema.vcs-url=${LABEL_VCS_URL} \
86 org.label-schema.build-date="${LABEL_DATE}" \
78 org.label-schema.build-date="${LABEL_DATE}" \
87− org.label-schema.usage="https://github.com/searx/searx-docker" \
79+ org.label-schema.usage="https://github.com/searx/searx-docker"
88− org.opencontainers.image.title="searx" \
89− org.opencontainers.image.version="${SEARX_GIT_VERSION}" \
90− org.opencontainers.image.url="${LABEL_VCS_URL}" \
91− org.opencontainers.image.revision=${LABEL_VCS_REF} \
92− org.opencontainers.image.source=${LABEL_VCS_URL} \
93− org.opencontainers.image.created="${LABEL_DATE}" \
94− org.opencontainers.image.documentation="https://github.com/searx/searx-docker"
@@ -1,107 +1,89 @@
1# -*- coding: utf-8; mode: makefile-gmake -*-
1# -*- coding: utf-8; mode: makefile-gmake -*-
2−# SPDX-License-Identifier: AGPL-3.0-or-later
4−.DEFAULT_GOAL=help
3+export GIT_URL=https://github.com/asciimoo/searx
5−export MTOOLS=./manage
4+export SEARX_URL=https://searx.me
5+export DOCS_URL=https://asciimoo.github.io/searx
9+PY_SETUP_EXTRAS ?= \[test\]
7include utils/makefile.include
14include utils/makefile.include
15+include utils/makefile.python
16+include utils/makefile.sphinx
9all: clean install
18all: clean install
11PHONY += help
20PHONY += help
14− @./manage --help
22+ @echo ' test - run developer tests'
15− @echo '----'
23+ @echo ' docs - build documentation'
24+ @echo ' docs-live - autobuild HTML documentation while editing'
16− @echo 'run - run developer instance'
25+ @echo ' run - run developer instance'
17− @echo 'install - developer install of searx into virtualenv'
26+ @echo ' install - developer install (./local)'
18− @echo 'uninstall - uninstall developer installation'
27+ @echo ' uninstall - uninstall (./local)'
19− @echo 'clean - clean up working tree'
28+ @echo ' gh-pages - build docs & deploy on gh-pages branch'
20− @echo 'search.checker - check search engines'
29+ @echo ' clean - drop builds and environments'
21− @echo 'test - run shell & CI tests'
30+ @echo ''
22− @echo 'test.sh - test shell scripts'
31+ @$(MAKE) -s -f utils/makefile.include make-help
23− @echo 'ci.test - run CI tests'
32+ @echo ''
33+ @$(MAKE) -s -f utils/makefile.python python-help
39+uninstall: pyenvuninstall
43+ $(call cmd,common_clean)
26PHONY += run
45PHONY += run
27−run: install
46+run: pyenvinstall
48+ sed -i -e "s/debug : False/debug : True/g" ./searx/settings.yml ; \
29 sleep 2 ; \
49 sleep 2 ; \
30 xdg-open http://127.0.0.1:8888/ ; \
50 xdg-open http://127.0.0.1:8888/ ; \
52+ sed -i -e "s/debug : True/debug : False/g" ./searx/settings.yml ; \
32− SEARX_DEBUG=1 ./manage pyenv.cmd python ./searx/webapp.py
54+ $(PY_ENV)/bin/python ./searx/webapp.py
34−PHONY += install uninstall
56+# docs
35−install uninstall:
57+# ----
36− $(Q)./manage pyenv.$@
38−PHONY += clean
59+PHONY += docs
39−clean: py.clean docs.clean node.clean test.clean
60+docs: pyenvinstall sphinx-doc
40− $(Q)./manage build_msg CLEAN "common files"
61+ $(call cmd,sphinx,html,docs,docs)
41− $(Q)find . -name '*.orig' -exec rm -f {} +
62+
42− $(Q)find . -name '*.rej' -exec rm -f {} +
63+PHONY += docs-live
43− $(Q)find . -name '*~' -exec rm -f {} +
64+docs-live: pyenvinstall sphinx-live
44− $(Q)find . -name '*.bak' -exec rm -f {} +
65+ $(call cmd,sphinx_autobuild,html,docs,docs)
46−PHONY += search.checker search.checker.%
67+$(GH_PAGES)::
47−search.checker: install
68+ @echo "doc available at --> $(DOCS_URL)"
48− $(Q)./manage pyenv.cmd searx-checker -v
69+
50−search.checker.%: install
71+# ----
51− $(Q)./manage pyenv.cmd searx-checker -v "$(subst _, ,$(patsubst search.checker.%,%,$@))"
72+
52−
73+PHONY += test test.pylint test.pep8 test.unit test.robot
53−PHONY += ci.test test test.sh
74+
54−ci.test: test.pep8 test.pylint test.unit test.robot
75+# TODO: balance linting with pylint
55−test: ci.test
76+test: test.pep8 test.unit test.robot
56−test.sh:
77+ - make pylint
57− $(Q)shellcheck -x -s bash \
78+
58− utils/brand.env \
79+test.pep8: pyenvinstall
59− ./manage \
80+ $(PY_ENV_ACT); ./manage.sh pep8_check
61− utils/filtron.sh \
82+test.unit: pyenvinstall
62− utils/searx.sh \
83+ $(PY_ENV_ACT); ./manage.sh unit_tests
64− utils/lxc.sh \
85+test.robot: pyenvinstall
65− utils/lxc-searx.env \
86+ $(PY_ENV_ACT); ./manage.sh install_geckodriver
66− .config.sh
87+ $(PY_ENV_ACT); ./manage.sh robot_tests
67− $(Q)./manage build_msg TEST "$@ OK"
88+
70−# wrap ./manage script
73−MANAGE += babel.compile
74−MANAGE += data.all data.languages data.useragents
75−MANAGE += docs.html docs.live docs.gh-pages docs.prebuild docs.clean
76−MANAGE += docker.build docker.push
77−MANAGE += gecko.driver
78−MANAGE += node.env node.clean
79−MANAGE += py.build py.clean
80−MANAGE += pyenv pyenv.install pyenv.uninstall
81−MANAGE += pypi.upload pypi.upload.test
82−MANAGE += test.pylint test.pep8 test.unit test.coverage test.robot test.clean
83−MANAGE += themes.all themes.oscar themes.simple themes.bootstrap
92−PHONY += docs docs-clean docs-live docker themes
95− $(Q)./manage build_msg WARN $@ is deprecated use docs.html
97−docs-clean: docs.clean
98− $(Q)./manage build_msg WARN $@ is deprecated use docs.clean
101− $(Q)./manage build_msg WARN $@ is deprecated use docs.live
104− $(Q)./manage build_msg WARN $@ is deprecated use docker.build
107− $(Q)./manage build_msg WARN $@ is deprecated use themes.all
PULL_REQUEST_TEMPLATE.mddeleted−25
@@ -1,25 +0,0 @@
1−## What does this PR do?
5−<!-- explain the changes in your PR, algorithms, design, architecture -->
7−## Why is this change important?
11−<!-- explain the motivation behind your PR -->
13−## How to test this PR locally?
15−<!-- commands to run the tests or instructions to test the changes-->
19−<!-- additional notes for reviewiers -->
@@ -1,73 +1,63 @@
1−.. SPDX-License-Identifier: AGPL-3.0-or-later
1+searx
3−.. figure:: https://raw.githubusercontent.com/searx/searx/master/searx/static/themes/oscar/img/logo_searx_a.png
4− :target: https://searx.github.io/searx/
17−|OpenCollective searx backers|
18−|OpenCollective searx sponsors|
20−Privacy-respecting, hackable `metasearch engine`_ / *pronunciation* **sɜːks**.
4+A privacy-respecting, hackable `metasearch
5+engine <https://en.wikipedia.org/wiki/Metasearch_engine>`__.
22−.. _metasearch engine: https://en.wikipedia.org/wiki/Metasearch_engine
7+Pronunciation: səːks
24−.. |searx install| image:: https://img.shields.io/badge/-install-blue
9+List of `running
25− :target: https://searx.github.io/searx/admin/installation.html
10+instances <https://github.com/asciimoo/searx/wiki/Searx-instances>`__.
27−.. |searx homepage| image:: https://img.shields.io/badge/-homepage-blue
12+See the `documentation <https://asciimoo.github.io/searx>`__ and the `wiki <https://github.com/asciimoo/searx/wiki>`__ for more information.
28− :target: https://searx.github.io/searx
30−.. |searx wiki| image:: https://img.shields.io/badge/-wiki-blue
14+|OpenCollective searx backers|
31− :target: https://github.com/searx/searx/wiki
15+|OpenCollective searx sponsors|
33−.. |AGPL License| image:: https://img.shields.io/badge/license-AGPL-blue.svg
17+Installation
34− :target: https://github.com/searx/searx/blob/master/LICENSE
18+~~~~~~~~~~~~
36−.. |Issues| image:: https://img.shields.io/github/issues/searx/searx?color=yellow&label=issues
20+With Docker
37− :target: https://github.com/searx/searx/issues
22+Go to the `searx-docker <https://github.com/searx/searx-docker>`__ project.
39−.. |PR| image:: https://img.shields.io/github/issues-pr-raw/searx/searx?color=yellow&label=PR
24+Without Docker
40− :target: https://github.com/searx/searx/pulls
25+------
26+For all of the details, follow this `step by step installation <https://asciimoo.github.io/searx/dev/install/installation.html>`__.
42−.. |commits| image:: https://img.shields.io/github/commit-activity/y/searx/searx?color=yellow&label=commits
28+Note: the documentation needs to be updated.
43− :target: https://github.com/searx/searx/commits/master
45−.. |OpenCollective searx backers| image:: https://opencollective.com/searx/backers/badge.svg
30+If you are in a hurry
46− :target: https://opencollective.com/searx#backer
31+------
33+ ``git clone https://github.com/asciimoo/searx.git && cd searx``
34+- install dependencies: ``./manage.sh update_packages``
36+ `settings.yml <https://github.com/asciimoo/searx/blob/master/searx/settings.yml>`__
37+ (set your ``secret_key``!)
38+- run ``python searx/webapp.py`` to start the application
48−.. |OpenCollective searx sponsors| image:: https://opencollective.com/searx/sponsors/badge.svg
49− :target: https://opencollective.com/searx#sponsor
52−If you are looking for running instances, ready to use, then visit searx.space_.
44+Bugs or suggestions? Visit the `issue
45+tracker <https://github.com/asciimoo/searx/issues>`__.
54−Otherwise jump to the user_, admin_ and developer_ handbooks you will find on
47+`License <https://github.com/asciimoo/searx/blob/master/LICENSE>`__
55−our homepage_.
48+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
57−.. _searx.space: https://searx.space
50+More about searx
58−.. _user: https://searx.github.io/searx/user
51+~~~~~~~~~~~~~~~~
59−.. _admin: https://searx.github.io/searx/admin
60−.. _developer: https://searx.github.io/searx/dev
61−.. _homepage: https://searx.github.io/searx
63−contact:
53+- `openhub <https://www.openhub.net/p/searx/>`__
64− openhub_ // twitter_ // IRC: #searx @ Libera (irc.libera.chat)
54+- `twitter <https://twitter.com/Searx_engine>`__
55+- IRC: #searx @ freenode
66−.. _openhub: https://www.openhub.net/p/searx
67−.. _twitter: https://twitter.com/Searx_engine
69−-------
58+.. |OpenCollective searx backers| image:: https://opencollective.com/searx/backers/badge.svg
59+ :target: https://opencollective.com/searx#backer
73−.. |gluten free| image:: https://forthebadge.com/images/featured/featured-gluten-free.svg
62+.. |OpenCollective searx sponsors| image:: https://opencollective.com/searx/sponsors/badge.svg
63+ :target: https://opencollective.com/searx#sponsor
dockerfiles/docker-entrypoint.sh+20−33
@@ -1,40 +1,15 @@
3−help() {
3+export SEARX_VERSION=$(su searx -c 'python3 -c "import six; import searx.version; six.print_(searx.version.VERSION_STRING)"')
4− printf "Command line:\n\n"
4+printf 'searx version %s\n\n' "${SEARX_VERSION}"
5− printf " -h Display this help\n"
6− printf " -d Dry run to update the configuration files.\n"
7− printf " -f Always update on the configuration files (existing files are renamed with the .old suffix)\n"
8− printf " Without this option, the new configuration files are copied with the .new suffix\n"
9− printf "\nEnvironment variables:\n\n"
10− printf " INSTANCE_NAME settings.yml : general.instance_name\n"
11− printf " AUTOCOMPLETE settings.yml : search.autocomplete\n"
12− printf " BASE_URL settings.yml : server.base_url\n"
13− printf " MORTY_URL settings.yml : result_proxy.url\n"
14− printf " MORTY_KEY settings.yml : result_proxy.key\n"
15− printf " BIND_ADDRESS uwsgi bind to the specified TCP socket using HTTP protocol. Default value: \"${DEFAULT_BIND_ADDRESS}\"\n"
16− printf "\nVolume:\n\n"
17− printf " /etc/searx the docker entry point copies settings.yml and uwsgi.ini in this directory (see the -f command line option)\n"
22−export DEFAULT_BIND_ADDRESS="0.0.0.0:8080"
6+export UWSGI_SETTINGS_PATH=/etc/searx/uwsgi.ini
23−if [ -z "${BIND_ADDRESS}" ]; then
7+export SEARX_SETTINGS_PATH=/etc/searx/settings.yml
24− export BIND_ADDRESS="${DEFAULT_BIND_ADDRESS}"
27−# Parse special command line
28−# see docs/admin/installation-docker.rst
29−# display the help message without the version
30−if [ "$1" = "help" ]; then
9+if [ -z "${BIND_ADDRESS}" ]; then
31− help
10+ export BIND_ADDRESS=":8080"
35−export SEARX_VERSION=$(su searx -c 'python3 -c "import six; import searx.version; six.print_(searx.version.VERSION_STRING)"' 2>/dev/null)
36−printf 'searx version %s\n\n' "${SEARX_VERSION}"
38# Parse command line
13# Parse command line
39FORCE_CONF_UPDATE=0
14FORCE_CONF_UPDATE=0
@@ -48,7 +23,19 @@ do
51− help
26+ printf "Command line:\n\n"
27+ printf " -h Display this help\n"
28+ printf " -d Dry run to update the configuration files.\n"
29+ printf " -f Always update on the configuration files (existing files are renamed with the .old suffix)\n"
30+ printf " Without this option, new configuration files are copied with the .new suffix\n"
31+ printf "\nEnvironment variables:\n\n"
32+ printf " INSTANCE_NAME settings.yml : general.instance_name\n"
33+ printf " AUTOCOMPLETE settings.yml : search.autocomplete\n"
34+ printf " BASE_URL settings.yml : server.base_url\n"
35+ printf " MORTY_URL settings.yml : result_proxy.url\n"
36+ printf " MORTY_KEY settings.yml : result_proxy.key\n"
37+ printf " BIND_ADDRESS where uwsgi will accept HTTP request (format : host:port)\n"
@@ -63,7 +50,7 @@ patch_searx_settings() {
65 # Make sure that there is trailing slash at the end of BASE_URL
52 # Make sure that there is trailing slash at the end of BASE_URL
66− # see https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameter-Expansion
53+ # see http://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameter-Expansion
67 export BASE_URL="${BASE_URL%/}/"
54 export BASE_URL="${BASE_URL%/}/"
69 # update settings.yml
56 # update settings.yml
@@ -31,17 +31,3 @@ touch-logrotate = /run/uwsgi-logrotate
31unique-cron = 15 0 -1 -1 -1 { touch /run/uwsgi-logrotate }
31unique-cron = 15 0 -1 -1 -1 { touch /run/uwsgi-logrotate }
32log-backupname = /var/log/uwsgi/uwsgi.log.1
32log-backupname = /var/log/uwsgi/uwsgi.log.1
33logto = /var/log/uwsgi/uwsgi.log
33logto = /var/log/uwsgi/uwsgi.log
36−# See https://github.com/searx/searx-docker/issues/24
37−add-header = Connection: close
39−# uwsgi serves the static files
40−# expires set to one day as Flask does
41−static-map = /static=/usr/local/searx/searx/static
42−static-expires = /* 864000
43−static-gzip-all = True
47−cache2 = name=searxcache,items=2000,blocks=2000,blocksize=4096,bitmap=1
docs/_themes/searx/static/searx.css+1−11
@@ -33,7 +33,7 @@ p.sidebar-title, .sidebar p {
33/* admonitions
33/* admonitions
36−div.admonition, div.topic, div.toctree-wrapper {
36+div.admonition, div.topic {
37 background-color: #fafafa;
37 background-color: #fafafa;
38 margin: 8px 0px;
38 margin: 8px 0px;
39 padding: 1em;
39 padding: 1em;
@@ -42,16 +42,6 @@ div.admonition, div.topic, div.toctree-wrapper {
42 border-right: none;
42 border-right: none;
43 border-bottom: none;
43 border-bottom: none;
44 border-left: 5pt solid #ccc;
44 border-left: 5pt solid #ccc;
45− list-style-type: disclosure-closed;
48−div.toctree-wrapper p.caption {
57p.admonition-title:after {
47p.admonition-title:after {
docs/admin/arch_public.dot+4−4
@@ -4,11 +4,11 @@ digraph G {
4 edge [fontname="Sans"];
4 edge [fontname="Sans"];
6 browser [label="Browser", shape=Mdiamond];
6 browser [label="Browser", shape=Mdiamond];
7− rp [label="Reverse Proxy", href="https://searx.github.io/searx/utils/filtron.sh.html#public-reverse-proxy"];
7+ rp [label="Reverse Proxy", href="url to configure reverse proxy"];
8− filtron [label="Filtron", href="https://searx.github.io/searx/utils/filtron.sh.html"];
8+ filtron [label="Filtron", href="https://github.com/asciimoo/filtron"];
9− morty [label="Morty", href="https://searx.github.io/searx/utils/morty.sh.html"];
9+ morty [label="Morty", href="https://github.com/asciimoo/morty"];
10 static [label="Static files", href="url to configure static files"];
10 static [label="Static files", href="url to configure static files"];
11− uwsgi [label="uwsgi", href="https://searx.github.io/searx/utils/searx.sh.html"]
11+ uwsgi [label="uwsgi", href="url to configure uwsgi"]
12 searx1 [label="Searx #1"];
12 searx1 [label="Searx #1"];
13 searx2 [label="Searx #2"];
13 searx2 [label="Searx #2"];
14 searx3 [label="Searx #3"];
14 searx3 [label="Searx #3"];
docs/admin/architecture.rst+5−9
@@ -4,21 +4,17 @@
4Architecture
4Architecture
5============
5============
7−.. sidebar:: Further reading
7+.. sidebar:: Needs work!
9− - Reverse Proxy: :ref:`Apache <apache searx site>` & :ref:`nginx <nginx searx
9+ This article needs some work / Searx is a collaborative effort. If you have
10− site>`
10+ any contribution, feel welcome to send us your :pull:`PR <../pulls>`, see
11− - Filtron: :ref:`searx filtron`
11+ :ref:`how to contribute`.
12− - Morty: :ref:`searx morty`
13− - uWSGI: :ref:`searx uwsgi`
14− - Searx: :ref:`installation basic`
16Herein you will find some hints and suggestions about typical architectures of
13Herein you will find some hints and suggestions about typical architectures of
17searx infrastructures.
14searx infrastructures.
19We start with a contribution from :pull:`@dalf <1776#issuecomment-567917320>`.
16We start with a contribution from :pull:`@dalf <1776#issuecomment-567917320>`.
20−It shows a *reference* setup for public searx instances which can build up and
17+It shows a *reference* setup for public searx instances.
21−maintained by the scripts from our :ref:`toolboxing`.
23.. _arch public:
19.. _arch public:
docs/admin/buildhosts.rst+15−67
@@ -9,27 +9,8 @@ Buildhosts
9 If you have any contribution send us your :pull:`PR <../pulls>`, see
9 If you have any contribution send us your :pull:`PR <../pulls>`, see
10 :ref:`how to contribute`.
10 :ref:`how to contribute`.
12−.. contents:: Contents
17To get best results from build, its recommend to install additional packages
12To get best results from build, its recommend to install additional packages
18−on build hosts (see :ref:`searx.sh`).::
13+on build hosts.
20− sudo -H ./utils/searx.sh install buildhost
22−This will install packages needed by searx:
24−.. kernel-include:: $DOCS_BUILD/includes/searx.rst
25− :start-after: START distro-packages
26− :end-before: END distro-packages
28−and packages needed to build docuemtation and run tests:
30−.. kernel-include:: $DOCS_BUILD/includes/searx.rst
31− :start-after: START build-packages
32− :end-before: END build-packages
34.. _docs build:
15.. _docs build:
@@ -49,25 +30,16 @@ Build docs
49 - dvisvgm_
30 - dvisvgm_
51Most of the sphinx requirements are installed from :origin:`setup.py` and the
32Most of the sphinx requirements are installed from :origin:`setup.py` and the
52−docs can be build from scratch with ``make docs.html``. For better math and
33+docs can be build from scratch with ``make docs``. For better math and image
53−image processing additional packages are needed. The XeTeX_ needed not only for
34+processing additional packages are needed. The XeTeX_ needed not only for PDF
54−PDF creation, its also needed for :ref:`math` when HTML output is build.
35+creation, its also needed for :ref:`math` when HTML output is build.
56To be able to do :ref:`sphinx:math-support` without CDNs, the math are rendered
37To be able to do :ref:`sphinx:math-support` without CDNs, the math are rendered
57−as images (``sphinx.ext.imgmath`` extension).
38+as images (``sphinx.ext.imgmath`` extension). If your docs build (``make
59−Here is the extract from the :origin:`docs/conf.py` file, setting math renderer
62−.. literalinclude:: ../conf.py
64− :start-after: # sphinx.ext.imgmath setup
65− :end-before: # sphinx.ext.imgmath setup END
67−If your docs build (``make docs.html``) shows warnings like this::
39+docs``) shows warnings like this::
69 WARNING: dot(1) not found, for better output quality install \
41 WARNING: dot(1) not found, for better output quality install \
70− graphviz from https://www.graphviz.org
42+ graphviz from http://www.graphviz.org
72 WARNING: LaTeX command 'latex' cannot be run (needed for math \
44 WARNING: LaTeX command 'latex' cannot be run (needed for math \
73 display), check the imgmath_latex setting
45 display), check the imgmath_latex setting
@@ -75,6 +47,8 @@ If your docs build (``make docs.html``) shows warnings like this::
75you need to install additional packages on your build host, to get better HTML
47you need to install additional packages on your build host, to get better HTML
50+.. _system requirements:
80 .. group-tab:: Ubuntu / debian
54 .. group-tab:: Ubuntu / debian
@@ -118,38 +92,12 @@ For PDF output you also need:
119 $ sudo dnf install \
93 $ sudo dnf install \
120 texlive-collection-fontsrecommended texlive-collection-latex \
94 texlive-collection-fontsrecommended texlive-collection-latex \
121− dejavu-sans-fonts dejavu-serif-fonts dejavu-sans-mono-fonts \
95+ dejavu-sans-fonts dejavu-serif-fonts dejavu-sans-mono-fonts
129−.. _ShellCheck: https://github.com/koalaman/shellcheck
131−To lint shell scripts, we use ShellCheck_ - A shell script static analysis tool.
133−.. SNIP sh lint requirements
135−.. tabs::
97+.. _system requirements END:
137− .. group-tab:: Ubuntu / debian
141− $ sudo apt install shellcheck
143− .. group-tab:: Arch Linux
147− $ sudo pacman -S shellcheck
99+.. literalinclude:: ../conf.py
148−
100+ :language: python
149− .. group-tab:: Fedora / RHEL
101+ :start-after: # sphinx.ext.imgmath setup
150−
102+ :end-before: # sphinx.ext.imgmath setup END
153− $ sudo dnf install ShellCheck
155−.. SNAP sh lint requirements
docs/admin/engines.rst+12−29
@@ -1,28 +1,14 @@
5−Special Engine Settings
6−=======================
8.. sidebar:: Further reading ..
7.. sidebar:: Further reading ..
10 - :ref:`settings engine`
9 - :ref:`settings engine`
11− - :ref:`engine settings` & :ref:`engine file`
10+ - :ref:`engine settings`
12−
11+ - :ref:`engine file`
21−General Engine Settings
22−=======================
24−Explanation of the :ref:`general engine configuration` shown in the table
25−:ref:`configured engines`.
27============= =========== ==================== ============
13============= =========== ==================== ============
28:ref:`engine settings` :ref:`engine file`
14:ref:`engine settings` :ref:`engine file`
@@ -33,20 +19,20 @@ Engine .. Paging support **P**
33------------------------- -------------------- ------------
19------------------------- -------------------- ------------
34Shortcut **S** Language support **L**
20Shortcut **S** Language support **L**
35Timeout **TO** Time range support **TR**
21Timeout **TO** Time range support **TR**
36−Disabled **D** Engine type **ET**
22+Disabled **D** Offline **O**
37------------- ----------- -------------------- ------------
23------------- ----------- -------------------- ------------
38Safe search **SS**
24Safe search **SS**
39------------- ----------- ---------------------------------
25------------- ----------- ---------------------------------
40Weigth **W**
26Weigth **W**
41------------- ----------- ---------------------------------
27------------- ----------- ---------------------------------
42Disabled **D**
28Disabled **D**
43−------------- ----------- ---------------------------------
45============= =========== =================================
29============= =========== =================================
31+Configuration defaults (at built time):
47.. _configured engines:
33.. _configured engines:
49−.. jinja:: searx
35+.. jinja:: webapp
51 .. flat-table:: Engines configured at built time (defaults)
37 .. flat-table:: Engines configured at built time (defaults)
52 :header-rows: 1
38 :header-rows: 1
@@ -62,10 +48,9 @@ Show errors **DE**
70 {% for name, mod in engines.items() %}
55 {% for name, mod in engines.items() %}
@@ -79,10 +64,8 @@ Show errors **DE**
79 - {{(mod.safesearch and "y") or ""}}
64 - {{(mod.safesearch and "y") or ""}}
80 - {{(mod.disabled and "y") or ""}}
65 - {{(mod.disabled and "y") or ""}}
81 - {{(mod.time_range_support and "y") or ""}}
66 - {{(mod.time_range_support and "y") or ""}}
82− - {{mod.engine_type or ""}}
67+ - {{(mod.offline and "y") or ""}}
83 - {{mod.weight or 1 }}
68 - {{mod.weight or 1 }}
84 - {{(mod.disabled and "y") or ""}}
69 - {{(mod.disabled and "y") or ""}}
85− - {{(mod.display_error_messages and "y") or ""}}
87 {% endfor %}
71 {% endfor %}
docs/admin/engines/recoll.rstdeleted−50
@@ -1,50 +0,0 @@
9− - `Recoll <https://www.lesbonscomptes.com/recoll/>`_
10− - `recoll-webui <https://framagit.org/medoc92/recollwebui.git>`_
12−Recoll_ is a desktop full-text search tool based on Xapian. By itself Recoll_
13−does not offer web or API access, this can be achieved using recoll-webui_
20−You must configure the following settings:
23− Location where recoll-webui can be reached.
26− Location where the file hierarchy is mounted on your *local* filesystem.
29− Location where the file hierarchy as indexed by recoll can be reached.
32− Part of the indexed file hierarchy to be search, if empty the full domain is
41−#. Recoll indexes a local filesystem mounted in ``/export/documents/reference``,
42−#. the Recoll search inteface can be reached at https://recoll.example.org/ and
43−#. the contents of this filesystem can be reached though https://download.example.org/reference
47− base_url: https://recoll.example.org/
48− mount_prefix: /export/documents
49− dl_prefix: https://download.example.org
docs/admin/filtron.rst+102−145
@@ -1,51 +1,18 @@
4==========================
1==========================
5How to protect an instance
2How to protect an instance
6==========================
3==========================
8−.. sidebar:: further reading
11− - :ref:`nginx searx site`
14−.. contents:: Contents
19−.. _filtron: https://github.com/asciimoo/filtron
21−Searx depends on external search services. To avoid the abuse of these services
5+Searx depens on external search services. To avoid the abuse of these services
22it is advised to limit the number of requests processed by searx.
6it is advised to limit the number of requests processed by searx.
24−An application firewall, filtron_ solves exactly this problem. Filtron is just
8+An application firewall, ``filtron`` solves exactly this problem. Information
25−a middleware between your web server (nginx, apache, ...) and searx, we describe
9+on how to install it can be found at the `project page of filtron
26−such infratructures in chapter: :ref:`architecture`.
10+<https://github.com/asciimoo/filtron>`__.
32−.. _Go: https://golang.org/
33−.. _filtron README: https://github.com/asciimoo/filtron/blob/master/README.md
35−Filtron needs Go_ installed. If Go_ is preinstalled, filtron_ is simply
36−installed by ``go get`` package management (see `filtron README`_). If you use
37−filtron as middleware, a more isolated setup is recommended. To simplify such
38−an installation and the maintenance of, use our script :ref:`filtron.sh`.
40−.. _Sample configuration of filtron:
42Sample configuration of filtron
13Sample configuration of filtron
43===============================
14===============================
45−.. sidebar:: Tooling box
47− - :origin:`/etc/filtron/rules.json <utils/templates/etc/filtron/rules.json>`
49An example configuration can be find below. This configuration limits the access
16An example configuration can be find below. This configuration limits the access
@@ -57,104 +24,105 @@ of:
58.. code:: json
25.. code:: json
62− "name": "search request",
28+ "name":"search request",
63− "filters": [
29+ "filters":[
64− "Param:q",
30+ "Param:q",
65− "Path=^(/|/search)$"
31+ "Path=^(/|/search)$"
33+ "interval":"<time-interval-in-sec (int)>",
34+ "limit":"<max-request-number-in-interval (int)>",
37+ "name":"roboagent limit",
38+ "interval":"<time-interval-in-sec (int)>",
39+ "limit":"<max-request-number-in-interval (int)>",
41+ "Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)"
47+ "message":"Rate limit exceeded"
57+ "Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)"
63+ "message":"Rate limit exceeded"
70+ "interval":"<time-interval-in-sec (int)>",
71+ "limit":"<max-request-number-in-interval (int)>",
74+ "Header:X-Forwarded-For"
80+ "message":"Rate limit exceeded"
86+ "name":"rss/json limit",
87+ "interval":"<time-interval-in-sec (int)>",
88+ "limit":"<max-request-number-in-interval (int)>",
91+ "Param:format=(csv|json|rss)"
97+ "message":"Rate limit exceeded"
103+ "name":"useragent limit",
104+ "interval":"<time-interval-in-sec (int)>",
105+ "limit":"<max-request-number-in-interval (int)>",
67− "interval": "<time-interval-in-sec (int)>",
68− "limit": "<max-request-number-in-interval (int)>",
71− "name": "missing Accept-Language",
72− "filters": ["!Header:Accept-Language"],
73− "limit": "<max-request-number-in-interval (int)>",
75− "actions": [
109+ "actions":[
76− {"name":"log"},
110+ {
77− {"name": "block",
111+ "name":"block",
78− "params": {"message": "Rate limit exceeded"}}
112+ "params":{
82− "name": "suspiciously Connection=close header",
83− "filters": ["Header:Connection=close"],
84− "limit": "<max-request-number-in-interval (int)>",
89− "params": {"message": "Rate limit exceeded"}}
113+ "message":"Rate limit exceeded"
94− "interval": "<time-interval-in-sec (int)>",
95− "limit": "<max-request-number-in-interval (int)>",
98− "Header:X-Forwarded-For"
104− "message": "Rate limit exceeded"
110− "name": "rss/json limit",
112− "Param:format=(csv|json|rss)"
114− "interval": "<time-interval-in-sec (int)>",
115− "limit": "<max-request-number-in-interval (int)>",
121− "message": "Rate limit exceeded"
127− "name": "useragent limit",
128− "interval": "<time-interval-in-sec (int)>",
129− "limit": "<max-request-number-in-interval (int)>",
137− "message": "Rate limit exceeded"
147−.. _filtron route request:
149Route request through filtron
123Route request through filtron
150=============================
124=============================
152−.. sidebar:: further reading
154− - :ref:`filtron.sh overview`
155− - :ref:`installation nginx`
156− - :ref:`installation apache`
158Filtron can be started using the following command:
126Filtron can be started using the following command:
160.. code:: sh
128.. code:: sh
@@ -168,24 +136,13 @@ Use it along with ``nginx`` with the following example configuration.
169.. code:: nginx
137.. code:: nginx
171− # https://example.org/searx
173− location /searx {
139+ location / {
174− proxy_pass http://127.0.0.1:4004/;
176− proxy_set_header Host $host;
140+ proxy_set_header Host $http_host;
177− proxy_set_header Connection $http_connection;
178− proxy_set_header X-Real-IP $remote_addr;
141+ proxy_set_header X-Real-IP $remote_addr;
179− proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
142+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
180− proxy_set_header X-Scheme $scheme;
143+ proxy_set_header X-Scheme $scheme;
181− proxy_set_header X-Script-Name /searx;
144+ proxy_pass http://127.0.0.1:4004/;
184− location /searx/static {
185− /usr/local/searx/searx-src/searx/static;
189Requests are coming from port 4004 going through filtron and then forwarded to
147Requests are coming from port 4004 going through filtron and then forwarded to
190−port 8888 where a searx is being run. For a complete setup see: :ref:`nginx
148+port 8888 where a searx is being run.
@@ -3,16 +3,9 @@ Administrator documentation
3===========================
3===========================
5.. toctree::
5.. toctree::
6− :maxdepth: 2
6+ :maxdepth: 1
9 installation
8 installation
18 architecture
11 architecture
docs/admin/installation-apache.rstdeleted−515
@@ -1,515 +0,0 @@
1−.. _installation apache:
7−.. _Apache: https://httpd.apache.org/
9− https://cwiki.apache.org/confluence/display/HTTPD/DistrosDefaultLayout#DistrosDefaultLayout-Debian,Ubuntu(Apachehttpd2.x):
11− https://salsa.debian.org/apache-team/apache2/raw/master/debian/apache2.README.Debian
12−.. _Apache Arch Linux:
13− https://wiki.archlinux.org/index.php/Apache_HTTP_Server
15− https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-apache-http-server/index.html
16−.. _Apache directives:
17− https://httpd.apache.org/docs/trunk/mod/directives.html
19− https://httpd.apache.org/docs/current/en/getting-started.html
20−.. _Terms Used to Describe Directives:
21− https://httpd.apache.org/docs/current/en/mod/directive-dict.html
22−.. _Configuration Files:
23− https://httpd.apache.org/docs/current/en/configuring.html
24−.. _ProxyPreserveHost: https://httpd.apache.org/docs/trunk/mod/mod_proxy.html#proxypreservehost
26− https://httpd.apache.org/docs/2.4/mod/mod_so.html#loadmodule
28− https://httpd.apache.org/docs/trunk/mod/core.html#documentroot
30− https://httpd.apache.org/docs/trunk/mod/core.html#location
31−.. _uWSGI Apache support:
32− https://uwsgi-docs.readthedocs.io/en/latest/Apache.html
34− https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-proxy-uwsgi
36−.. sidebar:: further read
38− - `Apache Arch Linux`_
39− - `Apache Debian`_ and `README.Debian`_
41− - `Apache directives`_
43−.. contents:: Contents
50−**Install** :ref:`apache searx site` using :ref:`filtron.sh <filtron.sh overview>`
54− $ sudo -H ./utils/filtron.sh apache install
56−**Install** :ref:`apache searx site` using :ref:`morty.sh <morty.sh overview>`
60− $ sudo -H ./utils/morty.sh apache install
64−The apache HTTP server
65−======================
67−If Apache_ is not installed, install it now. If apache_ is new to you, the
68−`Getting Started`_, `Configuration Files`_ and `Terms Used to Describe
69−Directives`_ documentation gives first orientation. There is also a list of
70−`Apache directives`_ *to keep in the pocket*.
74− .. group-tab:: Ubuntu / debian
78− sudo -H apt-get install apache2
80− .. group-tab:: Arch Linux
84− sudo -H pacman -S apache
85− sudo -H systemctl enable httpd
86− sudo -H systemctl start http
88− .. group-tab:: Fedora / RHEL
92− sudo -H dnf install httpd
93− sudo -H systemctl enable httpd
94− sudo -H systemctl start httpd
96−Now at http://localhost you should see any kind of *Welcome* or *Test* page.
97−How this default intro site is configured, depends on the linux distribution
98−(compare `Apache directives`_).
102− .. group-tab:: Ubuntu / debian
106− less /etc/apache2/sites-enabled/000-default.conf
108− In this file, there is a line setting the `DocumentRoot`_ directive:
112− DocumentRoot /var/www/html
114− And the *welcome* page is the HTML file at ``/var/www/html/index.html``.
116− .. group-tab:: Arch Linux
120− less /etc/httpd/conf/httpd.conf
122− In this file, there is a line setting the `DocumentRoot`_ directive:
126− DocumentRoot "/srv/http"
127− <Directory "/srv/http">
128− Options Indexes FollowSymLinks
133− The *welcome* page of Arch Linux is a page showing directory located at
134− ``DocumentRoot``. This is *directory* page is generated by the Module
135− `mod_autoindex <https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html>`_:
139− LoadModule autoindex_module modules/mod_autoindex.so
141− Include conf/extra/httpd-autoindex.conf
143− .. group-tab:: Fedora / RHEL
147− less /etc/httpd/conf/httpd.conf
149− In this file, there is a line setting the ``DocumentRoot`` directive:
153− DocumentRoot "/var/www/html"
155− <Directory "/var/www">
157− # Allow open access:
161− On fresh installations, the ``/var/www`` is empty and the *default
162− welcome page* is shown, the configuration is located at::
164− less /etc/httpd/conf.d/welcome.conf
166−.. _apache searx site:
171−.. sidebar:: public to the internet?
173− If your searx instance is public, stop here and first install :ref:`filtron
174− reverse proxy <filtron.sh>` and :ref:`result proxy morty <morty.sh>`, see
175− :ref:`installation scripts`. If already done, follow setup: *searx via
176− filtron plus morty*.
178−To setup a Apache revers proxy you have to enable the *headers* and *proxy*
179−modules and create a `Location`_ configuration for the searx site. In most
180−distributions you have to un-comment the lines in the main configuration file,
181−except in :ref:`The Debian Layout`.
185− .. group-tab:: Ubuntu / debian
187− In the Apache setup, enable headers and proxy modules:
191− sudo -H a2enmod headers
192− sudo -H a2enmod proxy
193− sudo -H a2enmod proxy_http
195− In :ref:`The Debian Layout` you create a ``searx.conf`` with the
196− ``<Location /searx >`` directive and save this file in the *sites
197− available* folder at ``/etc/apache2/sites-available``. To enable the
198− ``searx.conf`` use :man:`a2ensite`:
202− sudo -H a2ensite searx.conf
204− .. group-tab:: Arch Linux
206− In the ``/etc/httpd/conf/httpd.conf`` file, activate headers and proxy
207− modules (LoadModule_):
213− LoadModule headers_module modules/mod_headers.so
214− LoadModule proxy_module modules/mod_proxy.so
215− LoadModule proxy_http_module modules/mod_proxy_http.so
217− .. group-tab:: Fedora / RHEL
219− In the ``/etc/httpd/conf/httpd.conf`` file, activate headers and proxy
220− modules (LoadModule_):
226− LoadModule headers_module modules/mod_headers.so
227− LoadModule proxy_module modules/mod_proxy.so
228− LoadModule proxy_http_module modules/mod_proxy_http.so
230−With ProxyPreserveHost_ the incoming Host HTTP request header is passed to the
233−.. _apache searx via filtron plus morty:
237− .. group-tab:: searx via filtron plus morty
239− Use this setup, if your instance is public to the internet, compare
240− figure: :ref:`architecture <arch public>` and :ref:`installation scripts`.
242− 1. Configure a reverse proxy for :ref:`filtron <filtron.sh>`, listening on
243− *localhost 4004* (:ref:`filtron route request`):
249− # SetEnvIf Request_URI "/searx" dontlog
250− # CustomLog /dev/null combined env=dontlog
256− #Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
259− ProxyPreserveHost On
260− ProxyPass http://127.0.0.1:4004
261− RequestHeader set X-Script-Name /searx
265− 2. Configure reverse proxy for :ref:`morty <searx morty>`, listening on
270− ProxyPreserveHost On
274− # SetEnvIf Request_URI "/morty" dontlog
275− # CustomLog /dev/null combined env=dontlog
281− #Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
284− ProxyPass http://127.0.0.1:3000
285− RequestHeader set X-Script-Name /morty
289− For a fully result proxification add :ref:`morty's <searx morty>` **public
290− URL** to your :origin:`searx/settings.yml`:
295− # replace example.org with your server's public name
296− url : https://example.org/morty
297− key : !!binary "insert_your_morty_proxy_key_here"
305−Be warned, with this setup, your instance isn't :ref:`protected <searx
306−filtron>`, nevertheless it is good enough for intranet usage. In modern Linux
307−distributions, the `mod_proxy_uwsgi`_ is compiled into the *normal* apache
308−package and you need to install only the :ref:`uWSGI <searx uwsgi>` package:
312− .. group-tab:: Ubuntu / debian
316− sudo -H apt-get install uwsgi
319− sudo -H apt-get install libapache2-mod-proxy-uwsgi
321− .. group-tab:: Arch Linux
325− sudo -H pacman -S uwsgi
327− .. group-tab:: Fedora / RHEL
331− sudo -H dnf install uwsgi
333−The next example shows a configuration using the `uWSGI Apache support`_ via
334−unix sockets and `mod_proxy_uwsgi`_.
336−For socket communication, you have to activate ``socket =
337−/run/uwsgi/app/searx/socket`` and comment out the ``http = 127.0.0.1:8888``
338−configuration in your :ref:`uwsgi ini file <uwsgi configuration>`. If not
339−already exists, create a folder for the unix sockets, which can be used by the
340−searx account (see :ref:`create searx user`):
344− sudo -H mkdir -p /run/uwsgi/app/searx/
345− sudo -H chown -R searx:searx /run/uwsgi/app/searx/
347−If the server is public; to limit access to your intranet replace ``Allow from
348−all`` directive and replace ``192.168.0.0/16`` with your subnet IP/class.
352− .. group-tab:: Ubuntu / debian
356− LoadModule headers_module /usr/lib/apache2/mod_headers.so
357− LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
358− LoadModule proxy_uwsgi_module /usr/lib/apache2/modules/mod_proxy_uwsgi.so
360− # SetEnvIf Request_URI /searx dontlog
361− # CustomLog /dev/null combined env=dontlog
368− # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
371− ProxyPreserveHost On
372− ProxyPass unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/
376− .. group-tab:: Arch Linux
382− LoadModule proxy_module modules/mod_proxy.so
383− LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
385− # SetEnvIf Request_URI /searx dontlog
386− # CustomLog /dev/null combined env=dontlog
393− # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
396− ProxyPreserveHost On
397− ProxyPass unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/
401− .. group-tab:: Fedora / RHEL
407− LoadModule proxy_module modules/mod_proxy.so
408− LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
409− <IfModule proxy_uwsgi_module>
411− # SetEnvIf Request_URI /searx dontlog
412− # CustomLog /dev/null combined env=dontlog
419− # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
422− ProxyPreserveHost On
423− ProxyPass unix:/run/uwsgi/app/searx/socket|uwsgi://uwsgi-uds-searx/
429− .. group-tab:: old mod_wsgi
431− We show this only for historical reasons, DON'T USE `mod_uwsgi
432− <https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-uwsgi>`_.
437− <IfModule mod_uwsgi.c>
439− # SetEnvIf Request_URI "/searx" dontlog
440− # CustomLog /dev/null combined env=dontlog
446− Options FollowSymLinks Indexes
447− SetHandler uwsgi-handler
448− uWSGISocket /run/uwsgi/app/searx/socket
452− # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
466− .. group-tab:: Ubuntu / debian
470− sudo -H systemctl restart apache2
471− sudo -H service uwsgi restart searx
473− .. group-tab:: Arch Linux
477− sudo -H systemctl restart httpd
478− sudo -H systemctl restart uwsgi@searx
480− .. group-tab:: Fedora / RHEL
484− sudo -H systemctl restart httpd
485− sudo -H touch /etc/uwsgi.d/searx.ini
491−For better privacy you can disable Apache logs. In the examples above activate
492−one of the lines and `restart apache`_::
495− # SetEnvIf Request_URI "/searx" dontlog
496− # CustomLog /dev/null combined env=dontlog
498−The ``CustomLog`` directive disable logs for the whole (virtual) server, use it
499−when the URL of the service does not have a path component (``/searx``) / is
500−located at root (``/``).
502−.. _The Debian Layout:
507−Be aware that the Debian layout is quite different from the standard Apache
508−configuration. For details look at the README.Debian_
509−(``/usr/share/doc/apache2/README.Debian.gz``). Some commands you should know on
512−* :man:`apache2ctl`: Apache HTTP server control interface
513−* :man:`a2enmod`, :man:`a2dismod`: switch on/off modules
514−* :man:`a2enconf`, :man:`a2disconf`: switch on/off configurations
515−* :man:`a2ensite`, :man:`a2dissite`: switch on/off sites
docs/admin/installation-docker.rstdeleted−60
@@ -1,60 +0,0 @@
1−.. _installation docker:
14−Docker image searx/searx
15−========================
18−The docker image is `searx/searx <https://hub.docker.com/r/searx/searx>`_ (based on `github.com/searx/searx <https://github.com/searx/searx>`_).
20−Make sure you have `installed Docker <https://docs.docker.com/get-docker/>`_. For instance, you can deploy a local instance:
25− docker pull searx/searx
26− docker run --rm -d -v ${PWD}/searx:/etc/searx -p $PORT:8080 -e BASE_URL=http://localhost:$PORT/ searx/searx
28−Go to ``http://localhost:$PORT``.
30−Inside ``${PWD}/searx``, you will find ``settings.yml`` and ``uwsgi.ini``.
31−You can modify these files according to your needs and restart the Docker image.
40− docker run --rm -it searx/searx -h
42−.. program-output:: ../dockerfiles/docker-entrypoint.sh help
48−It's also possible to build searx from the embedded Dockerfile.
52− git clone https://github.com/searx/searx.git
60−If you intend to create a public instance using Docker, see https://github.com/searx/searx-docker
docs/admin/installation-nginx.rstdeleted−383
@@ -1,383 +0,0 @@
1−.. _installation nginx:
8− https://docs.nginx.com/nginx/admin-guide/
9−.. _nginx server configuration:
10− https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#setting-up-virtual-servers
11−.. _nginx beginners guide:
12− https://nginx.org/en/docs/beginners_guide.html
13−.. _Getting Started wiki:
14− https://www.nginx.com/resources/wiki/start/
15−.. _uWSGI support from nginx:
16− https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html
18− https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html#configuring-nginx
20− https://werkzeug.palletsprojects.com/en/1.0.x/wsgi/#werkzeug.wsgi.get_script_name
22−.. sidebar:: further reading
25− - `nginx beginners guide`_
26− - `nginx server configuration`_
27− - `Getting Started wiki`_
28− - `uWSGI support from nginx`_
30−.. contents:: Contents
37−**Install** :ref:`nginx searx site` using :ref:`filtron.sh <filtron.sh overview>`
41− $ sudo -H ./utils/filtron.sh nginx install
43−**Install** :ref:`nginx searx site` using :ref:`morty.sh <morty.sh overview>`
47− $ sudo -H ./utils/morty.sh nginx install
55−If nginx_ is not installed (uwsgi will not work with the package nginx-light),
60− .. group-tab:: Ubuntu / debian
64− sudo -H apt-get install nginx
66− .. group-tab:: Arch Linux
70− sudo -H pacman -S nginx-mainline
71− sudo -H systemctl enable nginx
72− sudo -H systemctl start nginx
74− .. group-tab:: Fedora / RHEL
78− sudo -H dnf install nginx
79− sudo -H systemctl enable nginx
80− sudo -H systemctl start nginx
82−Now at http://localhost you should see a *Welcome to nginx!* page, on Fedora you
83−see a *Fedora Webserver - Test Page*. The test page comes from the default
84−`nginx server configuration`_. How this default intro site is configured,
85−depends on the linux distribution:
89− .. group-tab:: Ubuntu / debian
93− less /etc/nginx/nginx.conf
95− there is a line including site configurations from:
99− include /etc/nginx/sites-enabled/*;
101− .. group-tab:: Arch Linux
105− less /etc/nginx/nginx.conf
107− in there is a configuration section named ``server``:
109− .. code-block:: nginx
113− server_name localhost;
117− .. group-tab:: Fedora / RHEL
121− less /etc/nginx/nginx.conf
123− there is a line including site configurations from:
127− include /etc/nginx/conf.d/*.conf;
129−.. _nginx searx site:
134−.. sidebar:: public to the internet?
136− If your searx instance is public, stop here and first install :ref:`filtron
137− reverse proxy <filtron.sh>` and :ref:`result proxy morty <morty.sh>`, see
138− :ref:`installation scripts`. If already done, follow setup: *searx via
139− filtron plus morty*.
141−Now you have to create a configuration for the searx site. If nginx_ is new to
142−you, the `nginx beginners guide`_ is a good starting point and the `Getting
143−Started wiki`_ is always a good resource *to keep in the pocket*.
147− .. group-tab:: Ubuntu / debian
149− Create configuration at ``/etc/nginx/sites-available/searx`` and place a
150− symlink to sites-enabled:
154− sudo -H ln -s /etc/nginx/sites-available/searx /etc/nginx/sites-enabled/searx
156− .. group-tab:: Arch Linux
158− In the ``/etc/nginx/nginx.conf`` file, replace the configuration section
161− .. group-tab:: Fedora / RHEL
163− Create configuration at ``/etc/nginx/conf.d/searx`` and place a
164− symlink to sites-enabled:
166−.. _nginx searx via filtron plus morty:
170− .. group-tab:: searx via filtron plus morty
172− Use this setup, if your instance is public to the internet, compare
173− figure: :ref:`architecture <arch public>` and :ref:`installation scripts`.
175− 1. Configure a reverse proxy for :ref:`filtron <filtron.sh>`, listening on
176− *localhost 4004* (:ref:`filtron route request`):
180− # https://example.org/searx
183− proxy_pass http://127.0.0.1:4004/;
185− proxy_set_header Host $host;
186− proxy_set_header Connection $http_connection;
187− proxy_set_header X-Real-IP $remote_addr;
188− proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
189− proxy_set_header X-Scheme $scheme;
190− proxy_set_header X-Script-Name /searx;
193− location /searx/static/ {
194− alias /usr/local/searx/searx-src/searx/static/;
198− 2. Configure reverse proxy for :ref:`morty <searx morty>`, listening on
203− # https://example.org/morty
206− proxy_pass http://127.0.0.1:3000/;
208− proxy_set_header Host $host;
209− proxy_set_header Connection $http_connection;
210− proxy_set_header X-Real-IP $remote_addr;
211− proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
212− proxy_set_header X-Scheme $scheme;
215− For a fully result proxification add :ref:`morty's <searx morty>` **public
216− URL** to your :origin:`searx/settings.yml`:
221− # replace example.org with your server's public name
222− url : https://example.org/morty
223− key : !!binary "insert_your_morty_proxy_key_here"
229− .. group-tab:: proxy or uWSGI
231− Be warned, with this setup, your instance isn't :ref:`protected <searx
232− filtron>`. Nevertheless it is good enough for intranet usage and it is a
233− excellent example of; *how different services can be set up*. The next
234− example shows a reverse proxy configuration wrapping the :ref:`searx-uWSGI
235− application <uwsgi configuration>`, listening on ``http =
240− # https://hostname.local/
243− proxy_pass http://127.0.0.1:8888;
245− proxy_set_header Host $host;
246− proxy_set_header Connection $http_connection;
247− proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
248− proxy_set_header X-Scheme $scheme;
249− proxy_buffering off;
252− Alternatively you can use the `uWSGI support from nginx`_ via unix
253− sockets. For socket communication, you have to activate ``socket =
254− /run/uwsgi/app/searx/socket`` and comment out the ``http =
255− 127.0.0.1:8888`` configuration in your :ref:`uwsgi ini file <uwsgi
258− The example shows a nginx virtual ``server`` configuration, listening on
259− port 80 (IPv4 and IPv6 http://[::]:80). The uWSGI app is configured at
260− location ``/`` by importing the `uwsgi_params`_ and passing requests to
261− the uWSGI socket (``uwsgi_pass``). The ``server``\'s root points to the
262− :ref:`searx-src clone <searx-src>` and wraps directly the
263− :origin:`searx/static/` content at ``location /static``.
268− # replace hostname.local with your server's name
269− server_name hostname.local;
275− include uwsgi_params;
276− uwsgi_pass unix:/run/uwsgi/app/searx/socket;
279− root /usr/local/searx/searx-src/searx;
280− location /static { }
283− If not already exists, create a folder for the unix sockets, which can be
284− used by the searx account:
288− mkdir -p /run/uwsgi/app/searx/
289− sudo -H chown -R searx:searx /run/uwsgi/app/searx/
291− .. group-tab:: \.\. at subdir URL
293− Be warned, with these setups, your instance isn't :ref:`protected <searx
294− filtron>`. The examples are just here to demonstrate how to export the
295− searx application from a subdirectory URL ``https://example.org/searx/``.
299− # https://hostname.local/searx
302− proxy_pass http://127.0.0.1:8888;
304− proxy_set_header Host $host;
305− proxy_set_header Connection $http_connection;
306− proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
307− proxy_set_header X-Scheme $scheme;
308− proxy_set_header X-Script-Name /searx;
309− proxy_buffering off;
312− location /searx/static/ {
313− alias /usr/local/searx/searx-src/searx/static/;
316− The ``X-Script-Name /searx`` is needed by the searx implementation to
317− calculate relative URLs correct. The next example shows a uWSGI
318− configuration. Since there are no HTTP headers in a (u)WSGI protocol, the
319− value is shipped via the SCRIPT_NAME_ in the WSGI environment.
323− # https://hostname.local/searx
326− uwsgi_param SCRIPT_NAME /searx;
327− include uwsgi_params;
328− uwsgi_pass unix:/run/uwsgi/app/searx/socket;
331− location /searx/static/ {
332− alias /usr/local/searx/searx-src/searx/;
335− For searx to work correctly the ``base_url`` must be set in the
336− :origin:`searx/settings.yml`.
341− # replace example.org with your server's public name
342− base_url : https://example.org/searx/
349− .. group-tab:: Ubuntu / debian
353− sudo -H systemctl restart nginx
354− sudo -H service uwsgi restart searx
356− .. group-tab:: Arch Linux
360− sudo -H systemctl restart nginx
361− sudo -H systemctl restart uwsgi@searx
363− .. group-tab:: Fedora
367− sudo -H systemctl restart nginx
368− sudo -H touch /etc/uwsgi.d/searx.ini
374−For better privacy you can disable nginx logs in ``/etc/nginx/nginx.conf``.
380− access_log /dev/null;
381− error_log /dev/null;
docs/admin/installation-searx.rstdeleted−120
@@ -1,120 +0,0 @@
1−.. _installation basic:
3−=========================
4−Step by step installation
5−=========================
12−Step by step installation with virtualenv. For Ubuntu, be sure to have enable
20−.. kernel-include:: $DOCS_BUILD/includes/searx.rst
21− :start-after: START distro-packages
22− :end-before: END distro-packages
26− This installs also the packages needed by :ref:`searx uwsgi`
28−.. _create searx user:
33−.. kernel-include:: $DOCS_BUILD/includes/searx.rst
34− :start-after: START create user
35− :end-before: END create user
39−install searx & dependencies
40−============================
42−Start a interactive shell from new created user and clone searx:
44−.. kernel-include:: $DOCS_BUILD/includes/searx.rst
45− :start-after: START clone searx
46− :end-before: END clone searx
48−In the same shell create *virtualenv*:
50−.. kernel-include:: $DOCS_BUILD/includes/searx.rst
51− :start-after: START create virtualenv
52− :end-before: END create virtualenv
54−To install searx's dependencies, exit the searx *bash* session you opened above
55−and restart a new. Before install, first check if your *virtualenv* was sourced
56−from the login (*~/.profile*):
58−.. kernel-include:: $DOCS_BUILD/includes/searx.rst
59− :start-after: START manage.sh update_packages
60− :end-before: END manage.sh update_packages
64− Open a second terminal for the configuration tasks and leave the ``(searx)$``
65− terminal open for the tasks below.
68−.. _use_default_settings.yml:
73−.. sidebar:: ``use_default_settings: True``
75− - :ref:`settings global`
76− - :ref:`settings location`
77− - :ref:`settings use_default_settings`
78− - :origin:`/etc/searx/settings.yml <utils/templates/etc/searx/use_default_settings.yml>`
80−To create a initial ``/etc/searx/settings.yml`` you can start with a copy of the
81−file :origin:`utils/templates/etc/searx/use_default_settings.yml`. This setup
82−:ref:`use default settings <settings use_default_settings>` from
83−:origin:`searx/settings.yml` and is recommended since :pull:`2291` is merged.
85−For a *minimal setup*, configure like shown below – replace ``searx@$(uname
86−-n)`` with a name of your choice, set ``ultrasecretkey`` -- *and/or* edit
87−``/etc/searx/settings.yml`` to your needs.
89−.. kernel-include:: $DOCS_BUILD/includes/searx.rst
90− :start-after: START searx config
91− :end-before: END searx config
95− .. group-tab:: Use default settings
97− .. literalinclude:: ../../utils/templates/etc/searx/use_default_settings.yml
100− .. group-tab:: searx/settings.yml
102− .. literalinclude:: ../../searx/settings.yml
109−To check your searx setup, optional enable debugging and start the *webapp*.
110−Searx looks at the exported environment ``$SEARX_SETTINGS_PATH`` for a
113−.. kernel-include:: $DOCS_BUILD/includes/searx.rst
114− :start-after: START check searx installation
115− :end-before: END check searx installation
117−If everything works fine, hit ``[CTRL-C]`` to stop the *webapp* and disable the
118−debug option in ``settings.yml``. You can now exit searx user bash (enter exit
119−command twice). At this point searx is not demonized; uwsgi allows this.
docs/admin/installation-uwsgi.rstdeleted−150
@@ -1,150 +0,0 @@
7−.. sidebar:: further reading
12−.. contents:: Contents
18−.. _systemd.unit: https://www.freedesktop.org/software/systemd/man/systemd.unit.html
19−.. _One service per app in systemd:
20− https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html#one-service-per-app-in-systemd
22− https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html
24− https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html#ini-files
25−.. _systemd unit template:
26− http://0pointer.de/blog/projects/instances.html
32−How uWSGI is implemented by distributors is different. uWSGI itself
35−`systemd.unit`_ template files as described here `One service per app in systemd`_.
37− There is one `systemd unit template`_ and one `uwsgi ini file`_ per uWSGI-app
38− placed at dedicated locations. Take archlinux and a searx.ini as example::
40− unit template --> /usr/lib/systemd/system/uwsgi@.service
41− uwsgi ini files --> /etc/uwsgi/searx.ini
43− The searx app can be maintained as know from common systemd units::
45− systemctl enable uwsgi@searx
46− systemctl start uwsgi@searx
47− systemctl restart uwsgi@searx
48− systemctl stop uwsgi@searx
50−The `uWSGI Emperor`_ mode which fits for maintaining a large range of uwsgi apps.
52− The Emperor mode is a special uWSGI instance that will monitor specific
53− events. The Emperor mode (service) is started by a (common, not template)
54− systemd unit. The Emperor service will scan specific directories for `uwsgi
55− ini file`_\s (also know as *vassals*). If a *vassal* is added, removed or the
56− timestamp is modified, a corresponding action takes place: a new uWSGI
57− instance is started, reload or stopped. Take Fedora and a searx.ini as
60− to start a new searx instance create --> /etc/uwsgi.d/searx.ini
61− to reload the instance edit timestamp --> touch /etc/uwsgi.d/searx.ini
62− to stop instance remove ini --> rm /etc/uwsgi.d/searx.ini
67−The `uWSGI Emperor`_ mode and `systemd unit template`_ is what the distributors
68−mostly offer their users, even if they differ in the way they implement both
69−modes and their defaults. Another point they might differ is the packaging of
70−plugins (if so, compare :ref:`install packages`) and what the default python
71−interpreter is (python2 vs. python3).
73−Fedora starts a Emperor by default, while archlinux does not start any uwsgi
74−service by default. Worth to know; debian (ubuntu) follow a complete different
75−approach. *debian*: your are familiar with the apache infrastructure? .. they
76−do similar for the uWSGI infrastructure (with less comfort), the folders are::
78− /etc/uwsgi/apps-available/
79− /etc/uwsgi/apps-enabled/
81−The `uwsgi ini file`_ is enabled by a symbolic link::
83− ln -s /etc/uwsgi/apps-available/searx.ini /etc/uwsgi/apps-enabled/
85−From debian's documentation (``/usr/share/doc/uwsgi/README.Debian.gz``): You
86−could control specific instance(s) by issuing::
88− service uwsgi <command> <confname> <confname> ...
90− sudo -H service uwsgi start searx
91− sudo -H service uwsgi stop searx
93−My experience is, that this command is a bit buggy.
95−.. _uwsgi configuration:
100−Create the configuration ini-file according to your distribution (see below) and
101−restart the uwsgi application.
105− .. group-tab:: Ubuntu / debian
107− .. kernel-include:: $DOCS_BUILD/includes/searx.rst
108− :start-after: START searx uwsgi-description ubuntu-20.04
109− :end-before: END searx uwsgi-description ubuntu-20.04
111− .. hotfix: a bug group-tab need this comment
113− .. group-tab:: Arch Linux
115− .. kernel-include:: $DOCS_BUILD/includes/searx.rst
116− :start-after: START searx uwsgi-description arch
117− :end-before: END searx uwsgi-description arch
119− .. hotfix: a bug group-tab need this comment
121− .. group-tab:: Fedora / RHEL
123− .. kernel-include:: $DOCS_BUILD/includes/searx.rst
124− :start-after: START searx uwsgi-description fedora
125− :end-before: END searx uwsgi-description fedora
130− .. group-tab:: Ubuntu / debian
132− .. kernel-include:: $DOCS_BUILD/includes/searx.rst
133− :start-after: START searx uwsgi-appini ubuntu-20.04
134− :end-before: END searx uwsgi-appini ubuntu-20.04
136− .. hotfix: a bug group-tab need this comment
138− .. group-tab:: Arch Linux
140− .. kernel-include:: $DOCS_BUILD/includes/searx.rst
141− :start-after: START searx uwsgi-appini arch
142− :end-before: END searx uwsgi-appini arch
144− .. hotfix: a bug group-tab need this comment
146− .. group-tab:: Fedora / RHEL
148− .. kernel-include:: $DOCS_BUILD/includes/searx.rst
149− :start-after: START searx uwsgi-appini fedora
150− :end-before: END searx uwsgi-appini fedora
docs/admin/installation.rst+315−52
@@ -4,83 +4,346 @@
4Installation
4Installation
5============
5============
7−*You're spoilt for choice*, choose your preferred method of installation.
7+.. contents::
9−- :ref:`installation docker`
10+Basic installation
10−- :ref:`installation scripts`
11+==================
11−- :ref:`installation basic`
13−The :ref:`installation basic` is good enough for intranet usage and it is a
13+Step by step installation for Debian/Ubuntu with virtualenv. For Ubuntu, be sure
14−excellent illustration of *how a searx instance is build up*. If you place your
14+to have enable universe repository.
15−instance public to the internet you should really consider to install a
16−:ref:`filtron reverse proxy <filtron.sh>` and for privacy a :ref:`result proxy
17−<morty.sh>` is mandatory.
19−Therefore, if you do not have any special preferences, its recommend to use the
16+Install packages:
20−:ref:`installation docker` or the `Installation scripts`_ from our :ref:`tooling
21−box <toolboxing>` as described below.
23−.. _installation scripts:
18+.. code:: sh
25−Installation scripts
20+ $ sudo -H apt-get install \
26−====================
21+ git build-essential libxslt-dev \
22+ python-dev python-virtualenv python-babel \
23+ zlib1g-dev libffi-dev libssl-dev
28−.. sidebar:: Update OS first!
25+Install searx:
30− To avoid unwanted side effects, update your OS before installing searx.
27+.. code:: sh
32−The following will install a setup as shown in :ref:`architecture`. First you
29+ cd /usr/local
33−need to get a clone. The clone is only needed for the installation procedure
30+ sudo -H git clone https://github.com/asciimoo/searx.git
34−and some maintenance tasks (alternatively you can create your own fork).
31+ sudo -H useradd searx -d /usr/local/searx
32+ sudo -H chown searx:searx -R /usr/local/searx
36−For the installation procedure, use a *sudoer* login to run the scripts. If you
34+Install dependencies in a virtualenv:
37−install from ``root``, take into account that the scripts are creating a
38−``searx``, a ``filtron`` and a ``morty`` user. In the installation procedure
39−these new created users do need read access to the clone of searx, which is not
40−the case if you clone into a folder below ``/root``.
42−.. code:: bash
36+.. code:: sh
44− $ cd ~/Downloads
38+ cd /usr/local/searx
45− $ git clone https://github.com/searx/searx searx
46− $ cd searx
39+ sudo -H -u searx -i
48−.. sidebar:: further read
41+.. code:: sh
50− - :ref:`toolboxing`
43+ (searx)$ virtualenv searx-ve
51− - :ref:`update searx`
44+ (searx)$ . ./searx-ve/bin/activate
52− - :ref:`inspect searx`
45+ (searx)$ ./manage.sh update_packages
54−**Install** :ref:`searx service <searx.sh>`
47+Configuration
56−This installs searx as described in :ref:`installation basic`.
50+.. code:: sh
58−.. code:: bash
52+ sed -i -e "s/ultrasecretkey/`openssl rand -hex 16`/g" searx/settings.yml
60− $ sudo -H ./utils/searx.sh install all
54+Edit searx/settings.yml if necessary.
62−**Install** :ref:`filtron reverse proxy <filtron.sh>`
56+Check
64−.. code:: bash
59+Start searx:
66− $ sudo -H ./utils/filtron.sh install all
61+.. code:: sh
68−**Install** :ref:`result proxy <morty.sh>`
63+ python searx/webapp.py
70−.. code:: bash
65+Go to http://localhost:8888
72− $ sudo -H ./utils/morty.sh install all
67+If everything works fine, disable the debug option in settings.yml:
74−If all services are running fine, you can add it to your HTTP server:
69+.. code:: sh
76−- :ref:`installation apache`
71+ sed -i -e "s/debug : True/debug : False/g" searx/settings.yml
77−- :ref:`installation nginx`
79−.. _git stash: https://git-scm.com/docs/git-stash
73+At this point searx is not demonized ; uwsgi allows this.
81−.. tip::
75+You can exit the virtualenv and the searx user bash (enter exit command
83− About script's installation options have a look at chapter :ref:`toolboxing
78+uwsgi
84− setup`. How to brand your instance see chapter :ref:`settings global`. To
79+=====
85− *stash* your instance's setup, `git stash`_ your clone's :origin:`Makefile`
80+
86− and :origin:`.config.sh` file .
81+Install packages:
85+ sudo -H apt-get install \
86+ uwsgi uwsgi-plugin-python
88+Create the configuration file ``/etc/uwsgi/apps-available/searx.ini`` with this
94+ # Who will run the code
98+ # disable logging for privacy
99+ disable-logging = true
101+ # Number of workers (usually CPU count)
104+ # The right granted on the created socket
107+ # Plugin to use and interpretor config
108+ single-interpreter = true
112+ enable-threads = true
115+ module = searx.webapp
117+ # Support running the module from a webserver subdirectory.
118+ route-run = fixpathinfo:
120+ # Virtualenv and python path
121+ virtualenv = /usr/local/searx/searx-ve/
122+ pythonpath = /usr/local/searx/
123+ chdir = /usr/local/searx/searx/
125+Activate the uwsgi application and restart:
129+ cd /etc/uwsgi/apps-enabled
130+ ln -s ../apps-available/searx.ini
131+ /etc/init.d/uwsgi restart
139+If nginx is not installed (uwsgi will not work with the package
144+ sudo -H apt-get install nginx
149+Create the configuration file ``/etc/nginx/sites-available/searx`` with this
156+ server_name searx.example.com;
157+ root /usr/local/searx/searx;
163+ include uwsgi_params;
164+ uwsgi_pass unix:/run/uwsgi/app/searx/socket;
168+Create a symlink to sites-enabled:
172+ sudo -H ln -s /etc/nginx/sites-available/searx /etc/nginx/sites-enabled/searx
178+ sudo -H service nginx restart
179+ sudo -H service uwsgi restart
181+from subdirectory URL (/searx)
182+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
184+Add this configuration in the server config file
185+``/etc/nginx/sites-enabled/default``:
189+ location /searx/static {
190+ alias /usr/local/searx/searx/static;
194+ uwsgi_param SCRIPT_NAME /searx;
195+ include uwsgi_params;
196+ uwsgi_pass unix:/run/uwsgi/app/searx/socket;
200+**OR** using reverse proxy (Please, note that reverse proxy advised to be used
201+in case of single-user or low-traffic instances.)
205+ location /searx/static {
206+ alias /usr/local/searx/searx/static;
210+ proxy_pass http://127.0.0.1:8888;
211+ proxy_set_header Host $host;
212+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
213+ proxy_set_header X-Scheme $scheme;
214+ proxy_set_header X-Script-Name /searx;
215+ proxy_buffering off;
219+Enable ``base_url`` in ``searx/settings.yml``
223+ base_url : http://your.domain.tld/searx/
229+ sudo -H service nginx restart
230+ sudo -H service uwsgi restart
235+for better privacy you can disable nginx logs about searx.
237+how to proceed: below ``uwsgi_pass`` in ``/etc/nginx/sites-available/default``
242+ access_log /dev/null;
243+ error_log /dev/null;
249+ sudo -H service nginx restart
258+ sudo -H apt-get install libapache2-mod-uwsgi
259+ sudo -H a2enmod uwsgi
261+Add this configuration in the file ``/etc/apache2/apache2.conf``:
266+ Options FollowSymLinks Indexes
267+ SetHandler uwsgi-handler
268+ uWSGISocket /run/uwsgi/app/searx/socket
271+Note that if your instance of searx is not at the root, you should change
272+``<Location />`` by the location of your instance, like ``<Location /searx>``.
278+ sudo -H /etc/init.d/apache2 restart
283+For better privacy you can disable Apache logs.
287+ You can only disable logs for the whole (virtual) server not for a specific
290+Go back to ``/etc/apache2/apache2.conf`` and above ``<Location />`` add:
294+ CustomLog /dev/null combined
300+ sudo -H /etc/init.d/apache2 restart
312+ (searx)$ . ./searx-ve/bin/activate
314+ (searx)$ git pull origin master
315+ (searx)$ git stash apply
316+ (searx)$ ./manage.sh update_packages
320+ sudo -H service uwsgi restart
325+Make sure you have installed Docker. For instance, you can deploy searx like this:
329+ docker pull wonderfall/searx
330+ docker run -d --name searx -p $PORT:8888 wonderfall/searx
332+Go to ``http://localhost:$PORT``.
334+See https://hub.docker.com/r/wonderfall/searx/ for more informations. It's also
335+possible to build searx from the embedded Dockerfile.
339+ git clone https://github.com/asciimoo/searx.git
341+ docker build -t whatever/searx .
346+* https://about.okhin.fr/posts/Searx/ with some additions
348+* How to: `Setup searx in a couple of hours with a free SSL certificate
349+ <https://www.reddit.com/r/privacytoolsIO/comments/366kvn/how_to_setup_your_own_privacy_respecting_search/>`__
docs/admin/morty.rst+4−18
@@ -1,14 +1,7 @@
4=========================
1=========================
5How to setup result proxy
2How to setup result proxy
6=========================
3=========================
8−.. sidebar:: further reading
12.. _morty: https://github.com/asciimoo/morty
5.. _morty: https://github.com/asciimoo/morty
13.. _morty's README: https://github.com/asciimoo/morty
6.. _morty's README: https://github.com/asciimoo/morty
@@ -16,22 +9,15 @@ By default searx can only act as an image proxy for result images, but it is
16possible to proxify all the result URLs with an external service, morty_.
9possible to proxify all the result URLs with an external service, morty_.
18To use this feature, morty has to be installed and activated in searx's
11To use this feature, morty has to be installed and activated in searx's
19−``settings.yml``. Add the following snippet to your ``settings.yml`` and
14+Add the following snippet to your ``settings.yml`` and restart searx:
22.. code:: yaml
16.. code:: yaml
24 result_proxy:
18 result_proxy:
25 url : http://127.0.0.1:3000/
19 url : http://127.0.0.1:3000/
26− key : !!binary "insert_your_morty_proxy_key_here"
20+ key : your_morty_proxy_key
28−Note that the example above (``http://127.0.0.1:3000``) is only for single-user
29−instances without a HTTP proxy. If your morty service is public, the url is the
30−address of the reverse proxy (e.g ``https://example.org/morty``).
32−For more information about *result proxy* have a look at *"searx via filtron
33−plus morty"* in the :ref:`nginx <nginx searx via filtron plus morty>` and
34−:ref:`apache <apache searx via filtron plus morty>` sections.
37 Is the address of the running morty service.
23 Is the address of the running morty service.
docs/admin/plugins.rst+1−1
@@ -14,7 +14,7 @@ Configuration defaults (at built time):
15.. _configured plugins:
15.. _configured plugins:
17−.. jinja:: searx
17+.. jinja:: webapp
19 .. flat-table:: Plugins configured at built time (defaults)
19 .. flat-table:: Plugins configured at built time (defaults)
20 :header-rows: 1
20 :header-rows: 1
docs/admin/settings.rst+70−283
@@ -4,218 +4,110 @@
4``settings.yml``
4``settings.yml``
5================
5================
7−This page describe the options possibilities of the :origin:`searx/settings.yml`
10.. sidebar:: Further reading ..
7.. sidebar:: Further reading ..
12− - :ref:`use_default_settings.yml`
13 - :ref:`search API`
9 - :ref:`search API`
15−.. contents:: Contents
11+This page describe the options possibilities of the settings.yml file.
20−.. _settings location:
25−First, searx will try to load settings.yml from these locations:
27−1. the full path specified in the ``SEARX_SETTINGS_PATH`` environment variable.
28−2. ``/etc/searx/settings.yml``
30−If these files don't exist (or are empty or can't be read), searx uses the
31−:origin:`searx/settings.yml` file.
34.. _settings global:
13.. _settings global:
36Global Settings
15Global Settings
37===============
16===============
42.. code:: yaml
18.. code:: yaml
22+ secret_key : "ultrasecretkey" # change this!
45− debug : False # Debug mode, only for development
23+ debug : False # debug mode, only for development
46− instance_name : "searx" # displayed name
24+ request_timeout : 2.0 # seconds
47− git_url: https://github.com/searx/searx
25+ base_url : False # set custom base_url (or False)
48− git_branch: master
26+ themes_path : "" # custom ui themes path
49− issue_url: https://github.com/searx/searx/issues
27+ default_theme : oscar # ui theme
50− docs_url: https://searx.github.io/searx
28+ useragent_suffix : "" # suffix of searx_useragent, could contain
51− public_instances: https://searx.space
29+ # informations like admins email address
52− contact_url: False # mailto:contact@example.com
30+ image_proxy : False # proxying image results through searx
53− wiki_url: https://github.com/searx/searx/wiki
31+ default_locale : "" # default interface locale
54− twitter_url: https://twitter.com/Searx_engine
57− Allow a more detailed log if you run searx directly. Display *detailed* error
58− messages in the browser too, so this must be deactivated in production.
61− Contact ``mailto:`` address or WEB form.
63−``git_url`` and ``git_branch``:
64− Changes this, to point to your searx fork (branch).
66−``docs_url``
33+ # uncomment below section if you want to use a proxy
67− If you host your own documentation, change this URL.
69−``wiki_url``:
35+ #outgoing_proxies :
70− Link to your wiki (or ``False``)
36+ # http : http://127.0.0.1:8080
37+ # https: http://127.0.0.1:8080
72−``twitter_url``:
39+ # uncomment below section only if you have more than one network interface
73− Link to your tweets (or ``False``)
40+ # which can be the source of outgoing search requests
76−``server:``
46+ locales:
77−-----------
47+ en : English
83− bind_address : "127.0.0.1" # address to listen on
84− secret_key : "ultrasecretkey" # change this!
85− base_url : False # set custom base_url (or False)
86− image_proxy : False # proxying image results through searx
87− default_locale : "" # default interface locale
88− default_theme : oscar # ui theme
89− default_http_headers:
90− X-Content-Type-Options : nosniff
91− X-XSS-Protection : 1; mode=block
92− X-Download-Options : noopen
93− X-Robots-Tag : noindex, nofollow
94− Referrer-Policy : no-referrer
96−``port`` & ``bind_address``:
61+``port`` :
97− Port number and *bind address* of the searx web application if you run it
62+ Port number of the searx web application if you run it directly using ``python
98− directly using ``python searx/webapp.py``. Doesn't apply to searx running on
63+ searx/webapp.py``. Doesn't apply to searx running on Apache or Nginx.
101``secret_key`` :
65``secret_key`` :
102 Used for cryptography purpose.
66 Used for cryptography purpose.
69+ Allow a more detailed log if you run searx directly. Display *detailed* error
70+ messages in the browser too, so this must be deactivated in production.
73+ Global timeout of the requests made to others engines in seconds. A bigger
74+ timeout will allow to wait for answers from slow engines, but in consequence
75+ will slow searx reactivity (the result page may take the time specified in the
104``base_url`` :
78``base_url`` :
105 The base URL where searx is deployed. Used to create correct inbound links.
79 The base URL where searx is deployed. Used to create correct inbound links.
107−``image_proxy`` :
81+``themes_path`` :
108− Allow your instance of searx of being able to proxy images. Uses memory space.
82+ Path to where the themes are located. If you didn't develop anything, leave it
111− Searx interface language. If blank, the locale is detected by using the
112− browser language. If it doesn't work, or you are deploying a language
113− specific instance of searx, a locale can be defined using an ISO language
114− code, like ``fr``, ``en``, ``de``.
116``default_theme`` :
85``default_theme`` :
117− Name of the theme you want to use by default on your searx instance.
86+ Name of the theme you want to use by default on you searx instance.
119−.. _HTTP headers: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
121−``default_http_headers``:
122− Set additional HTTP headers, see `#755 <https://github.com/searx/searx/issues/715>`__
129− outgoing: # communication with search engines
130− request_timeout : 2.0 # default timeout in seconds, can be override by engine
131− # max_request_timeout: 10.0 # the maximum timeout in seconds
132− useragent_suffix : "" # informations like an email address to the administrator
133− pool_connections : 100 # Maximum number of allowable connections, or None for no limits. The default is 100.
134− pool_maxsize : 10 # Number of allowable keep-alive connections, or None to always allow. The default is 10.
135− enable_http2: True # See https://www.python-httpx.org/http2/
136− # uncomment below section if you want to use a proxy
139− # - http://proxy1:8080
140− # - http://proxy2:8080
141− # uncomment below section only if you have more than one network interface
142− # which can be the source of outgoing search requests
149−``request_timeout`` :
150− Global timeout of the requests made to others engines in seconds. A bigger
151− timeout will allow to wait for answers from slow engines, but in consequence
152− will slow searx reactivity (the result page may take the time specified in the
153− timeout to load). Can be override by :ref:`settings engine`
155``useragent_suffix`` :
88``useragent_suffix`` :
156 Suffix to the user-agent searx uses to send requests to others engines. If an
89 Suffix to the user-agent searx uses to send requests to others engines. If an
157 engine wish to block you, a contact info here may be useful to avoid that.
90 engine wish to block you, a contact info here may be useful to avoid that.
159−``keepalive_expiry``:
92+``image_proxy`` :
160− Number of seconds to keep a connection in the pool. By default 5.0 seconds.
93+ Allow your instance of searx of being able to proxy images. Uses memory space.
162−.. _httpx proxies: https://www.python-httpx.org/advanced/#http-proxying
165− Define one or more proxies you wish to use, see `httpx proxies`_.
166− If there are more than one proxy for one protocol (http, https),
167− requests to the engines are distributed in a round-robin fashion.
170− If you use multiple network interfaces, define from which IP the requests must
173− * ``0.0.0.0`` any local IPv4 address.
174− * ``::`` any local IPv6 address.
176− * ``[ 192.168.0.1, 192.168.0.2 ]`` these two specific IP addresses
177− * ``fe80::60a2:1691:e5a2:ee1f``
178− * ``fe80::60a2:1691:e5a2:ee1f/126`` all IP addresses in this network.
179− * ``[ 192.168.0.1, fe80::/126 ]``
182− Number of retry in case of an HTTP error.
183− On each retry, searx uses an different proxy and source ip.
185−``retry_on_http_error`` :
186− Retry request on some HTTP status code.
190− * ``true`` : on HTTP status code between 400 and 599.
191− * ``403`` : on HTTP status code 403.
192− * ``[403, 429]``: on HTTP status code 403 and 429.
195− Enable by default. Set to ``False`` to disable HTTP/2.
198− 30 by default. Maximum redirect before it is an error.
96+ Aearx interface language. If blank, the locale is detected by using the
97+ browser language. If it doesn't work, or you are deploying a language
98+ specific instance of searx, a locale can be defined using an ISO language
99+ code, like ``fr``, ``en``, ``de``.
201−``locales:``
101+.. _requests proxies: http://docs.python-requests.org/en/latest/user/advanced/#proxies
202−------------
102+.. _PR SOCKS support: https://github.com/kennethreitz/requests/pull/478
204−.. code:: yaml
104+``outgoing_proxies`` :
105+ Define a proxy you wish to use, see `requests proxies`_. SOCKS proxies are
106+ not supported / see `PR SOCKS support`.
206− locales:
108+``source_ips`` :
207− en : English
109+ If you use multiple nework interfaces, define from which IP the requests must
208− de : Deutsch
110+ be made.
220``locales`` :
112``locales`` :
221 Locales codes and their names. Available translations of searx interface.
113 Locales codes and their names. Available translations of searx interface.
@@ -241,25 +133,9 @@ Engine settings
241 api_key : 'apikey'
133 api_key : 'apikey'
242 disabled : True
134 disabled : True
243 language : en_US
135 language : en_US
245− #enable_http2: False
247− #retry_on_http_error: True # or 403 or [404, 429]
248− #max_connections: 100
249− #max_keepalive_connections: 10
250− #keepalive_expiry: 5.0
253− # - http://proxy1:8080
254− # - http://proxy2:8080
256− # - http://proxy1:8080
257− # - http://proxy2:8080
258− # - socks5://user:password@proxy3:1080
259− # - socks5h://user:password@proxy4:1080
261``name`` :
137``name`` :
262− Name that will be used across searx to define this engine. In settings, on
138+ Name that will be used accross searx to define this engine. In settings, on
263 the result page...
139 the result page...
265``engine`` :
141``engine`` :
@@ -270,7 +146,7 @@ Engine settings
270 Code used to execute bang requests (in this case using ``!bi`` or ``?bi``)
146 Code used to execute bang requests (in this case using ``!bi`` or ``?bi``)
272``base_url`` : optional
148``base_url`` : optional
273− Part of the URL that should be stable across every request. Can be useful to
149+ Part of the URL that should be stable accross every request. Can be useful to
274 use multiple sites using only one engine, or updating the site URL without
150 use multiple sites using only one engine, or updating the site URL without
275 touching at the code.
151 touching at the code.
@@ -288,7 +164,7 @@ Engine settings
288 is described in the file.
164 is described in the file.
290``disabled`` : optional
166``disabled`` : optional
291− To disable by default the engine, but not deleting it. It will allow the user
167+ To disable by default the engine, but not deleting it. It will allow the user
292 to manually activate it in the settings.
168 to manually activate it in the settings.
294``language`` : optional
170``language`` : optional
@@ -299,96 +175,7 @@ Engine settings
299``weigth`` : default ``1``
175``weigth`` : default ``1``
300 Weighting of the results of this engine.
176 Weighting of the results of this engine.
302−``display_error_messages`` : default ``True``
303− When an engine returns an error, the message is displayed on the user interface.
305−``network``: optional
306− Use the network configuration from another engine.
307− In addition, there are two default networks:
308− * ``ipv4`` set ``local_addresses`` to ``0.0.0.0`` (use only IPv4 local addresses)
309− * ``ipv6`` set ``local_addresses`` to ``::`` (use only IPv6 local addresses)
313 A few more options are possible, but they are pretty specific to some
180 A few more options are possible, but they are pretty specific to some
314 engines, and so won't be described here.
181 engines, and so won't be described here.
317−.. _settings use_default_settings:
322−.. sidebar:: ``use_default_settings: True``
324− - :ref:`settings location`
325− - :ref:`use_default_settings.yml`
326− - :origin:`/etc/searx/settings.yml <utils/templates/etc/searx/use_default_settings.yml>`
328−The user defined ``settings.yml`` is loaded from the :ref:`settings location`
329−and can relied on the default configuration :origin:`searx/settings.yml` using:
331− ``use_default_settings: True``
334− In the following example, the actual settings are the default settings defined
335− in :origin:`searx/settings.yml` with the exception of the ``secret_key`` and
336− the ``bind_address``:
338− .. code-block:: yaml
340− use_default_settings: True
342− secret_key: "uvys6bRhKHUdFF5CqbJonSDSRN8H0sCBziNSrDGNVdpz7IeZhveVart3yvghoKHA"
343− bind_address: "0.0.0.0"
346− With ``use_default_settings: True``, each settings can be override in a
347− similar way, the ``engines`` section is merged according to the engine
348− ``name``. In this example, searx will load all the engine and the arch linux
349− wiki engine has a :ref:`token<private engines>`:
351− .. code-block:: yaml
353− use_default_settings: True
355− secret_key: "uvys6bRhKHUdFF5CqbJonSDSRN8H0sCBziNSrDGNVdpz7IeZhveVart3yvghoKHA"
357− - name: arch linux wiki
358− tokens: ['$ecretValue']
360−``engines:`` / ``remove:``
361− It is possible to remove some engines from the default settings. The following
362− example is similar to the above one, but searx doesn't load the the google
365− .. code-block:: yaml
367− use_default_settings:
372− secret_key: "uvys6bRhKHUdFF5CqbJonSDSRN8H0sCBziNSrDGNVdpz7IeZhveVart3yvghoKHA"
374− - name: arch linux wiki
375− tokens: ['$ecretValue']
377−``engines:`` / ``keep_only:``
378− As an alternative, it is possible to specify the engines to keep. In the
379− following example, searx has only two engines:
381− .. code-block:: yaml
383− use_default_settings:
389− secret_key: "uvys6bRhKHUdFF5CqbJonSDSRN8H0sCBziNSrDGNVdpz7IeZhveVart3yvghoKHA"
392− tokens: ['$ecretValue']
394− tokens: ['$ecretValue']
docs/admin/update-searx.rstdeleted−59
@@ -1,59 +0,0 @@
7−How to update depends on the :ref:`installation` method. If you have used the
8−:ref:`installation scripts`, use ``update`` command from the scripts.
10−**Update** :ref:`searx service <searx.sh>`
14− sudo -H ./utils/searx.sh update searx
16−**Update** :ref:`filtron reverse proxy <filtron.sh>`
20− sudo -H ./utils/filtron.sh update filtron
22−**Update** :ref:`result proxy <morty.sh>`
26− sudo -H ./utils/morty.sh update morty
30−======================
31−How to inspect & debug
32−======================
34−.. sidebar:: further read
39−How to debug depends on the :ref:`installation` method. If you have used the
40−:ref:`installation scripts`, use ``inspect`` command from the scripts.
42−**Inspect** :ref:`searx service <searx.sh>`
46− sudo -H ./utils/searx.sh inspect service
48−**Inspect** :ref:`filtron reverse proxy <filtron.sh>`
52− sudo -H ./utils/filtron.sh inspect service
54−**Inspect** :ref:`result proxy <morty.sh>`
58− sudo -H ./utils/morty.sh inspect service
docs/blog/command-line-engines.rstdeleted−65
@@ -1,65 +0,0 @@
1−========================================
2−Running shell commands to fetch results
3−========================================
5−Previously, with searx you could search over the Internet on other people's
6−computers. Now it is possible to fetch results from your local machine without
7−connecting to any networks from the same graphical user interface.
13−In :pull:`2128` a new type of engine has been introduced called ``command``.
14−This engine lets administrators add engines which run arbitrary shell commands
15−and show its output on the web UI of searx.
17−When creating and enabling a ``command`` engine on a public searx instance,
18−you must be careful to avoid leaking private data. The easiest solution
19−is to add tokens to the engine. Thus, only those who have the appropriate token
20−can retrieve results from the it.
22−The engine base is flexible. Only your imagination can limit the power of this engine. (And
23−maybe security concerns.) The following options are available:
25−* ``command``: A comma separated list of the elements of the command. A special token {{QUERY}} tells searx where to put the search terms of the user. Example: ``['ls', '-l', '-h', '{{QUERY}}']``
26−* ``delimiter``: A dict containing a delimiter char and the "titles" of each element in keys.
27−* ``parse_regex``: A dict containing the regular expressions for each result key.
28−* ``query_type``: The expected type of user search terms. Possible values: ``path`` and ``enum``. ``path`` checks if the uesr provided path is inside the working directory. If not the query is not executed. ``enum`` is a list of allowed search terms. If the user submits something which is not included in the list, the query returns an error.
29−* ``query_enum``: A list containing allowed search terms if ``query_type`` is set to ``enum``.
30−* ``working_dir``: The directory where the command has to be executed. Default: ``.``
31−* ``result_separator``: The character that separates results. Default: ``\n``
34−The example engine below can be used to find files with a specific name in the configured
41− command: ['find', '.', '-name', '{{QUERY}}']
52−In the next milestone, support for local search engines and indexers (e.g. Elasticsearch)
53−are going to be added. This way, you will be able to query your own databases/indexers.
58−This development was sponsored by `Search and Discovery Fund`_ of `NLnet Foundation`_ .
60−.. _Search and Discovery Fund: https://nlnet.nl/discovery
61−.. _NLnet Foundation: https://nlnet.nl/
65−| kvch // 2020.09.28 21:26
@@ -3,15 +3,8 @@ Blog
5.. toctree::
5.. toctree::
6− :titlesonly:
6+ :maxdepth: 1
11 intro-offline
10 intro-offline
15− search-indexer-engines
17− search-database-engines
docs/blog/lxcdev-202006.rstdeleted−413
@@ -1,413 +0,0 @@
1−.. _blog-lxcdev-202006:
3−=======================================
4−Developing in Linux containers [202006]
5−=======================================
7−.. _LXC: https://linuxcontainers.org/lxc/introduction/
11− This blog post is written for experienced admins and developers / readers
12− should have a serious meaning about: *distributed*, *merge* and *linux
15−.. contents:: Contents
20−In PR :PR:`1803` we added a lot of scripts to Searx's boilerplate. In this blog
21−post I will show you, how you can make use of them in *distributed and
22−heterogeneous development cycles* (TL;DR; jump to the :ref:`blog-lxcdev-202006
28−Normally in our development cycle, we edit the sources and run some test and/or
29−builds by using ``make`` before we commit. This cycle is simple and perfect but
30−might fail in some aspects we should not overlook.
32− The environment in which we run all our development processes matters!
34−The :ref:`makefile` and the :ref:`make install` encapsulate a lot for us, but they
35−do not have access to all prerequisites. For example, there may have
36−dependencies on packages that are installed on the developer's desktop, but
37−usually are not preinstalled on a server or client system. Another examples
38−are; settings have been made to the software on the developer's host that would
39−never be set on a *production* system.
41−*Linux Containers* (LXC_) are isolate environments and not to mix up on
42−developer's all the prerequisites of all the projects he contribute to, is
45−The scripts from PR :PR:`1803` can divide in those to install and maintain
52−and the script :ref:`lxc.sh`, with we can scale our installation, maintenance or
53−even development tasks over a stack of containers, what we call: *Searx's lxc
56−Gentlemen, start your engines!
57−==============================
59−.. _LXD: https://linuxcontainers.org/lxd/introduction/
60−.. _archlinux: https://www.archlinux.org/
62−Before you can start with containers, you need to install and initiate LXD_
67− .. group-tab:: desktop
74−And you need to clone from origin or if you have your own fork, clone from your
79− .. group-tab:: desktop
84− $ git clone https://github.com/searx/searx.git
87−The :ref:`lxc-searx.env` consists of several images, see ``export
88−LXC_SUITE=(...`` near by :origin:`utils/lxc-searx.env#L19`. For this blog post
89−we exercise on a archlinux_ image. The container of this image is named
90−``searx-archlinux``. Lets build the container, but be sure that this container
91−does not already exists, so first lets remove possible old one:
95− .. group-tab:: desktop
99− $ sudo -H ./utils/lxc.sh remove searx-archlinux
100− $ sudo -H ./utils/lxc.sh build searx-archlinux
102−.. sidebar:: The ``searx-archlinux`` container
104− is the base of all our exercises here.
106−In this container we install all services :ref:`including searx, morty & filtron
107−<lxc.sh install suite>` in once:
111− .. group-tab:: desktop
115− $ sudo -H ./utils/lxc.sh install suite searx-archlinux
117−To proxy HTTP from filtron and morty in the container to the outside of the
118−container, install nginx into the container. Once for the bot blocker filtron:
122− .. group-tab:: desktop
126− $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
127− ./utils/filtron.sh nginx install
129− INFO: got 429 from http://10.174.184.156/searx
131−and once for the content sanitizer (content proxy morty):
135− .. group-tab:: desktop
139− $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
140− ./utils/morty.sh nginx install
142− INFO: got 200 from http://10.174.184.156/morty/
144−.. sidebar:: Fully functional searx suite
146− From here on you have a fully functional searx suite running with bot blocker
147− (filtron) and Web content sanitizer (content proxy morty) needed for a
148− *privacy protecting* search engine.
150−On your system, the IP of your ``searx-archlinux`` container differs from
151−http://10.174.184.156/searx, just open the URL reported in your installation
152−protocol in your WEB browser from the desktop to test the instance from outside
155−In such a searx suite admins can maintain and access the debug log of the
156−different services quite easy.
158−.. _working in containers:
160−In containers, work as usual
161−============================
163−Usually you open a root-bash using ``sudo -H bash``. In case of LXC containers
164−open the root-bash in the container using ``./utils/lxc.sh cmd
169− .. group-tab:: desktop
173− $ sudo -H ./utils/lxc.sh cmd searx-archlinux bash
174− INFO: [searx-archlinux] bash
175− [root@searx-archlinux searx]# pwd
178−The prompt ``[root@searx-archlinux ...]`` signals, that you are the root user in
179−the searx-container. To debug the running searx instance use:
183− .. group-tab:: root@searx-archlinux
187− $ ./utils/searx.sh inspect service
189− use [CTRL-C] to stop monitoring the log
192−Back in the browser on your desktop open the service http://10.174.184.156/searx
193−and run your application tests while the debug log is shown in the terminal from
194−above. You can stop monitoring using ``CTRL-C``, this also disables the *"debug
195−option"* in searx's settings file and restarts the searx uwsgi application. To
196−debug services from filtron and morty analogous use:
200− .. group-tab:: root@searx-archlinux
204− $ ./utils/filtron.sh inspect service
205− $ ./utils/morty.sh inspect service
207−Another point we have to notice is that each service (:ref:`searx <searx.sh>`,
208−:ref:`filtron <filtron.sh>` and :ref:`morty <morty.sh>`) runs under dedicated
209−system user account with the same name (compare :ref:`create searx user`). To
210−get a shell from theses accounts, simply call one of the scripts:
214− .. group-tab:: root@searx-archlinux
218− $ ./utils/searx.sh shell
219− $ ./utils/filtron.sh shell
220− $ ./utils/morty.sh shell
222−To get in touch, open a shell from the service user (searx@searx-archlinux):
226− .. group-tab:: desktop
230− $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
231− ./utils/searx.sh shell
232− // exit with [CTRL-D]
233− (searx-pyenv) [searx@searx-archlinux ~]$ ...
235−The prompt ``[searx@searx-archlinux]`` signals that you are logged in as system
236−user ``searx`` in the ``searx-archlinux`` container and the python *virtualenv*
237−``(searx-pyenv)`` environment is activated.
241− .. group-tab:: searx@searx-archlinux
245− (searx-pyenv) [searx@searx-archlinux ~]$ pwd
250−Wrap production into developer suite
251−====================================
253−In this section we will see how to change the *"Fully functional searx suite"*
254−from a LXC container (which is quite ready for production) into a developer
255−suite. For this, we have to keep an eye on the :ref:`installation basic`:
257−- searx setup in: ``/etc/searx/settings.yml``
258−- searx user's home: ``/usr/local/searx``
259−- virtualenv in: ``/usr/local/searx/searx-pyenv``
260−- searx software in: ``/usr/local/searx/searx-src``
262−The searx software is a clone of the ``git_url`` (see :ref:`settings global`) and
263−the working tree is checked out from the ``git_branch``. With the use of the
264−:ref:`searx.sh` the searx service was installed as :ref:`uWSGI application
265−<searx uwsgi>`. To maintain this service, we can use ``systemctl`` (compare
266−:ref:`service architectures on distributions <uwsgi configuration>`).
270− .. group-tab:: desktop
274− $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
275− systemctl stop uwsgi@searx
277−With the command above, we stopped the searx uWSGI-App in the archlinux
280−The uWSGI-App for the archlinux dsitros is configured in
281−:origin:`utils/templates/etc/uwsgi/apps-archlinux/searx.ini`, from where at
282−least you should attend the settings of ``uid``, ``chdir``, ``env`` and
285− env = SEARX_SETTINGS_PATH=/etc/searx/settings.yml
286− http = 127.0.0.1:8888
288− chdir = /usr/local/searx/searx-src/searx
289− virtualenv = /usr/local/searx/searx-pyenv
290− pythonpath = /usr/local/searx/searx-src
292−If you have read the :ref:`"Good to know section" <lxc.sh>` you remember, that
293−each container shares the root folder of the repository and the command
294−``utils/lxc.sh cmd`` handles relative path names **transparent**. To wrap the
295−searx installation into a developer one, we simple have to create a smylink to
296−the **transparent** reposetory from the desktop. Now lets replace the
297−repository at ``searx-src`` in the container with the working tree from outside
302− .. group-tab:: container becomes a developer suite
306− $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
307− mv /usr/local/searx/searx-src /usr/local/searx/searx-src.old
309− $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
310− ln -s /share/searx/ /usr/local/searx/searx-src
312−Now we can develop as usual in the working tree of our desktop system. Every
313−time the software was changed, you have to restart the searx service (in the
318− .. group-tab:: desktop
322− $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
323− systemctl restart uwsgi@searx
326−Remember: :ref:`working in containers` .. here are just some examples from my
331− .. group-tab:: desktop
333− To *inspect* the searx instance (already described above):
337− $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
338− ./utils/searx.sh inspect service
340− Run :ref:`makefile`, e.g. to test inside the container:
344− $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
347− To install all prerequisites needed for a :ref:`buildhosts`:
351− $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
352− ./utils/searx.sh install buildhost
354− To build the docs on a buildhost :ref:`buildhosts`:
358− $ sudo -H ./utils/lxc.sh cmd searx-archlinux \
361−.. _blog-lxcdev-202006 abstract:
366−We build up a fully functional searx suite in a archlinux container:
370− $ sudo -H ./utils/lxc.sh install suite searx-archlinux
372−To access HTTP from the desktop we installed nginx for the services inside the
377− .. group-tab:: [root@searx-archlinux]
381− $ ./utils/filtron.sh nginx install
382− $ ./utils/morty.sh nginx install
384−To wrap the suite into a developer one, we created a symbolic link to the
385−repository which is shared **transparent** from the desktop's file system into
390− .. group-tab:: [root@searx-archlinux]
394− $ mv /usr/local/searx/searx-src /usr/local/searx/searx-src.old
395− $ ln -s /share/searx/ /usr/local/searx/searx-src
396− $ systemctl restart uwsgi@searx
398−To get remarks from the suite of the archlinux container we can use:
402− .. group-tab:: desktop
406− $ sudo -H ./utils/lxc.sh show suite searx-archlinux
408− [searx-archlinux] INFO: (eth0) filtron: http://10.174.184.156:4004/ http://10.174.184.156/searx
409− [searx-archlinux] INFO: (eth0) morty: http://10.174.184.156:3000/
410− [searx-archlinux] INFO: (eth0) docs.live: http://10.174.184.156:8080/
411− [searx-archlinux] INFO: (eth0) IPv6: http://[fd42:573b:e0b3:e97e:216:3eff:fea5:9b65]
docs/blog/private-engines.rstdeleted−65
@@ -1,65 +0,0 @@
1−==================================
2−Limit access to your searx engines
3−==================================
5−Administrators might find themselves wanting to limit access to some of the
6−enabled engines on their instances. It might be because they do not want to
7−expose some private information through an offline engine. Or they
8−would rather share engines only with their trusted friends or colleagues.
15−To solve this issue private engines were introduced in :pull:`1823`.
16−A new option was added to engines named `tokens`. It expects a list
17−of strings. If the user making a request presents one of the tokens
18−of an engine, they can access information about the engine
19−and make search requests.
21−Example configuration to restrict access to the Arch Linux Wiki engine:
25− - name : arch linux wiki
28− tokens : [ 'my-secret-token' ]
31−Unless a user has configured the right token, the engine is going
32−to be hidden from him/her. It is not going to be included in the
33−list of engines on the Preferences page and in the output of
34−`/config` REST API call.
36−Tokens can be added to one's configuration on the Preferences page
37−under "Engine tokens". The input expects a comma separated list of
40−The distribution of the tokens from the administrator to the users
41−is not carved in stone. As providing access to such engines
42−implies that the admin knows and trusts the user, we do not see
43−necessary to come up with a strict process. Instead,
44−we would like to add guidelines to the documentation of the feature.
49−Now that searx has support for both offline engines and private engines,
50−it is possible to add concrete engines which benefit from these features.
51−For example engines which search on the local host running the instance.
52−Be it searching your file system or querying a private database. Be creative
53−and come up with new solutions which fit your use case.
58−This development was sponsored by `Search and Discovery Fund`_ of `NLnet Foundation`_ .
60−.. _Search and Discovery Fund: https://nlnet.nl/discovery
61−.. _NLnet Foundation: https://nlnet.nl/
65−| kvch // 2020.02.28 22:26
docs/blog/python3.rst+1−1
@@ -54,7 +54,7 @@ If you found bugs
54Please open an issue on `GitHub`_. Make sure that you mention your Python
54Please open an issue on `GitHub`_. Make sure that you mention your Python
55version in your issue, so we can investigate it properly.
55version in your issue, so we can investigate it properly.
57−.. _GitHub: https://github.com/searx/searx/issues
57+.. _GitHub: https://github.com/asciimoo/searx/issues
59Acknowledgment
59Acknowledgment
60==============
60==============
docs/blog/search-database-engines.rstdeleted−95
@@ -1,95 +0,0 @@
1−===============================
2−Query more of your NoSQL stores
3−===============================
5−From now on, searx lets you to query your NoSQL data stores:
10−The reference configuration of the engines are included ``settings.yml`` just commented out,
11−as you have to set various options and install dependencies before using them.
13−By default, the engines use ``key-value`` template for displaying results.
14−If you are not satisfied with the original result layout,
15−you can use your owm template by placing the template under
16−``searx/templates/{theme_name}/result_templates/{template_name}`` and setting
17−``result_template`` attribute to ``{template_name}``.
19−Futhermore, if you do not want to expose these engines on a public instance, you can
20−still add them and limit the access by setting ``tokens`` as described in the `blog post about
23−Configuring searx to use the stores
24−===================================
26−NoSQL data stores are used for storing arbitrary data without first defining their
32−Reqired package: ``redis``
34−Redis is a key value based data store usually stored in memory.
36−Select a database to search in and set its index in the option ``db``. You can
37−either look for exact matches or use partial keywords to find what you are looking for
38−by configuring ``exact_match_only``.
40−In this example you can search for exact matches in your first database:
45− engine : redis_server
46− exact_match_only : True
49− password : secret-password
58−Required package: ``pymongo``
60−MongoDB is a document based database program that handles JSON like data.
62−In order to query MongoDB, you have to select a ``database`` and a ``collection``. Furthermore,
63−you have to select a ``key`` that is going to be searched. MongoDB also supports the option ``exact_match_only``, so configure it
66−Above is an example configuration for using a MongoDB collection:
84−This development was sponsored by `Search and Discovery Fund`_ of `NLnet Foundation`_ .
86−.. _Redis: https://redis.io/
87−.. _MongoDB: https://mongodb.com/
88−.. _blog post about private engines: private-engines.html#private-engines
89−.. _Search and Discovery Fund: https://nlnet.nl/discovery
90−.. _NLnet Foundation: https://nlnet.nl/
94−| kvch // 2021.07.13 23:16
docs/blog/search-indexer-engines.rstdeleted−114
@@ -1,114 +0,0 @@
1−===============================
2−Query your local search engines
3−===============================
5−From now on, searx lets you to query your locally running search engines. The following
6−ones are supported now:
12−All of the engines above are added to ``settings.yml`` just commented out, as you have to
13−``base_url`` for all them.
15−Please note that if you are not using HTTPS to access these engines, you have to enable
16−HTTP requests by setting ``enable_http`` to ``True``.
18−Futhermore, if you do not want to expose these engines on a public instance, you can
19−still add them and limit the access by setting ``tokens`` as described in the `blog post about
22−Configuring searx for search engines
23−====================================
25−Each search engine is powerful, capable of full-text search.
30−Elasticsearch supports numerous ways to query the data it is storing. At the moment
31−the engine supports the most popular search methods: ``match``, ``simple_query_string``, ``term`` and ``terms``.
33−If none of the methods fit your use case, you can select ``custom`` query type and provide the JSON payload
34−searx has to submit to Elasticsearch in ``custom_query_json``.
36−The following is an example configuration for an Elasticsearch instance with authentication
37−configured to read from ``my-index`` index.
41− - name : elasticsearch
43− engine : elasticsearch
44− base_url : http://localhost:9200
55−This search engine is aimed at individuals and small companies. It is designed for
56−small-scale (less than 10 million documents) data collections. E.g. it is great for storing
57−web pages you have visited and searching in the contents later.
59−The engine supports faceted search, so you can search in a subset of documents of the collection.
60−Futhermore, you can search in Meilisearch instances that require authentication by setting ``auth_token``.
62−Here is a simple example to query a Meilisearch instance:
69− base_url : http://localhost:7700
77−Solr is a popular search engine based on Lucene, just like Elasticsearch.
78−But instead of searching in indices, you can search in collections.
80−This is an example configuration for searching in the collection ``my-collection`` and get
81−the results in ascending order.
88− base_url : http://localhost:8983
89− collection : my-collection
97−The next step is to add support for various SQL databases.
102−This development was sponsored by `Search and Discovery Fund`_ of `NLnet Foundation`_ .
104−.. _blog post about private engines: private-engines.html#private-engines
105−.. _Elasticsearch: https://www.elastic.co/elasticsearch/
106−.. _Meilisearch: https://www.meilisearch.com/
107−.. _Solr: https://solr.apache.org/
108−.. _Search and Discovery Fund: https://nlnet.nl/discovery
109−.. _NLnet Foundation: https://nlnet.nl/
113−| kvch // 2021.04.07 23:16
docs/blog/sql-engines.rstdeleted−117
@@ -1,117 +0,0 @@
5−Now you can query SQL servers using searx. The following ones are supported:
11−All of the engines above are added to ``settings.yml`` just commented out, as you have to
12−set the required attributes for the engines, e.g. ``database``. By default, the engines use
13−``key-value`` template for displaying results. If you are not satisfied with the original result layout,
14−you can use your owm template by placing the template under
15−``searx/templates/{theme_name}/result_templates/{template_name}`` and setting
16−``result_template`` attribute to ``{template_name}``.
18−As mentioned in previous blog posts, if you do not wish to expose these engines on a
19−public instance, you can still add them and limit the access by setting ``tokens``
20−as described in the `blog post about private engines`_.
25−The configuration of the new database engines are similar. You must put a valid
26−SELECT SQL query in ``query_str``. At the moment you can only bind at most
27−one parameter in your query. By setting the attribute ``limit`` you can
28−define how many results you want from the SQL server. Basically, it
29−is the same as the LIMIT keyword in SQL.
31−Please, do not include LIMIT or OFFSET in your SQL query as the engines
32−rely on these keywords during paging. If you want to configure the number of returned results
33−use the option ``limit``.
38−PostgreSQL is a powerful and robust open source database.
40−Before configuring the PostgreSQL engine, you must install the dependency ``psychopg2``.
42−You can find an example configuration below:
48− database : my_database
51− query_str : 'SELECT * from my_table WHERE my_column = %(query)s'
58−MySQL is said to be the most popular open source database.
60−Before enabling MySQL engine, you must install the package ``mysql-connector-python``.
62−The authentication plugin is configurable by setting ``auth_plugin`` in the attributes.
63−By default it is set to ``caching_sha2_password``.
65−This is an example configuration for quering a MySQL server:
70− engine : mysql_server
71− database : my_database
75− query_str : 'SELECT * from my_table WHERE my_column=%(query)s'
82−SQLite is a small, fast and reliable SQL database engine. It does not require
85−You can read from your database ``my_database`` using this example configuration:
92− database : my_database
93− query_str : 'SELECT * FROM my_table WHERE my_column=:query'
99−The next step is to add support for more data stores, e.g. Redis and MongoDB.
104−This development was sponsored by `Search and Discovery Fund`_ of `NLnet Foundation`_ .
106−.. _PostgreSQL: https://www.postgresql.org/
107−.. _MySQL: https://www.mysql.com/
108−.. _SQLite: https://www.sqlite.org/index.html
109−.. _blog post about private engines: private-engines.html#private-engines
110−.. _Search and Discovery Fund: https://nlnet.nl/discovery
111−.. _NLnet Foundation: https://nlnet.nl/
115−| kvch // 2021.05.23 23:16
docs/build-templates/filtron.rstdeleted−52
@@ -1,52 +0,0 @@
9− $ sudo -H useradd --shell /bin/bash --system \\
10− --home-dir \"$SERVICE_HOME\" \\
11− --comment \"Privacy-respecting metasearch engine\" $SERVICE_USER
13− $ sudo -H mkdir \"$SERVICE_HOME\"
14− $ sudo -H chown -R \"$SERVICE_GROUP:$SERVICE_GROUP\" \"$SERVICE_HOME\"
26− $ cat > \"$GO_ENV\" <<EOF
27− export GOPATH=${SERVICE_HOME}/go-apps
28− export PATH=\$PATH:${SERVICE_HOME}/local/go/bin:\$GOPATH/bin
30− $ sudo -i -u \"${SERVICE_USER}\"
31− (${SERVICE_USER}) $ echo 'source $GO_ENV' >> ~/.profile
32− (${SERVICE_USER}) $ mkdir ${SERVICE_HOME}/local
33− (${SERVICE_USER}) $ wget --progress=bar -O \"${GO_TAR}\" \\
35− (${SERVICE_USER}) $ tar -C ${SERVICE_HOME}/local -xzf \"${GO_TAR}\"
36− (${SERVICE_USER}) $ which go
37− ${SERVICE_HOME}/local/go/bin/go
41−.. START install filtron
49− $ sudo -i -u \"${SERVICE_USER}\"
50− (${SERVICE_USER}) $ go get -v -u github.com/asciimoo/filtron
52−.. END install filtron
docs/build-templates/morty.rstdeleted−52
@@ -1,52 +0,0 @@
9− $ sudo -H useradd --shell /bin/bash --system \\
10− --home-dir \"$SERVICE_HOME\" \\
11− --comment \"Privacy-respecting metasearch engine\" $SERVICE_USER
13− $ sudo -H mkdir \"$SERVICE_HOME\"
14− $ sudo -H chown -R \"$SERVICE_GROUP:$SERVICE_GROUP\" \"$SERVICE_HOME\"
26− $ cat > \"$GO_ENV\" <<EOF
27− export GOPATH=${SERVICE_HOME}/go-apps
28− export PATH=\$PATH:${SERVICE_HOME}/local/go/bin:\$GOPATH/bin
30− $ sudo -i -u \"${SERVICE_USER}\"
31− (${SERVICE_USER}) $ echo 'source $GO_ENV' >> ~/.profile
32− (${SERVICE_USER}) $ mkdir ${SERVICE_HOME}/local
33− (${SERVICE_USER}) $ wget --progress=bar -O \"${GO_TAR}\" \\
35− (${SERVICE_USER}) $ tar -C ${SERVICE_HOME}/local -xzf \"${GO_TAR}\"
36− (${SERVICE_USER}) $ which go
37− ${SERVICE_HOME}/local/go/bin/go
41−.. START install morty
49− $ sudo -i -u \"${SERVICE_USER}\"
50− (${SERVICE_USER}) $ go get -v -u github.com/asciimoo/morty
docs/build-templates/searx.rstdeleted−210
@@ -1,210 +0,0 @@
1−.. template evaluated by: ./utils/searx.sh docs
2−.. hint: all dollar-names are variables, dollar sign itself is quoted by: \\$
4−.. START distro-packages
8− .. group-tab:: Ubuntu / debian
12− $ sudo -H apt-get install -y \\
15− .. group-tab:: Arch Linux
19− $ sudo -H pacman -S --noconfirm \\
22− .. group-tab:: Fedora / RHEL
26− $ sudo -H dnf install -y \\
29−.. END distro-packages
31−.. START build-packages
35− .. group-tab:: Ubuntu / debian
39− $ sudo -H apt-get install -y \\
42− .. group-tab:: Arch Linux
46− $ sudo -H pacman -S --noconfirm \\
49− .. group-tab:: Fedora / RHEL
53− $ sudo -H dnf install -y \\
66− $ sudo -H useradd --shell /bin/bash --system \\
67− --home-dir \"$SERVICE_HOME\" \\
68− --comment 'Privacy-respecting metasearch engine' $SERVICE_USER
70− $ sudo -H mkdir \"$SERVICE_HOME\"
71− $ sudo -H chown -R \"$SERVICE_GROUP:$SERVICE_GROUP\" \"$SERVICE_HOME\"
83− $ sudo -H -u ${SERVICE_USER} -i
84− (${SERVICE_USER})$ git clone \"https://github.com/searx/searx.git\" \"$SEARX_SRC\"
88−.. START create virtualenv
96− (${SERVICE_USER})$ python3 -m venv \"${SEARX_PYENV}\"
97− (${SERVICE_USER})$ echo \". ${SEARX_PYENV}/bin/activate\" >> \"$SERVICE_HOME/.profile\"
99−.. END create virtualenv
101−.. START manage.sh update_packages
109− $ sudo -H -u ${SERVICE_USER} -i
111− (${SERVICE_USER})$ command -v python && python --version
112− $SEARX_PYENV/bin/python
115− # update pip's boilerplate ..
117− pip install -U setuptools
118− pip install -U wheel
119− pip install -U pyyaml
121− # jump to searx's working tree and install searx into virtualenv
122− (${SERVICE_USER})$ cd \"$SEARX_SRC\"
123− (${SERVICE_USER})$ pip install -e .
126−.. END manage.sh update_packages
128−.. START searx config
132− .. group-tab:: Use default settings
136− $ sudo -H mkdir -p \"$(dirname ${SEARX_SETTINGS_PATH})\"
137− $ sudo -H cp \"$SEARX_SRC/utils/templates/etc/searx/use_default_settings.yml\" \\
138− \"${SEARX_SETTINGS_PATH}\"
140− .. group-tab:: searx/settings.yml
144− $ sudo -H mkdir -p \"$(dirname ${SEARX_SETTINGS_PATH})\"
145− $ sudo -H cp \"$SEARX_SRC/searx/settings.yml\" \\
146− \"${SEARX_SETTINGS_PATH}\"
150− .. group-tab:: minimal setup
154− $ sudo -H sed -i -e \"s/ultrasecretkey/\$(openssl rand -hex 16)/g\" \"$SEARX_SETTINGS_PATH\"
155− $ sudo -H sed -i -e \"s/{instance_name}/searx@\$(uname -n)/g\" \"$SEARX_SETTINGS_PATH\"
159−.. START check searx installation
168− $ sudo -H sed -i -e \"s/debug : False/debug : True/g\" \"$SEARX_SETTINGS_PATH\"
171− $ sudo -H -u ${SERVICE_USER} -i
172− (${SERVICE_USER})$ cd ${SEARX_SRC}
173− (${SERVICE_USER})$ export SEARX_SETTINGS_PATH=\"${SEARX_SETTINGS_PATH}\"
174− (${SERVICE_USER})$ python searx/webapp.py
177− $ sudo -H sed -i -e \"s/debug : True/debug : False/g\" \"$SEARX_SETTINGS_PATH\"
179−Open WEB browser and visit http://$SEARX_INTERNAL_URL . If you are inside a
180−container or in a script, test with curl:
184− .. group-tab:: WEB browser
188− $ xdg-open http://$SEARX_INTERNAL_URL
192− .. code-block:: none
194− $ curl --location --verbose --head --insecure $SEARX_INTERNAL_URL
196− * Trying 127.0.0.1:8888...
198− * Connected to 127.0.0.1 (127.0.0.1) port 8888 (#0)
200− > Host: 127.0.0.1:8888
201− > User-Agent: curl/7.68.0
204− * Mark bundle as not supporting multiuse
205− * HTTP 1.0, assume close after body
210−.. END check searx installation
@@ -1,16 +1,17 @@
1# -*- coding: utf-8 -*-
1# -*- coding: utf-8 -*-
2−# SPDX-License-Identifier: AGPL-3.0-or-later
4import sys, os
3import sys, os
4+from searx.version import VERSION_STRING
5from pallets_sphinx_themes import ProjectLink
5from pallets_sphinx_themes import ProjectLink
7−from searx import brand
7+GIT_URL = os.environ.get("GIT_URL", "https://github.com/asciimoo/searx")
8−from searx.version import VERSION_STRING
8+SEARX_URL = os.environ.get("SEARX_URL", "https://searx.me")
9+DOCS_URL = os.environ.get("DOCS_URL", "https://asciimoo.github.io/searx/")
10# Project --------------------------------------------------------------
11# Project --------------------------------------------------------------
12project = u'searx'
13project = u'searx'
13−copyright = u'2015-2021, Adam Tauber, Noémi Ványi'
14+copyright = u'2015-2019, Adam Tauber, Noémi Ványi'
14author = u'Adam Tauber'
15author = u'Adam Tauber'
15release, version = VERSION_STRING, VERSION_STRING
16release, version = VERSION_STRING, VERSION_STRING
16highlight_language = 'none'
17highlight_language = 'none'
@@ -21,41 +22,33 @@ master_doc = "index"
21source_suffix = '.rst'
22source_suffix = '.rst'
22numfig = True
23numfig = True
24−exclude_patterns = ['build-templates/*.rst']
25+from searx import webapp
29−searx.search.initialize()
30jinja_contexts = {
26jinja_contexts = {
31− 'searx': {
27+ 'webapp': dict(**webapp.__dict__)
32− 'engines': searx.engines.engines,
33− 'plugins': searx.plugins.plugins
37# usage:: lorem :patch:`f373169` ipsum
30# usage:: lorem :patch:`f373169` ipsum
38extlinks = {}
31extlinks = {}
40# upstream links
33# upstream links
41−extlinks['wiki'] = ('https://github.com/searx/searx/wiki/%s', ' ')
34+extlinks['wiki'] = ('https://github.com/asciimoo/searx/wiki/%s', ' ')
42−extlinks['pull'] = ('https://github.com/searx/searx/pull/%s', 'PR ')
35+extlinks['pull'] = ('https://github.com/asciimoo/searx/pull/%s', 'PR ')
44# links to custom brand
37# links to custom brand
45−extlinks['origin'] = (brand.GIT_URL + '/blob/' + brand.GIT_BRANCH + '/%s', 'git://')
38+extlinks['origin'] = (GIT_URL + '/blob/master/%s', 'git://')
46−extlinks['patch'] = (brand.GIT_URL + '/commit/%s', '#')
39+extlinks['patch'] = (GIT_URL + '/commit/%s', '#')
47−extlinks['search'] = (brand.SEARX_URL + '/%s', '#')
40+extlinks['search'] = (SEARX_URL + '/%s', '#')
48−extlinks['docs'] = (brand.DOCS_URL + '/%s', 'docs: ')
41+extlinks['docs'] = (DOCS_URL + '/%s', 'docs: ')
49extlinks['pypi'] = ('https://pypi.org/project/%s', 'PyPi: ')
42extlinks['pypi'] = ('https://pypi.org/project/%s', 'PyPi: ')
50extlinks['man'] = ('https://manpages.debian.org/jump?q=%s', '')
43extlinks['man'] = ('https://manpages.debian.org/jump?q=%s', '')
51#extlinks['role'] = (
44#extlinks['role'] = (
52# 'https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-%s', '')
45# 'https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-%s', '')
53extlinks['duref'] = (
46extlinks['duref'] = (
54− 'https://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#%s', '')
47+ 'http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#%s', '')
55extlinks['durole'] = (
48extlinks['durole'] = (
56− 'https://docutils.sourceforge.net/docs/ref/rst/roles.html#%s', '')
49+ 'http://docutils.sourceforge.net/docs/ref/rst/roles.html#%s', '')
57extlinks['dudir'] = (
50extlinks['dudir'] = (
58− 'https://docutils.sourceforge.net/docs/ref/rst/directives.html#%s', '')
51+ 'http://docutils.sourceforge.net/docs/ref/rst/directives.html#%s', '')
59extlinks['ctan'] = (
52extlinks['ctan'] = (
60 'https://ctan.org/pkg/%s', 'CTAN: ')
53 'https://ctan.org/pkg/%s', 'CTAN: ')
@@ -68,8 +61,6 @@ extensions = [
68 "pallets_sphinx_themes",
61 "pallets_sphinx_themes",
69 "sphinx_issues", # https://github.com/sloria/sphinx-issues/blob/master/README.rst
62 "sphinx_issues", # https://github.com/sloria/sphinx-issues/blob/master/README.rst
70 "sphinxcontrib.jinja", # https://github.com/tardyp/sphinx-jinja
63 "sphinxcontrib.jinja", # https://github.com/tardyp/sphinx-jinja
71− "sphinxcontrib.programoutput", # https://github.com/NextThought/sphinxcontrib-programoutput
72− 'linuxdoc.kernel_include', # Implementation of the 'kernel-include' reST-directive.
73 'linuxdoc.rstFlatTable', # Implementation of the 'flat-table' reST-directive.
64 'linuxdoc.rstFlatTable', # Implementation of the 'flat-table' reST-directive.
74 'linuxdoc.kfigure', # Sphinx extension which implements scalable image handling.
65 'linuxdoc.kfigure', # Sphinx extension which implements scalable image handling.
75 "sphinx_tabs.tabs", # https://github.com/djungelorm/sphinx-tabs
66 "sphinx_tabs.tabs", # https://github.com/djungelorm/sphinx-tabs
@@ -84,12 +75,11 @@ intersphinx_mapping = {
84 "sphinx" : ("https://www.sphinx-doc.org/en/master/", None),
75 "sphinx" : ("https://www.sphinx-doc.org/en/master/", None),
87−issues_github_path = "searx/searx"
78+issues_github_path = "asciimoo/searx"
89# HTML -----------------------------------------------------------------
80# HTML -----------------------------------------------------------------
91sys.path.append(os.path.abspath('_themes'))
82sys.path.append(os.path.abspath('_themes'))
92−sys.path.insert(0, os.path.abspath("../utils/"))
93html_theme_path = ['_themes']
83html_theme_path = ['_themes']
94html_theme = "searx"
84html_theme = "searx"
@@ -100,21 +90,14 @@ imgmath_font_size = 14
100# sphinx.ext.imgmath setup END
90# sphinx.ext.imgmath setup END
102html_theme_options = {"index_sidebar_logo": True}
92html_theme_options = {"index_sidebar_logo": True}
103−html_context = {"project_links": [] }
94+ "project_links": [
104−html_context["project_links"].append(ProjectLink("Blog", "blog/index.html"))
106− html_context["project_links"].append(ProjectLink("Source", brand.GIT_URL))
95+ ProjectLink("Source", GIT_URL),
107−if brand.WIKI_URL:
96+ ProjectLink("Wiki", "https://github.com/asciimoo/searx/wiki"),
108− html_context["project_links"].append(ProjectLink("Wiki", brand.WIKI_URL))
97+ ProjectLink("Public instances", "https://asciimoo.github.io/searx/user/public_instances.html"),
109−if brand.PUBLIC_INSTANCES:
98+ ProjectLink("Twitter", "https://twitter.com/Searx_engine"),
110− html_context["project_links"].append(ProjectLink("Public instances", brand.PUBLIC_INSTANCES))
99+ ]
111−if brand.TWITTER_URL:
100+}
112− html_context["project_links"].append(ProjectLink("Twitter", brand.TWITTER_URL))
114− html_context["project_links"].append(ProjectLink("Issue Tracker", brand.ISSUE_URL))
115−if brand.CONTACT_URL:
116− html_context["project_links"].append(ProjectLink("Contact", brand.CONTACT_URL))
118html_sidebars = {
101html_sidebars = {
119 "**": ["project.html", "relations.html", "searchbox.html"],
102 "**": ["project.html", "relations.html", "searchbox.html"],
docs/dev/contribution_guide.rst+25−34
@@ -4,11 +4,6 @@
4How to contribute
4How to contribute
5=================
5=================
12Prime directives: Privacy, Hackability
7Prime directives: Privacy, Hackability
13======================================
8======================================
@@ -87,7 +82,7 @@ In order to submit a patch, please follow the steps below:
88- Add yourself to the :origin:`AUTHORS.rst` file.
83- Add yourself to the :origin:`AUTHORS.rst` file.
90−- Choose meaningful commit messages, read `Conventional Commits`_
85+- Choose meaning full commit messages, read `Conventional Commits`_
@@ -117,8 +112,8 @@ Translation currently takes place on :ref:`transifex <translation>`.
117Documentation
112Documentation
118=============
113=============
120−.. _Sphinx: https://www.sphinx-doc.org
115+.. _Sphinx: http://www.sphinx-doc.org
121−.. _reST: https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html
116+.. _reST: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html
123.. sidebar:: The reST sources
118.. sidebar:: The reST sources
@@ -132,58 +127,54 @@ Here is an example which makes a complete rebuild:
133.. code:: sh
128.. code:: sh
135− $ make docs.clean docs.html
130+ $ make docs-clean docs
137 The HTML pages are in dist/docs.
132 The HTML pages are in dist/docs.
139−.. _make docs.live:
134+.. _make docs-live:
141live build
136live build
142----------
137----------
144−.. _sphinx-autobuild:
145− https://github.com/executablebooks/sphinx-autobuild/blob/master/README.md
147−.. sidebar:: docs.clean
139+.. sidebar:: docs-clean
149 It is recommended to assert a complete rebuild before deploying (use
141 It is recommended to assert a complete rebuild before deploying (use
150− ``docs.clean``).
142+ ``docs-clean``).
152Live build is like WYSIWYG. If you want to edit the documentation, its
144Live build is like WYSIWYG. If you want to edit the documentation, its
153−recommended to use. The Makefile target ``docs.live`` builds the docs, opens
145+recommended to use. The Makefile target ``docs-live`` builds the docs, opens
154URL in your favorite browser and rebuilds every time a reST file has been
146URL in your favorite browser and rebuilds every time a reST file has been
157.. code:: sh
149.. code:: sh
159− $ make docs.live
151+ $ make docs-live
161 The HTML pages are in dist/docs.
153 The HTML pages are in dist/docs.
162− ... Serving on http://0.0.0.0:8000
154+ ... Serving on http://0.0.0.0:8080
163 ... Start watching changes
155 ... Start watching changes
165−Live builds are implemented by sphinx-autobuild_. Use environment
166−``$(SPHINXOPTS)`` to pass arguments to the sphinx-autobuild_ command. Except
167−option ``--host`` (which is always set to ``0.0.0.0``) you can pass any
168−argument. E.g to find and use a free port, use:
172− $ SPHINXOPTS="--port 0" make docs.live
174− ... Serving on http://0.0.0.0:50593
178.. _deploy on github.io:
158.. _deploy on github.io:
180deploy on github.io
160deploy on github.io
181-------------------
161-------------------
183−To deploy documentation at :docs:`github.io <.>` use Makefile target :ref:`make
163+To deploy documentation at :docs:`github.io <.>` use Makefile target
184−docs.gh-pages`, which builds the documentation and runs all the needed git add,
164+:ref:`make gh-pages`, which will builds the documentation, clones searx into a sub
165+folder ``gh-pages``, cleans it, copies the doc build into and runs all the
185−commit and push:
166+needed git add, commit and push:
187.. code:: sh
168.. code:: sh
189− $ make docs.clean docs.gh-pages
170+ $ make docs-clean gh-pages
172+ SPHINX docs --> file://<...>/dist/docs
173+ The HTML pages are in dist/docs.
175+ Cloning into 'gh-pages' ...
177+ cd gh-pages; git checkout gh-pages >/dev/null
178+ Switched to a new branch 'gh-pages'
180+ doc available at --> https://asciimoo.github.io/searx
docs/dev/engine_overview.rst+31−70
@@ -18,9 +18,6 @@ engines. Adapters are stored under the folder :origin:`searx/engines`.
19 :backlinks: entry
19 :backlinks: entry
22−.. _general engine configuration:
24general engine configuration
21general engine configuration
25============================
22============================
@@ -37,36 +34,30 @@ settings. However, the standard way is the following:
37engine file
34engine file
38-----------
35-----------
40−======================= =========== ========================================================
37+======================= =========== ===========================================
41argument type information
38argument type information
42−======================= =========== ========================================================
39+======================= =========== ===========================================
43categories list pages, in which the engine is working
40categories list pages, in which the engine is working
44paging boolean support multible pages
41paging boolean support multible pages
42+language_support boolean support language choosing
45time_range_support boolean support search time range
43time_range_support boolean support search time range
46−engine_type str ``online`` by default, other possibles values are
44+offline boolean engine runs offline
47− ``offline``, ``online_dictionnary``, ``online_currency``
48−======================= =========== ========================================================
45+======================= =========== ===========================================
50.. _engine settings:
47.. _engine settings:
52settings.yml
49settings.yml
53------------
50------------
55−======================= =========== =============================================
52+======================= =========== ===========================================
56argument type information
53argument type information
57−======================= =========== =============================================
54+======================= =========== ===========================================
58name string name of search-engine
55name string name of search-engine
59engine string name of searx-engine
56engine string name of searx-engine
60 (filename without ``.py``)
57 (filename without ``.py``)
61−enable_http bool enable HTTP
62− (by default only HTTPS is enabled).
63shortcut string shortcut of search-engine
58shortcut string shortcut of search-engine
64timeout string specific timeout for search-engine
59timeout string specific timeout for search-engine
65−display_error_messages boolean display error messages on the web UI
66−proxies dict set proxies for a specific engine
67− (e.g. ``proxies : {http: socks5://proxy:port,
68− https: socks5://proxy:port}``)
69−======================= =========== =============================================
60+======================= =========== ===========================================
@@ -98,6 +89,7 @@ example code
98 # engine dependent config
89 # engine dependent config
99 categories = ['general']
90 categories = ['general']
100 paging = True
91 paging = True
92+ language_support = True
103making a request
95making a request
@@ -112,48 +104,21 @@ passed arguments
112These arguments can be used to construct the search query. Furthermore,
104These arguments can be used to construct the search query. Furthermore,
113parameters with default value can be redefined for special purposes.
105parameters with default value can be redefined for special purposes.
115−If the ``engine_type`` is ``online```:
117−====================== ============== ========================================================================
118−argument type default-value, information
119−====================== ============== ========================================================================
126−headers.User-Agent str a random User-Agent
127−category str current category, like ``'general'``
128−safesearch int ``0``, between ``0`` and ``2`` (normal, moderate, strict)
129−time_range Optional[str] ``None``, can be ``day``, ``week``, ``month``, ``year``
130−pageno int current pagenumber
131−language str specific language code like ``'en_US'``, or ``'all'`` if unspecified
132−====================== ============== ========================================================================
135−If the ``engine_type`` is ``online_dictionnary```, in addition to the ``online`` arguments:
137====================== ============ ========================================================================
107====================== ============ ========================================================================
138argument type default-value, information
108argument type default-value, information
139====================== ============ ========================================================================
109====================== ============ ========================================================================
140−from_lang str specific language code like ``'en_US'``
110+url string ``''``
141−to_lang str specific language code like ``'en_US'``
111+method string ``'GET'``
142−query str the text query without the languages
112+headers set ``{}``
143−====================== ============ ========================================================================
113+data set ``{}``
144−
114+cookies set ``{}``
145−If the ``engine_type`` is ``online_currency```, in addition to the ``online`` arguments:
115+verify boolean ``True``
146−
116+headers.User-Agent string a random User-Agent
117+category string current category, like ``'general'``
118+started datetime current date-time
119+pageno int current pagenumber
120+language string specific language code like ``'en_US'``, or ``'all'`` if unspecified
147====================== ============ ========================================================================
121====================== ============ ========================================================================
148−argument type default-value, information
149−====================== ============ ========================================================================
150−amount float the amount to convert
151−from str ISO 4217 code
153−from_name str currency name
154−to_name str currency name
155−====================== ============ ========================================================================
158parsed arguments
123parsed arguments
159----------------
124----------------
@@ -162,20 +127,16 @@ The function ``def request(query, params):`` always returns the ``params``
162variable. Inside searx, the following paramters can be used to specify a search
127variable. Inside searx, the following paramters can be used to specify a search
165−=================== =========== ==========================================================================
130+============ =========== =========================================================
166−argument type information
131+argument type information
167−=================== =========== ==========================================================================
132+============ =========== =========================================================
168−url str requested url
133+url string requested url
169−method str HTTP request method
134+method string HTTP request method
170−headers set HTTP header information
135+headers set HTTP header information
171−data set HTTP data information
136+data set HTTP data information (parsed if ``method != 'GET'``)
172−cookies set HTTP cookies
137+cookies set HTTP cookies
173−verify bool Performing SSL-Validity check
138+verify boolean Performing SSL-Validity check
174−follow_redirects bool Follow redirects
139+============ =========== =========================================================
175−max_redirects int maximum redirects, hard limit
176−soft_max_redirects int maximum redirects, soft limit. Record an error but don't stop the engine
177−raise_for_httperror bool True by default: raise an exception if the HTTP code of response is >= 300
178−=================== =========== ==========================================================================
181example code
142example code
@@ -294,7 +255,7 @@ latitude latitude of result (in decimal format)
294longitude longitude of result (in decimal format)
255longitude longitude of result (in decimal format)
295boundingbox boundingbox of result (array of 4. values
256boundingbox boundingbox of result (array of 4. values
296 ``[lat-min, lat-max, lon-min, lon-max]``)
257 ``[lat-min, lat-max, lon-min, lon-max]``)
297−geojson geojson of result (https://geojson.org/)
258+geojson geojson of result (http://geojson.org)
298osm.type type of osm-object (if OSM-Result)
259osm.type type of osm-object (if OSM-Result)
299osm.id id of osm-object (if OSM-Result)
260osm.id id of osm-object (if OSM-Result)
300address.name name of object
261address.name name of object
@@ -3,8 +3,7 @@ Developer documentation
3=======================
3=======================
5.. toctree::
5.. toctree::
6− :maxdepth: 2
6+ :maxdepth: 1
10 contribution_guide
9 contribution_guide
docs/dev/makefile.rst+128−129
@@ -1,33 +1,65 @@
1.. _makefile:
1.. _makefile:
3−========
3+================
4−Makefile
4+Makefile Targets
5−========
5+================
7.. _gnu-make: https://www.gnu.org/software/make/manual/make.html#Introduction
7.. _gnu-make: https://www.gnu.org/software/make/manual/make.html#Introduction
9.. sidebar:: build environment
9.. sidebar:: build environment
11− Before looking deeper at the targets, first read about :ref:`make
11+ Before looking deeper at the targets, first read about :ref:`makefile setup`
12− install`.
12+ and :ref:`make pyenv`.
14− To install system requirements follow :ref:`buildhosts`.
14+With the aim to simplify development cycles, started with :pull:`1756` a
15−
15+``Makefile`` based boilerplate was added. If you are not familiar with
16−All relevant build tasks are implemented in :origin:`manage.sh` and for CI or
17−IDE integration a small ``Makefile`` wrapper is available. If you are not
18−familiar with Makefiles, we recommend to read gnu-make_ introduction.
16+Makefiles, we recommend to read gnu-make_ introduction.
20The usage is simple, just type ``make {target-name}`` to *build* a target.
18The usage is simple, just type ``make {target-name}`` to *build* a target.
21−Calling the ``help`` target gives a first overview (``make help``):
19+Calling the ``help`` target gives a first overview::
23−.. program-output:: bash -c "cd ..; make --no-print-directory help"
21+ $ make help
22+ test - run developer tests
23+ docs - build documentation
24+ docs-live - autobuild HTML documentation while editing
25+ run - run developer instance
26+ install - developer install (./local)
27+ uninstall - uninstall (./local)
28+ gh-pages - build docs & deploy on gh-pages branch
29+ clean - drop builds and environments
25.. contents:: Contents
32.. contents:: Contents
28 :backlinks: entry
35 :backlinks: entry
43+.. _git stash: https://git-scm.com/docs/git-stash
45+The main setup is done in the :origin:`Makefile`::
47+ export GIT_URL=https://github.com/asciimoo/searx
48+ export SEARX_URL=https://searx.me
49+ export DOCS_URL=https://asciimoo.github.io/searx
51+.. sidebar:: fork & upstream
53+ Commit changes in your (local) branch, fork or whatever, but do not push them
54+ upstream / `git stash`_ is your friend.
56+:GIT_URL: Changes this, to point to your searx fork.
58+:SEARX_URL: Changes this, to point to your searx instance.
60+:DOCS_URL: If you host your own (branded) documentation, change this URL.
30−.. _make install:
62+.. _make pyenv:
32Python environment
64Python environment
33==================
65==================
@@ -36,42 +68,31 @@ Python environment
37 ``source ./local/py3/bin/activate``
69 ``source ./local/py3/bin/activate``
39−We do no longer need to build up the virtualenv manually. Jump into your git
71+With Makefile we do no longer need to build up the virualenv manually (as
72+described in the :ref:`devquickstart` guide). Jump into your git working tree
40−working tree and release a ``make install`` to get a virtualenv with a
73+and release a ``make pyenv``:
41−*developer install* of searx (:origin:`setup.py`). ::
74+
43 $ cd ~/searx-clone
77 $ cd ~/searx-clone
44− $ make install
78+ $ make pyenv
45− PYENV [virtualenv] installing ./requirements*.txt into local/py3
79+ PYENV usage: source ./local/py3/bin/activate
48− PYENV [install] pip install -e 'searx[test]'
50− Successfully installed argparse-1.4.0 searx
51− BUILDENV INFO:searx:load the default settings from ./searx/settings.yml
52− BUILDENV INFO:searx:Initialisation done
53− BUILDENV build utils/brand.env
55−If you release ``make install`` multiple times the installation will only
82+With target ``pyenv`` a development environment (aka virtualenv) was build up in
56−rebuild if the sha256 sum of the *requirement files* fails. With other words:
83+``./local/py3/``. To make a *developer install* of searx (:origin:`setup.py`)
57−the check fails if you edit the requirements listed in
84+into this environment, use make target ``install``:
58−:origin:`requirements-dev.txt` and :origin:`requirements.txt`). ::
85+
60 $ make install
88 $ make install
61− PYENV OK
89+ PYENV usage: source ./local/py3/bin/activate
62− PYENV [virtualenv] requirements.sha256 failed
63− [virtualenv] - 6cea6eb6def9e14a18bf32f8a3e... ./requirements-dev.txt
64− [virtualenv] - 471efef6c73558e391c3adb35f4... ./requirements.txt
66− PYENV [virtualenv] installing ./requirements*.txt into local/py3
90+ PYENV using virtualenv from ./local/py3
69− PYENV [install] pip install -e 'searx[test]'
91+ PYENV install .
71− Successfully installed argparse-1.4.0 searx
93+You have never to think about intermediate targets like ``pyenv`` or
72− BUILDENV INFO:searx:load the default settings from ./searx/settings.yml
94+``install``, the ``Makefile`` chains them as requisites. Just run your main
73− BUILDENV INFO:searx:Initialisation done
95+target.
74− BUILDENV build utils/brand.env
76.. sidebar:: drop environment
97.. sidebar:: drop environment
@@ -79,7 +100,10 @@ the check fails if you edit the requirements listed in
79 <make clean>` first.
100 <make clean>` first.
81If you think, something goes wrong with your ./local environment or you change
102If you think, something goes wrong with your ./local environment or you change
82−the :origin:`setup.py` file, you have to call :ref:`make clean`.
103+the :origin:`setup.py` file (or the requirements listed in
104+:origin:`requirements-dev.txt` and :origin:`requirements.txt`), you have to call
84.. _make run:
108.. _make run:
@@ -89,113 +113,88 @@ the :origin:`setup.py` file, you have to call :ref:`make clean`.
89To get up a running a developer instance simply call ``make run``. This enables
113To get up a running a developer instance simply call ``make run``. This enables
90*debug* option in :origin:`searx/settings.yml`, starts a ``./searx/webapp.py``
114*debug* option in :origin:`searx/settings.yml`, starts a ``./searx/webapp.py``
91instance, disables *debug* option again and opens the URL in your favorite WEB
115instance, disables *debug* option again and opens the URL in your favorite WEB
92−browser (:man:`xdg-open`)::
116+browser (:man:`xdg-open`):
94− $ make run
120+ $ make run
95− PYENV OK
121+ PYENV usage: source ./local/py3/bin/activate
96− SEARX_DEBUG=1 ./manage.sh pyenv.cmd python ./searx/webapp.py
123+ ./local/py3/bin/python ./searx/webapp.py
98− INFO:werkzeug: * Running on http://127.0.0.1:8888/ (Press CTRL+C to quit)
125+ INFO:werkzeug: * Running on http://127.0.0.1:8888/ (Press CTRL+C to quit)
100.. _make clean:
128.. _make clean:
102``make clean``
130``make clean``
103==============
131==============
105−Drop all intermediate files, all builds, but keep sources untouched. Before
133+Drop all intermediate files, all builds, but keep sources untouched. Includes
134+target ``pyclean`` which drops ./local environment. Before calling ``make
106−calling ``make clean`` stop all processes using :ref:`make install`. ::
135+clean`` stop all processes using :ref:`make pyenv`.
108 $ make clean
139 $ make clean
109− CLEAN pyenv
140+ CLEAN pyclean
110− PYENV [virtualenv] drop ./local/py3
141+ CLEAN clean
111− CLEAN docs -- ./build/docs ./dist/docs
112− CLEAN locally installed npm dependencies
116.. _make docs:
143.. _make docs:
118−``make docs docs.autobuild docs.clean``
145+``make docs docs-live docs-clean``
119−=======================================
146+==================================
121−We describe the usage of the ``doc.*`` targets in the :ref:`How to contribute /
148+We describe the usage of the ``doc*`` targets in the :ref:`How to contribute /
122Documentation <contrib docs>` section. If you want to edit the documentation
149Documentation <contrib docs>` section. If you want to edit the documentation
123−read our :ref:`make docs.live` section. If you are working in your own brand,
150+read our :ref:`make docs-live` section. If you are working in your own brand,
124−adjust your :ref:`settings global`.
151+adjust your :ref:`Makefile setup <makefile setup>`.
126−.. _make docs.gh-pages:
154+.. _make gh-pages:
128−``make docs.gh-pages``
156+``make gh-pages``
129−======================
157+=================
131−To deploy on github.io first adjust your :ref:`settings global`. For any
159+To deploy on github.io first adjust your :ref:`Makefile setup <makefile
132−further read :ref:`deploy on github.io`.
160+setup>`. For any further read :ref:`deploy on github.io`.
134.. _make test:
162.. _make test:
136``make test``
164``make test``
137=============
165=============
139−Runs a series of tests: :ref:`make test.pylint`, ``test.pep8``, ``test.unit``
167+Runs a series of tests: ``test.pep8``, ``test.unit``, ``test.robot`` and does
140−and ``test.robot``. You can run tests selective, e.g.::
168+additional :ref:`pylint checks <make pylint>`. You can run tests selective,
142− $ make test.pep8 test.unit test.sh
171+.. code:: sh
151−``make test.sh``
173+ $ make test.pep8 test.unit
152−================
174+ . ./local/py3/bin/activate; ./manage.sh pep8_check
153−
175+ [!] Running pep8 check
154−:ref:`sh lint` / if you have changed some bash scripting run this test before
176+ . ./local/py3/bin/activate; ./manage.sh unit_tests
155−commit.
177+ [!] Running unit tests
157−.. _make test.pylint:
179+.. _make pylint:
159−``make test.pylint``
181+``make pylint``
160−====================
182+===============
162.. _Pylint: https://www.pylint.org/
184.. _Pylint: https://www.pylint.org/
186+Before commiting its recommend to do some (more) linting. Pylint_ is known as
164−Pylint_ is known as one of the best source-code, bug and quality checker for the
187+one of the best source-code, bug and quality checker for the Python programming
188+language. Pylint_ is not yet a quality gate within our searx project (like
189+:ref:`test.pep8 <make test>` it is), but Pylint_ can help to improve code
165−Python programming language. The pylint profile we use at searx project is
190+quality anyway. The pylint profile we use at searx project is found in
166−found in project's root folder :origin:`.pylintrc`.
191+project's root folder :origin:`.pylintrc`.
168−.. _make search.checker:
170−``search.checker.{engine name}``
193+Code quality is a ongoing process. Don't try to fix all messages from Pylint,
171−================================
194+run Pylint and check if your changed lines are bringing up new messages. If so,
172−
195+fix it. By this, code quality gets incremental better and if there comes the
173−To check all engines::
196+day, the linting is balanced out, we might decide to add Pylint as a quality
177−To check a engine with whitespace in the name like *google news* replace space
180− make search.checker.google_news
182−To see HTTP requests and more use SEARX_DEBUG::
184− make SEARX_DEBUG=1 search.checker.google_news
186−.. _3xx: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_redirection
188−To filter out HTTP redirects (3xx_)::
190− make SEARX_DEBUG=1 search.checker.google_news | grep -A1 "HTTP/1.1\" 3[0-9][0-9]"
192− Engine google news Checking
193− https://news.google.com:443 "GET /search?q=life&hl=en&lr=lang_en&ie=utf8&oe=utf8&ceid=US%3Aen&gl=US HTTP/1.1" 302 0
194− https://news.google.com:443 "GET /search?q=life&hl=en-US&lr=lang_en&ie=utf8&oe=utf8&ceid=US:en&gl=US HTTP/1.1" 200 None
196− https://news.google.com:443 "GET /search?q=computer&hl=en&lr=lang_en&ie=utf8&oe=utf8&ceid=US%3Aen&gl=US HTTP/1.1" 302 0
197− https://news.google.com:443 "GET /search?q=computer&hl=en-US&lr=lang_en&ie=utf8&oe=utf8&ceid=US:en&gl=US HTTP/1.1" 200 None
201``make pybuild``
200``make pybuild``
@@ -204,7 +203,9 @@ To filter out HTTP redirects (3xx_)::
204.. _PyPi: https://pypi.org/
203.. _PyPi: https://pypi.org/
205.. _twine: https://twine.readthedocs.io/en/latest/
204.. _twine: https://twine.readthedocs.io/en/latest/
207−Build Python packages in ``./dist/py``::
206+Build Python packages in ``./dist/py``.
209 $ make pybuild
210 $ make pybuild
@@ -212,11 +213,9 @@ Build Python packages in ``./dist/py``::
212 running sdist
213 running sdist
213 running egg_info
214 running egg_info
217− $ ls ./dist
216+ $ ls ./dist/py/
218− searx-0.18.0-py3-none-any.whl searx-0.18.0.tar.gz
217+ searx-0.15.0-py3-none-any.whl searx-0.15.0.tar.gz
220−To upload packages to PyPi_, there is also a ``pypi.upload`` target (to test use
219+To upload packages to PyPi_, there is also a ``upload-pypi`` target. It needs
221−``pypi.upload.test``). Since you are not the owner of :pypi:`searx` you will
220+twine_ to be installed. Since you are not the owner of :pypi:`searx` you will
222−never need to upload.
221+never need the latter.
@@ -30,21 +30,6 @@ Example plugin
30 ctx['search'].suggestions.add('example')
30 ctx['search'].suggestions.add('example')
31 return True
31 return True
36−External plugins are standard python modules implementing all the requirements of the standard plugins.
37−Plugins can be enabled by adding them to :ref:`settings.yml`'s ``plugins`` section.
38−Example external plugin can be found `here <https://github.com/asciimoo/searx_external_plugin_example>`_.
43−To enable your plugin register your plugin in
44−searx > plugin > __init__.py.
45−And at the bottom of the file add your plugin like.
46−``plugins.register(name_of_python_file)``
48Plugin entry points
33Plugin entry points
49===================
34===================
docs/dev/quickstart.rst+103−26
@@ -4,52 +4,129 @@
4Development Quickstart
4Development Quickstart
5======================
5======================
7−.. _npm: https://www.npmjs.com/
7+.. sidebar:: :ref:`makefile`
9−Searx loves developers, just clone and start hacking. All the rest is done for
9+ For additional developer purpose there are :ref:`makefile`.
10−you simply by using :ref:`make <makefile>`.
10+
11+This quickstart guide gets your environment set up with searx. Furthermore, it
12+gives a short introduction to the ``manage.sh`` script.
14+How to setup your development environment
15+=========================================
17+.. sidebar:: :ref:`make pyenv <make pyenv>`
19+ Alternatively use the :ref:`make pyenv`.
21+First, clone the source code of searx to the desired folder. In this case the
22+source is cloned to ``~/myprojects/searx``. Then create and activate the
23+searx-ve virtualenv and install the required packages using ``manage.sh``.
28+ git clone https://github.com/asciimoo/searx.git
31+ . ./searx-ve/bin/activate
32+ ./manage.sh update_dev_packages
38+.. sidebar:: :ref:`make test.unit <make test>`
40+ Alternatively use the ``test.pep8``, ``test.unit``, ``test.robot`` targets.
42+Tests can be run using the ``manage.sh`` script. Following tests and checks are
48+- Unit test coverage check
50+For example unit tests are run with the command below:
54+ ./manage.sh unit_tests
56+For further test options, please consult the help of the ``manage.sh`` script or
57+read :ref:`make test`.
60+How to compile styles and javascript
61+====================================
63+.. _less: http://lesscss.org/
64+.. _NodeJS: https://nodejs.org
69+Less_ is required to build the styles of searx. Less_ can be installed using
70+either NodeJS_ or Apt.
12.. code:: sh
72.. code:: sh
14− git clone https://github.com/searx/searx.git
74+ sudo -H apt-get install nodejs
75+ sudo -H npm install -g less
16−Here is how a minimal workflow looks like:
77+OR
18−1. *start* hacking
79+.. code:: sh
19−2. *run* your code: :ref:`make run`
20−3. *test* your code: :ref:`make test`
22−If you think at some point something fails, go back to *start*. Otherwise,
81+ sudo -H apt-get install node-less
23−choose a meaningful commit message and we are happy to receive your pull
24−request. To not end in *wild west* we have some directives, please pay attention
25−to our ":ref:`how to contribute`" guideline.
27−If you implement themes, you will need to compile styles and JavaScript before
83+After satisfying the requirements styles can be build using ``manage.sh``
30.. code:: sh
85.. code:: sh
32− make themes
87+ ./manage.sh styles
90+How to build the source of the oscar theme
91+==========================================
93+.. _grunt: https://gruntjs.com/
34−Don't forget to install npm_ first.
95+Grunt_ must be installed in order to build the javascript sources. It depends on
96+NodeJS, so first Node has to be installed.
36−.. tabs::
98+.. code:: sh
100+ sudo -H apt-get install nodejs
101+ sudo -H npm install -g grunt-cli
38− .. group-tab:: Ubuntu / debian
103+After installing grunt, the files can be built using the following command:
40− .. code:: sh
107+ ./manage.sh grunt_build
42− sudo -H apt-get install npm
44− .. group-tab:: Arch Linux
110+Tips for debugging/development
111+==============================
46− .. code-block:: sh
113+.. sidebar:: :ref:`make run`
48− sudo -H pacman -S npm
115+ Makefile target ``run`` already enables debug option for your developer
116+ session / see :ref:`make run`.
50− .. group-tab:: Fedora / RHEL
118+Turn on debug logging
119+ Whether you are working on a new engine or trying to eliminate a bug, it is
120+ always a good idea to turn on debug logging. When debug logging is enabled a
121+ stack trace appears, instead of the cryptic ``Internal Server Error``
122+ message. It can be turned on by setting ``debug: False`` to ``debug: True`` in
123+ :origin:`settings.yml <searx/settings.yml>`.
52− .. code-block:: sh
125+.. sidebar:: :ref:`make test`
54− sudo -H dnf install npm
127+ Alternatively use the :ref:`make test` targets.
129+Run ``./manage.sh tests`` before creating a PR.
130+ Failing build on Travis is common because of PEP8 checks. So a new commit
131+ must be created containing these format fixes. This phase can be skipped if
132+ ``./manage.sh tests`` is run locally before creating a PR.
@@ -15,8 +15,8 @@ generated and deployed at :docs:`github.io <.>`. For build prerequisites read
15:ref:`docs build`.
15:ref:`docs build`.
17The source files of Searx's documentation are located at :origin:`docs`. Sphinx
17The source files of Searx's documentation are located at :origin:`docs`. Sphinx
18−assumes source files to be encoded in UTF-8 by defaul. Run :ref:`make docs.live
18+assumes source files to be encoded in UTF-8 by defaul. Run :ref:`make docs-live
19−<make docs.live>` to build HTML while editing.
19+<make docs-live>` to build HTML while editing.
21.. sidebar:: Further reading
21.. sidebar:: Further reading
@@ -285,7 +285,7 @@ content becomes smart.
285 :rst:role:`pep` :pep:`8` ``:pep:`8```
285 :rst:role:`pep` :pep:`8` ``:pep:`8```
286 sphinx.ext.extlinks_
286 sphinx.ext.extlinks_
287 --------------------------------------------------------------------------------------------------
287 --------------------------------------------------------------------------------------------------
288− project's wiki article :wiki:`Offline-engines` ``:wiki:`Offline-engines```
288+ project's wiki article :wiki:`Searx-instances` ``:wiki:`Searx-instances```
289 to docs public URL :docs:`dev/reST.html` ``:docs:`dev/reST.html```
289 to docs public URL :docs:`dev/reST.html` ``:docs:`dev/reST.html```
290 files & folders origin :origin:`docs/dev/reST.rst` ``:origin:`docs/dev/reST.rst```
290 files & folders origin :origin:`docs/dev/reST.rst` ``:origin:`docs/dev/reST.rst```
291 pull request :pull:`1756` ``:pull:`1756```
291 pull request :pull:`1756` ``:pull:`1756```
@@ -319,18 +319,14 @@ To list all anchors of the inventory (e.g. ``python``) use:
319.. code:: sh
319.. code:: sh
321 $ python -m sphinx.ext.intersphinx https://docs.python.org/3/objects.inv
321 $ python -m sphinx.ext.intersphinx https://docs.python.org/3/objects.inv
323− $ python -m sphinx.ext.intersphinx https://searx.github.io/searx/objects.inv
326Literal blocks
323Literal blocks
327==============
324==============
329The simplest form of :duref:`literal-blocks` is a indented block introduced by
326The simplest form of :duref:`literal-blocks` is a indented block introduced by
330two colons (``::``). For highlighting use :dudir:`highlight` or :ref:`reST
327two colons (``::``). For highlighting use :dudir:`highlight` or :ref:`reST
331−code` directive. To include literals from external files use
328+code` directive. To include literals from external files use directive
332−:rst:dir:`literalinclude` or :ref:`kernel-include <kernel-include-directive>`
329+:dudir:`literalinclude`.
333−directive (latter one expands environment variables in the path name).
335.. _reST literal:
331.. _reST literal:
@@ -1276,33 +1272,28 @@ Templating
1277.. sidebar:: Build environment
1273.. sidebar:: Build environment
1279− All *generic-doc* tasks are running in the :ref:`make install`.
1275+ All *generic-doc* tasks are running in the :ref:`build environment <make
1281Templating is suitable for documentation which is created generic at the build
1278Templating is suitable for documentation which is created generic at the build
1282−time. The sphinx-jinja_ extension evaluates jinja_ templates in the :ref:`make
1279+time. The sphinx-jinja_ extension evaluates jinja_ templates in the :ref:`build
1283−install` (with searx modules installed). We use this e.g. to build chapter:
1280+environment <make pyenv>` (with searx modules installed). We use this e.g. to
1284−:ref:`engines generic`. Below the jinja directive from the
1281+build chapter: :ref:`engines generic`. Below the jinja directive from the
1285:origin:`docs/admin/engines.rst` is shown:
1282:origin:`docs/admin/engines.rst` is shown:
1287.. literalinclude:: ../admin/engines.rst
1284.. literalinclude:: ../admin/engines.rst
1288 :language: reST
1285 :language: reST
1289 :start-after: .. _configured engines:
1286 :start-after: .. _configured engines:
1291−The context for the template is selected in the line ``.. jinja:: searx``. In
1288+The context for the template is selected in the line ``.. jinja:: webapp``. In
1292−sphinx's build configuration (:origin:`docs/conf.py`) the ``searx`` context
1289+sphinx's build configuration (:origin:`docs/conf.py`) the ``webapp`` context
1293−contains the ``engines`` and ``plugins``.
1290+points to the name space of the python module: ``webapp``.
1295.. code:: py
1292.. code:: py
1297− import searx.search
1294+ from searx import webapp
1298− import searx.engines
1299− import searx.plugins
1300− searx.search.initialize()
1301 jinja_contexts = {
1295 jinja_contexts = {
1302− 'searx': {
1296+ 'webapp': dict(**webapp.__dict__)
1303− 'engines': searx.engines.engines,
1304− 'plugins': searx.plugins.plugins
@@ -1321,8 +1312,9 @@ others are basic-tabs_ and code-tabs_. Below a *group-tab* example from
1322.. literalinclude:: ../admin/buildhosts.rst
1313.. literalinclude:: ../admin/buildhosts.rst
1323 :language: reST
1314 :language: reST
1324− :start-after: .. SNIP sh lint requirements
1315+ :start-after: .. _system requirements:
1325− :end-before: .. SNAP sh lint requirements
1316+ :end-before: .. _system requirements END:
1327.. _math:
1319.. _math:
@@ -1399,27 +1391,27 @@ The next example shows the difference of ``\tfrac`` (*textstyle*) and ``\dfrac``
1400.. _readability: https://docs.python-guide.org/writing/style/
1392.. _readability: https://docs.python-guide.org/writing/style/
1401.. _Sphinx-Primer:
1393.. _Sphinx-Primer:
1402− https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html
1394+ http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html
1403.. _reST: https://docutils.sourceforge.io/rst.html
1395.. _reST: https://docutils.sourceforge.io/rst.html
1404.. _Sphinx Roles:
1396.. _Sphinx Roles:
1405 https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html
1397 https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html
1406−.. _Sphinx: https://www.sphinx-doc.org
1398+.. _Sphinx: http://www.sphinx-doc.org
1407−.. _`sphinx-doc FAQ`: https://www.sphinx-doc.org/en/stable/faq.html
1399+.. _`sphinx-doc FAQ`: http://www.sphinx-doc.org/en/stable/faq.html
1408.. _Sphinx markup constructs:
1400.. _Sphinx markup constructs:
1409− https://www.sphinx-doc.org/en/stable/markup/index.html
1401+ http://www.sphinx-doc.org/en/stable/markup/index.html
1410.. _`sphinx cross references`:
1402.. _`sphinx cross references`:
1411− https://www.sphinx-doc.org/en/stable/markup/inline.html#cross-referencing-arbitrary-locations
1403+ http://www.sphinx-doc.org/en/stable/markup/inline.html#cross-referencing-arbitrary-locations
1412.. _sphinx.ext.extlinks:
1404.. _sphinx.ext.extlinks:
1413 https://www.sphinx-doc.org/en/master/usage/extensions/extlinks.html
1405 https://www.sphinx-doc.org/en/master/usage/extensions/extlinks.html
1414−.. _intersphinx: https://www.sphinx-doc.org/en/stable/ext/intersphinx.html
1406+.. _intersphinx: http://www.sphinx-doc.org/en/stable/ext/intersphinx.html
1415−.. _sphinx config: https://www.sphinx-doc.org/en/stable/config.html
1407+.. _sphinx config: http://www.sphinx-doc.org/en/stable/config.html
1416−.. _Sphinx's autodoc: https://www.sphinx-doc.org/en/stable/ext/autodoc.html
1408+.. _Sphinx's autodoc: http://www.sphinx-doc.org/en/stable/ext/autodoc.html
1417.. _Sphinx's Python domain:
1409.. _Sphinx's Python domain:
1418− https://www.sphinx-doc.org/en/stable/domains.html#the-python-domain
1410+ http://www.sphinx-doc.org/en/stable/domains.html#the-python-domain
1419.. _Sphinx's C domain:
1411.. _Sphinx's C domain:
1420− https://www.sphinx-doc.org/en/stable/domains.html#cross-referencing-c-constructs
1412+ http://www.sphinx-doc.org/en/stable/domains.html#cross-referencing-c-constructs
1421.. _doctree:
1413.. _doctree:
1422− https://www.sphinx-doc.org/en/master/extdev/tutorial.html?highlight=doctree#build-phases
1414+ http://www.sphinx-doc.org/en/master/extdev/tutorial.html?highlight=doctree#build-phases
1423.. _docutils: http://docutils.sourceforge.net/docs/index.html
1415.. _docutils: http://docutils.sourceforge.net/docs/index.html
1424.. _docutils FAQ: http://docutils.sourceforge.net/FAQ.html
1416.. _docutils FAQ: http://docutils.sourceforge.net/FAQ.html
1425.. _linuxdoc: https://return42.github.io/linuxdoc
1417.. _linuxdoc: https://return42.github.io/linuxdoc
@@ -1432,5 +1424,5 @@ The next example shows the difference of ``\tfrac`` (*textstyle*) and ``\dfrac``
1432.. _ImageMagick: https://www.imagemagick.org
1424.. _ImageMagick: https://www.imagemagick.org
1434.. _`Emacs Table Mode`: https://www.emacswiki.org/emacs/TableMode
1426.. _`Emacs Table Mode`: https://www.emacswiki.org/emacs/TableMode
1435−.. _`Online Tables Generator`: https://www.tablesgenerator.com/text_tables
1427+.. _`Online Tables Generator`: http://www.tablesgenerator.com/text_tables
1436.. _`OASIS XML Exchange Table Model`: https://www.oasis-open.org/specs/tm9901.html
1428.. _`OASIS XML Exchange Table Model`: https://www.oasis-open.org/specs/tm9901.html
docs/dev/search_api.rst+4−4
@@ -6,7 +6,7 @@ Search API
7The search supports both ``GET`` and ``POST``.
7The search supports both ``GET`` and ``POST``.
9−Furthermore, two endpoints ``/`` and ``/search`` are available for querying.
9+Furthermore, two enpoints ``/`` and ``/search`` are available for querying.
@@ -76,12 +76,12 @@ Parameters
76 supports safe search in the preferences page of an instance.
76 supports safe search in the preferences page of an instance.
78``theme`` : default ``oscar``
78``theme`` : default ``oscar``
79− [ ``oscar``, ``simple`` ]
79+ [ ``oscar``, ``simple``, ``legacy``, ``pix-art``, ``courgette`` ]
81 Theme of instance.
81 Theme of instance.
83 Please note, available themes depend on an instance. It is possible that an
83 Please note, available themes depend on an instance. It is possible that an
84− instance administrator deleted, created or renamed themes on their instance.
84+ instance administrator deleted, created or renamed themes on his/her instance.
85 See the available options in the preferences page of the instance.
85 See the available options in the preferences page of the instance.
87``oscar-style`` : default ``logicodev``
87``oscar-style`` : default ``logicodev``
@@ -91,7 +91,7 @@ Parameters
91 ``oscar``.
91 ``oscar``.
93 Please note, available styles depend on an instance. It is possible that an
93 Please note, available styles depend on an instance. It is possible that an
94− instance administrator deleted, created or renamed styles on their
94+ instance administrator deleted, created or renamed styles on his/her
95 instance. See the available options in the preferences page of the instance.
95 instance. See the available options in the preferences page of the instance.
97``enabled_plugins`` : optional
97``enabled_plugins`` : optional
@@ -2,14 +2,7 @@
2Welcome to searx
2Welcome to searx
3================
3================
5− *Search without being tracked.*
5+Search without being tracked.
7−Searx is a free internet metasearch engine which aggregates results from more
8−than 70 search services. Users are neither tracked nor profiled. Additionally,
9−searx can be used over Tor for online anonymity.
11−Get started with searx by using one of the Searx-instances_. If you don't trust
12−anyone, you can set up your own, see :ref:`installation`.
14.. sidebar:: Features
7.. sidebar:: Features
@@ -23,15 +16,17 @@ anyone, you can set up your own, see :ref:`installation`.
23 - Hosted by organizations, such as *La Quadrature du Net*, which promote
16 - Hosted by organizations, such as *La Quadrature du Net*, which promote
24 digital rights
17 digital rights
19+Searx is a free internet metasearch engine which aggregates results from more
20+than 70 search services. Users are neither tracked nor profiled. Additionally,
21+searx can be used over Tor for online anonymity.
23+Get started with searx by using one of the :wiki:`Searx-instances`. If you
24+don't trust anyone, you can set up your own, see :ref:`installation`.
26.. toctree::
26.. toctree::
27 :maxdepth: 2
27 :maxdepth: 2
30 user/index
29 user/index
31 admin/index
30 admin/index
35 blog/index
32 blog/index
37−.. _Searx-instances: https://searx.space
docs/searx_extra/index.rstdeleted−14
@@ -1,14 +0,0 @@
3−======================================================
4−Tooling box ``searx_extra`` for developers and users
5−======================================================
7−In the folder :origin:`searx_extra/` we maintain some tools useful for
docs/searx_extra/standalone_searx.py.rstdeleted−9
@@ -1,9 +0,0 @@
2−.. _standalone_searx.py:
4−===================================
5−``searx_extra/standalone_searx.py``
6−===================================
8−.. automodule:: searx_extra.standalone_searx
@@ -3,8 +3,8 @@ User documentation
3==================
3==================
5.. toctree::
5.. toctree::
6− :maxdepth: 2
6+ :maxdepth: 1
9 search_syntax
9 search_syntax
10 own-instance
10 own-instance
docs/user/own-instance.rst+7−9
@@ -2,10 +2,8 @@
2Why use a private instance?
2Why use a private instance?
3===========================
3===========================
5− *"Is it worth to run my own instance?"*
5+"Is it worth to run my own instance?" is a common question among searx users.
7−\.\. is a common question among searx users. Before answering this question,
8−see what options a searx user has.
6+Before answering this question, see what options a searx user has.
10Public instances are open to everyone who has access to its URL. Usually, these
8Public instances are open to everyone who has access to its URL. Usually, these
11are operated by unknown parties (from the users' point of view). Private
9are operated by unknown parties (from the users' point of view). Private
@@ -44,9 +42,9 @@ hidden from visited result pages.
44What are the consequences of using public instances?
42What are the consequences of using public instances?
45----------------------------------------------------
43----------------------------------------------------
47−If someone uses a public instance, they have to trust the administrator of that
45+If someone uses a public instance, he/she has to trust the administrator of that
48instance. This means that the user of the public instance does not know whether
46instance. This means that the user of the public instance does not know whether
49−their requests are logged, aggregated and sent or sold to a third party.
47+his/her requests are logged, aggregated and sent or sold to a third party.
51Also, public instances without proper protection are more vulnerable to abusing
49Also, public instances without proper protection are more vulnerable to abusing
52the search service, In this case the external service in exchange returns
50the search service, In this case the external service in exchange returns
@@ -56,9 +54,9 @@ results.
56I see. What about private instances?
54I see. What about private instances?
57------------------------------------
55------------------------------------
59−If users run their :ref:`own instances <installation>`, everything is in their
57+If users run their own instances, everything is in their control: the source
60−control: the source code, logging settings and private data. Unknown instance
58+code, logging settings and private data. Unknown instance administrators do not
61−administrators do not have to be trusted.
59+have to be trusted.
63Furthermore, as the default settings of their instance is editable, there is no
61Furthermore, as the default settings of their instance is editable, there is no
64need to use cookies to tailor searx to their needs. So preferences will not be
62need to use cookies to tailor searx to their needs. So preferences will not be
docs/user/public_instances.rstnew file+318
@@ -0,0 +1,318 @@
4+ links has been ported from markdown to reST by::
6+ regexpr: \[([^\]]*)\]\(([^)]*)\)
7+ substitution: `\1 <\2>`__
10+======================
11+Public Searx instances
12+======================
14+.. _mailing list: mailto:searx-instances@autistici.org
15+.. _subscription page: https://www.autistici.org/mailman/listinfo/searx-instances
21+* Up-to-date health report available on https://stats.searx.xyz [1]_, for onion
22+ (tor) services: https://stats.searx.xyz/tor.html
24+* Searx instances `mailing list`_ & `subscription page`_.
26+* Some of the Searx instances have a CAcert SSL certificate. You can install the
27+ missing root cert `from here <http://www.cacert.org/index.php?id=3>`__.
29+* To add your own Searx instance to this page send us your PR. A GitHub account
30+ is required to send PR or add an issue.
32+.. [1] Note that most of the instances with a A+ grade in CSP column in this
33+ site are not fully functional - for example auto-completion may not work.
36+List of public Searx instances
37+==============================
42+These are websites that source from other searx instances. These are useful if
43+you can't decide which Searx instance to use:
46+.. flat-table:: Meta-searx instances
54+ - source selection method
55+ - extra privacy features
57+ * - `Neocities <https://searx.neocities.org/>`__
59+ - Comodo (`Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.neocities.org>`__)
60+ - Redirects users directly to a random selection of any known running
61+ server after entering query. Requires
62+ Javascript. `Changelog <https://searx.neocities.org/changelog.html>`__.
63+ - Excludes servers with user tracking and analytics or are proxied through
66+ * - `Searxes <https://searxes.danwin1210.me/>`__ @Danwin
67+ - onion v3 `hidden service
68+ <http://searxes.nmqnkngye4ct7bgss4bmv5ca3wpa55yugvxen5kz2bbq67lwy6ps54yd.onion/>`__
69+ - Let's Encrypt (`Verification
70+ <https://www.ssllabs.com/ssltest/analyze.html?d=searxes.danwin1210.me>`__)
71+ - sources data from a randomly selected running server that satisfies
72+ admin's quality standards which is used for post-processing
73+ - filters out privacy-hostile websites (like CloudFlare) and either marks
74+ them as such or folds them below the high ranking results.
80+**BEFORE EDITING**: Please add your Searx instance by respecting the alphabetic order.
84+ Public instances listed here may yield less accurate results as they have
85+ much higher traffic and consequently have a higher chance of being blocked by
86+ search providers such as Google, Qwant, Bing, Startpage, etc. Hosting your
87+ own instance or using an instance that isn't listed here may give you a more
88+ consistent search experience.
90+* `ai.deafpray.wtf/searx <https://ai.deafpray.wtf/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=ai.deafpray.wtf/searx>`__
91+* `bamboozle.it <https://bamboozle.it/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=bamboozle.it>`__
92+* `bee.jaekr.dev <https://bee.jaekr.dev>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=bee.jaekr.dev>`__
93+* `beezboo.com <https://beezboo.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=beezboo.com>`__
94+* `burtrum.org/searx <https://burtrum.org/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=burtrum.org/searx>`__
95+* `darmarit.cloud/searx <https://darmarit.cloud/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=darmarit.cloud/searx>`__
96+* `dc.ax <https://dc.ax>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=dc.ax>`__
97+* `dynabyte.ca <https://dynabyte.ca>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=dynabyte.ca>`__
98+* `goso.ga <https://goso.ga/search>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=goso.ga>`__
99+* `gruble.de <https://www.gruble.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.gruble.de>`__
100+* `haku.ahmia.fi <https://haku.ahmia.fi/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=haku.ahmia.fi&latest>`__
101+* `haku.lelux.fi <https://haku.lelux.fi/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=haku.lelux.fi>`__
102+* `huyo.me <https://huyo.me/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=huyo.me>`__
103+* `jsearch.pw <https://jsearch.pw>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=jsearch.pw>`__
104+* `le-dahut.com/searx <https://le-dahut.com/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=le-dahut.com/searx>`__
105+* `mijisou.com <https://mijisou.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=mijisou.com>`__
106+* `null.media <https://null.media>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=null.media>`__
107+* `openworlds.info <https://openworlds.info/>`__ - Issuer: Let's Encrypt
108+* `perfectpixel.de/searx/ <https://www.perfectpixel.de/searx/>`__ - Issuer: LetsEncrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.perfectpixel.de>`__
109+* `ransack.i2p <http://ransack.i2p/>`__ - I2P eepsite, only accessible with `I2P <https://geti2p.net/>`__ (`base32 address <http://mqamk4cfykdvhw5kjez2gnvse56gmnqxn7vkvvbuor4k4j2lbbnq.b32.i2p>`__)
110+* `rapu.nz <https://rapu.nz/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=rapu.nz>`__
111+* `roflcopter.fr <https://wtf.roflcopter.fr/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=wtf.roflcopter.fr>`__
112+* `roteserver.de/searx <https://roteserver.de/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=roteserver.de>`__
113+* `s.cmd.gg <https://s.cmd.gg>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=s.cmd.gg>`__
114+* `search.activemail.de <https://search.activemail.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.activemail.de&latest>`__
115+* `search.anonymize.com <https://search.anonymize.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.anonymize.com>`__
116+* `search.azkware.net <https://search.azkware.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.azkware.net>`__
117+* `search.biboumail.fr <https://search.biboumail.fr/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.biboumail.fr>`__
118+* `search.blankenberg.eu <https://search.blankenberg.eu>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.blankenberg.eu>`__
119+* `search.d4networks.com <https://search.d4networks.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.d4networks.com>`__
120+* `search.datensturm.net <https://search.datensturm.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.datensturm.net>`__
121+* `search.disroot.org <https://search.disroot.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.disroot.org>`__
122+* `search.ethibox.fr <https://search.ethibox.fr>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.ethibox.fr>`__
123+* `search.fossdaily.xyz <https://search.fossdaily.xyz>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.fossdaily.xyz>`__
124+* `search.galaxy.cat <https://search.galaxy.cat>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.galaxy.cat>`__
125+* `search.gibberfish.org <https://search.gibberfish.org/>`__ (as `Hidden Service <http://o2jdk5mdsijm2b7l.onion/>`__ or `Proxied through Tor <https://search.gibberfish.org/tor/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.gibberfish.org>`__
126+* `search.koehn.com <https://search.koehn.com>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.koehn.com>`__
127+* `search.lgbtq.cool <https://search.lgbtq.cool/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.lgbtq.cool>`__
128+* `search.mdosch.de <https://search.mdosch.de/>`__ (as `Hidden Service <http://search.4bkxscubgtxwvhpe.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.mdosch.de>`__
129+* `search.modalogi.com <https://search.modalogi.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.modalogi.com&latest>`__
130+* `search.moravit.com <https://search.moravit.com>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.moravit.com>`__
131+* `search.nebulacentre.net <https://search.nebulacentre.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.nebulacentre.net>`__
132+* `search.paulla.asso.fr <https://search.paulla.asso.fr/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.paulla.asso.fr>`__
133+* `search.pifferi.info <https://search.pifferi.info/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.pifferi.info&latest>`__
134+* `search.poal.co <https://search.poal.co/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.poal.co>`__
135+* `search.privacytools.io <https://search.privacytools.io/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.privacytools.io>`__ - Uses Matomo for user tracking and analytics
136+* `search.seds.nl <https://search.seds.nl/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.seds.nl&latest>`__
137+* `search.snopyta.org <https://search.snopyta.org/>`__ (as `Hidden Service <http://juy4e6eicawzdrz7.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.snopyta.org>`__
138+* `search.spaeth.me <https://search.spaeth.me/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.spaeth.me&latest>`__
139+* `search.st8.at <https://search.st8.at/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.st8.at>`__
140+* `search.stinpriza.org <https://search.stinpriza.org>`__ (as `Hidden Service <http://z5vawdol25vrmorm4yydmohsd4u6rdoj2sylvoi3e3nqvxkvpqul7bqd.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.stinpriza.org&hideResults=on>`__
141+* `search.sudo-i.net <https://search.sudo-i.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.sudo-i.net>`__
142+* `search.tolstoevsky.ml <https://search.tolstoevsky.ml>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.tolstoevsky.ml>`__
143+* `searchsin.com/searx <https://searchsin.com/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searchsin.com/searx>`__
144+* `searx.anongoth.pl <https://searx.anongoth.pl>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.anongoth.pl&latest>`__
145+* `searx.be <https://searx.be>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.be>`__
146+* `searx.ca <https://searx.ca/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ca>`__
147+* `searx.canox.net <https://searx.canox.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.canox.net>`__
148+* `searx.cybt.de <https://searx.cybt.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.cybt.de>`__
149+* `searx.de <https://www.searx.de/>`__ - Issuer: COMODO `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.de>`__
150+* `searx.decatec.de <https://searx.decatec.de>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.decatec.de>`__
151+* `searx.devol.it <https://searx.devol.it/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=sears.devol.it>`__
152+* `searx.dnswarden.com <https://searx.dnswarden.com>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.dnswarden.com>`__
153+* `searx.drakonix.net <https://searx.drakonix.net/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.drakonix.net>`__
154+* `searx.dresden.network <https://searx.dresden.network/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.dresden.network>`__
155+* `searx.elukerio.org <https://searx.elukerio.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.elukerio.org/>`__
156+* `searx.everdot.org <https://searx.everdot.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.everdot.org/>`__ - Crawls using YaCy
157+* `searx.foo.li <https://searx.foo.li>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.foo.li&hideResults=on>`__
158+* `searx.fossencdi.org <https://searx.fossencdi.org>`__ (as `Hidden Service <http://searx.cwuzdtzlubq5uual.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.fossencdi.org>`__
159+* `searx.fr32k.de <https://searx.fr32k.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.fr32k.de>`__
160+* `searx.good.one.pl <https://searx.good.one.pl>`__ (as `Hidden Service <http://searxl7u2y6gvonm.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.good.one.pl>`__
161+* `searx.gotrust.de <https://searx.gotrust.de/>`__ (as `Hidden Service <http://nxhhwbbxc4khvvlw.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.gotrust.de>`__
162+* `searx.hardwired.link <https://searx.hardwired.link/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.hardwired.link>`__
163+* `searx.hlfh.space <https://searx.hlfh.space>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.hlfh.space>`__
164+* `searx.info <https://searx.info>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.info>`__
165+* `searx.itunix.eu <https://searx.itunix.eu/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.itunix.eu>`__
166+* `searx.john-at-me.net <https://searx.john-at-me.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.john-at-me.net>`__
167+* `searx.kvch.me <https://searx.kvch.me>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.kvch.me>`__
168+* `searx.laquadrature.net <https://searx.laquadrature.net>`__ (as `Hidden Service <http://searchb5a7tmimez.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.laquadrature.net>`__
169+* `searx.lelux.fi <https://searx.lelux.fi/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=haku.lelux.fi>`__
170+* `searx.lhorn.de <https://searx.lhorn.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lhorn.de&latest>`__
171+* `searx.li <https://searx.li/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.li>`__
172+* `searx.libmail.eu <https://searx.libmail.eu/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.libmail.eu/>`__
173+* `searx.linux.pizza <https://searx.linux.pizza>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.linux.pizza>`__
174+* `searx.lynnesbian.space <https://searx.lynnesbian.space/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lynnesbian.space>`__
175+* `searx.mastodontech.de <https://searx.mastodontech.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.mastodontech.de>`__
176+* `searx.me <https://searx.me>`__ (as `Hidden Service <http://ulrn6sryqaifefld.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.me>`__
177+* `searx.mxchange.org <https://searx.mxchange.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.mxchange.org>`__
178+* `searx.nakhan.net <https://searx.nakhan.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nakhan.net>`__
179+* `searx.nixnet.xyz <https://searx.nixnet.xyz>`__ (as `Hidden Service <http://searx.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nixnet.xyz>`__
180+* `searx.nnto.net <https://searx.nnto.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nnto.net>`__
181+* `searx.openhoofd.nl <https://searx.openhoofd.nl/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=openhoofd.nl>`__
182+* `searx.openpandora.org <https://searx.openpandora.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.openpandora.org&latest>`__
183+* `searx.operationtulip.com <https://searx.operationtulip.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.operationtulip.com>`__
184+* `searx.orcadian.net <https://searx.orcadian.net/>`__ - Issuer: Comodo CA Limited `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.orcadian.net>`__
185+* `searx.ouahpit.info <https://searx.ouahpiti.info/>`__ - Issuer: Let's Encrypt
186+* `searx.pofilo.fr <https://searx.pofilo.fr/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.pofilo.fr>`__
187+* `searx.prvcy.eu <https://searx.prvcy.eu/>`__ (as `Hidden Service <http://hmfztxt3pfhevucl.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.prvcy.eu>`__
188+* `searx.pwoss.org <https://searx.pwoss.org>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.pwoss.org>`__
189+* `searx.ro <https://searx.ro/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ro>`__
190+* `searx.ru <https://searx.ru/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ru>`__
191+* `searx.solusar.de <https://searx.solusar.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.solusar.de>`__
192+* `searx.targaryen.house <https://searx.targaryen.house/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.targaryen.house>`__
193+* `searx.tuxcloud.net <https://searx.tuxcloud.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.tuxcloud.net>`__
194+* `searx.tyil.nl <https://searx.tyil.nl>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.tyil.nl>`__
195+* `searx.wegeeks.win <https://searx.wegeeks.win>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.wegeeks.win>`__
196+* `searx.win <https://searx.win/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.win&latest>`__
197+* `searx.xyz <https://searx.xyz/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.xyz&latest>`__
198+* `searx.zareldyn.net <https://searx.zareldyn.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.zareldyn.net>`__
199+* `searx.zdechov.net <https://searx.zdechov.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.zdechov.net>`__
200+* `searxs.eu <https://www.searxs.eu>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.searxs.eu&hideResults=on>`__
201+* `seeks.hsbp.org <https://seeks.hsbp.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=seeks.hsbp.org>`__ - `PGP signed fingerprints of cert <https://seeks.hsbp.org/cert>`__
202+* `skyn3t.in/srx <https://skyn3t.in/srx/>`__ - Issuer: Let's Encrypt | onion `hidden service <http://skyn3tb3bas655mw.onion/srx/>`__
203+* `spot.ecloud.global <https://spot.ecloud.global/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=spot.ecloud.global>`__
204+* `srx.sx <https://srx.sx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=srx.sx>`__
205+* `stemy.me/searx <https://stemy.me/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=stemy.me>`__
206+* `suche.dasnetzundich.de <https://suche.dasnetzundich.de>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=suche.dasnetzundich.de>`__
207+* `suche.elaon.de <https://suche.elaon.de>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=suche.elaon.de>`__
208+* `suche.xyzco456vwisukfg.onion <http://suche.xyzco456vwisukfg.onion/>`__
209+* `suche.uferwerk.org <https://suche.uferwerk.org>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=suche.uferwerk.org>`__
210+* `timdor.noip.me/searx <https://timdor.noip.me/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=timdor.noip.me/searx>`__
211+* `trovu.komun.org <https://trovu.komun.org>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=trovu.komun.org>`__
212+* `unmonito.red <https://unmonito.red/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=unmonito.red>`__
213+* `www.finden.tk <https://www.finden.tk/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.finden.tk>`__
214+* `zoek.anchel.nl <https://zoek.anchel.nl/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=zoek.anchel.nl>`__
218+Running in exclusive private walled-gardens
219+===========================================
221+These instances run in walled-gardens that exclude some segment of the general
222+public (e.g. Tor users and users sharing IPs with many other users). Caution:
223+privacy is also compromised on these sites due to exposure of cleartext traffic
224+to a third party other than the website operator.
226+* `intelme.com <https://intelme.com>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=intelme.com>`__
227+* `search404.io <https://www.search404.io/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search404.io>`__
228+* `searx.com.au <https://searx.com.au/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.com.au>`__
229+* `searx.lavatech.top <https://searx.lavatech.top/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lavatech.top>`__
230+* `searchx.mobi <https://searchx.mobi/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searchx.mobi>`__
231+* `searx.org <https://searx.org/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.org>`__
232+* `searx.run <https://searx.run/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.run>`__
233+* `searx.world <https://searx.world>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.world>`__ - Adds Amazon affiliate links
236+Running with an incorrect SSL certificate
237+=========================================
239+* `listi.me <https://listi.me/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=listi.me&latest>`__
240+* `s.matejc.com <https://s.matejc.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=s.matejc.com>`__
241+* `search.jollausers.de <https://search.jollausers.de>`__ - Incorrectly configured `SSL certificate <https://www.ssllabs.com/ssltest/analyze.html?d=search.jollausers.de>`__
242+* `search.paviro.de <https://search.paviro.de>`__ - Issuer: LetsEncrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.paviro.de>`__
243+* `searx.abenthung.it <https://searx.abenthung.it/>`__ - Issuer: Comodo CA Limited `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.abenthung.it>`__
244+* `searx.coding4schoki.org <https://searx.coding4schoki.org/>`__ - Incorrectly configured `SSL Certificate <https://www.ssllabs.com/ssltest/analyze.html?d=searx.coding4schoki.org>`__
245+* `searx.haxors.club <https://searx.haxors.club/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.haxors.club>`__
246+* `searx.nulltime.net <https://searx.nulltime.net/>`__ (as `Hidden Service <http://searx7gwtu5rh6wr.onion>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nulltime.net>`__
247+* `searx.ch <https://searx.ch/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ch>`__ (cert clock problems)
253+* `a.searx.space <https://a.searx.space>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=a.searx.space>`__ (unstable, under construction).
254+* `anyonething.de <https://anyonething.de>`__ - (was found to have become a pastebin on or before 2019-03-01) Issuer: Comodo CA Limited (Warning: uses Cloudflare) `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=anyonething.de>`__
255+* `h7jwxg5rakyfvikpi.onion <http://7jwxg5rakyfvikpi.onion/>`__ - available only as Tor Hidden Service (down on 2019-06-26)
256+* `hacktivis.me/searx <https://hacktivis.me/searx>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=hacktivis.me/searx>`__
257+* `icebal.com <https://icebal.com>`__ - (down) Issuer: Let's Encrypt
258+* `netrangler.host <https://netrangler.host>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=netrangler.host>`__
259+* `opengo.nl <https://www.opengo.nl>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.opengo.nl>`__
260+* `p9e.de <https://p9e.de/>`__ - (down - timeout) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=p9e.de>`__
261+* `rubri.co <https://rubri.co>`__ - (down) Issuer: Let's Encrypt
262+* `s.bacafe.xyz <https://s.bacafe.xyz/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=s.bacafe.xyz&latest>`__
263+* `search.alecpap.com <https://search.alecpap.com/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.alecpap.com>`__
264+* `search.blackit.de <https://search.blackit.de/>`__ - (down) Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.blackit.de>`__
265+* `search.deblan.org <https://search.deblan.org/>`__ (down) - Issuer: COMODO via GANDI `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.deblan.org>`__
266+* `search.homecomputing.fr <https://search.homecomputing.fr/>`__ - (down) Issuer: CAcert `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.homecomputing.fr>`__
267+* `search.jpope.org <https://search.jpope.org>`__ - (down - timeout) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.jpope.org>`__
268+* `search.kakise.xyz <https://search.kakise.xyz/>`__ - down
269+* `search.kosebamse.com <https://search.kosebamse.com>`__ - Issuer: LetsEncrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.kosebamse.com>`__
270+* `search.kujiu.org <https://search.kujiu.org>`__ - (down) Issuer: Let's Encrypt
271+* `search.mailaender.coffee <https://search.mailaender.coffee/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.mailaender.coffee>`__
272+* `search.matrix.ac <https://search.matrix.ac>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=matrix.ac>`__
273+* `search.mypsc.ca <https://search.mypsc.ca/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.mypsc.ca>`__
274+* `search.namedkitten.pw <https://search.namedkitten.pw>`__ - (SSL error) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.namedkitten.pw>`__
275+* `search.opentunisia.org <https://search.opentunisia.org>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.opentunisia.org>`__
276+* `search.r3d007.com <https://search.r3d007.com/>`__ - (down) Issuer: Let's Encrypt
277+* `search.static.lu <https://search.static.lu/>`__ - (down) Issuer: StartCom `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.static.lu>`__
278+* `search.teej.xyz <https://search.teej.xyz>`__ - (down) Issuer: LetsEncrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.teej.xyz>`__
279+* `search.wxzm.sx <https://search.wxzm.sx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.wxzm.sx>`__
280+* `searx.4ray.co <https://searx.4ray.co/>`__ - (no longer an instance, redirects to main page) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.4ray.co>`__
281+* `searx.32bitflo.at <https://searx.32bitflo.at/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.32bitflo.at>`__
282+* `searx.ahh.si <https://searx.ahh.si/>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ahh.si>`__
283+* `searx.angristan.xyz <https://searx.angristan.xyz/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.angristan.xyz>`__
284+* `searx.antirep.net <https://searx.antirep.net/>`__ - (return a 502 HTTP error) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.antirep.net>`__
285+* `searx.aquilenet.fr <https://searx.aquilenet.fr/>`__ - (down - 429 HTTP error) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.aquilenet.fr>`__
286+* `searx.at <https://searx.at/>`__ - (return "request exception" at every search) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.at>`__
287+* `searx.cc <https://searx.cc/>`__ - (down on 2019-06-26) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.cc>`__
288+* `searx.dk <https://searx.dk/>`__ - (down - 429 HTTP error) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.dk>`__
289+* `searx.ehrmanns.ch <https://searx.ehrmanns.ch>`__ - (down) Issuer: Let's Encrypt
290+* `searx.glibre.net <https://searx.glibre.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.glibre.net>`__
291+* `searx.infini.fr <https://searx.infini.fr>`__ - (return a page stating that the website is not installed) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.infini.fr>`__
292+* `searx.jeanphilippemorvan.info <https://searx.jeanphilippemorvan.info/>`__ - (down) Issuer: StartCom `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.jeanphilippemorvan.info>`__
293+* `searx.lhorn.de <https://searx.lhorn.de/>`__ - (redirect the Searx's github repository page) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lhorn.de&latest>`__ (only reachable from european countries)
294+* `searx.lvweb.host <https://searx.lvweb.host>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lvweb.host>`__
295+* `searx.mrtino.eu <https://searx.mrtino.eu>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.mrtino.eu>`__
296+* `searx.netzspielplatz.de <https://searx.netzspielplatz.de/>`__ - (error page about GDPR even when browsing it from USA and Asia) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.netzspielplatz.de>`__
297+* `searx.new-admin.net <https://searx.new-admin.net>`__ - (down) Issuer: Let's Encrypt
298+* `searx.nogafa.org <https://searx.nogafa.org/>`__ - (broken CSS) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nogafa.org>`__
299+* `searx.potato.hu <https://searx.potato.hu>`__ - (not a searx instance) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.potato.hu>`__
300+* `searx.rubbeldiekatz.info <https://searx.rubbeldiekatz.info/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.rubbeldiekatz.info/>`__
301+* `searx.s42.space <https://searx.s42.space>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.s42.space>`__
302+* `searx.salcay.hu <https://searx.salcay.hu/>`__ - (down - blank page) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.salcay.hu>`__
303+* `searx.selea.se <https://searx.selea.se>`__ - (Leads to default Apache page) Issuer: RapidSSL (HSTS preloaded, DNSSEC) `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.selea.se>`__ | `HSTS Preload <https://hstspreload.org/?domain=searx.selea.se>`__
304+* `searx.steinscraft.net <https://searx.steinscraft.net/>`__ - (down) Issuer: Cloudflare
305+* `searx.techregion.de <https://searx.techregion.de/>`__ - (domain expired) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.techregion.de>`__
306+* `searx.tognella.com <https://searx.tognella.com/>`__ - (down) Issuer: Cloudflare
307+* `searx.xi.ht <https://searx.xi.ht/>`__ - (return a 502 HTTP error) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.xi.ht>`__
308+* `searxist.com <https://searxist.com/>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searxist.com>`__
309+* `so.sb <https://so.sb/>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=so.sb>`__
310+* `srx.stdout.net <https://srx.stdout.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=srx.stdout.net>`__
311+* `w6f7cgdm54cyvohcuhraaafhajctyj3ihenrovuxogoagrr5g43qmoid.onion <http://w6f7cgdm54cyvohcuhraaafhajctyj3ihenrovuxogoagrr5g43qmoid.onion/>`__ - Hidden Service
312+* `win8linux.nohost.me <https://win8linux.nohost.me/searx/>`__ - (down) Issuer: Let's Encrypt
313+* `wiznet.tech <https://wiznet.tech>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=wiznet.tech>`__
314+* `www.mercurius.space <https://www.mercurius.space/>`__ - (down) Issuer: Let's Encrypt
315+* `www.ready.pm <https://www.ready.pm>`__ - Issuer: WoSign `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.ready.pm>`__
316+* `z.awsmppl.com <https://z.awsmppl.com>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=z.awsmppl.com>`__
317+* `zlsdzh.tk <https://zlsdzh.tk>`__ - (down - 404 HTTP error) Issuer: TrustAsia Technologies, Inc. `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=zlsdzh.tk>`__ *
docs/user/search_syntax.rst−24
@@ -40,27 +40,3 @@ Image search:
40Custom language in wikipedia:
40Custom language in wikipedia:
42- :search:`:hu !wp hackerspace <?q=%3Ahu%20%21wp%20hackerspace>`
42- :search:`:hu !wp hackerspace <?q=%3Ahu%20%21wp%20hackerspace>`
47−Searx does not support true multilingual search.
48−You have to use the language prefix in your search query when searching in a different language.
50−But there is a workaround:
51−By adding a new search engine with a different language, Searx will search in your default and other language.
53−Example configuration in settings.yml for a German and English speaker:
61− - name : google english
66−When searching, the default google engine will return German results and "google english" will return English results.
docs/utils/filtron.sh.rstdeleted−80
@@ -1,80 +0,0 @@
8−.. sidebar:: further reading
10− - :ref:`searx filtron`
11− - :ref:`architecture`
12− - :ref:`installation` (:ref:`nginx <installation nginx>` & :ref:`apache
13− <installation apache>`)
15−.. _Go: https://golang.org/
16−.. _filtron: https://github.com/asciimoo/filtron
17−.. _filtron README: https://github.com/asciimoo/filtron/blob/master/README.md
19−To simplify installation and maintenance of a filtron instance you can use the
20−script :origin:`utils/filtron.sh`. In most cases you will install filtron_
21−simply by running the command:
25− sudo -H ./utils/filtron.sh install all
27−The script adds a ``${SERVICE_USER}`` (default:``filtron``) and installs filtron_
28−into this user account:
30−#. Create a separated user account (``filtron``).
31−#. Download and install Go_ binary in user's $HOME (``~filtron``).
32−#. Install filtron with the package management from Go_ (``go get -v -u
33− github.com/asciimoo/filtron``)
34−#. Setup a proper rule configuration :origin:`[ref]
35− <utils/templates/etc/filtron/rules.json>` (``/etc/filtron/rules.json``).
36−#. Setup a systemd service unit :origin:`[ref]
37− <utils/templates/lib/systemd/system/filtron.service>`
38− (``/lib/systemd/system/filtron.service``).
44−.. kernel-include:: $DOCS_BUILD/includes/filtron.rst
45− :start-after: START create user
46− :end-before: END create user
52−.. kernel-include:: $DOCS_BUILD/includes/filtron.rst
53− :start-after: START install go
54− :end-before: END install go
60−Install :origin:`rules.json <utils/templates/etc/filtron/rules.json>` at
61−``/etc/filtron/rules.json`` (see :ref:`Sample configuration of filtron`) and
62−install filtron software and systemd unit:
64−.. kernel-include:: $DOCS_BUILD/includes/filtron.rst
65− :start-after: START install filtron
66− :end-before: END install filtron
68−.. kernel-include:: $DOCS_BUILD/includes/filtron.rst
69− :start-after: START install systemd unit
70− :end-before: END install systemd unit
72−.. _filtron.sh overview:
77−The ``--help`` output of the script is largely self-explanatory
78−(:ref:`toolboxing common`):
80−.. program-output:: ../utils/filtron.sh --help
docs/utils/index.rstdeleted−52
@@ -1,52 +0,0 @@
8−In the folder :origin:`utils/` we maintain some tools useful for administrators.
19−.. _toolboxing common:
21−Common commands & environment
22−=============================
24−Scripts to maintain services often dispose of common commands and environments.
27− Opens a shell from the service user ``${SERVICE_USSR}``, very helpful for
30−``inspect service`` : command
31− Shows status and log of the service, most often you have a option to enable
32− more verbose debug logs. Very helpful for debugging, but be careful not to
33− enable debugging in a production environment!
35−``FORCE_TIMEOUT`` : environment
36− Sets timeout for interactive prompts. If you want to run a script in batch
37− job, with defaults choices, set ``FORCE_TIMEOUT=0``. By example; to install a
38− reverse proxy for filtron on all containers of the :ref:`searx suite
39− <lxc-searx.env>` use ::
41− sudo -H ./utils/lxc.sh cmd -- FORCE_TIMEOUT=0 ./utils/filtron.sh apache install
48−The main setup is done in the :origin:`.config.sh` (read also :ref:`settings
51−.. literalinclude:: ../../.config.sh
docs/utils/lxc.sh.rstdeleted−149
@@ -1,149 +0,0 @@
2−.. _snap: https://snapcraft.io
3−.. _snapcraft LXD: https://snapcraft.io/lxd
4−.. _LXC/LXD Image Server: https://uk.images.linuxcontainers.org/
5−.. _LXC: https://linuxcontainers.org/lxc/introduction/
6−.. _LXD: https://linuxcontainers.org/lxd/introduction/
7−.. _`LXD@github`: https://github.com/lxc/lxd
9−.. _archlinux: https://www.archlinux.org/
17−.. sidebar:: further reading
19− - snap_, `snapcraft LXD`_
21− - `LXC/LXD Image Server`_
24−With the use of *Linux Containers* (LXC_) we can scale our tasks over a stack of
25−containers, what we call the: *lxc suite*. The *searx suite*
26−(:origin:`lxc-searx.env <utils/lxc-searx.env>`) is loaded by default, every time
27−you start the ``lxc.sh`` script (*you do not need to care about*).
29−Before you can start with containers, you need to install and initiate LXD_
35−To make use of the containers from the *searx suite*, you have to build the
36−:ref:`LXC suite containers <lxc.sh help>` initial. But be warned, **this might
39− $ sudo -H ./utils/lxc.sh build
41−A cup of coffee later, your LXC suite is build up and you can run whatever task
42−you want / in a selected or even in all :ref:`LXC suite containers <lxc.sh
43−help>`. If you do not want to build all containers, **you can build just
46− $ sudo -H ./utils/lxc.sh build searx-ubu1804
50−Each container shares the root folder of the repository and the command
51−``utils/lxc.sh cmd`` **handles relative path names transparent**, compare output
54− $ sudo -H ./utils/lxc.sh cmd -- ls -la Makefile
57−In the containers, you can run what ever you want, e.g. to start a bash use::
59− $ sudo -H ./utils/lxc.sh cmd searx-ubu1804 bash
60− INFO: [searx-ubu1804] bash
61− root@searx-ubu1804:/share/searx#
63−If there comes the time you want to **get rid off all** the containers and
64−**clean up local images** just type::
66− $ sudo -H ./utils/lxc.sh remove
67− $ sudo -H ./utils/lxc.sh remove images
69−.. _lxc.sh install suite:
74−To install the complete :ref:`searx suite (includes searx, morty & filtron)
75−<lxc-searx.env>` into all LXC_ use::
77− $ sudo -H ./utils/lxc.sh install suite
79−The command above installs a searx suite (see :ref:`installation scripts`). To
80−get the IP (URL) of the filtron service in the containers use ``show suite``
81−command. To test instances from containers just open the URLs in your
84− $ sudo ./utils/lxc.sh show suite | grep filtron
85− [searx-ubu1604] INFO: (eth0) filtron: http://n.n.n.246:4004/ http://n.n.n.246/searx
86− [searx-ubu1804] INFO: (eth0) filtron: http://n.n.n.147:4004/ http://n.n.n.147/searx
87− [searx-ubu1910] INFO: (eth0) filtron: http://n.n.n.140:4004/ http://n.n.n.140/searx
88− [searx-ubu2004] INFO: (eth0) filtron: http://n.n.n.18:4004/ http://n.n.n.18/searx
89− [searx-fedora31] INFO: (eth0) filtron: http://n.n.n.46:4004/ http://n.n.n.46/searx
90− [searx-archlinux] INFO: (eth0) filtron: http://n.n.n.32:4004/ http://n.n.n.32/searx
92−To :ref:`install a nginx <installation nginx>` reverse proxy for filtron and
93−morty use (or alternatively use :ref:`apache <installation apache>`)::
95− sudo -H ./utils/lxc.sh cmd -- FORCE_TIMEOUT=0 ./utils/filtron.sh nginx install
96− sudo -H ./utils/lxc.sh cmd -- FORCE_TIMEOUT=0 ./utils/morty.sh nginx install
102−**Inside containers, you can use make or run scripts** from the
103−:ref:`toolboxing`. By example: to setup a :ref:`buildhosts` and run the
104−Makefile target ``test`` in the archlinux_ container::
106− sudo -H ./utils/lxc.sh cmd searx-archlinux ./utils/searx.sh install buildhost
107− sudo -H ./utils/lxc.sh cmd searx-archlinux make test
110−Setup searx buildhost
111−=====================
113−You can **install the searx buildhost environment** into one or all containers.
114−The installation procedure to set up a :ref:`build host<buildhosts>` takes its
115−time. Installation in all containers will take more time (time for another cup
118− sudo -H ./utils/lxc.sh cmd -- ./utils/searx.sh install buildhost
120−To build (live) documentation inside a archlinux_ container::
122− sudo -H ./utils/lxc.sh cmd searx-archlinux make docs.clean docs.live
124− [I 200331 15:00:42 server:296] Serving on http://0.0.0.0:8080
126−To get IP of the container and the port number *live docs* is listening::
128− $ sudo ./utils/lxc.sh show suite | grep docs.live
130− [searx-archlinux] INFO: (eth0) docs.live: http://n.n.n.12:8080/
138−The ``--help`` output of the script is largely self-explanatory:
140−.. program-output:: ../utils/lxc.sh --help
148−.. literalinclude:: ../../utils/lxc-searx.env
docs/utils/morty.sh.rstdeleted−80
@@ -1,80 +0,0 @@
2−.. _morty: https://github.com/asciimoo/morty
3−.. _morty's README: https://github.com/asciimoo/morty
4−.. _Go: https://golang.org/
12−.. sidebar:: further reading
14− - :ref:`architecture`
15− - :ref:`installation` (:ref:`nginx <installation nginx>` & :ref:`apache
16− <installation apache>`)
19−To simplify installation and maintenance of a morty_ instance you can use the
20−script :origin:`utils/morty.sh`. In most cases you will install morty_ simply by
25− sudo -H ./utils/morty.sh install all
27−The script adds a ``${SERVICE_USER}`` (default:``morty``) and installs morty_
28−into this user account:
30−#. Create a separated user account (``morty``).
31−#. Download and install Go_ binary in user's $HOME (``~morty``).
32−#. Install morty_ with the package management from Go_ (``go get -v -u
33− github.com/asciimoo/morty``)
34−#. Setup a systemd service unit :origin:`[ref]
35− <utils/templates/lib/systemd/system/morty.service>`
36− (``/lib/systemd/system/morty.service``).
40− To add morty to your searx instance read chapter :ref:`searx morty`.
45−.. kernel-include:: $DOCS_BUILD/includes/morty.rst
46− :start-after: START create user
47− :end-before: END create user
53−.. kernel-include:: $DOCS_BUILD/includes/morty.rst
54− :start-after: START install go
55− :end-before: END install go
61−Install morty software and systemd unit:
63−.. kernel-include:: $DOCS_BUILD/includes/morty.rst
64− :start-after: START install morty
65− :end-before: END install morty
67−.. kernel-include:: $DOCS_BUILD/includes/morty.rst
68− :start-after: START install systemd unit
69− :end-before: END install systemd unit
71−.. _morty.sh overview:
76−The ``--help`` output of the script is largely self-explanatory
77−(:ref:`toolboxing common`):
79−.. program-output:: ../utils/morty.sh --help
docs/utils/searx.sh.rstdeleted−39
@@ -1,39 +0,0 @@
8−.. sidebar:: further reading
10− - :ref:`architecture`
11− - :ref:`installation`
12− - :ref:`installation nginx`
13− - :ref:`installation apache`
15−To simplify installation and maintenance of a searx instance you can use the
16−script :origin:`utils/searx.sh`.
21−In most cases you will install searx simply by running the command:
25− sudo -H ./utils/searx.sh install all
27−The script adds a ``${SERVICE_USER}`` (default:``searx``) and installs searx
28−into this user account. The installation is described in chapter
29−:ref:`installation basic`.
31−.. _intranet reverse proxy:
36−The ``--help`` output of the script is largely self-explanatory
37−(:ref:`toolboxing common`):
39−.. program-output:: ../utils/searx.sh --help
@@ -1,504 +0,0 @@
2−# -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*-
3−# SPDX-License-Identifier: AGPL-3.0-or-later
4−# shellcheck disable=SC2031
6−# shellcheck source=utils/lib.sh
7−source "$(dirname "${BASH_SOURCE[0]}")/utils/lib.sh"
8−# shellcheck source=utils/brand.env
9−source "${REPO_ROOT}/utils/brand.env"
14−PY_SETUP_EXTRAS='[test]'
15−NPM_PACKAGES="less@2.7 less-plugin-clean-css grunt-cli"
16−GECKODRIVER_VERSION="v0.30.0"
19−# These py files are linted by test.pylint(), all other files are linted by
24− searx/engines/gigablast.py
25− searx/engines/deviantart.py
26− searx/engines/digg.py
27− searx/engines/google.py
28− searx/engines/google_news.py
29− searx/engines/google_videos.py
30− searx/engines/google_images.py
31− searx/engines/mediathekviewweb.py
32− searx/engines/meilisearch.py
33− searx/engines/solidtorrents.py
34− searx/engines/solr.py
35− searx/engines/sqlite.py
36− searx/engines/springer.py
37− searx/engines/google_scholar.py
38− searx/engines/yahoo_news.py
39− searx/engines/apkmirror.py
40− searx/engines/core.py
41− searx_extra/update/update_external_bangs.py
44−PYLINT_SEARX_DISABLE_OPTION="\
46−W0105,W0212,W0511,W0603,W0613,W0621,W0702,W0703,W1401,\
48−PYLINT_ADDITIONAL_BUILTINS_FOR_ENGINES="supported_languages,language_aliases"
49−PYLINT_OPTIONS="-m pylint -j 0 --rcfile .pylintrc"
54− rebuild ./utils/brand.env
56− pybabel compile ./searx/translations
58− all : update searx/languages.py and ./data/*
59− languages : update searx/data/engines_languages.json & searx/languages.py
60− useragents: update searx/data/useragents.json with the most recent versions of Firefox.
62− html : build HTML documentation
63− live : autobuild HTML documentation while editing
64− gh-pages : deploy on gh-pages branch
65− prebuild : build reST include files (./${DOCS_BUILD}/includes)
66− clean : clean documentation build
68− build : build docker image
69− push : build and push docker image
71− download & install geckodriver if not already installed (required for
74− env : download & install npm dependencies locally
75− clean : drop npm installations
77− build : Build python packages at ./${PYDIST}
78− clean : delete virtualenv and intermediate py files
80− install : developer install of searx into virtualenv
81− uninstall : uninstall developer installation
82− cmd ... : run command ... in virtualenv
83− OK : test if virtualenv is OK
85− Upload python packages to PyPi (to test use pypi.upload.test)
87− pylint : lint PYLINT_FILES, searx/engines, searx & tests
88− pep8 : pycodestyle (pep8) for all files except PYLINT_FILES
89− unit : run unit tests
90− coverage : run unit tests with coverage
91− robot : run robot test
92− clean : clean intermediate test stuff
94− all : build all themes
95− oscar : build oscar theme
96− simple : build simple theme
101−if [ "$VERBOSE" = "1" ]; then
106−# needed by sphinx-docs
110− SEARX_DEBUG=1 pyenv.cmd python utils/build_env.py 2>&1 \
111− | prefix_stdout "${_Blue}BUILDENV${_creset} "
112− return "${PIPESTATUS[0]}"
116− build_msg BABEL compile
117− pyenv.cmd pybabel compile -d "${REPO_ROOT}/searx/translations"
125− build_msg DATA "update searx/data/ahmia_blacklist.txt"
126− pyenv.cmd python searx_extra/update/update_ahmia_blacklist.py
127− build_msg DATA "update searx/data/wikidata_units.json"
128− pyenv.cmd python searx_extra/update/update_wikidata_units.py
129− build_msg DATA "update searx/data/currencies.json"
130− pyenv.cmd python searx_extra/update/update_currencies.py
136− build_msg ENGINES "fetch languages .."
137− pyenv.cmd python searx_extra/update/update_languages.py
138− build_msg ENGINES "update update searx/languages.py"
139− build_msg DATA "update searx/data/engines_languages.json"
145− build_msg DATA "update searx/data/useragents.json"
146− pyenv.cmd python searx_extra/update/update_firefox_version.py
151− build_msg DOCS "build ${DOCS_BUILD}/includes"
154− [ "$VERBOSE" = "1" ] && set -x
155− mkdir -p "${DOCS_BUILD}/includes"
156− ./utils/searx.sh doc | cat > "${DOCS_BUILD}/includes/searx.rst"
157− ./utils/filtron.sh doc | cat > "${DOCS_BUILD}/includes/filtron.rst"
158− ./utils/morty.sh doc | cat > "${DOCS_BUILD}/includes/morty.rst"
167−# shellcheck disable=SC2119
171− build_msg DOCKER build
172− # run installation in a subprocess and activate pyenv
174− # See https://www.shellcheck.net/wiki/SC1001 and others ..
175− # shellcheck disable=SC2031,SC2230,SC2002,SC2236,SC2143,SC1001
177− # shellcheck source=/dev/null
178− source "${PY_ENV_BIN}/activate"
180− # Check if it is a git repository
181− if [ ! -d .git ]; then
182− die 1 "This is not Git repository"
184− if [ ! -x "$(which git)" ]; then
185− die 1 "git is not installed"
188− if ! git remote get-url origin 2> /dev/null; then
189− die 1 "there is no remote origin"
192− # This is a git repository
194− # "git describe" to get the Docker version (for example : v0.15.0-89-g0585788e)
195− # awk to remove the "v" and the "g"
196− SEARX_GIT_VERSION=$(git describe --match "v[0-9]*\.[0-9]*\.[0-9]*" HEAD 2>/dev/null | awk -F'-' '{OFS="-"; $1=substr($1, 2); if ($3) { $3=substr($3, 2); } print}')
198− # add the suffix "-dirty" if the repository has uncommited change
199− # /!\ HACK for searx/searx: ignore utils/brand.env
200− git update-index -q --refresh
201− if [ ! -z "$(git diff-index --name-only HEAD -- | grep -v 'utils/brand.env')" ]; then
202− SEARX_GIT_VERSION="${SEARX_GIT_VERSION}-dirty"
205− # Get the last git commit id, will be added to the Searx version (see Dockerfile)
206− VERSION_GITCOMMIT=$(echo "$SEARX_GIT_VERSION" | cut -d- -f2-4)
207− build_msg DOCKER "Last commit : $VERSION_GITCOMMIT"
209− # Check consistency between the git tag and the searx/version.py file
210− # /! HACK : parse Python file with bash /!
211− # otherwise it is not possible build the docker image without all Python
212− # dependencies ( version.py loads __init__.py )
213− # SEARX_PYTHON_VERSION=$(python3 -c "import six; import searx.version; six.print_(searx.version.VERSION_STRING)")
214− SEARX_PYTHON_VERSION=$(cat searx/version.py | grep "\(VERSION_MAJOR\|VERSION_MINOR\|VERSION_BUILD\) =" | cut -d\= -f2 | sed -e 's/^[[:space:]]*//' | paste -sd "." -)
215− if [ "$(echo "$SEARX_GIT_VERSION" | cut -d- -f1)" != "$SEARX_PYTHON_VERSION" ]; then
216− err_msg "git tag: $SEARX_GIT_VERSION"
217− err_msg "searx/version.py: $SEARX_PYTHON_VERSION"
218− die 1 "Inconsistency between the last git tag and the searx/version.py file"
221− # define the docker image name
222− GITHUB_USER=$(echo "${GIT_URL}" | sed 's/.*github\.com\/\([^\/]*\).*/\1/')
223− SEARX_IMAGE_NAME="${SEARX_IMAGE_NAME:-${GITHUB_USER:-searx}/searx}"
225− # build Docker image
226− build_msg DOCKER "Building image ${SEARX_IMAGE_NAME}:${SEARX_GIT_VERSION}"
228− --build-arg GIT_URL="${GIT_URL}" \
229− --build-arg SEARX_GIT_VERSION="${SEARX_GIT_VERSION}" \
230− --build-arg VERSION_GITCOMMIT="${VERSION_GITCOMMIT}" \
231− --build-arg LABEL_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
232− --build-arg LABEL_VCS_REF="$(git rev-parse HEAD)" \
233− --build-arg LABEL_VCS_URL="${GIT_URL}" \
234− --build-arg TIMESTAMP_SETTINGS="$(git log -1 --format="%cd" --date=unix -- searx/settings.yml)" \
235− --build-arg TIMESTAMP_UWSGI="$(git log -1 --format="%cd" --date=unix -- dockerfiles/uwsgi.ini)" \
236− -t "${SEARX_IMAGE_NAME}:latest" -t "${SEARX_IMAGE_NAME}:${SEARX_GIT_VERSION}" .
238− if [ "$1" = "push" ]; then
239− docker push "${SEARX_IMAGE_NAME}:latest"
240− docker push "${SEARX_IMAGE_NAME}:${SEARX_GIT_VERSION}"
246−# shellcheck disable=SC2119
250− build_msg INSTALL "gecko.driver"
251− # run installation in a subprocess and activate pyenv
253− # shellcheck source=/dev/null
254− source "${PY_ENV_BIN}/activate"
256− # TODO : check the current geckodriver version
257− geckodriver -V > /dev/null 2>&1 || NOTFOUND=1
259− if [ -z "$NOTFOUND" ]; then
260− build_msg INSTALL "geckodriver already installed"
263− PLATFORM="$(python3 -c 'import platform; print(platform.system().lower(), platform.architecture()[0])')"
265− "linux 32bit" | "linux2 32bit") ARCH="linux32";;
266− "linux 64bit" | "linux2 64bit") ARCH="linux64";;
267− "windows 32 bit") ARCH="win32";;
268− "windows 64 bit") ARCH="win64";;
269− "mac 64bit") ARCH="macos";;
271− GECKODRIVER_URL="https://github.com/mozilla/geckodriver/releases/download/$GECKODRIVER_VERSION/geckodriver-$GECKODRIVER_VERSION-$ARCH.tar.gz";
273− build_msg GECKO "Installing ${PY_ENV_BIN}/geckodriver from $GECKODRIVER_URL"
276− wget -qO "$FILE" -- "$GECKODRIVER_URL" && tar xz -C "${PY_ENV_BIN}" -f "$FILE" geckodriver
278− chmod 755 -- "${PY_ENV_BIN}/geckodriver"
285− pushd "${REPO_ROOT}" &> /dev/null
286− # shellcheck disable=SC2230
287− which npm &> /dev/null || die 1 'node.env - npm is not found!'
290− # shellcheck disable=SC2030
291− PATH="$(npm bin):$PATH"
294− build_msg INSTALL "npm install $NPM_PACKAGES"
295− # shellcheck disable=SC2086
296− npm install $NPM_PACKAGES
298− cd "${REPO_ROOT}/searx/static/themes/oscar"
299− build_msg INSTALL "($(pwd)) npm install"
302− build_msg INSTALL "($(pwd)) npm install"
303− cd "${REPO_ROOT}/searx/static/themes/simple"
313− build_msg CLEAN "locally installed npm dependencies"
316− ./package-lock.json \
317− ./searx/static/themes/oscar/package-lock.json \
318− ./searx/static/themes/oscar/node_modules \
319− ./searx/static/themes/simple/package-lock.json \
320− ./searx/static/themes/simple/node_modules
325− build_msg BUILD "[pylint] python package ${PYDIST}"
326− pyenv.cmd python setup.py \
327− sdist -d "${PYDIST}" \
328− bdist_wheel --bdist-dir "${PYBUILD}" -d "${PYDIST}"
332− build_msg CLEAN pyenv
335− [ "$VERBOSE" = "1" ] && set -x
336− rm -rf "${PYDIST}" "${PYBUILD}" "${PY_ENV}" ./.tox ./*.egg-info
337− find . -name '*.pyc' -exec rm -f {} +
338− find . -name '*.pyo' -exec rm -f {} +
339− find . -name __pycache__ -exec rm -rf {} +
346−print('import yaml --> OK')
353− py.clean > /dev/null
355− if pyenv.install.OK > /dev/null; then
360− build_msg PYENV "[install] pip install -e 'searx${PY_SETUP_EXTRAS}'"
361− "${PY_ENV_BIN}/python" -m pip install -e ".${PY_SETUP_EXTRAS}"
363− ) || die 42 "error while build & install pyenv (${PY_ENV_BIN})"
367− build_msg PYENV "[pyenv.uninstall] uninstall packages: ${PYOBJECTS}"
368− pyenv.cmd python setup.py develop --uninstall 2>&1 \
369− | prefix_stdout "${_Blue}PYENV ${_creset}[pyenv.uninstall] "
376− # https://github.com/pypa/twine
377− pyenv.cmd twine upload "${PYDIST}"/*
383− pyenv.cmd twine upload -r testpypi "${PYDIST}"/*
387− # shellcheck disable=SC2086
389− build_msg TEST "[pylint] \$PYLINT_FILES"
390− pyenv.cmd python ${PYLINT_OPTIONS} ${PYLINT_VERBOSE} \
391− "${PYLINT_FILES[@]}"
393− build_msg TEST "[pylint] searx/engines"
394− pyenv.cmd python ${PYLINT_OPTIONS} ${PYLINT_VERBOSE} \
395− --disable="${PYLINT_SEARX_DISABLE_OPTION}" \
396− --additional-builtins="${PYLINT_ADDITIONAL_BUILTINS_FOR_ENGINES}" \
399− build_msg TEST "[pylint] searx tests"
400− pyenv.cmd python ${PYLINT_OPTIONS} ${PYLINT_VERBOSE} \
401− --disable="${PYLINT_SEARX_DISABLE_OPTION}" \
402− --ignore=searx/engines \
409− build_msg TEST 'pycodestyle (formerly pep8)'
411− printf -v _exclude '%s, ' "${PYLINT_FILES[@]}"
412− pyenv.cmd pycodestyle \
413− --exclude="searx/static, searx/languages.py, $_exclude " \
414− --max-line-length=120 \
415− --ignore "E117,E252,E402,E722,E741,W503,W504,W605" \
421− build_msg TEST 'tests/unit'
422− pyenv.cmd python -m nose2 -s tests/unit
427− build_msg TEST 'unit test coverage'
429− pyenv.cmd python -m nose2 -C --log-capture --with-coverage --coverage searx -s tests/unit
430− pyenv.cmd coverage report
431− pyenv.cmd coverage html
437− build_msg TEST 'robot'
439− PYTHONPATH=. pyenv.cmd python searx/testing.py robot
444− build_msg CLEAN "test stuff"
445− rm -rf geckodriver.log .coverage coverage/
459− local gruntfile=searx/static/themes/oscar/gruntfile.js
460− build_msg GRUNT "${gruntfile}"
461− PATH="$(npm bin):$PATH" grunt --gruntfile "${gruntfile}"
466− local gruntfile=searx/static/themes/simple/gruntfile.js
467− build_msg GRUNT "${gruntfile}"
468− PATH="$(npm bin):$PATH" grunt --gruntfile "${gruntfile}"
472−# shellcheck disable=SC2119
476− local cmd="$1"; shift
478− if [ "$cmd" == "" ]; then
480− err_msg "missing command"
485− --getenv) var="$1"; echo "${!var}";;
489− err_msg "unknown option $cmd"
493− _type="$(type -t "$cmd")"
494− if [ "$_type" != 'function' ]; then
495− err_msg "unknown command $1 / use --help"
@@ -0,0 +1,275 @@
3+BASE_DIR="$(dirname -- "`readlink -f -- "$0"`")"
10+SEARX_DIR="$BASE_DIR/searx"
19+ pip install --upgrade pip
20+ pip install --upgrade setuptools
21+ pip install -Ur "$BASE_DIR/requirements.txt"
24+update_dev_packages() {
26+ pip install -Ur "$BASE_DIR/requirements-dev.txt"
29+install_geckodriver() {
30+ echo '[!] Checking geckodriver'
31+ # TODO : check the current geckodriver version
33+ geckodriver -V > /dev/null 2>&1 || NOTFOUND=1
35+ if [ -z "$NOTFOUND" ]; then
38+ GECKODRIVER_VERSION="v0.24.0"
39+ PLATFORM="`python -c "import six; import platform; six.print_(platform.system().lower(), platform.architecture()[0])"`"
41+ "linux 32bit" | "linux2 32bit") ARCH="linux32";;
42+ "linux 64bit" | "linux2 64bit") ARCH="linux64";;
43+ "windows 32 bit") ARCH="win32";;
44+ "windows 64 bit") ARCH="win64";;
45+ "mac 64bit") ARCH="macos";;
47+ GECKODRIVER_URL="https://github.com/mozilla/geckodriver/releases/download/$GECKODRIVER_VERSION/geckodriver-$GECKODRIVER_VERSION-$ARCH.tar.gz";
50+ if [ -z "$VIRTUAL_ENV" ]; then
51+ printf "geckodriver can't be installed because VIRTUAL_ENV is not set, you should download it from\n %s" "$GECKODRIVER_URL"
54+ GECKODRIVER_DIR="$VIRTUAL_ENV/bin"
58+ mkdir -p -- "$GECKODRIVER_DIR"
61+ printf "Installing %s/geckodriver from\n %s" "$GECKODRIVER_DIR" "$GECKODRIVER_URL"
64+ wget -qO "$FILE" -- "$GECKODRIVER_URL" && tar xz -C "$GECKODRIVER_DIR" -f "$FILE" geckodriver
66+ chmod 777 -- "$GECKODRIVER_DIR/geckodriver"
70+ pybabel compile -d "$SEARX_DIR/translations"
74+ echo '[!] Updating user agent versions'
75+ python utils/fetch_firefox_version.py
79+ echo '[!] Running pep8 check'
81+ # E402 module level import not at top of file
82+ # W503 line break before binary operator
83+ pep8 --exclude=searx/static --max-line-length=120 --ignore "E402,W503" "$SEARX_DIR" "$BASE_DIR/tests"
87+ echo '[!] Running unit tests'
88+ python -m nose2 -s "$BASE_DIR/tests/unit"
92+ echo '[!] Running python test coverage'
93+ PYTHONPATH="`pwd`" python -m nose2 -C --log-capture --with-coverage --coverage "$SEARX_DIR" -s "$BASE_DIR/tests/unit" \
99+ echo '[!] Running robot tests'
100+ PYTHONPATH="`pwd`" python "$SEARX_DIR/testing.py" robot
118+ which npm || (printf 'Error: npm is not found\n'; exit 1)
119+ export PATH="$(npm bin)":$PATH
125+ echo '[!] install NPM packages'
127+ npm install less@2.7 less-plugin-clean-css grunt-cli
129+ echo '[!] install NPM packages for oscar theme'
130+ cd -- "$BASE_DIR/searx/static/themes/oscar"
133+ echo '[!] install NPM packages for simple theme'
134+ cd -- "$BASE_DIR/searx/static/themes/simple"
141+ lessc --clean-css="--s1 --advanced --compatibility=ie9" "$BASE_DIR/searx/static/$1" "$BASE_DIR/searx/static/$2"
147+ echo '[!] Building legacy style'
148+ build_style themes/legacy/less/style.less themes/legacy/css/style.css
149+ build_style themes/legacy/less/style-rtl.less themes/legacy/css/style-rtl.css
150+ echo '[!] Building courgette style'
151+ build_style themes/courgette/less/style.less themes/courgette/css/style.css
152+ build_style themes/courgette/less/style-rtl.less themes/courgette/css/style-rtl.css
153+ echo '[!] Building pix-art style'
154+ build_style themes/pix-art/less/style.less themes/pix-art/css/style.css
155+ echo '[!] Building bootstrap style'
156+ build_style less/bootstrap/bootstrap.less css/bootstrap.min.css
162+ echo '[!] Grunt build : oscar theme'
163+ grunt --gruntfile "$SEARX_DIR/static/themes/oscar/gruntfile.js"
164+ echo '[!] Grunt build : simple theme'
165+ grunt --gruntfile "$SEARX_DIR/static/themes/simple/gruntfile.js"
169+ # Check if it is a git repository
170+ if [ ! -d .git ]; then
171+ echo "This is not Git repository"
175+ if [ ! -x "$(which git)" ]; then
176+ echo "git is not installed"
180+ if [ ! git remote get-url origin 2> /dev/null ]; then
181+ echo "there is no remote origin"
185+ # This is a git repository
187+ # "git describe" to get the Docker version (for example : v0.15.0-89-g0585788e)
188+ # awk to remove the "v" and the "g"
189+ SEARX_GIT_VERSION=$(git describe --match "v[0-9]*\.[0-9]*\.[0-9]*" HEAD 2>/dev/null | awk -F'-' '{OFS="-"; $1=substr($1, 2); $3=substr($3, 2); print}')
191+ # add the suffix "-dirty" if the repository has uncommited change
192+ git update-index -q --refresh
193+ if [ ! -z "$(git diff-index --name-only HEAD --)" ]; then
194+ SEARX_GIT_VERSION="${SEARX_GIT_VERSION}-dirty"
197+ # Get the last git commit id, will be added to the Searx version (see Dockerfile)
198+ VERSION_GITCOMMIT=$(echo $SEARX_GIT_VERSION | cut -d- -f2-4)
199+ echo "Last commit : $VERSION_GITCOMMIT"
201+ # Check consistency between the git tag and the searx/version.py file
202+ # /!\ HACK : parse Python file with bash /!\
203+ # otherwise it is not possible build the docker image without all Python dependencies ( version.py loads __init__.py )
204+ # SEARX_PYTHON_VERSION=$(python -c "import six; import searx.version; six.print_(searx.version.VERSION_STRING)")
205+ SEARX_PYTHON_VERSION=$(cat searx/version.py | grep "\(VERSION_MAJOR\|VERSION_MINOR\|VERSION_BUILD\) =" | cut -d\= -f2 | sed -e 's/^[[:space:]]*//' | paste -sd "." -)
206+ if [ $(echo "$SEARX_GIT_VERSION" | cut -d- -f1) != "$SEARX_PYTHON_VERSION" ]; then
207+ echo "Inconsistency between the last git tag and the searx/version.py file"
208+ echo "git tag: $SEARX_GIT_VERSION"
209+ echo "searx/version.py: $SEARX_PYTHON_VERSION"
213+ # define the docker image name
214+ # /!\ HACK to get the user name /!\
215+ GITHUB_USER=$(git remote get-url origin | sed 's/.*github\.com\/\([^\/]*\).*/\1/')
216+ SEARX_IMAGE_NAME="${GITHUB_USER:-searx}/searx"
218+ # build Docker image
219+ echo "Building image ${SEARX_IMAGE_NAME}:${SEARX_GIT_VERSION}"
221+ --build-arg SEARX_GIT_VERSION="${SEARX_GIT_VERSION}" \
222+ --build-arg VERSION_GITCOMMIT="${VERSION_GITCOMMIT}" \
223+ --build-arg LABEL_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \
224+ --build-arg LABEL_VCS_REF=$(git rev-parse HEAD) \
225+ --build-arg LABEL_VCS_URL=$(git remote get-url origin) \
226+ --build-arg TIMESTAMP_SETTINGS=$(git log -1 --format="%cd" --date=unix -- searx/settings.yml) \
227+ --build-arg TIMESTAMP_UWSGI=$(git log -1 --format="%cd" --date=unix -- dockerfiles/uwsgi.ini) \
228+ -t ${SEARX_IMAGE_NAME}:latest -t ${SEARX_IMAGE_NAME}:${SEARX_GIT_VERSION} .
230+ if [ "$1" = "push" ]; then
231+ sudo docker push ${SEARX_IMAGE_NAME}:latest
232+ sudo docker push ${SEARX_IMAGE_NAME}:${SEARX_GIT_VERSION}
241+ [ -z "$1" ] || printf 'Error: %s\n' "$1"
242+ echo "Searx manage.sh help
250+ update_packages - Check & update production dependency changes
251+ update_dev_packages - Check & update development and production dependency changes
252+ install_geckodriver - Download & install geckodriver if not already installed (required for robot_tests)
253+ npm_packages - Download & install npm dependencies
254+ update_useragents - Update useragents.json with the most recent versions of Firefox
258+ locales - Compile locales
259+ styles - Build less files
260+ grunt_build - Build files for themes
261+ docker_build - Build Docker image
265+ unit_tests - Run unit tests
266+ pep8_check - Pep8 validation
267+ robot_tests - Run selenium tests
268+ tests - Run all python tests (pep8, unit, robot_tests)
269+ py_test_coverage - Unit test coverage
273+[ "$(command -V "$ACTION" | grep ' function$')" = "" ] \
274+ && help "action not found" \
requirements-dev.txt+15−19
@@ -1,20 +1,16 @@
1−mock==4.0.3
4+mock==2.0.0
2−nose2[coverage_plugin]==0.10.0
5+nose2[coverage_plugin]
3cov-core==1.15.0
6cov-core==1.15.0
4−pycodestyle==2.8.0
7+pep8==1.7.0
5−pylint==2.12.2
8+plone.testing==5.0.0
6−splinter==0.17.0
9+splinter==0.11.0
7−transifex-client==0.14.3; python_version < '3.10'
10+transifex-client==0.12.2
8−transifex-client==0.12.1; python_version == '3.10'
11+unittest2==1.1.0
12+zope.testrunner==4.5.1
9−selenium==4.1.0
13+selenium==3.141.0
10−twine==3.7.1
14+linuxdoc @ git+http://github.com/return42/linuxdoc.git
11−Pallets-Sphinx-Themes==2.0.2
15−sphinx-jinja==1.4.0
15+sphinx-jinja
16−sphinx-tabs==3.2.0
16+sphinx-tabs
17−sphinxcontrib-programoutput==0.17
18−sphinx-autobuild==2021.3.14
@@ -1,16 +1,12 @@
1−certifi==2021.10.8
1+certifi==2019.3.9
2−babel==2.9.1
2+babel==2.7.0
3−flask-babel==2.0.0
3+flask-babel==0.12.2
4−flask==2.0.2
4+flask==1.0.2
5−jinja2==3.0.3
6+jinja2==2.10.1
6−lxml==4.7.1
7+lxml==4.3.3
7−pygments==2.8.0
8+pygments==2.1.3
8−python-dateutil==2.8.2
10+python-dateutil==2.8.0
9−pyyaml==6.0
11+pyyaml==5.1
10−httpx[http2]==0.21.3
12+requests[socks]==2.22.0
12−uvloop==0.16.0; python_version >= '3.7'
13−uvloop==0.14.0; python_version < '3.7'
14−httpx-socks[asyncio]==0.7.2
@@ -15,25 +15,51 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
15(C) 2013- by Adam Tauber, <asciimoo@gmail.com>
15(C) 2013- by Adam Tauber, <asciimoo@gmail.com>
18import logging
19import logging
19−import searx.settings_loader
20from os import environ
20from os import environ
21from os.path import realpath, dirname, join, abspath, isfile
21from os.path import realpath, dirname, join, abspath, isfile
22−
22+from io import open
23+from ssl import OPENSSL_VERSION_INFO, OPENSSL_VERSION
25+ from yaml import safe_load
27+ from sys import exit, stderr
28+ stderr.write('[E] install pyyaml\n')
24searx_dir = abspath(dirname(__file__))
31searx_dir = abspath(dirname(__file__))
25engine_dir = dirname(realpath(__file__))
32engine_dir = dirname(realpath(__file__))
26−static_path = abspath(join(dirname(__file__), 'static'))
27−settings, settings_load_message = searx.settings_loader.load_settings()
29−if settings['ui']['static_path']:
34+
30− static_path = settings['ui']['static_path']
35+def check_settings_yml(file_name):
36+ if isfile(file_name):
41+# find location of settings.yml
42+if 'SEARX_SETTINGS_PATH' in environ:
43+ # if possible set path to settings using the
44+ # enviroment variable SEARX_SETTINGS_PATH
45+ settings_path = check_settings_yml(environ['SEARX_SETTINGS_PATH'])
47+ # if not, get it from searx code base or last solution from /etc/searx
48+ settings_path = check_settings_yml(join(searx_dir, 'settings.yml')) or check_settings_yml('/etc/searx/settings.yml')
51+ raise Exception('settings.yml not found')
54+with open(settings_path, 'r', encoding='utf-8') as settings_yaml:
55+ settings = safe_load(settings_yaml)
33enable debug if
58enable debug if
34the environnement variable SEARX_DEBUG is 1 or true
59the environnement variable SEARX_DEBUG is 1 or true
35(whatever the value in settings.yml)
60(whatever the value in settings.yml)
36or general.debug=True in settings.yml
61or general.debug=True in settings.yml
37disable debug if
63disable debug if
38the environnement variable SEARX_DEBUG is 0 or false
64the environnement variable SEARX_DEBUG is 0 or false
39(whatever the value in settings.yml)
65(whatever the value in settings.yml)
@@ -53,56 +79,17 @@ else:
53 logging.basicConfig(level=logging.WARNING)
79 logging.basicConfig(level=logging.WARNING)
55logger = logging.getLogger('searx')
81logger = logging.getLogger('searx')
56−logger.info(settings_load_message)
82+logger.debug('read configuration from %s', settings_path)
83+# Workaround for openssl versions <1.0.2
84+# https://github.com/certifi/python-certifi/issues/26
85+if OPENSSL_VERSION_INFO[0:3] < (1, 0, 2):
86+ if hasattr(certifi, 'old_where'):
87+ environ['REQUESTS_CA_BUNDLE'] = certifi.old_where()
88+ logger.warning('You are using an old openssl version({0}), please upgrade above 1.0.2!'.format(OPENSSL_VERSION))
57logger.info('Initialisation done')
90logger.info('Initialisation done')
59if 'SEARX_SECRET' in environ:
92if 'SEARX_SECRET' in environ:
60 settings['server']['secret_key'] = environ['SEARX_SECRET']
93 settings['server']['secret_key'] = environ['SEARX_SECRET']
61if 'SEARX_BIND_ADDRESS' in environ:
94if 'SEARX_BIND_ADDRESS' in environ:
62 settings['server']['bind_address'] = environ['SEARX_BIND_ADDRESS']
95 settings['server']['bind_address'] = environ['SEARX_BIND_ADDRESS']
65−class _brand_namespace:
68− def get_val(cls, group, name, default=''):
69− return settings.get(group, {}).get(name) or default
73− return self.get_val('server', 'base_url')
76− def CONTACT_URL(self):
77− return self.get_val('general', 'contact_url')
81− return self.get_val('brand', 'git_url')
84− def GIT_BRANCH(self):
85− return self.get_val('brand', 'git_branch')
89− return self.get_val('brand', 'issue_url')
93− return self.get_val('brand', 'docs_url')
96− def PUBLIC_INSTANCES(self):
97− return self.get_val('brand', 'public_instances')
101− return self.get_val('brand', 'wiki_url')
104− def TWITTER_URL(self):
105− return self.get_val('brand', 'twitter_url')
108−brand = _brand_namespace()
searx/answerers/__init__.py+6−2
@@ -1,8 +1,12 @@
1from os import listdir
1from os import listdir
2from os.path import realpath, dirname, join, isdir
2from os.path import realpath, dirname, join, isdir
3+from sys import version_info
3from searx.utils import load_module
4from searx.utils import load_module
4from collections import defaultdict
5from collections import defaultdict
7+if version_info[0] == 3:
7answerers_dir = dirname(realpath(__file__))
11answerers_dir = dirname(realpath(__file__))
@@ -32,10 +36,10 @@ def ask(query):
32 results = []
36 results = []
33 query_parts = list(filter(None, query.query.split()))
37 query_parts = list(filter(None, query.query.split()))
35− if not query_parts or query_parts[0] not in answerers_by_keywords:
39+ if query_parts[0].decode('utf-8') not in answerers_by_keywords:
36 return results
40 return results
38− for answerer in answerers_by_keywords[query_parts[0]]:
42+ for answerer in answerers_by_keywords[query_parts[0].decode('utf-8')]:
39 result = answerer(query)
43 result = answerer(query)
40 if result:
44 if result:
41 results.append(result)
45 results.append(result)
searx/answerers/random/answerer.py+19−13
@@ -1,6 +1,7 @@
1import hashlib
1import hashlib
2import random
2import random
3import string
3import string
5from flask_babel import gettext
6from flask_babel import gettext
@@ -9,7 +10,12 @@ from flask_babel import gettext
9keywords = ('random',)
10keywords = ('random',)
11random_int_max = 2**31
12random_int_max = 2**31
14+if sys.version_info[0] == 2:
15+ random_string_letters = string.lowercase + string.digits + string.uppercase
12−random_string_letters = string.ascii_lowercase + string.digits + string.ascii_uppercase
18+ random_string_letters = string.ascii_lowercase + string.digits + string.ascii_uppercase
15def random_characters():
21def random_characters():
@@ -18,32 +24,32 @@ def random_characters():
20def random_string():
26def random_string():
21− return ''.join(random_characters())
27+ return u''.join(random_characters())
24def random_float():
30def random_float():
25− return str(random.random())
31+ return unicode(random.random())
28def random_int():
34def random_int():
29− return str(random.randint(-random_int_max, random_int_max))
35+ return unicode(random.randint(-random_int_max, random_int_max))
32def random_sha256():
38def random_sha256():
33 m = hashlib.sha256()
39 m = hashlib.sha256()
34− m.update(''.join(random_characters()).encode())
40+ m.update(b''.join(random_characters()))
35− return str(m.hexdigest())
41+ return unicode(m.hexdigest())
38def random_uuid():
44def random_uuid():
39− return str(uuid.uuid4())
45+ return unicode(uuid.uuid4())
42−random_types = {'string': random_string,
48+random_types = {b'string': random_string,
43− 'int': random_int,
49+ b'int': random_int,
44− 'float': random_float,
50+ b'float': random_float,
45− 'sha256': random_sha256,
51+ b'sha256': random_sha256,
46− 'uuid': random_uuid}
52+ b'uuid': random_uuid}
49# required answerer function
55# required answerer function
@@ -64,4 +70,4 @@ def answer(query):
64def self_info():
70def self_info():
65 return {'name': gettext('Random value generator'),
71 return {'name': gettext('Random value generator'),
66 'description': gettext('Generate different random values'),
72 'description': gettext('Generate different random values'),
67− 'examples': ['random {}'.format(x) for x in random_types]}
73+ 'examples': [u'random {}'.format(x.decode('utf-8')) for x in random_types]}
searx/answerers/statistics/answerer.py+9−6
@@ -1,8 +1,11 @@
1+from sys import version_info
1from functools import reduce
2from functools import reduce
2from operator import mul
3from operator import mul
4from flask_babel import gettext
5from flask_babel import gettext
7+if version_info[0] == 3:
7keywords = ('min',
10keywords = ('min',
@@ -27,21 +30,21 @@ def answer(query):
27 func = parts[0]
30 func = parts[0]
28 answer = None
31 answer = None
30− if func == 'min':
33+ if func == b'min':
31 answer = min(args)
34 answer = min(args)
32− elif func == 'max':
35+ elif func == b'max':
33 answer = max(args)
36 answer = max(args)
34− elif func == 'avg':
37+ elif func == b'avg':
35 answer = sum(args) / len(args)
38 answer = sum(args) / len(args)
36− elif func == 'sum':
39+ elif func == b'sum':
37 answer = sum(args)
40 answer = sum(args)
38− elif func == 'prod':
41+ elif func == b'prod':
39 answer = reduce(mul, args, 1)
42 answer = reduce(mul, args, 1)
41 if answer is None:
44 if answer is None:
44− return [{'answer': str(answer)}]
47+ return [{'answer': unicode(answer)}]
47# required answerer function
50# required answerer function
searx/autocomplete.py+91−48
@@ -16,45 +16,107 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
19from lxml import etree
20from lxml import etree
20from json import loads
21from json import loads
21−from urllib.parse import urlencode
23−from httpx import HTTPError
26from searx import settings
22from searx import settings
27−from searx.data import ENGINES_LANGUAGES
23+from searx.languages import language_codes
24+from searx.engines import (
25+ categories, engines, engine_shortcuts
28−from searx.network import get as http_get
27+from searx.poolrequests import get as http_get
29−from searx.exceptions import SearxEngineResponseException
28+from searx.url_utils import urlencode
30+if sys.version_info[0] == 3:
32def get(*args, **kwargs):
34def get(*args, **kwargs):
33 if 'timeout' not in kwargs:
35 if 'timeout' not in kwargs:
34 kwargs['timeout'] = settings['outgoing']['request_timeout']
36 kwargs['timeout'] = settings['outgoing']['request_timeout']
35− kwargs['raise_for_httperror'] = True
36− return http_get(*args, **kwargs)
38+ return http_get(*args, **kwargs)
39−def brave(query, lang):
40− # brave search autocompleter
41− url = 'https://search.brave.com/api/suggest?{query}'
43− resp = get(url.format(query=urlencode({'q': query})))
41+def searx_bang(full_query):
42+ '''check if the searchQuery contain a bang, and create fitting autocompleter results'''
43+ # check if there is a query which can be parsed
44+ if len(full_query.getSearchQuery()) == 0:
45 results = []
47 results = []
47− if resp.ok:
49+ # check if current query stats with !bang
48− data = loads(resp.text)
50+ first_char = full_query.getSearchQuery()[0]
49− for suggestion in data[1]:
51+ if first_char == '!' or first_char == '?':
50− results.append(suggestion)
52+ if len(full_query.getSearchQuery()) == 1:
51−
53+ # show some example queries
52− return results
54+ # TODO, check if engine is not avaliable
55+ results.append(first_char + "images")
56+ results.append(first_char + "wikipedia")
57+ results.append(first_char + "osm")
59+ engine_query = full_query.getSearchQuery()[1:]
61+ # check if query starts with categorie name
62+ for categorie in categories:
63+ if categorie.startswith(engine_query):
64+ results.append(first_char + '{categorie}'.format(categorie=categorie))
66+ # check if query starts with engine name
67+ for engine in engines:
68+ if engine.startswith(engine_query.replace('_', ' ')):
69+ results.append(first_char + '{engine}'.format(engine=engine.replace(' ', '_')))
71+ # check if query starts with engine shortcut
72+ for engine_shortcut in engine_shortcuts:
73+ if engine_shortcut.startswith(engine_query):
74+ results.append(first_char + '{engine_shortcut}'.format(engine_shortcut=engine_shortcut))
76+ # check if current query stats with :bang
77+ elif first_char == ':':
78+ if len(full_query.getSearchQuery()) == 1:
79+ # show some example queries
80+ results.append(":en")
81+ results.append(":en_us")
82+ results.append(":english")
83+ results.append(":united_kingdom")
85+ engine_query = full_query.getSearchQuery()[1:]
87+ for lc in language_codes:
88+ lang_id, lang_name, country, english_name = map(unicode.lower, lc)
90+ # check if query starts with language-id
91+ if lang_id.startswith(engine_query):
92+ if len(engine_query) <= 2:
93+ results.append(u':{lang_id}'.format(lang_id=lang_id.split('-')[0]))
95+ results.append(u':{lang_id}'.format(lang_id=lang_id))
97+ # check if query starts with language name
98+ if lang_name.startswith(engine_query) or english_name.startswith(engine_query):
99+ results.append(u':{lang_name}'.format(lang_name=lang_name))
101+ # check if query starts with country
102+ if country.startswith(engine_query.replace('_', ' ')):
103+ results.append(u':{country}'.format(country=country.replace(' ', '_')))
106+ result_set = set(results)
108+ # remove results which are already contained in the query
109+ for query_part in full_query.query_parts:
110+ if query_part in result_set:
111+ result_set.remove(query_part)
113+ # convert result_set back to list
114+ return list(result_set)
55def dbpedia(query, lang):
117def dbpedia(query, lang):
56 # dbpedia autocompleter, no HTTPS
118 # dbpedia autocompleter, no HTTPS
57− autocomplete_url = 'https://lookup.dbpedia.org/api/search.asmx/KeywordSearch?'
119+ autocomplete_url = 'http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?'
59 response = get(autocomplete_url + urlencode(dict(QueryString=query)))
121 response = get(autocomplete_url + urlencode(dict(QueryString=query)))
@@ -62,7 +124,8 @@ def dbpedia(query, lang):
63 if response.ok:
125 if response.ok:
64 dom = etree.fromstring(response.content)
126 dom = etree.fromstring(response.content)
65− results = dom.xpath('//Result/Label//text()')
127+ results = dom.xpath('//a:Result/a:Label//text()',
128+ namespaces={'a': 'http://lookup.dbpedia.org/'})
67 return results
130 return results
@@ -94,19 +157,12 @@ def google(query, lang):
95def startpage(query, lang):
158def startpage(query, lang):
96 # startpage autocompleter
159 # startpage autocompleter
97− lui = ENGINES_LANGUAGES['startpage'].get(lang, 'english')
98− url = 'https://startpage.com/suggestions?{query}'
160+ url = 'https://startpage.com/do/suggest?{query}'
99− resp = get(url.format(query=urlencode({'q': query, 'segment': 'startpage.udog', 'lui': lui})))
101− return [e['text'] for e in data.get('suggestions', []) if 'text' in e]
104−def swisscows(query, lang):
105− # swisscows autocompleter
106− url = 'https://swisscows.ch/api/suggest?{query}&itemsCount=5'
108− resp = loads(get(url.format(query=urlencode({'query': query}))).text)
162+ resp = get(url.format(query=urlencode({'query': query}))).text.split('\n')
109− return resp
164+ return resp
112def qwant(query, lang):
168def qwant(query, lang):
@@ -136,23 +192,10 @@ def wikipedia(query, lang):
136 return []
192 return []
139−backends = {'brave': brave,
140− 'dbpedia': dbpedia,
195+backends = {'dbpedia': dbpedia,
141 'duckduckgo': duckduckgo,
196 'duckduckgo': duckduckgo,
142 'google': google,
197 'google': google,
143 'startpage': startpage,
198 'startpage': startpage,
144− 'swisscows': swisscows,
145 'qwant': qwant,
199 'qwant': qwant,
146 'wikipedia': wikipedia
200 'wikipedia': wikipedia
150−def search_autocomplete(backend_name, query, lang):
151− backend = backends.get(backend_name)
156− return backend(query, lang)
157− except (HTTPError, SearxEngineResponseException):
searx/data/__init__.pydeleted−50
@@ -1,50 +0,0 @@
1−# SPDX-License-Identifier: AGPL-3.0-or-later
3−"""This module holds the *data* created by::
17− 'ahmia_blacklist_loader',
21−from pathlib import Path
23−data_dir = Path(__file__).parent
27− with open(data_dir / filename, encoding='utf-8') as f:
31−def ahmia_blacklist_loader():
32− """Load data from `ahmia_blacklist.txt` and return a list of MD5 values of onion
33− names. The MD5 values are fetched by::
35− searx_extra/update/update_ahmia_blacklist.py
37− This function is used by :py:mod:`searx.plugins.ahmia_filter`.
40− with open(str(data_dir / 'ahmia_blacklist.txt'), encoding='utf-8') as f:
41− return f.read().split()
44−ENGINES_LANGUAGES = _load('engines_languages.json')
45−CURRENCIES = _load('currencies.json')
46−USER_AGENTS = _load('useragents.json')
47−EXTERNAL_URLS = _load('external_urls.json')
48−WIKIDATA_UNITS = _load('wikidata_units.json')
49−EXTERNAL_BANGS = _load('external_bangs.json')
50−OSM_KEYS_TAGS = _load('osm_keys_tags.json')
searx/data/ahmia_blacklist.txtdeleted−35730
This diff is too big to show here.
searx/data/currencies.json+7619−14643
This diff is too big to show here.
searx/data/engines_languages.json+27487−28586
This diff is too big to show here.
searx/data/external_bangs.jsondeleted−19068
This diff is too big to show here.
searx/data/external_urls.jsondeleted−156
This diff is too big to show here.
searx/data/osm_keys_tags.jsondeleted−15416
This diff is too big to show here.
searx/data/useragents.json+7−5
This diff is too big to show here.
searx/data/wikidata_units.jsondeleted−1223
This diff is too big to show here.
searx/engines/1337x.py+9−23
This diff is too big to show here.
searx/engines/__init__.py+25−64
This diff is too big to show here.
searx/engines/acgsou.pynew file+75
This diff is too big to show here.
searx/engines/ahmia.pydeleted−85
This diff is too big to show here.
searx/engines/apkmirror.py+26−33
This diff is too big to show here.
searx/engines/archlinux.py+14−17
This diff is too big to show here.
searx/engines/arxiv.py+25−23
This diff is too big to show here.
searx/engines/bandcamp.pydeleted−73
This diff is too big to show here.
searx/engines/base.py+17−13
This diff is too big to show here.
searx/engines/bing.py+27−29
This diff is too big to show here.
searx/engines/bing_images.py+41−23
This diff is too big to show here.
searx/engines/bing_news.py+18−22
This diff is too big to show here.
searx/engines/bing_videos.py+11−18
This diff is too big to show here.
searx/engines/btdigg.py+12−16
This diff is too big to show here.
searx/engines/ccengine.pydeleted−53
This diff is too big to show here.
searx/engines/command.pydeleted−172
This diff is too big to show here.
searx/engines/core.pydeleted−82
This diff is too big to show here.
searx/engines/currency_convert.py+63−18
This diff is too big to show here.
searx/engines/dailymotion.py+12−12
This diff is too big to show here.
searx/engines/deezer.py+10−13
This diff is too big to show here.
searx/engines/deviantart.py+54−50
This diff is too big to show here.
searx/engines/dictzone.py+29−21
This diff is too big to show here.
searx/engines/digbt.py+15−13
This diff is too big to show here.
searx/engines/digg.py+45−45
This diff is too big to show here.
searx/engines/doku.py+14−16
This diff is too big to show here.
searx/engines/duckduckgo.py+75−118
This diff is too big to show here.
searx/engines/duckduckgo_definitions.py+82−172
This diff is too big to show here.
searx/engines/duckduckgo_images.py+24−21
This diff is too big to show here.
searx/engines/duden.py+34−31
This diff is too big to show here.
searx/engines/dummy-offline.pydeleted−20
This diff is too big to show here.
searx/engines/dummy.py+3−11
This diff is too big to show here.
searx/engines/ebay.pydeleted−73
This diff is too big to show here.
searx/engines/elasticsearch.pydeleted−144
This diff is too big to show here.
searx/engines/etools.pydeleted−56
This diff is too big to show here.
searx/engines/faroo.pynew file+96
This diff is too big to show here.
searx/engines/fdroid.py+9−13
This diff is too big to show here.
searx/engines/filecrop.pynew file+88
This diff is too big to show here.
searx/engines/flickr.py+10−12
This diff is too big to show here.
searx/engines/flickr_noapi.py+20−17
This diff is too big to show here.
searx/engines/framalibre.py+14−14
This diff is too big to show here.
searx/engines/freesound.pydeleted−69
This diff is too big to show here.
searx/engines/frinkiac.py+9−16
This diff is too big to show here.
searx/engines/genius.py+18−20
This diff is too big to show here.
searx/engines/gentoo.py+13−14
This diff is too big to show here.
searx/engines/gigablast.py+96−105
This diff is too big to show here.
searx/engines/github.py+10−13
This diff is too big to show here.
searx/engines/google.py+330−280
This diff is too big to show here.
searx/engines/google_images.py+71−183
This diff is too big to show here.
searx/engines/google_news.py+58−168
This diff is too big to show here.
searx/engines/google_scholar.pydeleted−156
This diff is too big to show here.
searx/engines/google_videos.py+70−174
This diff is too big to show here.
searx/engines/imdb.pydeleted−55
This diff is too big to show here.
searx/engines/ina.py+23−18
This diff is too big to show here.
searx/engines/invidious.py+16−38
This diff is too big to show here.
searx/engines/json_engine.py+12−19
This diff is too big to show here.
searx/engines/kickass.py+11−13
This diff is too big to show here.
searx/engines/loc.pydeleted−68
This diff is too big to show here.
searx/engines/mediathekviewweb.pydeleted−68
This diff is too big to show here.
searx/engines/mediawiki.py+14−14
This diff is too big to show here.
searx/engines/meilisearch.pydeleted−59
This diff is too big to show here.
searx/engines/microsoft_academic.py+41−37
This diff is too big to show here.
searx/engines/mixcloud.py+9−12
This diff is too big to show here.
searx/engines/mongodb.pydeleted−61
This diff is too big to show here.
searx/engines/mysql_server.pydeleted−62
This diff is too big to show here.
searx/engines/nyaa.py+10−13
This diff is too big to show here.
searx/engines/onesearch.pydeleted−57
This diff is too big to show here.
searx/engines/opensemantic.pydeleted−46
This diff is too big to show here.
searx/engines/openstreetmap.py+72−418
This diff is too big to show here.
searx/engines/pdbe.py+8−11
This diff is too big to show here.
searx/engines/peertube.pydeleted−96
This diff is too big to show here.
searx/engines/photon.py+11−13
This diff is too big to show here.
searx/engines/piratebay.py+67−72
This diff is too big to show here.
searx/engines/postgresql.pydeleted−69
This diff is too big to show here.
searx/engines/prowlarr.pydeleted−80
This diff is too big to show here.
searx/engines/pubmed.py+13−17
This diff is too big to show here.
searx/engines/qwant.py+88−199
This diff is too big to show here.
searx/engines/recoll.pydeleted−111
This diff is too big to show here.
searx/engines/reddit.py+9−12
This diff is too big to show here.
searx/engines/redis_server.pydeleted−69
This diff is too big to show here.
searx/engines/rumble.pydeleted−81
This diff is too big to show here.
searx/engines/scanr_structures.py+9−12
This diff is too big to show here.
searx/engines/searchcode_code.py+11−13
This diff is too big to show here.
searx/engines/searchcode_doc.pynew file+49
This diff is too big to show here.
searx/engines/searx_engine.py+8−10
This diff is too big to show here.
searx/engines/seedpeer.pynew file+78
This diff is too big to show here.
searx/engines/semantic_scholar.pydeleted−42
This diff is too big to show here.
searx/engines/sepiasearch.pydeleted−102
This diff is too big to show here.
searx/engines/seznam.pydeleted−66
This diff is too big to show here.
searx/engines/sjp.pydeleted−92
This diff is too big to show here.
searx/engines/solidtorrents.pydeleted−53
This diff is too big to show here.
searx/engines/solr.pydeleted−74
This diff is too big to show here.
searx/engines/soundcloud.py+18−16
This diff is too big to show here.
searx/engines/spotify.py+14−18
This diff is too big to show here.
searx/engines/springer.pydeleted−74
This diff is too big to show here.
searx/engines/sqlite.pydeleted−51
This diff is too big to show here.
searx/engines/stackexchange.pydeleted−67
This diff is too big to show here.
searx/engines/stackoverflow.pynew file+57
This diff is too big to show here.
searx/engines/startpage.py+34−172
This diff is too big to show here.
searx/engines/tineye.pydeleted−86
This diff is too big to show here.
searx/engines/tokyotoshokan.py+11−13
This diff is too big to show here.
searx/engines/torrentz.py+15−16
This diff is too big to show here.
searx/engines/translated.py+35−18
This diff is too big to show here.
searx/engines/twitter.pynew file+87
This diff is too big to show here.
searx/engines/unsplash.py+9−12
This diff is too big to show here.
searx/engines/vimeo.py+14−15
This diff is too big to show here.
searx/engines/wikidata.py+453−647
This diff is too big to show here.
searx/engines/wikipedia.py+74−47
This diff is too big to show here.
searx/engines/wolframalpha_api.py+19−24
This diff is too big to show here.
searx/engines/wolframalpha_noapi.py+12−17
This diff is too big to show here.
searx/engines/wordnik.pydeleted−77
This diff is too big to show here.
searx/engines/www1x.py+22−21
This diff is too big to show here.
searx/engines/xpath.py+81−41
This diff is too big to show here.
searx/engines/xpath_flex.pydeleted−121
This diff is too big to show here.
searx/engines/yacy.py+17−23
This diff is too big to show here.
searx/engines/yahoo.py+102−104
This diff is too big to show here.
searx/engines/yahoo_news.py+83−84
This diff is too big to show here.
searx/engines/yandex.pynew file+64
This diff is too big to show here.
searx/engines/yggtorrent.pydeleted−128
This diff is too big to show here.
searx/engines/youtube_api.py+11−19
This diff is too big to show here.
searx/engines/youtube_noapi.py+20−90
This diff is too big to show here.
This diff is too big to show here.
searx/external_bang.pydeleted−89
This diff is too big to show here.
searx/external_urls.pydeleted−89
This diff is too big to show here.
This diff is too big to show here.
searx/metrology/__init__.pydeleted
No changes to the content.
searx/metrology/error_recorder.pydeleted−144
This diff is too big to show here.
searx/network/__init__.pydeleted−188
This diff is too big to show here.
searx/network/client.pydeleted−219
This diff is too big to show here.
searx/network/network.pydeleted−358
This diff is too big to show here.
searx/network/raise_for_httperror.pydeleted−66
This diff is too big to show here.
searx/plugins/__init__.py+9−110
This diff is too big to show here.
searx/plugins/ahmia_filter.pydeleted−33
This diff is too big to show here.
searx/plugins/hash_plugin.pydeleted−54
This diff is too big to show here.
searx/plugins/hostname_replace.pydeleted−28
This diff is too big to show here.
searx/plugins/https_rewrite.py+4−1
This diff is too big to show here.
searx/plugins/oa_doi_rewrite.py+3−3
This diff is too big to show here.
searx/plugins/open_results_on_new_tab.pynew file+25
This diff is too big to show here.
searx/plugins/self_info.py+7−5
This diff is too big to show here.
searx/plugins/tracker_url_remover.py+1−2
This diff is too big to show here.
searx/poolrequests.pynew file+159
This diff is too big to show here.
searx/preferences.py+78−261
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
searx/search.pynew file+547
This diff is too big to show here.
searx/search/__init__.pydeleted−216
This diff is too big to show here.
searx/search/checker/__init__.pydeleted−4
This diff is too big to show here.
searx/search/checker/__main__.pydeleted−95
This diff is too big to show here.
searx/search/checker/background.pydeleted−125
This diff is too big to show here.
searx/search/checker/impl.pydeleted−416
This diff is too big to show here.
searx/search/models.pydeleted−71
This diff is too big to show here.
searx/search/processors/__init__.pydeleted−41
This diff is too big to show here.
searx/search/processors/abstract.pydeleted−52
This diff is too big to show here.
searx/search/processors/offline.pydeleted−51
This diff is too big to show here.
searx/search/processors/online.pydeleted−262
This diff is too big to show here.
searx/search/processors/online_currency.pydeleted−69
This diff is too big to show here.
searx/search/processors/online_dictionary.pydeleted−55
This diff is too big to show here.
searx/settings.yml+135−1110
This diff is too big to show here.
searx/settings_loader.pydeleted−132
This diff is too big to show here.
searx/settings_robot.yml+7−12
This diff is too big to show here.
searx/shared/__init__.pydeleted−31
This diff is too big to show here.
searx/shared/shared_abstract.pydeleted−21
This diff is too big to show here.
searx/shared/shared_simple.pydeleted−39
This diff is too big to show here.
searx/shared/shared_uwsgi.pydeleted−64
This diff is too big to show here.
searx/static/css/bootstrap.min.cssnew file+1
This diff is too big to show here.
searx/static/fonts/glyphicons-halflings-regular.eotnew file
Binary file not shown.
searx/static/fonts/glyphicons-halflings-regular.svgnew file+229
This diff is too big to show here.
searx/static/fonts/glyphicons-halflings-regular.ttfnew file
Binary file not shown.
searx/static/fonts/glyphicons-halflings-regular.woffnew file
Binary file not shown.
searx/static/js/bootstrap.min.jsnew file+6
This diff is too big to show here.
searx/static/js/html5shiv.min.jsnew file+4
This diff is too big to show here.
searx/static/js/jquery-1.11.1.min.jsnew file+4
This diff is too big to show here.
searx/static/js/mootools-autocompleter-1.1.2-min.jsnew file+2
This diff is too big to show here.
searx/static/js/mootools-core-1.4.5-min.jsnew file+491
This diff is too big to show here.
searx/static/js/require-2.1.15.min.jsnew file+36
This diff is too big to show here.
searx/static/js/respond.min.jsnew file+5
This diff is too big to show here.
searx/static/js/typeahead.bundle.min.jsnew file+7
This diff is too big to show here.
searx/static/less/bootstrap/.csscomb.jsonnew file+297
This diff is too big to show here.
searx/static/less/bootstrap/.csslintrcnew file+19
This diff is too big to show here.
searx/static/less/bootstrap/alerts.lessnew file+68
This diff is too big to show here.
searx/static/less/bootstrap/badges.lessnew file+55
This diff is too big to show here.
searx/static/less/bootstrap/bootstrap.lessnew file+53
This diff is too big to show here.
searx/static/less/bootstrap/breadcrumbs.lessnew file+26
This diff is too big to show here.
searx/static/less/bootstrap/button-groups.lessnew file+240
This diff is too big to show here.
searx/static/less/bootstrap/buttons.lessnew file+157
This diff is too big to show here.
searx/static/less/bootstrap/carousel.lessnew file+243
This diff is too big to show here.
searx/static/less/bootstrap/close.lessnew file+33
This diff is too big to show here.
searx/static/less/bootstrap/code.lessnew file+68
This diff is too big to show here.
searx/static/less/bootstrap/component-animations.lessnew file+31
This diff is too big to show here.
searx/static/less/bootstrap/dropdowns.lessnew file+215
This diff is too big to show here.
searx/static/less/bootstrap/forms.lessnew file+540
This diff is too big to show here.
searx/static/less/bootstrap/glyphicons.lessnew file+233
This diff is too big to show here.
searx/static/less/bootstrap/grid.lessnew file+84
This diff is too big to show here.
searx/static/less/bootstrap/input-groups.lessnew file+166
This diff is too big to show here.
searx/static/less/bootstrap/jumbotron.lessnew file+48
This diff is too big to show here.
searx/static/less/bootstrap/labels.lessnew file+64
This diff is too big to show here.
searx/static/less/bootstrap/list-group.lessnew file+131
This diff is too big to show here.
searx/static/less/bootstrap/media.lessnew file+56
This diff is too big to show here.
searx/static/less/bootstrap/mixins.lessnew file+39
This diff is too big to show here.
searx/static/less/bootstrap/mixins/alerts.lessnew file+14
This diff is too big to show here.
searx/static/less/bootstrap/mixins/background-variant.lessnew file+8
This diff is too big to show here.
searx/static/less/bootstrap/mixins/border-radius.lessnew file+18
This diff is too big to show here.
searx/static/less/bootstrap/mixins/buttons.lessnew file+50
This diff is too big to show here.
searx/static/less/bootstrap/mixins/center-block.lessnew file+7
This diff is too big to show here.
searx/static/less/bootstrap/mixins/clearfix.lessnew file+22
This diff is too big to show here.
searx/static/less/bootstrap/mixins/forms.lessnew file+81
This diff is too big to show here.
searx/static/less/bootstrap/mixins/gradients.lessnew file+59
This diff is too big to show here.
searx/static/less/bootstrap/mixins/grid-framework.lessnew file+91
This diff is too big to show here.
searx/static/less/bootstrap/mixins/grid.lessnew file+122
This diff is too big to show here.
searx/static/less/bootstrap/mixins/hide-text.lessnew file+21
This diff is too big to show here.
searx/static/less/bootstrap/mixins/image.lessnew file+34
This diff is too big to show here.
searx/static/less/bootstrap/mixins/labels.lessnew file+12
This diff is too big to show here.
searx/static/less/bootstrap/mixins/list-group.lessnew file+29
This diff is too big to show here.
searx/static/less/bootstrap/mixins/nav-divider.lessnew file+10
This diff is too big to show here.
searx/static/less/bootstrap/mixins/nav-vertical-align.lessnew file+9
This diff is too big to show here.
searx/static/less/bootstrap/mixins/opacity.lessnew file+8
This diff is too big to show here.
searx/static/less/bootstrap/mixins/pagination.lessnew file+23
This diff is too big to show here.
searx/static/less/bootstrap/mixins/panels.lessnew file+24
This diff is too big to show here.
searx/static/less/bootstrap/mixins/progress-bar.lessnew file+10
This diff is too big to show here.
searx/static/less/bootstrap/mixins/reset-filter.lessnew file+8
This diff is too big to show here.
searx/static/less/bootstrap/mixins/resize.lessnew file+6
This diff is too big to show here.
searx/static/less/bootstrap/mixins/responsive-visibility.lessnew file+15
This diff is too big to show here.
searx/static/less/bootstrap/mixins/size.lessnew file+10
This diff is too big to show here.
searx/static/less/bootstrap/mixins/tab-focus.lessnew file+9
This diff is too big to show here.
searx/static/less/bootstrap/mixins/table-row.lessnew file+28
This diff is too big to show here.
searx/static/less/bootstrap/mixins/text-emphasis.lessnew file+8
This diff is too big to show here.
searx/static/less/bootstrap/mixins/text-overflow.lessnew file+8
This diff is too big to show here.
searx/static/less/bootstrap/mixins/vendor-prefixes.lessnew file+224
This diff is too big to show here.
searx/static/less/bootstrap/modals.lessnew file+150
This diff is too big to show here.
searx/static/less/bootstrap/navbar.lessnew file+655
This diff is too big to show here.
searx/static/less/bootstrap/navs.lessnew file+242
This diff is too big to show here.
searx/static/less/bootstrap/normalize.lessnew file+425
This diff is too big to show here.
searx/static/less/bootstrap/pager.lessnew file+55
This diff is too big to show here.
searx/static/less/bootstrap/pagination.lessnew file+88
This diff is too big to show here.
searx/static/less/bootstrap/panels.lessnew file+243
This diff is too big to show here.
searx/static/less/bootstrap/popovers.lessnew file+133
This diff is too big to show here.
searx/static/less/bootstrap/print.lessnew file+101
This diff is too big to show here.
searx/static/less/bootstrap/progress-bars.lessnew file+105
This diff is too big to show here.
searx/static/less/bootstrap/responsive-embed.lessnew file+34
This diff is too big to show here.
searx/static/less/bootstrap/responsive-utilities.lessnew file+194
This diff is too big to show here.
searx/static/less/bootstrap/scaffolding.lessnew file+150
This diff is too big to show here.
searx/static/less/bootstrap/tables.lessnew file+233
This diff is too big to show here.
searx/static/less/bootstrap/theme.lessnew file+258
This diff is too big to show here.
searx/static/less/bootstrap/thumbnails.lessnew file+36
This diff is too big to show here.
searx/static/less/bootstrap/tooltip.lessnew file+95
This diff is too big to show here.
searx/static/less/bootstrap/type.lessnew file+313
This diff is too big to show here.
searx/static/less/bootstrap/typeahead.lessnew file+153
This diff is too big to show here.
searx/static/less/bootstrap/utilities.lessnew file+57
This diff is too big to show here.
searx/static/less/bootstrap/variables.lessnew file+846
This diff is too big to show here.
searx/static/less/bootstrap/wells.lessnew file+29
This diff is too big to show here.
searx/static/plugins/external_plugins/.gitignoredeleted−3
This diff is too big to show here.
searx/static/plugins/js/infinite_scroll.js+17−33
This diff is too big to show here.
searx/static/plugins/js/open_results_on_new_tab.jsnew file+3
This diff is too big to show here.
searx/static/plugins/js/search_on_category_select.js−18
This diff is too big to show here.
searx/static/themes/courgette/css/style-rtl.cssnew file+1
This diff is too big to show here.
searx/static/themes/courgette/css/style.cssnew file+1
This diff is too big to show here.
searx/static/themes/courgette/img/bg-body-index.jpgnew file
Binary file not shown.
searx/static/themes/courgette/img/favicon.pngnew file
Binary file not shown.
searx/static/themes/courgette/img/github_ribbon.pngnew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_500px.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_bing.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_dailymotion.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_deezer.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_deviantart.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_digg.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_duckduckgo.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_flickr.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_github.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_google play apps.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_google play movies.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_google play music.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_google.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_kickass.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_openstreetmap.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_searchcode code.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_searchcode doc.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_searchcode.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_soundcloud.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_stackoverflow.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_startpage.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_subtitleseeker.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_twitter.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_vimeo.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_wikipedia.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_yahoo.iconew file
Binary file not shown.
searx/static/themes/courgette/img/icons/icon_youtube.iconew file
Binary file not shown.
searx/static/themes/courgette/img/preference-icon.pngnew file
Binary file not shown.
searx/static/themes/courgette/img/search-icon.pngnew file
Binary file not shown.
searx/static/themes/courgette/img/searx-mobile.pngnew file
Binary file not shown.
searx/static/themes/courgette/img/searx.pngnew file
Binary file not shown.
searx/static/themes/courgette/img/searx_logo.svgnew file+203
This diff is too big to show here.
searx/static/themes/courgette/js/searx.jsnew file+45
This diff is too big to show here.
searx/static/themes/courgette/less/style-rtl.lessnew file+42
This diff is too big to show here.
searx/static/themes/courgette/less/style.lessnew file+695
This diff is too big to show here.
searx/static/themes/legacy/css/style-rtl.cssnew file+1
This diff is too big to show here.
searx/static/themes/legacy/css/style.cssnew file+1
This diff is too big to show here.
searx/static/themes/legacy/img/favicon.pngnew file
Binary file not shown.
searx/static/themes/legacy/img/github_ribbon.pngnew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_500px.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_bing.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_dailymotion.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_deezer.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_deviantart.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_digg.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_duckduckgo.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_flickr.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_github.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_google play apps.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_google play movies.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_google play music.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_google.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_kickass.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_openstreetmap.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_searchcode code.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_searchcode doc.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_searchcode.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_soundcloud.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_stackoverflow.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_startpage.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_subtitleseeker.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_twitter.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_vimeo.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_wikipedia.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_yahoo.iconew file
Binary file not shown.
searx/static/themes/legacy/img/icons/icon_youtube.iconew file
Binary file not shown.
searx/static/themes/legacy/img/preference-icon.pngnew file
Binary file not shown.
searx/static/themes/legacy/img/search-icon.pngnew file
Binary file not shown.
searx/static/themes/legacy/img/searx.pngnew file
Binary file not shown.
searx/static/themes/legacy/img/searx_logo.svgnew file+203
This diff is too big to show here.
searx/static/themes/legacy/js/searx.jsnew file+49
This diff is too big to show here.
searx/static/themes/legacy/less/autocompleter.lessnew file+61
This diff is too big to show here.
searx/static/themes/legacy/less/code.lessnew file+83
This diff is too big to show here.
searx/static/themes/legacy/less/definitions.lessnew file+119
This diff is too big to show here.
searx/static/themes/legacy/less/mixins.lessnew file+27
This diff is too big to show here.
searx/static/themes/legacy/less/search.lessnew file+68
This diff is too big to show here.
searx/static/themes/legacy/less/style-rtl.lessnew file+11
This diff is too big to show here.
searx/static/themes/legacy/less/style.lessnew file+743
This diff is too big to show here.
searx/static/themes/oscar/.gitignore+1−1
This diff is too big to show here.
searx/static/themes/oscar/README.rst−39
This diff is too big to show here.
searx/static/themes/oscar/css/bootstrap-theme.cssdeleted−587
This diff is too big to show here.
searx/static/themes/oscar/css/bootstrap-theme.min.cssdeleted−6
This diff is too big to show here.
searx/static/themes/oscar/css/bootstrap-theme.min.css.mapdeleted−1
This diff is too big to show here.
searx/static/themes/oscar/css/bootstrap.cssdeleted−6990
This diff is too big to show here.
searx/static/themes/oscar/css/bootstrap.min.cssdeleted−5
This diff is too big to show here.
searx/static/themes/oscar/css/bootstrap.min.css.mapdeleted−1
This diff is too big to show here.
searx/static/themes/oscar/css/images/layers-2x.pngdeleted
Binary file not shown.
searx/static/themes/oscar/css/images/layers.pngdeleted
Binary file not shown.
searx/static/themes/oscar/css/images/marker-icon-2x.pngdeleted
Binary file not shown.
searx/static/themes/oscar/css/images/marker-icon.pngdeleted
Binary file not shown.
searx/static/themes/oscar/css/images/marker-shadow.pngdeleted
Binary file not shown.
searx/static/themes/oscar/css/leaflet.cssdeleted−640
This diff is too big to show here.
searx/static/themes/oscar/css/leaflet.min.css+93−1
This diff is too big to show here.
searx/static/themes/oscar/css/leaflet.min.css.mapdeleted−1
This diff is too big to show here.
searx/static/themes/oscar/css/logicodev-dark.css+179−383
This diff is too big to show here.
searx/static/themes/oscar/css/logicodev-dark.min.css+1−1
This diff is too big to show here.
searx/static/themes/oscar/css/logicodev-dark.min.css.mapdeleted−1
This diff is too big to show here.
searx/static/themes/oscar/css/logicodev.css+182−396
This diff is too big to show here.
searx/static/themes/oscar/css/logicodev.min.css+1−1
This diff is too big to show here.
searx/static/themes/oscar/css/logicodev.min.css.mapdeleted−1
This diff is too big to show here.
searx/static/themes/oscar/css/pointhi.css+104−235
This diff is too big to show here.
searx/static/themes/oscar/css/pointhi.min.css+1−1
This diff is too big to show here.
searx/static/themes/oscar/css/pointhi.min.css.mapdeleted−1
This diff is too big to show here.
searx/static/themes/oscar/fonts/glyphicons-halflings-regular.eotdeleted
Binary file not shown.
searx/static/themes/oscar/fonts/glyphicons-halflings-regular.svgdeleted−288
This diff is too big to show here.
searx/static/themes/oscar/fonts/glyphicons-halflings-regular.ttfdeleted
Binary file not shown.
searx/static/themes/oscar/fonts/glyphicons-halflings-regular.woffdeleted
Binary file not shown.
searx/static/themes/oscar/fonts/glyphicons-halflings-regular.woff2deleted
Binary file not shown.
searx/static/themes/oscar/gruntfile.js+32−88
This diff is too big to show here.
searx/static/themes/oscar/img/icons/bandcamp.pngdeleted
Binary file not shown.
searx/static/themes/oscar/img/map/layers-2x.pngnew file
Binary file not shown.
searx/static/themes/oscar/img/map/layers.pngnew file
Binary file not shown.
searx/static/themes/oscar/img/map/marker-icon-2x-green.pngnew file
Binary file not shown.
searx/static/themes/oscar/img/map/marker-icon-2x-orange.pngnew file
Binary file not shown.
searx/static/themes/oscar/img/map/marker-icon-2x-red.pngnew file
Binary file not shown.
searx/static/themes/oscar/img/map/marker-icon-2x.pngnew file
Binary file not shown.
searx/static/themes/oscar/img/map/marker-icon-green.pngnew file
Binary file not shown.
searx/static/themes/oscar/img/map/marker-icon-orange.pngnew file
Binary file not shown.
searx/static/themes/oscar/img/map/marker-icon-red.pngnew file
Binary file not shown.
searx/static/themes/oscar/img/map/marker-icon.pngnew file
Binary file not shown.
searx/static/themes/oscar/img/map/marker-shadow.pngnew file
Binary file not shown.
searx/static/themes/oscar/js/bootstrap.bundle.min.jsdeleted−7
This diff is too big to show here.
searx/static/themes/oscar/js/bootstrap.min.jsdeleted−6
This diff is too big to show here.
searx/static/themes/oscar/js/jquery.min.jsdeleted−2
This diff is too big to show here.
searx/static/themes/oscar/js/leaflet-0.7.3.min.jsnew file+9
This diff is too big to show here.
searx/static/themes/oscar/js/leaflet.jsdeleted−6
This diff is too big to show here.
searx/static/themes/oscar/js/searx.js+156−274
This diff is too big to show here.
searx/static/themes/oscar/js/searx.min.js+2−4
This diff is too big to show here.
searx/static/themes/oscar/js/searx.min.js.mapdeleted−1
This diff is too big to show here.
searx/static/themes/oscar/js/searx_src/00_requirejs_config.jsnew file+23
This diff is too big to show here.
searx/static/themes/oscar/src/js/01_init.js → searx/static/themes/oscar/js/searx_src/01_init.jsrenamed+1−5
This diff is too big to show here.
searx/static/themes/oscar/js/searx_src/autocompleter.jsnew file+37
This diff is too big to show here.
searx/static/themes/oscar/src/js/element_modifiers.js → searx/static/themes/oscar/js/searx_src/element_modifiers.jsrenamed−18
This diff is too big to show here.
searx/static/themes/oscar/js/searx_src/leaflet_map.jsnew file+167
This diff is too big to show here.
searx/static/themes/oscar/js/typeahead.bundle.min.jsdeleted−9
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev-dark/oscar.less → searx/static/themes/oscar/less/logicodev-dark/oscar.lessrenamed+4−16
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev/advanced.less → searx/static/themes/oscar/less/logicodev/advanced.lessrenamed+2−2
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev/checkbox.less → searx/static/themes/oscar/less/logicodev/checkbox.lessrenamed
The content is the same.
searx/static/themes/oscar/less/logicodev/code.lessnew file+101
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev/cursor.less → searx/static/themes/oscar/less/logicodev/cursor.lessrenamed
The content is the same.
searx/static/themes/oscar/src/less/logicodev/footer.less → searx/static/themes/oscar/less/logicodev/footer.lessrenamed
The content is the same.
searx/static/themes/oscar/less/logicodev/infobox.lessnew file+37
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev/navbar.less → searx/static/themes/oscar/less/logicodev/navbar.lessrenamed
The content is the same.
searx/static/themes/oscar/src/less/logicodev/onoff.less → searx/static/themes/oscar/less/logicodev/onoff.lessrenamed+2−19
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev/oscar.less → searx/static/themes/oscar/less/logicodev/oscar.lessrenamed
The content is the same.
searx/static/themes/oscar/less/logicodev/preferences.lessnew file+3
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev/results.less → searx/static/themes/oscar/less/logicodev/results.lessrenamed+9−89
This diff is too big to show here.
searx/static/themes/oscar/less/logicodev/search.lessnew file+80
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev/variables.less → searx/static/themes/oscar/less/logicodev/variables.lessrenamed+3−6
This diff is too big to show here.
searx/static/themes/oscar/src/less/pointhi/advanced.less → searx/static/themes/oscar/less/pointhi/advanced.lessrenamed
The content is the same.
searx/static/themes/oscar/src/less/pointhi/checkbox.less → searx/static/themes/oscar/less/pointhi/checkbox.lessrenamed
The content is the same.
searx/static/themes/oscar/less/pointhi/code.lessnew file+79
This diff is too big to show here.
searx/static/themes/oscar/src/less/pointhi/cursor.less → searx/static/themes/oscar/less/pointhi/cursor.lessrenamed
The content is the same.
searx/static/themes/oscar/src/less/pointhi/footer.less → searx/static/themes/oscar/less/pointhi/footer.lessrenamed
The content is the same.
searx/static/themes/oscar/less/pointhi/infobox.lessnew file+11
This diff is too big to show here.
searx/static/themes/oscar/src/less/pointhi/navbar.less → searx/static/themes/oscar/less/pointhi/navbar.lessrenamed
The content is the same.
searx/static/themes/oscar/src/less/pointhi/onoff.less → searx/static/themes/oscar/less/pointhi/onoff.lessrenamed
The content is the same.
searx/static/themes/oscar/src/less/pointhi/oscar.less → searx/static/themes/oscar/less/pointhi/oscar.lessrenamed−2
This diff is too big to show here.
searx/static/themes/oscar/less/pointhi/preferences.lessnew file+3
This diff is too big to show here.
searx/static/themes/oscar/src/less/pointhi/results.less → searx/static/themes/oscar/less/pointhi/results.lessrenamed−4
This diff is too big to show here.
searx/static/themes/oscar/src/less/pointhi/search.less → searx/static/themes/oscar/less/pointhi/search.lessrenamed−10
This diff is too big to show here.
searx/static/themes/oscar/package.json+6−14
This diff is too big to show here.
searx/static/themes/oscar/src/js/autocompleter.jsdeleted−60
This diff is too big to show here.
searx/static/themes/oscar/src/js/infobox.jsdeleted−11
This diff is too big to show here.
searx/static/themes/oscar/src/js/leaflet_map.jsdeleted−79
This diff is too big to show here.
searx/static/themes/oscar/src/js/toggleall.jsdeleted−10
This diff is too big to show here.
searx/static/themes/oscar/src/less/bootstrap/bootstrap.lessdeleted−3
This diff is too big to show here.
searx/static/themes/oscar/src/less/bootstrap/typeahead.lessdeleted−154
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev/code.lessdeleted−14
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev/infobox.lessdeleted−92
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev/preferences.lessdeleted−31
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev/pygments.lessdeleted−99
This diff is too big to show here.
searx/static/themes/oscar/src/less/logicodev/search.lessdeleted−98
This diff is too big to show here.
searx/static/themes/oscar/src/less/pointhi/code.lessdeleted−2
This diff is too big to show here.
searx/static/themes/oscar/src/less/pointhi/infobox.lessdeleted−62
This diff is too big to show here.
searx/static/themes/oscar/src/less/pointhi/preferences.lessdeleted−19
This diff is too big to show here.
searx/static/themes/oscar/src/less/pointhi/pygments.lessdeleted−99
This diff is too big to show here.
searx/static/themes/pix-art/css/style.cssnew file+1
This diff is too big to show here.
searx/static/themes/pix-art/img/favicon.pngnew file
Binary file not shown.
searx/static/themes/pix-art/img/preference-icon-pixel.pngnew file
Binary file not shown.
searx/static/themes/pix-art/img/search-icon-pixel.pngnew file
Binary file not shown.
searx/static/themes/pix-art/img/searx-pixel-small.pngnew file
Binary file not shown.
searx/static/themes/pix-art/img/searx-pixel.pngnew file
Binary file not shown.
searx/static/themes/pix-art/js/searx.jsnew file+141
This diff is too big to show here.
searx/static/themes/pix-art/less/definitions.lessnew file+119
This diff is too big to show here.
searx/static/themes/pix-art/less/mixins.lessnew file+27
This diff is too big to show here.
searx/static/themes/pix-art/less/search.lessnew file+57
This diff is too big to show here.
searx/static/themes/pix-art/less/style.lessnew file+451
This diff is too big to show here.
searx/static/themes/simple/.gitignoredeleted−1
This diff is too big to show here.
searx/static/themes/simple/css/searx-rtl.css+83−167
This diff is too big to show here.
searx/static/themes/simple/css/searx-rtl.min.css+1−1
This diff is too big to show here.
searx/static/themes/simple/css/searx.css+83−167
This diff is too big to show here.
searx/static/themes/simple/css/searx.min.css+1−1
This diff is too big to show here.
searx/static/themes/simple/gruntfile.js+5−5
This diff is too big to show here.
searx/static/themes/simple/js/searx.head.js+1−1
This diff is too big to show here.
searx/static/themes/simple/js/searx.head.min.js+2−2
This diff is too big to show here.
searx/static/themes/simple/js/searx.head.min.js.map+1−1
This diff is too big to show here.
searx/static/themes/simple/js/searx.js+240−169
This diff is too big to show here.
searx/static/themes/simple/js/searx.min.js+4−5
This diff is too big to show here.
searx/static/themes/simple/js/searx.min.js.map+1−1
This diff is too big to show here.
searx/static/themes/simple/js/searx_head/00_init.js+1−1
This diff is too big to show here.
searx/static/themes/simple/js/searx_src/searx_imageresult.js+49−61
This diff is too big to show here.
searx/static/themes/simple/js/searx_src/searx_mapresult.js+87
This diff is too big to show here.
searx/static/themes/simple/js/searx_src/searx_results.js+1−1
This diff is too big to show here.
searx/static/themes/simple/js/searx_src/searx_search.js+1−5
This diff is too big to show here.
searx/static/themes/simple/less/code.less+80−5
This diff is too big to show here.
searx/static/themes/simple/less/preferences.less−17
This diff is too big to show here.
searx/static/themes/simple/less/pygments.less−99
This diff is too big to show here.
searx/static/themes/simple/less/style.less−36
This diff is too big to show here.
searx/templates/__common__/about.html+53−92
This diff is too big to show here.
searx/templates/__common__/opensearch.xml+16−10
This diff is too big to show here.
searx/templates/__common__/opensearch_response_rss.xml+2−26
This diff is too big to show here.
searx/templates/courgette/404.html+9
This diff is too big to show here.
searx/templates/courgette/about.html+5
This diff is too big to show here.
searx/templates/courgette/base.html+43
This diff is too big to show here.
searx/templates/courgette/categories.html+9
This diff is too big to show here.
searx/templates/courgette/color.css+34
This diff is too big to show here.
searx/templates/courgette/github_ribbon.html+3
This diff is too big to show here.
searx/templates/courgette/index.html+17
This diff is too big to show here.
searx/templates/courgette/preferences.html+132
This diff is too big to show here.
searx/templates/courgette/result_templates/code.html+11
This diff is too big to show here.
searx/templates/courgette/result_templates/default.html+13
This diff is too big to show here.
searx/templates/courgette/result_templates/images.html+6
This diff is too big to show here.
searx/templates/courgette/result_templates/key-value.html+13
This diff is too big to show here.
searx/templates/courgette/result_templates/map.html+13
This diff is too big to show here.
searx/templates/courgette/result_templates/torrent.html+13
This diff is too big to show here.
searx/templates/courgette/result_templates/videos.html+10
This diff is too big to show here.
searx/templates/courgette/results.html+87
This diff is too big to show here.
searx/templates/courgette/search.html+7
This diff is too big to show here.
searx/templates/courgette/stats.html+22
This diff is too big to show here.
searx/templates/legacy/404.html+9
This diff is too big to show here.
searx/templates/legacy/about.html+5
This diff is too big to show here.
searx/templates/legacy/base.html+38
This diff is too big to show here.
searx/templates/legacy/categories.html+10
This diff is too big to show here.
searx/templates/legacy/github_ribbon.html+3
This diff is too big to show here.
searx/templates/legacy/index.html+18
This diff is too big to show here.
searx/templates/legacy/infobox.html+51
This diff is too big to show here.
searx/templates/legacy/preferences.html+129
This diff is too big to show here.
searx/templates/legacy/result_templates/code.html+11
This diff is too big to show here.
searx/templates/legacy/result_templates/default.html+6
This diff is too big to show here.
searx/templates/legacy/result_templates/images.html+6
This diff is too big to show here.
searx/templates/legacy/result_templates/key-value.html+13
This diff is too big to show here.
searx/templates/legacy/result_templates/map.html+13
This diff is too big to show here.
searx/templates/legacy/result_templates/torrent.html+13
This diff is too big to show here.
searx/templates/legacy/result_templates/videos.html+6
This diff is too big to show here.
searx/templates/legacy/results.html+100
This diff is too big to show here.
searx/templates/legacy/search.html+8
This diff is too big to show here.
searx/templates/legacy/stats.html+22
This diff is too big to show here.
searx/templates/oscar/404.html+1−1
This diff is too big to show here.
searx/templates/oscar/advanced.html+1−1
This diff is too big to show here.
searx/templates/oscar/base.html+22−21
This diff is too big to show here.
searx/templates/oscar/index.html+9−8
This diff is too big to show here.
searx/templates/oscar/infobox.html+3−16
This diff is too big to show here.
searx/templates/oscar/languages.html+1−3
This diff is too big to show here.
searx/templates/oscar/macros.html+48−87
This diff is too big to show here.
searx/templates/oscar/messages/no_results.html+1−1
This diff is too big to show here.
searx/templates/oscar/preferences.html+74−141
This diff is too big to show here.
searx/templates/oscar/result_templates/code.html+2−2
This diff is too big to show here.
searx/templates/oscar/result_templates/default.html+12−12
This diff is too big to show here.
searx/templates/oscar/result_templates/files.html−55
This diff is too big to show here.
searx/templates/oscar/result_templates/images.html+2−2
This diff is too big to show here.
searx/templates/oscar/result_templates/key-value.html+3−3
This diff is too big to show here.
searx/templates/oscar/result_templates/map.html+56−60
This diff is too big to show here.
searx/templates/oscar/result_templates/products.html−23
This diff is too big to show here.
searx/templates/oscar/result_templates/torrent.html+17−17
This diff is too big to show here.
searx/templates/oscar/result_templates/videos.html+18−20
This diff is too big to show here.
searx/templates/oscar/results.html+18−49
This diff is too big to show here.
searx/templates/oscar/search.html+2−3
This diff is too big to show here.
searx/templates/oscar/search_full.html+2−3
This diff is too big to show here.
searx/templates/oscar/time-range.html+1−3
This diff is too big to show here.
searx/templates/pix-art/404.html+9
This diff is too big to show here.
searx/templates/pix-art/about.html+4
This diff is too big to show here.
searx/templates/pix-art/base.html+35
This diff is too big to show here.
searx/templates/pix-art/index.html+12
This diff is too big to show here.
searx/templates/pix-art/preferences.html+82
This diff is too big to show here.
searx/templates/pix-art/result_templates/default.html+7
This diff is too big to show here.
searx/templates/pix-art/result_templates/images.html+6
This diff is too big to show here.
searx/templates/pix-art/results.html+32
This diff is too big to show here.
searx/templates/pix-art/search.html+9
This diff is too big to show here.
searx/templates/pix-art/stats.html+22
This diff is too big to show here.
searx/templates/simple/404.html+1−1
This diff is too big to show here.
searx/templates/simple/base.html+8−9
This diff is too big to show here.
searx/templates/simple/infobox.html+2−1
This diff is too big to show here.
searx/templates/simple/macros.html+3−3
This diff is too big to show here.
searx/templates/simple/messages/no_results.html+1−1
This diff is too big to show here.
searx/templates/simple/preferences.html+3−34
This diff is too big to show here.
searx/templates/simple/result_templates/map.html+52−35
This diff is too big to show here.
searx/templates/simple/results.html+9−24
This diff is too big to show here.
searx/templates/simple/search.html+2−2
This diff is too big to show here.
This diff is too big to show here.
searx/translations/ar/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/ar/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/bg/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/bg/LC_MESSAGES/messages.po+222−306
This diff is too big to show here.
searx/translations/bo/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/bo/LC_MESSAGES/messages.po+240−325
This diff is too big to show here.
searx/translations/ca/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/ca/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/cs/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/cs/LC_MESSAGES/messages.po+297−383
This diff is too big to show here.
searx/translations/cy/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/cy/LC_MESSAGES/messages.po+222−306
This diff is too big to show here.
searx/translations/da/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/da/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/de/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/de/LC_MESSAGES/messages.po+224−310
This diff is too big to show here.
searx/translations/el_GR/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/el_GR/LC_MESSAGES/messages.po+222−306
This diff is too big to show here.
searx/translations/en/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/eo/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/eo/LC_MESSAGES/messages.po+226−310
This diff is too big to show here.
searx/translations/es/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/es/LC_MESSAGES/messages.po+228−313
This diff is too big to show here.
searx/translations/et/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/et/LC_MESSAGES/messages.po+237−322
This diff is too big to show here.
searx/translations/eu/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/eu/LC_MESSAGES/messages.po+225−310
This diff is too big to show here.
searx/translations/fa_IR/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/fa_IR/LC_MESSAGES/messages.po+227−312
This diff is too big to show here.
searx/translations/fi/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/fi/LC_MESSAGES/messages.po+223−307
This diff is too big to show here.
searx/translations/fil/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/fil/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/fr/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/fr/LC_MESSAGES/messages.po+226−310
This diff is too big to show here.
searx/translations/gl/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/gl/LC_MESSAGES/messages.po+257−342
This diff is too big to show here.
searx/translations/he/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/he/LC_MESSAGES/messages.po+226−311
This diff is too big to show here.
searx/translations/hr/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/hr/LC_MESSAGES/messages.po+228−313
This diff is too big to show here.
searx/translations/hu/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/hu/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/ia/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/ia/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/it/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/it/LC_MESSAGES/messages.po+227−311
This diff is too big to show here.
searx/translations/ja/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/ja/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/lt/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/lt/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/nl/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/nl/LC_MESSAGES/messages.po+224−309
This diff is too big to show here.
searx/translations/nl_BE/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/nl_BE/LC_MESSAGES/messages.po+224−309
This diff is too big to show here.
searx/translations/oc/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/oc/LC_MESSAGES/messages.po+225−309
This diff is too big to show here.
searx/translations/pl/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/pt/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/pt/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/pt_BR/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/pt_BR/LC_MESSAGES/messages.po+224−309
This diff is too big to show here.
searx/translations/ro/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/ro/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/ru/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/ru/LC_MESSAGES/messages.po+226−311
This diff is too big to show here.
searx/translations/sk/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/sk/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/sl/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/sl/LC_MESSAGES/messages.po+223−307
This diff is too big to show here.
searx/translations/sr/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/sr/LC_MESSAGES/messages.po+228−313
This diff is too big to show here.
searx/translations/sv/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/sv/LC_MESSAGES/messages.po+227−311
This diff is too big to show here.
searx/translations/ta/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/ta/LC_MESSAGES/messages.po+222−306
This diff is too big to show here.
searx/translations/te/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/te/LC_MESSAGES/messages.po+222−306
This diff is too big to show here.
searx/translations/tr/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/tr/LC_MESSAGES/messages.po+331−416
This diff is too big to show here.
searx/translations/uk/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/uk/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/vi/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/vi/LC_MESSAGES/messages.po+224−308
This diff is too big to show here.
searx/translations/zh_CN/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/zh_CN/LC_MESSAGES/messages.po+225−310
This diff is too big to show here.
searx/translations/zh_Hant_TW/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/zh_TW/LC_MESSAGES/messages.mo
This diff is too big to show here.
searx/translations/zh_TW/LC_MESSAGES/messages.po+224−309
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
searx_extra/standalone_searx.py−217
This diff is too big to show here.
searx_extra/update/__init__.py
This diff is too big to show here.
searx_extra/update/update_ahmia_blacklist.py−30
This diff is too big to show here.
searx_extra/update/update_currencies.py−150
This diff is too big to show here.
searx_extra/update/update_engine_descriptions.py−202
This diff is too big to show here.
searx_extra/update/update_external_bangs.py−157
This diff is too big to show here.
searx_extra/update/update_languages.py−205
This diff is too big to show here.
searx_extra/update/update_osm_keys_tags.py−209
This diff is too big to show here.
searx_extra/update/update_pygments.py−138
This diff is too big to show here.
searx_extra/update/update_wikidata_units.py−54
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
tests/unit/engines/test_command.py−240
This diff is too big to show here.
tests/unit/engines/test_xpath.py−121
This diff is too big to show here.
tests/unit/network/__init__.py
This diff is too big to show here.
tests/unit/network/test_network.py−239
This diff is too big to show here.
tests/unit/settings/empty_settings.yml
This diff is too big to show here.
tests/unit/settings/syntaxerror_settings.yml−2
This diff is too big to show here.
tests/unit/settings/user_settings.yml−111
This diff is too big to show here.
tests/unit/settings/user_settings_keep_only.yml−14
This diff is too big to show here.
tests/unit/settings/user_settings_remove.yml−10
This diff is too big to show here.
tests/unit/settings/user_settings_remove2.yml−15
This diff is too big to show here.
tests/unit/settings/user_settings_simple.yml−9
This diff is too big to show here.
tests/unit/test_answerers.py+2−2
This diff is too big to show here.
tests/unit/test_engines_init.py−44
This diff is too big to show here.
tests/unit/test_external_bangs.py−117
This diff is too big to show here.
tests/unit/test_plugins.py+19−73
This diff is too big to show here.
tests/unit/test_preferences.py+29−25
This diff is too big to show here.
tests/unit/test_query.py+35−219
This diff is too big to show here.
tests/unit/test_results.py+4−4
This diff is too big to show here.
tests/unit/test_search.py+25−65
This diff is too big to show here.
tests/unit/test_settings_loader.py−122
This diff is too big to show here.
tests/unit/test_standalone_searx.py−111
This diff is too big to show here.
tests/unit/test_utils.py+68−145
This diff is too big to show here.
tests/unit/test_webadapter.py−54
This diff is too big to show here.
tests/unit/test_webapp.py+17−85
This diff is too big to show here.
tests/unit/test_webutils.py−87
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
utils/fetch_currencies.py+163
This diff is too big to show here.
utils/fetch_firefox_version.py+8−3
This diff is too big to show here.
utils/fetch_languages.py+191
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
utils/makefile.include+50−25
This diff is too big to show here.
This diff is too big to show here.
utils/makefile.python+290
This diff is too big to show here.
utils/makefile.sphinx+216
This diff is too big to show here.
This diff is too big to show here.
This diff is too big to show here.
utils/standalone_searx.py+104
This diff is too big to show here.
utils/templates/etc/apache2−1
This diff is too big to show here.
utils/templates/etc/filtron/rules.json−129
This diff is too big to show here.
utils/templates/etc/httpd/sites-available/morty.conf−28
This diff is too big to show here.
utils/templates/etc/httpd/sites-available/searx.conf:filtron−33
This diff is too big to show here.
utils/templates/etc/httpd/sites-available/searx.conf:uwsgi−27
This diff is too big to show here.
utils/templates/etc/nginx/default.apps-available/morty.conf−11
This diff is too big to show here.
utils/templates/etc/nginx/default.apps-available/searx.conf:filtron−16
This diff is too big to show here.
utils/templates/etc/searx/use_default_settings.yml−22
This diff is too big to show here.
utils/templates/etc/uwsgi/apps-archlinux/searx.ini−88
This diff is too big to show here.
utils/templates/etc/uwsgi/apps-archlinux/searx.ini:socket−85
This diff is too big to show here.
utils/templates/etc/uwsgi/apps-available/searx.ini−87
This diff is too big to show here.
utils/templates/etc/uwsgi/apps-available/searx.ini:socket−84
This diff is too big to show here.
utils/templates/lib/systemd/system/filtron.service−29
This diff is too big to show here.
utils/templates/lib/systemd/system/morty.service−29
This diff is too big to show here.
utils/update-translations.sh
This diff is too big to show here.