Merge pull request #288 from neon-mmd/rolling
Browse files🚀 Release the first stable version of the app
This view is limited to 50 files because it contains too many changes.
See raw diff
- .cspell.json +20 -0
- .github/ISSUE_TEMPLATE/bug.yml +40 -0
- .github/ISSUE_TEMPLATE/bug_report.md +0 -36
- .github/ISSUE_TEMPLATE/config.yml +5 -1
- .github/ISSUE_TEMPLATE/docs.yml +40 -0
- .github/ISSUE_TEMPLATE/engine-request.md +0 -27
- .github/ISSUE_TEMPLATE/engine.yml +72 -0
- .github/ISSUE_TEMPLATE/feature.yml +40 -0
- .github/ISSUE_TEMPLATE/feature_request.md +0 -20
- .github/ISSUE_TEMPLATE/other.yml +36 -0
- .github/label-actions.yml +11 -0
- .github/labeler.yml +27 -0
- .github/workflows/contributors.yml +48 -0
- .github/workflows/hello.yml +1 -0
- .github/workflows/issue-lock-unlock.yml +16 -0
- .github/workflows/labels.yml +2 -1
- .github/workflows/mega-linter.yml +89 -0
- .github/workflows/pr_labeler.yml +15 -0
- .github/workflows/releases.yml +0 -78
- .github/workflows/rust.yml +27 -22
- .github/workflows/rust_format.yml +15 -1
- .github/workflows/stale.yml +1 -0
- .gitignore +7 -0
- .gitpod.Dockerfile +3 -0
- .gitpod.yml +50 -0
- .mega-linter.yml +22 -0
- .rusty-hook.toml +5 -0
- .stylelintrc.json +13 -0
- CONTRIBUTING.md +3 -19
- Cargo.lock +0 -0
- Cargo.toml +66 -16
- Dockerfile +19 -5
- PULL_REQUEST_TEMPLATE.md +1 -1
- README.md +73 -42
- docker-compose.yml +13 -8
- docs/README.md +2 -0
- docs/configuration.md +46 -13
- docs/features.md +42 -0
- docs/installation.md +294 -23
- docs/instances.md +12 -0
- docs/theming.md +438 -69
- flake.lock +94 -0
- flake.nix +52 -0
- images/create_fork_button.png +0 -0
- images/fork_button.png +0 -0
- images/fork_options_page.png +0 -0
- public/images/barricade.png +0 -0
- public/images/filter.png +0 -0
- public/images/info.svg +1 -0
- public/images/no_results.gif +0 -0
.cspell.json
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"ignorePaths": [
|
3 |
+
"**/node_modules/**",
|
4 |
+
"**/vscode-extension/**",
|
5 |
+
"**/.git/**",
|
6 |
+
"**/.pnpm-lock.json",
|
7 |
+
".vscode",
|
8 |
+
"megalinter",
|
9 |
+
"package-lock.json",
|
10 |
+
"report"
|
11 |
+
],
|
12 |
+
"language": "en",
|
13 |
+
"noConfigSearch": true,
|
14 |
+
"words": [
|
15 |
+
"megalinter",
|
16 |
+
"oxsecurity",
|
17 |
+
"websurfx"
|
18 |
+
],
|
19 |
+
"version": "0.2"
|
20 |
+
}
|
.github/ISSUE_TEMPLATE/bug.yml
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: 🐛 Bug
|
2 |
+
description: Report an issue to help improve the project.
|
3 |
+
title: "🐛 <description>"
|
4 |
+
labels: ["🛠️ goal: fix","🚦 status: awaiting triage"]
|
5 |
+
body:
|
6 |
+
- type: textarea
|
7 |
+
id: description
|
8 |
+
attributes:
|
9 |
+
label: Description
|
10 |
+
description: A brief description of the question or issue, also include what you tried and what didn't work
|
11 |
+
validations:
|
12 |
+
required: true
|
13 |
+
- type: textarea
|
14 |
+
id: screenshots
|
15 |
+
attributes:
|
16 |
+
label: Screenshots
|
17 |
+
description: Please add screenshots if applicable
|
18 |
+
validations:
|
19 |
+
required: false
|
20 |
+
- type: dropdown
|
21 |
+
id: assignee
|
22 |
+
attributes:
|
23 |
+
label: Do you want to work on this issue?
|
24 |
+
multiple: false
|
25 |
+
options:
|
26 |
+
- "Yes"
|
27 |
+
- "No"
|
28 |
+
validations:
|
29 |
+
required: false
|
30 |
+
- type: textarea
|
31 |
+
id: extrainfo
|
32 |
+
attributes:
|
33 |
+
label: Additional information
|
34 |
+
description: Is there anything else we should know about this bug?
|
35 |
+
validations:
|
36 |
+
required: false
|
37 |
+
- type: markdown
|
38 |
+
attributes:
|
39 |
+
value: |
|
40 |
+
You can also join our Discord community [here](https://discord.gg/SWnda7Mw5u)
|
.github/ISSUE_TEMPLATE/bug_report.md
DELETED
@@ -1,36 +0,0 @@
|
|
1 |
-
---
|
2 |
-
name: Bug report
|
3 |
-
about: Create a report to help us improve
|
4 |
-
title: "[BUG] <your bug report title>"
|
5 |
-
labels: bug
|
6 |
-
assignees: ''
|
7 |
-
|
8 |
-
---
|
9 |
-
|
10 |
-
<!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF Websurfx -->
|
11 |
-
|
12 |
-
**Version of Websurfx, commit number if you are using on master branch**
|
13 |
-
<!-- If you are running on master branch using git execute this command
|
14 |
-
in order to fetch the latest commit ID:
|
15 |
-
```
|
16 |
-
git log -1
|
17 |
-
```
|
18 |
-
-->
|
19 |
-
|
20 |
-
**How did you install Websurfx?**
|
21 |
-
<!-- Did you install Websurfx following the README ? -->
|
22 |
-
|
23 |
-
**What happened?**
|
24 |
-
<!-- A clear and concise description of what the bug is. -->
|
25 |
-
|
26 |
-
**Steps To Reproduce**
|
27 |
-
<!-- How can we reproduce this issue? (as minimally and as precisely as possible) -->
|
28 |
-
|
29 |
-
**Expected behavior**
|
30 |
-
<!-- A clear and concise description of what you expected to happen. -->
|
31 |
-
|
32 |
-
**Screenshots**
|
33 |
-
<!-- If applicable, provide screenshots to help explain your problem better. -->
|
34 |
-
|
35 |
-
**Additional context**
|
36 |
-
<!-- Add any other context about the problem here. -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.github/ISSUE_TEMPLATE/config.yml
CHANGED
@@ -1 +1,5 @@
|
|
1 |
-
blank_issues_enabled:
|
|
|
|
|
|
|
|
|
|
1 |
+
blank_issues_enabled: false
|
2 |
+
contact_links:
|
3 |
+
- name: Question?
|
4 |
+
url: https://discord.gg/SWnda7Mw5u
|
5 |
+
about: Feel free to ask your question by joining our Discord server.
|
.github/ISSUE_TEMPLATE/docs.yml
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: 📝 Documentation issue
|
2 |
+
description: Found an issue in the documentation? You can use this one!
|
3 |
+
title: "📝 <description>"
|
4 |
+
labels: ["📄 aspect: text","🚦 status: awaiting triage"]
|
5 |
+
body:
|
6 |
+
- type: textarea
|
7 |
+
id: description
|
8 |
+
attributes:
|
9 |
+
label: Description
|
10 |
+
description: A brief description of the question or issue, also include what you tried and what didn't work
|
11 |
+
validations:
|
12 |
+
required: true
|
13 |
+
- type: textarea
|
14 |
+
id: screenshots
|
15 |
+
attributes:
|
16 |
+
label: Screenshots
|
17 |
+
description: Please add screenshots if applicable
|
18 |
+
validations:
|
19 |
+
required: false
|
20 |
+
- type: dropdown
|
21 |
+
id: assignee
|
22 |
+
attributes:
|
23 |
+
label: Do you want to work on this issue?
|
24 |
+
multiple: false
|
25 |
+
options:
|
26 |
+
- "Yes"
|
27 |
+
- "No"
|
28 |
+
validations:
|
29 |
+
required: false
|
30 |
+
- type: textarea
|
31 |
+
id: extrainfo
|
32 |
+
attributes:
|
33 |
+
label: Additional information
|
34 |
+
description: Is there anything else we should know about this issue?
|
35 |
+
validations:
|
36 |
+
required: false
|
37 |
+
- type: markdown
|
38 |
+
attributes:
|
39 |
+
value: |
|
40 |
+
You can also join our Discord community [here](https://discord.gg/SWnda7Mw5u)
|
.github/ISSUE_TEMPLATE/engine-request.md
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
---
|
2 |
-
name: Engine request
|
3 |
-
about: 'Suggest a new engine to be add '
|
4 |
-
title: "[ENGINE] <your engine request title>"
|
5 |
-
labels: engine
|
6 |
-
assignees: ''
|
7 |
-
|
8 |
-
---
|
9 |
-
|
10 |
-
<!-- PLEASE FILL THESE FIELDS, IT REALLY HELPS THE MAINTAINERS OF Websurfx -->
|
11 |
-
|
12 |
-
**Working URL of the engine**
|
13 |
-
<!-- Please check if the engine is responding correctly before submitting it. -->
|
14 |
-
|
15 |
-
**Why do you want to add this engine?**
|
16 |
-
<!-- What's special about this engine? Is it open source or libre? -->
|
17 |
-
|
18 |
-
**Features of this engine**
|
19 |
-
<!-- Features of this engine: Doesn't track its users, fast, easy to integrate, ... -->
|
20 |
-
|
21 |
-
**Applicable category of this engine**
|
22 |
-
<!-- Where should this new engine fit in Websurfx? Current categories in Websurfx:
|
23 |
-
general, files, images, it, map, music, news, science, social media and videos.
|
24 |
-
You can add multiple categories at the same time. -->
|
25 |
-
|
26 |
-
**Additional context**
|
27 |
-
<!-- Add any other context about this engine here. -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.github/ISSUE_TEMPLATE/engine.yml
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: ✨ Engine
|
2 |
+
description: Have a new engine to suggest for Websurfx? Please suggest!
|
3 |
+
title: '✨ <your engine request title>'
|
4 |
+
labels: ['⭐ goal: addition', '🚦 status: awaiting triage']
|
5 |
+
body:
|
6 |
+
- type: textarea
|
7 |
+
id: workingUrl
|
8 |
+
attributes:
|
9 |
+
label: Working URL of the engine
|
10 |
+
description: Please check if the engine is responding correctly before submitting it.
|
11 |
+
validations:
|
12 |
+
required: true
|
13 |
+
- type: textarea
|
14 |
+
id: reason
|
15 |
+
attributes:
|
16 |
+
label: Why do you want to add this engine?
|
17 |
+
description: What's special about this engine? Is it open source or libre?
|
18 |
+
validations:
|
19 |
+
required: true
|
20 |
+
- type: textarea
|
21 |
+
id: features
|
22 |
+
attributes:
|
23 |
+
label: Features of this engine
|
24 |
+
description: Features of this engine: Doesn't track its users, fast, easy to integrate, or anything else that we can know about.
|
25 |
+
validations:
|
26 |
+
required: true
|
27 |
+
- type: textarea
|
28 |
+
id: screenshots
|
29 |
+
attributes:
|
30 |
+
label: Screenshots
|
31 |
+
description: Please add screenshots if applicable
|
32 |
+
validations:
|
33 |
+
required: false
|
34 |
+
- type: dropdown
|
35 |
+
id: assignee
|
36 |
+
attributes:
|
37 |
+
label: Do you want to work on this issue?
|
38 |
+
multiple: true
|
39 |
+
options:
|
40 |
+
- 'General'
|
41 |
+
- 'Files'
|
42 |
+
- 'Images'
|
43 |
+
- 'IT'
|
44 |
+
- 'Map'
|
45 |
+
- 'Music'
|
46 |
+
- 'News'
|
47 |
+
- 'Science'
|
48 |
+
- 'Social Media'
|
49 |
+
- 'Videos'
|
50 |
+
validations:
|
51 |
+
required: true
|
52 |
+
- type: dropdown
|
53 |
+
id: assignee
|
54 |
+
attributes:
|
55 |
+
label: Do you want to work on this issue?
|
56 |
+
multiple: false
|
57 |
+
options:
|
58 |
+
- 'Yes'
|
59 |
+
- 'No'
|
60 |
+
validations:
|
61 |
+
required: false
|
62 |
+
- type: textarea
|
63 |
+
id: extrainfo
|
64 |
+
attributes:
|
65 |
+
label: Additional information
|
66 |
+
description: Is there anything else we should know about this idea?
|
67 |
+
validations:
|
68 |
+
required: false
|
69 |
+
- type: markdown
|
70 |
+
attributes:
|
71 |
+
value: |
|
72 |
+
You can also join our Discord community [here](https://discord.gg/SWnda7Mw5u)
|
.github/ISSUE_TEMPLATE/feature.yml
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: 💡 General Feature Request
|
2 |
+
description: Have a new idea/feature for Websurfx? Please suggest!
|
3 |
+
title: "✨ <description>"
|
4 |
+
labels: ["⭐ goal: addition", "🚦 status: awaiting triage"]
|
5 |
+
body:
|
6 |
+
- type: textarea
|
7 |
+
id: description
|
8 |
+
attributes:
|
9 |
+
label: Description
|
10 |
+
description: A brief description of the enhancement you propose, also include what you tried and what worked.
|
11 |
+
validations:
|
12 |
+
required: true
|
13 |
+
- type: textarea
|
14 |
+
id: screenshots
|
15 |
+
attributes:
|
16 |
+
label: Screenshots
|
17 |
+
description: Please add screenshots if applicable
|
18 |
+
validations:
|
19 |
+
required: false
|
20 |
+
- type: dropdown
|
21 |
+
id: assignee
|
22 |
+
attributes:
|
23 |
+
label: Do you want to work on this issue?
|
24 |
+
multiple: false
|
25 |
+
options:
|
26 |
+
- "Yes"
|
27 |
+
- "No"
|
28 |
+
validations:
|
29 |
+
required: false
|
30 |
+
- type: textarea
|
31 |
+
id: extrainfo
|
32 |
+
attributes:
|
33 |
+
label: Additional information
|
34 |
+
description: Is there anything else we should know about this idea?
|
35 |
+
validations:
|
36 |
+
required: false
|
37 |
+
- type: markdown
|
38 |
+
attributes:
|
39 |
+
value: |
|
40 |
+
You can also join our Discord community [here](https://discord.gg/SWnda7Mw5u)
|
.github/ISSUE_TEMPLATE/feature_request.md
DELETED
@@ -1,20 +0,0 @@
|
|
1 |
-
---
|
2 |
-
name: Feature request
|
3 |
-
about: Suggest an idea for this project
|
4 |
-
title: "[FEATURE] <your feature request title>"
|
5 |
-
labels: enhancement
|
6 |
-
assignees: ''
|
7 |
-
|
8 |
-
---
|
9 |
-
|
10 |
-
**Is your feature request related to a problem? Please describe.**
|
11 |
-
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
12 |
-
|
13 |
-
**Describe the solution you'd like**
|
14 |
-
A clear and concise description of what you want to happen.
|
15 |
-
|
16 |
-
**Describe alternatives you've considered**
|
17 |
-
A clear and concise description of any alternative solutions or features you've considered.
|
18 |
-
|
19 |
-
**Additional context**
|
20 |
-
Add any other context or screenshots about the feature request here.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.github/ISSUE_TEMPLATE/other.yml
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: 🧱 Other
|
2 |
+
description: Use this for any other issues. Please do NOT create blank issues
|
3 |
+
title: "🧱 <Add your title here>"
|
4 |
+
labels: ["🚦 status: awaiting triage"]
|
5 |
+
body:
|
6 |
+
- type: markdown
|
7 |
+
attributes:
|
8 |
+
value: "# Other issue"
|
9 |
+
- type: textarea
|
10 |
+
id: issuedescription
|
11 |
+
attributes:
|
12 |
+
label: What would you like to share?
|
13 |
+
description: Provide a clear and concise explanation of your issue.
|
14 |
+
validations:
|
15 |
+
required: true
|
16 |
+
- type: dropdown
|
17 |
+
id: assignee
|
18 |
+
attributes:
|
19 |
+
label: Do you want to work on this issue?
|
20 |
+
multiple: false
|
21 |
+
options:
|
22 |
+
- "Yes"
|
23 |
+
- "No"
|
24 |
+
validations:
|
25 |
+
required: false
|
26 |
+
- type: textarea
|
27 |
+
id: extrainfo
|
28 |
+
attributes:
|
29 |
+
label: Additional information
|
30 |
+
description: Is there anything else we should know about this issue?
|
31 |
+
validations:
|
32 |
+
required: false
|
33 |
+
- type: markdown
|
34 |
+
attributes:
|
35 |
+
value: |
|
36 |
+
You can also join our Discord community [here](https://discord.gg/SWnda7Mw5u)
|
.github/label-actions.yml
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"🚦 status: awaiting triage":
|
2 |
+
issues:
|
3 |
+
comment: >
|
4 |
+
To reduce notifications, issues are locked until they are https://github.com/neon-mmd/websurfx/labels/%F0%9F%8F%81%20status%3A%20ready%20for%20dev and to be assigned. You can learn more in our contributing guide https://github.com/neon-mmd/websurfx/blob/rolling/CONTRIBUTING.md
|
5 |
+
lock: true
|
6 |
+
|
7 |
+
"🏁 status: ready for dev":
|
8 |
+
issues:
|
9 |
+
comment: >
|
10 |
+
The issue has been unlocked and is now ready for dev. If you would like to work on this issue, you can comment to have it assigned to you. You can learn more in our contributing guide https://github.com/neon-mmd/websurfx/blob/rolling/CONTRIBUTING.md
|
11 |
+
unlock: true
|
.github/labeler.yml
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
'💻 aspect: code':
|
2 |
+
- src/*
|
3 |
+
- Cargo.toml
|
4 |
+
- Cargo.lock
|
5 |
+
- Dockerfile
|
6 |
+
- docker-compose.yml
|
7 |
+
- websurfx/*
|
8 |
+
|
9 |
+
'🤖 aspect: dx':
|
10 |
+
- '**/*.json'
|
11 |
+
- .dockerignore
|
12 |
+
- .gitignore
|
13 |
+
- .gitpod.Dockerfile
|
14 |
+
- .gitpod.yml
|
15 |
+
- .rusty-hook.toml
|
16 |
+
- PULL_REQUEST_TEMPLATE.md
|
17 |
+
- SECURITY.md
|
18 |
+
- .github/*
|
19 |
+
- .mega-linter.yml
|
20 |
+
- tests/*
|
21 |
+
|
22 |
+
'📄 aspect: text':
|
23 |
+
- any: ['**/*.md', '!PULL_REQUEST_TEMPLATE.md', '!SECURITY.md']
|
24 |
+
- LICENSE
|
25 |
+
|
26 |
+
'🕹️ aspect: interface':
|
27 |
+
- public/*
|
.github/workflows/contributors.yml
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
name: Contributors List
|
3 |
+
|
4 |
+
on:
|
5 |
+
workflow_dispatch:
|
6 |
+
|
7 |
+
schedule:
|
8 |
+
- cron: "0 1 * * *"
|
9 |
+
|
10 |
+
jobs:
|
11 |
+
contributors:
|
12 |
+
permissions:
|
13 |
+
contents: write
|
14 |
+
pull-requests: write
|
15 |
+
|
16 |
+
runs-on: ubuntu-latest
|
17 |
+
|
18 |
+
steps:
|
19 |
+
- name: Checkout code
|
20 |
+
uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
|
21 |
+
with:
|
22 |
+
fetch-depth: 0
|
23 |
+
ref: ${{ github.event.repository.default_branch }}
|
24 |
+
|
25 |
+
- name: Update contributors list
|
26 |
+
uses: wow-actions/contributors-list@b9e91f91a51a55460fdcae64daad0cb8122cdd53 # v1.1.0
|
27 |
+
with:
|
28 |
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
29 |
+
svgPath: images/contributors_list.svg
|
30 |
+
round: true
|
31 |
+
includeBots: false
|
32 |
+
noCommit: true
|
33 |
+
|
34 |
+
- name: Commit & PR
|
35 |
+
uses: peter-evans/create-pull-request@38e0b6e68b4c852a5500a94740f0e535e0d7ba54 # v4.2.4
|
36 |
+
with:
|
37 |
+
token: ${{ secrets.GITHUB_TOKEN }}
|
38 |
+
add-paths: .github/assets/CONTRIBUTORS.svg
|
39 |
+
commit-message: 'chore: update contributors-list'
|
40 |
+
committer: GitHub <noreply@github.com>
|
41 |
+
author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
|
42 |
+
signoff: false
|
43 |
+
branch: workflow/update-contributors-list
|
44 |
+
base: main
|
45 |
+
delete-branch: true
|
46 |
+
title: 'chore: update contributors-list'
|
47 |
+
body: |
|
48 |
+
Automated update to `images/contributors_list.svg`
|
.github/workflows/hello.yml
CHANGED
@@ -1,3 +1,4 @@
|
|
|
|
1 |
name: Welcome first time contributors
|
2 |
|
3 |
on:
|
|
|
1 |
+
---
|
2 |
name: Welcome first time contributors
|
3 |
|
4 |
on:
|
.github/workflows/issue-lock-unlock.yml
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: "lock/unlock issue"
|
2 |
+
|
3 |
+
on:
|
4 |
+
issues:
|
5 |
+
types: labeled
|
6 |
+
|
7 |
+
permissions:
|
8 |
+
issues: write
|
9 |
+
|
10 |
+
jobs:
|
11 |
+
action:
|
12 |
+
runs-on: ubuntu-latest
|
13 |
+
steps:
|
14 |
+
- uses: dessant/label-actions@v3
|
15 |
+
with:
|
16 |
+
process-only: issues
|
.github/workflows/labels.yml
CHANGED
@@ -1,9 +1,10 @@
|
|
|
|
1 |
name: Import open source standard labels
|
2 |
|
3 |
on:
|
4 |
push:
|
5 |
branches:
|
6 |
-
-
|
7 |
|
8 |
jobs:
|
9 |
labels:
|
|
|
1 |
+
---
|
2 |
name: Import open source standard labels
|
3 |
|
4 |
on:
|
5 |
push:
|
6 |
branches:
|
7 |
+
- rolling
|
8 |
|
9 |
jobs:
|
10 |
labels:
|
.github/workflows/mega-linter.yml
ADDED
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
# MegaLinter GitHub Action configuration file
|
3 |
+
# More info at https://megalinter.io
|
4 |
+
name: MegaLinter
|
5 |
+
|
6 |
+
on:
|
7 |
+
# Trigger mega-linter at every push. Action will also be visible from Pull Requests to rolling
|
8 |
+
push: # Comment this line to trigger action only on pull-requests (not recommended if you don't pay for GH Actions)
|
9 |
+
pull_request:
|
10 |
+
branches: [rolling]
|
11 |
+
|
12 |
+
env: # Comment env block if you do not want to apply fixes
|
13 |
+
# Apply linter fixes configuration
|
14 |
+
APPLY_FIXES: all # When active, APPLY_FIXES must also be defined as environment variable (in github/workflows/mega-linter.yml or other CI tool)
|
15 |
+
APPLY_FIXES_EVENT: pull_request # Decide which event triggers application of fixes in a commit or a PR (pull_request, push, all)
|
16 |
+
APPLY_FIXES_MODE: commit # If APPLY_FIXES is used, defines if the fixes are directly committed (commit) or posted in a PR (pull_request)
|
17 |
+
|
18 |
+
concurrency:
|
19 |
+
group: ${{ github.ref }}-${{ github.workflow }}
|
20 |
+
cancel-in-progress: true
|
21 |
+
|
22 |
+
jobs:
|
23 |
+
build:
|
24 |
+
name: MegaLinter
|
25 |
+
runs-on: ubuntu-latest
|
26 |
+
permissions:
|
27 |
+
# Give the default GITHUB_TOKEN write permission to commit and push, comment issues & post new PR
|
28 |
+
# Remove the ones you do not need
|
29 |
+
contents: write
|
30 |
+
issues: write
|
31 |
+
pull-requests: write
|
32 |
+
steps:
|
33 |
+
# Git Checkout
|
34 |
+
- name: Checkout Code
|
35 |
+
uses: actions/checkout@v3
|
36 |
+
with:
|
37 |
+
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
|
38 |
+
|
39 |
+
# MegaLinter
|
40 |
+
- name: MegaLinter
|
41 |
+
id: ml
|
42 |
+
# You can override MegaLinter flavor used to have faster performances
|
43 |
+
# More info at https://megalinter.io/flavors/
|
44 |
+
uses: oxsecurity/megalinter/flavors/cupcake@v7.1.0
|
45 |
+
env:
|
46 |
+
# All available variables are described in documentation
|
47 |
+
# https://megalinter.io/configuration/
|
48 |
+
VALIDATE_ALL_CODEBASE: true # Set ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} to validate only diff with main branch
|
49 |
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
50 |
+
# ADD YOUR CUSTOM ENV VARIABLES HERE TO OVERRIDE VALUES OF .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY
|
51 |
+
|
52 |
+
# Upload MegaLinter artifacts
|
53 |
+
- name: Archive production artifacts
|
54 |
+
if: ${{ success() }} || ${{ failure() }}
|
55 |
+
uses: actions/upload-artifact@v3
|
56 |
+
with:
|
57 |
+
name: MegaLinter reports
|
58 |
+
path: |
|
59 |
+
megalinter-reports
|
60 |
+
mega-linter.log
|
61 |
+
|
62 |
+
# Create pull request if applicable (for now works only on PR from same repository, not from forks)
|
63 |
+
- name: Create Pull Request with applied fixes
|
64 |
+
id: cpr
|
65 |
+
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
|
66 |
+
uses: peter-evans/create-pull-request@v5
|
67 |
+
with:
|
68 |
+
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
|
69 |
+
commit-message: "[MegaLinter] Apply linters automatic fixes"
|
70 |
+
title: "[MegaLinter] Apply linters automatic fixes"
|
71 |
+
labels: bot
|
72 |
+
- name: Create PR output
|
73 |
+
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
|
74 |
+
run: |
|
75 |
+
echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
|
76 |
+
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
|
77 |
+
|
78 |
+
# Push new commit if applicable (for now works only on PR from same repository, not from forks)
|
79 |
+
- name: Prepare commit
|
80 |
+
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/main' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
|
81 |
+
run: sudo chown -Rc $UID .git/
|
82 |
+
- name: Commit and push applied linter fixes
|
83 |
+
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/main' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
|
84 |
+
uses: stefanzweifel/git-auto-commit-action@v4
|
85 |
+
with:
|
86 |
+
branch: ${{ github.event.pull_request.head.ref || github.head_ref || github.ref }}
|
87 |
+
commit_message: "[MegaLinter] Apply linters fixes"
|
88 |
+
commit_user_name: megalinter-bot
|
89 |
+
commit_user_email: nicolas.vuillamy@ox.security
|
.github/workflows/pr_labeler.yml
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: "Pull Request Auto Labeler"
|
2 |
+
on:
|
3 |
+
- pull_request_target
|
4 |
+
|
5 |
+
jobs:
|
6 |
+
triage:
|
7 |
+
permissions:
|
8 |
+
contents: read
|
9 |
+
pull-requests: write
|
10 |
+
runs-on: ubuntu-latest
|
11 |
+
steps:
|
12 |
+
- uses: actions/labeler@v4
|
13 |
+
with:
|
14 |
+
sync-labels: true
|
15 |
+
dot: true
|
.github/workflows/releases.yml
DELETED
@@ -1,78 +0,0 @@
|
|
1 |
-
name: Releases
|
2 |
-
on:
|
3 |
-
push:
|
4 |
-
branches:
|
5 |
-
- "rolling"
|
6 |
-
|
7 |
-
concurrency:
|
8 |
-
group: "rolling-branch"
|
9 |
-
|
10 |
-
jobs:
|
11 |
-
changelog:
|
12 |
-
if: github.repository == 'neon-mmd/websurfx'
|
13 |
-
runs-on: ubuntu-latest
|
14 |
-
|
15 |
-
steps:
|
16 |
-
# Create a temporary, uniquely named branch to push release info to
|
17 |
-
- name: create temporary branch
|
18 |
-
uses: peterjgrainger/action-create-branch@v2.3.0
|
19 |
-
id: create-branch
|
20 |
-
with:
|
21 |
-
branch: "release-from-${{ github.sha }}"
|
22 |
-
sha: "${{ github.sha }}"
|
23 |
-
env:
|
24 |
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
25 |
-
|
26 |
-
# check out the repository afterwards
|
27 |
-
- uses: actions/checkout@v3
|
28 |
-
|
29 |
-
# fetch branches and switch to the temporary branch
|
30 |
-
- name: switch to new branch
|
31 |
-
run: git fetch --all && git checkout --track origin/release-from-${{ github.sha }}
|
32 |
-
|
33 |
-
# update app config with version
|
34 |
-
- name: Get current rust app version from its Cargo.toml.
|
35 |
-
id: foo
|
36 |
-
uses: dante-signal31/rust-app-version@v1.2.0
|
37 |
-
with:
|
38 |
-
cargo_toml_folder: rust_app_folder/
|
39 |
-
|
40 |
-
- name: Use the version to update the Cargo.toml version.
|
41 |
-
shell: bash
|
42 |
-
run: sed -i "3s/version = \"[0-9]*.[0-9]*.[0-9]*\"/version = \"${{ steps.foo.outputs.app_version }}\"/g" Cargo.toml
|
43 |
-
|
44 |
-
# create release info and push it upstream
|
45 |
-
- name: conventional Changelog Action
|
46 |
-
id: changelog
|
47 |
-
uses: TriPSs/conventional-changelog-action@v3
|
48 |
-
with:
|
49 |
-
github-token: ${{ secrets.GITHUB_TOKEN }}
|
50 |
-
version-file: "./Cargo.toml"
|
51 |
-
git-branch: "release-from-${{ github.sha }}"
|
52 |
-
skip-on-empty: false
|
53 |
-
skip-git-pull: true
|
54 |
-
|
55 |
-
# create PR using GitHub CLI
|
56 |
-
- name: create PR with release info
|
57 |
-
id: create-pr
|
58 |
-
run: gh pr create --base main --head release-from-${{ github.sha }} --title 'Merge new release into rolling' --body 'Created by Github action'
|
59 |
-
env:
|
60 |
-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
61 |
-
|
62 |
-
# merge PR using GitHub CLI
|
63 |
-
- name: merge PR with release info
|
64 |
-
id: merge-pr
|
65 |
-
run: gh pr merge --admin --merge --subject 'Merge release info' --delete-branch
|
66 |
-
env:
|
67 |
-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
68 |
-
|
69 |
-
# release info is now in main so we can continue as before
|
70 |
-
- name: create release with last commit
|
71 |
-
uses: actions/create-release@v1
|
72 |
-
if: steps.changelog.outputs.skipped == 'false'
|
73 |
-
env:
|
74 |
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
75 |
-
with:
|
76 |
-
tag_name: ${{ steps.changelog.outputs.tag }}
|
77 |
-
release_name: ${{ steps.changelog.outputs.tag }}
|
78 |
-
body: ${{ steps.changelog.outputs.clean_changelog }}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.github/workflows/rust.yml
CHANGED
@@ -1,12 +1,13 @@
|
|
|
|
1 |
name: Rust
|
2 |
|
3 |
on:
|
4 |
push:
|
5 |
branches:
|
6 |
-
-
|
7 |
pull_request:
|
8 |
branches:
|
9 |
-
-
|
10 |
|
11 |
env:
|
12 |
CARGO_TERM_COLOR: always
|
@@ -20,23 +21,27 @@ jobs:
|
|
20 |
- stable
|
21 |
|
22 |
steps:
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
run:
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
name: Rust
|
3 |
|
4 |
on:
|
5 |
push:
|
6 |
branches:
|
7 |
+
- '**'
|
8 |
pull_request:
|
9 |
branches:
|
10 |
+
- 'rolling'
|
11 |
|
12 |
env:
|
13 |
CARGO_TERM_COLOR: always
|
|
|
21 |
- stable
|
22 |
|
23 |
steps:
|
24 |
+
- name: Install LuaJIT and Lua
|
25 |
+
run: |
|
26 |
+
sudo apt-get update
|
27 |
+
sudo apt-get install -y --no-install-recommends liblua5.4-dev liblua5.3-dev liblua5.2-dev liblua5.1-0-dev libluajit-5.1-dev
|
28 |
+
- uses: actions/checkout@v3
|
29 |
+
- run: rustup toolchain install stable --profile minimal
|
30 |
+
- uses: Swatinem/rust-cache@v2
|
31 |
+
with:
|
32 |
+
prefix-key: ''
|
33 |
+
shared-key: ''
|
34 |
+
key: ''
|
35 |
+
env-vars: ''
|
36 |
+
workspaces: ''
|
37 |
+
cache-directories: ''
|
38 |
+
cache-targets: ''
|
39 |
+
cache-on-failure: ''
|
40 |
+
cache-all-crates: ''
|
41 |
+
save-if: ''
|
42 |
+
- uses: actions/checkout@v3
|
43 |
+
- run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }}
|
44 |
+
- name: Build
|
45 |
+
run: cargo build --verbose
|
46 |
+
- name: Run tests
|
47 |
+
run: cargo test --verbose
|
.github/workflows/rust_format.yml
CHANGED
@@ -1,3 +1,4 @@
|
|
|
|
1 |
name: Rust format and clippy checks
|
2 |
on:
|
3 |
push:
|
@@ -12,6 +13,10 @@ jobs:
|
|
12 |
name: Rust project
|
13 |
runs-on: ubuntu-latest
|
14 |
steps:
|
|
|
|
|
|
|
|
|
15 |
- uses: actions/checkout@v2
|
16 |
- name: Install minimal stable with clippy and rustfmt
|
17 |
uses: actions-rs/toolchain@v1
|
@@ -19,7 +24,16 @@ jobs:
|
|
19 |
profile: minimal
|
20 |
toolchain: stable
|
21 |
components: rustfmt, clippy
|
22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
- name: Run cargo check
|
24 |
uses: actions-rs/cargo@v1
|
25 |
with:
|
|
|
1 |
+
---
|
2 |
name: Rust format and clippy checks
|
3 |
on:
|
4 |
push:
|
|
|
13 |
name: Rust project
|
14 |
runs-on: ubuntu-latest
|
15 |
steps:
|
16 |
+
- name: Install LuaJIT and Lua
|
17 |
+
run: |
|
18 |
+
sudo apt-get update
|
19 |
+
sudo apt-get install -y --no-install-recommends liblua5.4-dev liblua5.3-dev liblua5.2-dev liblua5.1-0-dev libluajit-5.1-dev
|
20 |
- uses: actions/checkout@v2
|
21 |
- name: Install minimal stable with clippy and rustfmt
|
22 |
uses: actions-rs/toolchain@v1
|
|
|
24 |
profile: minimal
|
25 |
toolchain: stable
|
26 |
components: rustfmt, clippy
|
27 |
+
- name: Format
|
28 |
+
uses: actions-rs/cargo@v1
|
29 |
+
with:
|
30 |
+
command: fmt
|
31 |
+
args: -- --check
|
32 |
+
- name: Clippy
|
33 |
+
uses: actions-rs/cargo@v1
|
34 |
+
with:
|
35 |
+
command: clippy
|
36 |
+
args: --all-targets --all
|
37 |
- name: Run cargo check
|
38 |
uses: actions-rs/cargo@v1
|
39 |
with:
|
.github/workflows/stale.yml
CHANGED
@@ -1,3 +1,4 @@
|
|
|
|
1 |
# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
|
2 |
#
|
3 |
# You can adjust the behavior by modifying this file.
|
|
|
1 |
+
---
|
2 |
# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
|
3 |
#
|
4 |
# You can adjust the behavior by modifying this file.
|
.gitignore
CHANGED
@@ -1 +1,8 @@
|
|
|
|
1 |
/target
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.vscode
|
2 |
/target
|
3 |
+
dhat-heap.json
|
4 |
+
dump.rdb
|
5 |
+
megalinter-reports/
|
6 |
+
package-lock.json
|
7 |
+
package.json
|
8 |
+
result
|
.gitpod.Dockerfile
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
FROM gitpod/workspace-rust
|
2 |
+
|
3 |
+
RUN sudo install-packages redis-server nodejs npm liblua5.4-dev liblua5.3-dev liblua5.2-dev liblua5.1-0-dev libluajit-5.1-dev
|
.gitpod.yml
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
image:
|
3 |
+
file: .gitpod.Dockerfile
|
4 |
+
|
5 |
+
# Commands that will run on workspace start
|
6 |
+
tasks:
|
7 |
+
- name: Start Redis Server
|
8 |
+
command: redis-server --port 8082
|
9 |
+
- name: Run The App
|
10 |
+
init: cargo build
|
11 |
+
command: PKG_ENV=dev ./target/debug/websurfx
|
12 |
+
- name: Tests
|
13 |
+
command: cargo test
|
14 |
+
- name: Clippy Checks
|
15 |
+
command: cargo clippy
|
16 |
+
|
17 |
+
# vscode IDE setup
|
18 |
+
vscode:
|
19 |
+
extensions:
|
20 |
+
- vadimcn.vscode-lldb
|
21 |
+
- cschleiden.vscode-github-actions
|
22 |
+
- rust-lang.rust-analyzer
|
23 |
+
- bungcip.better-toml
|
24 |
+
- serayuzgur.crates
|
25 |
+
- usernamehw.errorlens
|
26 |
+
- DavidAnson.vscode-markdownlint
|
27 |
+
- esbenp.prettier-vscode
|
28 |
+
- stylelint.vscode-stylelint
|
29 |
+
- dbaeumer.vscode-eslint
|
30 |
+
- evgeniypeshkov.syntax-highlighter
|
31 |
+
- ms-azuretools.vscode-docker
|
32 |
+
- Catppuccin.catppuccin-vsc
|
33 |
+
- PKief.material-icon-theme
|
34 |
+
- oderwat.indent-rainbow
|
35 |
+
- formulahendry.auto-rename-tag
|
36 |
+
- swellaby.vscode-rust-test-adapter
|
37 |
+
- belfz.search-crates-io
|
38 |
+
- hbenl.test-adapter-converter
|
39 |
+
- hbenl.vscode-test-explorer
|
40 |
+
- eamodio.gitlens
|
41 |
+
|
42 |
+
github:
|
43 |
+
prebuilds:
|
44 |
+
master: true
|
45 |
+
branches: true
|
46 |
+
pullRequests: true
|
47 |
+
pullRequestsFromForks: true
|
48 |
+
addCheck: true
|
49 |
+
addComment: false
|
50 |
+
addBadge: true
|
.mega-linter.yml
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
# Configuration file for MegaLinter
|
3 |
+
# See all available variables at https://megalinter.io/configuration/ and in linters documentation
|
4 |
+
|
5 |
+
APPLY_FIXES: all # all, none, or list of linter keys
|
6 |
+
# ENABLE: # If you use ENABLE variable, all other languages/formats/tooling-formats will be disabled by default
|
7 |
+
ENABLE_LINTERS: # If you use ENABLE_LINTERS variable, all other linters will be disabled by default
|
8 |
+
- RUST_CLIPPY
|
9 |
+
- JAVASCRIPT_ES
|
10 |
+
- CSS_STYLELINT
|
11 |
+
- MARKDOWN_MARKDOWNLINT
|
12 |
+
- YAML_YAMLLINT
|
13 |
+
- HTML_DJLINT
|
14 |
+
- ACTION_ACTIONLINT
|
15 |
+
- DOCKERFILE_HADOLINT
|
16 |
+
- SPELL_CSPELL
|
17 |
+
# DISABLE:
|
18 |
+
# - COPYPASTE # Uncomment to disable checks of excessive copy-pastes
|
19 |
+
# - SPELL # Uncomment to disable checks of spelling mistakes
|
20 |
+
SHOW_ELAPSED_TIME: true
|
21 |
+
FILEIO_REPORTER: false
|
22 |
+
# DISABLE_ERRORS: true # Uncomment if you want MegaLinter to detect errors but not block CI to pass
|
.rusty-hook.toml
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[hooks]
|
2 |
+
pre-commit = "cargo test && cargo fmt -- --check && cargo clippy && stylelint ./public/static/themes/*.css ./public/static/colorschemes/*.css ./public/static/*.js"
|
3 |
+
|
4 |
+
[logging]
|
5 |
+
verbose = true
|
.stylelintrc.json
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"extends": "stylelint-config-standard",
|
3 |
+
"rules": {
|
4 |
+
"alpha-value-notation": "number",
|
5 |
+
"selector-class-pattern": null
|
6 |
+
},
|
7 |
+
"overrides": [
|
8 |
+
{
|
9 |
+
"files": ["*.js"],
|
10 |
+
"customSyntax": "postcss-lit"
|
11 |
+
}
|
12 |
+
]
|
13 |
+
}
|
CONTRIBUTING.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
## Documentation/Wiki
|
4 |
|
5 |
-
Found a typo, or something that isn't as clear as it could be? Maybe I've missed something off altogether, or you hit a roadblock that took you a while to figure out. Edit the [
|
6 |
|
7 |
## Readme
|
8 |
|
@@ -14,7 +14,7 @@ Know how to fix or improve a github action?. Consider Submitting a Pull request
|
|
14 |
|
15 |
## Source Code
|
16 |
|
17 |
-
You should know
|
18 |
|
19 |
- Rust basics
|
20 |
- Actix-web crate basics
|
@@ -48,23 +48,7 @@ We have a [Discord](https://discord.gg/SWnda7Mw5u) channel, feel free to join an
|
|
48 |
|
49 |
# Where To Contribute?
|
50 |
|
51 |
-
|
52 |
-
|
53 |
-
The _rolling branch_ is where we intend all source code contributions should go.
|
54 |
-
|
55 |
-
## For Readme Contributions
|
56 |
-
|
57 |
-
The _master branch_ is where we intend all source code contributions should go.
|
58 |
-
|
59 |
-
# How To Fork
|
60 |
-
|
61 |
-
![image](./images/fork_button.png)
|
62 |
-
|
63 |
-
![image](./images/fork_options_page.png)
|
64 |
-
|
65 |
-
Please make sure to leave the `Copy the master branch only` option ticked off.
|
66 |
-
|
67 |
-
![image](./images/create_fork_button.png)
|
68 |
|
69 |
|
70 |
We appreciate any contributions whether be of any size or topic and suggestions to help improve the Websurfx project. Please keep in mind the above requirements and guidelines before submitting a pull request and also if you have any doubts/concerns/questions about the project, its source code or anything related to the project than feel free to ask by opening an [issue](https://github.com/neon-mmd/websurfx/issues) or by asking us on our [Discord](https://discord.gg/SWnda7Mw5u) channel.
|
|
|
2 |
|
3 |
## Documentation/Wiki
|
4 |
|
5 |
+
Found a typo, or something that isn't as clear as it could be? Maybe I've missed something off altogether, or you hit a roadblock that took you a while to figure out. Edit the [docs](./docs/) to add to or improve the documentation. This will help future users get Websurfx up and running more easily.
|
6 |
|
7 |
## Readme
|
8 |
|
|
|
14 |
|
15 |
## Source Code
|
16 |
|
17 |
+
You should know at least one of the things below to start contributing:
|
18 |
|
19 |
- Rust basics
|
20 |
- Actix-web crate basics
|
|
|
48 |
|
49 |
# Where To Contribute?
|
50 |
|
51 |
+
The _rolling branch_ is where we intend all contributions should go.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
|
53 |
|
54 |
We appreciate any contributions whether be of any size or topic and suggestions to help improve the Websurfx project. Please keep in mind the above requirements and guidelines before submitting a pull request and also if you have any doubts/concerns/questions about the project, its source code or anything related to the project than feel free to ask by opening an [issue](https://github.com/neon-mmd/websurfx/issues) or by asking us on our [Discord](https://discord.gg/SWnda7Mw5u) channel.
|
Cargo.lock
CHANGED
The diff for this file is too large to render.
See raw diff
|
|
Cargo.toml
CHANGED
@@ -1,23 +1,73 @@
|
|
1 |
[package]
|
2 |
name = "websurfx"
|
3 |
-
version = "0.
|
4 |
edition = "2021"
|
5 |
-
|
6 |
-
|
|
|
7 |
|
8 |
[dependencies]
|
9 |
-
reqwest = {version="
|
10 |
-
tokio = {version="
|
11 |
-
serde = {version="
|
12 |
-
handlebars = { version = "4.
|
13 |
-
scraper = {version="
|
14 |
-
actix-web = {version="4.
|
15 |
actix-files = {version="0.6.2"}
|
16 |
-
|
17 |
-
|
|
|
18 |
env_logger = {version="0.10.0"}
|
19 |
-
log = {version="0.4.
|
20 |
-
|
21 |
-
redis = {version="
|
22 |
-
md5 = {version="
|
23 |
-
rand={version="
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
[package]
|
2 |
name = "websurfx"
|
3 |
+
version = "1.0.0"
|
4 |
edition = "2021"
|
5 |
+
description = "An open-source alternative to Searx that provides clean, ad-free, and organic results with incredible speed while keeping privacy and security in mind."
|
6 |
+
repository = "https://github.com/neon-mmd/websurfx"
|
7 |
+
license = "AGPL-3.0"
|
8 |
|
9 |
[dependencies]
|
10 |
+
reqwest = {version="0.11.20",features=["json"]}
|
11 |
+
tokio = {version="1.32.0",features=["rt-multi-thread","macros"]}
|
12 |
+
serde = {version="1.0.188",features=["derive"]}
|
13 |
+
handlebars = { version = "4.4.0", features = ["dir_source"] }
|
14 |
+
scraper = {version="0.17.1"}
|
15 |
+
actix-web = {version="4.4.0", features = ["cookies"]}
|
16 |
actix-files = {version="0.6.2"}
|
17 |
+
actix-cors = {version="0.6.4"}
|
18 |
+
serde_json = {version="1.0.105"}
|
19 |
+
fake-useragent = {version="0.1.3"}
|
20 |
env_logger = {version="0.10.0"}
|
21 |
+
log = {version="0.4.20"}
|
22 |
+
mlua = {version="0.8.10", features=["luajit", "vendored"]}
|
23 |
+
redis = {version="0.23.3", features=["tokio-comp","connection-manager"], optional = true}
|
24 |
+
md5 = {version="0.7.0"}
|
25 |
+
rand={version="0.8.5"}
|
26 |
+
once_cell = {version="1.18.0"}
|
27 |
+
error-stack = {version="0.4.0"}
|
28 |
+
async-trait = {version="0.1.73"}
|
29 |
+
regex = {version="1.9.4", features=["perf"]}
|
30 |
+
smallvec = {version="1.11.0", features=["union", "serde"]}
|
31 |
+
futures = {version="0.3.28"}
|
32 |
+
dhat = {version="0.3.2", optional = true}
|
33 |
+
mimalloc = { version = "0.1.38", default-features = false }
|
34 |
+
async-once-cell = {version="0.5.3"}
|
35 |
+
actix-governor = {version="0.4.1"}
|
36 |
+
mini-moka = { version="0.10", optional = true}
|
37 |
+
|
38 |
+
[dev-dependencies]
|
39 |
+
rusty-hook = "^0.11.2"
|
40 |
+
criterion = "0.5.1"
|
41 |
+
tempfile = "3.8.0"
|
42 |
+
|
43 |
+
[profile.dev]
|
44 |
+
opt-level = 0
|
45 |
+
debug = true
|
46 |
+
split-debuginfo = '...'
|
47 |
+
debug-assertions = true
|
48 |
+
overflow-checks = true
|
49 |
+
lto = false
|
50 |
+
panic = 'unwind'
|
51 |
+
incremental = true
|
52 |
+
codegen-units = 256
|
53 |
+
rpath = false
|
54 |
+
|
55 |
+
[profile.release]
|
56 |
+
opt-level = 3
|
57 |
+
debug = false # This should only be commented when testing with dhat profiler
|
58 |
+
# debug = 1 # This should only be uncommented when testing with dhat profiler
|
59 |
+
split-debuginfo = '...'
|
60 |
+
debug-assertions = false
|
61 |
+
overflow-checks = false
|
62 |
+
lto = true
|
63 |
+
panic = 'abort'
|
64 |
+
incremental = false
|
65 |
+
codegen-units = 1
|
66 |
+
rpath = false
|
67 |
+
strip = "debuginfo"
|
68 |
+
|
69 |
+
[features]
|
70 |
+
default = ["memory-cache"]
|
71 |
+
dhat-heap = ["dep:dhat"]
|
72 |
+
memory-cache = ["dep:mini-moka"]
|
73 |
+
redis-cache = ["dep:redis"]
|
Dockerfile
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
FROM rust:latest AS chef
|
2 |
# We only pay the installation cost once,
|
3 |
# it will be cached from the second build onwards
|
4 |
-
RUN cargo install cargo-chef
|
5 |
|
6 |
-
WORKDIR app
|
7 |
|
8 |
FROM chef AS planner
|
9 |
COPY . .
|
@@ -12,15 +12,29 @@ RUN cargo chef prepare --recipe-path recipe.json
|
|
12 |
FROM chef AS builder
|
13 |
COPY --from=planner /app/recipe.json recipe.json
|
14 |
# Build dependencies - this is the caching Docker layer!
|
|
|
|
|
|
|
15 |
RUN cargo chef cook --release --recipe-path recipe.json
|
|
|
|
|
|
|
|
|
16 |
|
17 |
# Build application
|
18 |
COPY . .
|
|
|
|
|
|
|
19 |
RUN cargo install --path .
|
|
|
|
|
|
|
|
|
20 |
|
21 |
# We do not need the Rust toolchain to run the binary!
|
22 |
-
FROM gcr.io/distroless/cc-
|
23 |
-
COPY --from=builder
|
24 |
-
|
25 |
COPY --from=builder /usr/local/cargo/bin/* /usr/local/bin/
|
26 |
CMD ["websurfx"]
|
|
|
1 |
FROM rust:latest AS chef
|
2 |
# We only pay the installation cost once,
|
3 |
# it will be cached from the second build onwards
|
4 |
+
RUN cargo install cargo-chef --locked
|
5 |
|
6 |
+
WORKDIR /app
|
7 |
|
8 |
FROM chef AS planner
|
9 |
COPY . .
|
|
|
12 |
FROM chef AS builder
|
13 |
COPY --from=planner /app/recipe.json recipe.json
|
14 |
# Build dependencies - this is the caching Docker layer!
|
15 |
+
# Uncomment the line below if you want to use the `hybrid` caching feature.
|
16 |
+
# RUN cargo chef cook --release --features redis-cache --recipe-path recipe.json
|
17 |
+
# Comment the line below if you don't want to use the `In-Memory` caching feature.
|
18 |
RUN cargo chef cook --release --recipe-path recipe.json
|
19 |
+
# Uncomment the line below if you want to use the `no cache` feature.
|
20 |
+
# RUN cargo chef cook --release --no-default-features --recipe-path recipe.json
|
21 |
+
# Uncomment the line below if you want to use the `redis` caching feature.
|
22 |
+
# RUN cargo chef cook --release --no-default-features --features redis-cache --recipe-path recipe.json
|
23 |
|
24 |
# Build application
|
25 |
COPY . .
|
26 |
+
# Uncomment the line below if you want to use the `hybrid` caching feature.
|
27 |
+
# RUN cargo install --path . --features redis-cache
|
28 |
+
# Comment the line below if you don't want to use the `In-Memory` caching feature.
|
29 |
RUN cargo install --path .
|
30 |
+
# Uncomment the line below if you want to use the `no cache` feature.
|
31 |
+
# RUN cargo install --path . --no-default-features
|
32 |
+
# Uncomment the line below if you want to use the `redis` caching feature.
|
33 |
+
# RUN cargo install --path . --no-default-features --features redis-cache
|
34 |
|
35 |
# We do not need the Rust toolchain to run the binary!
|
36 |
+
FROM gcr.io/distroless/cc-debian12
|
37 |
+
COPY --from=builder /app/public/ /opt/websurfx/public/
|
38 |
+
VOLUME ["/etc/xdg/websurfx/"]
|
39 |
COPY --from=builder /usr/local/cargo/bin/* /usr/local/bin/
|
40 |
CMD ["websurfx"]
|
PULL_REQUEST_TEMPLATE.md
CHANGED
@@ -16,7 +16,7 @@
|
|
16 |
|
17 |
## Author's checklist
|
18 |
|
19 |
-
<!-- additional notes for
|
20 |
|
21 |
## Related issues
|
22 |
|
|
|
16 |
|
17 |
## Author's checklist
|
18 |
|
19 |
+
<!-- additional notes for reviewers -->
|
20 |
|
21 |
## Related issues
|
22 |
|
README.md
CHANGED
@@ -1,12 +1,22 @@
|
|
1 |
-
<h1 align="center">
|
2 |
<img src="./images/websurfx_logo.png" alt="websurfx logo" align="center" />
|
3 |
</h1>
|
4 |
<p align="center">
|
5 |
<b align="center"><a href="README.md">Readme</a></b> |
|
6 |
<b><a href="https://discord.gg/SWnda7Mw5u">Discord</a></b> |
|
|
|
|
|
7 |
<b><a href="https://github.com/neon-mmd/websurfx">GitHub</a></b> |
|
8 |
-
<b><a href="
|
9 |
<br /><br />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
<a href="#">
|
11 |
<img
|
12 |
alt="GitHub code size in bytes"
|
@@ -39,7 +49,7 @@
|
|
39 |
>meta search engine</a
|
40 |
>
|
41 |
(pronounced as websurface or web-surface /wɛbˈsɜːrfəs/.) written in Rust. It
|
42 |
-
provides a quick and secure search experience while
|
43 |
privacy.</i
|
44 |
>
|
45 |
</p>
|
@@ -49,30 +59,31 @@
|
|
49 |
<p>
|
50 |
|
51 |
- **Getting Started**
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
|
|
56 |
- **Feature Overview**
|
57 |
-
|
58 |
-
|
59 |
- **Community**
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
|
70 |
</p>
|
71 |
</details>
|
72 |
|
73 |
-
# Preview 🔭
|
74 |
|
75 |
-
##
|
76 |
|
77 |
<img align="center" src="./images/main_page.png" />
|
78 |
|
@@ -86,9 +97,15 @@
|
|
86 |
|
87 |
**[⬆️ Back to Top](#--)**
|
88 |
|
89 |
-
#
|
|
|
|
|
|
|
|
|
90 |
|
91 |
-
|
|
|
|
|
92 |
- 🔐 Fast, private, and secure
|
93 |
- 🆓 100% free and open source
|
94 |
- 💨 Ad-free and clean results
|
@@ -96,7 +113,7 @@
|
|
96 |
|
97 |
**[⬆️ Back to Top](#--)**
|
98 |
|
99 |
-
# Installation and Testing 🛠️
|
100 |
|
101 |
> For full setup instructions, see: [**Installation**](./docs/installation.md)
|
102 |
|
@@ -104,9 +121,10 @@ Before you can start building `websurfx`, you will need to have `Cargo` installe
|
|
104 |
|
105 |
To get started with Websurfx, clone the repository, edit the config file, which is located in the `websurfx/` directory, and install the Redis server by following the instructions located [here](https://redis.io/docs/getting-started/) and then run the websurfx server and redis server using the following commands:
|
106 |
|
107 |
-
```
|
108 |
git clone https://github.com/neon-mmd/websurfx.git
|
109 |
cd websurfx
|
|
|
110 |
cargo build -r
|
111 |
redis-server --port 8082 &
|
112 |
./target/release/websurfx
|
@@ -114,12 +132,14 @@ redis-server --port 8082 &
|
|
114 |
|
115 |
Once you have started the server, open your preferred web browser and navigate to <http://127.0.0.1:8080> to start using Websurfx.
|
116 |
|
117 |
-
> **
|
118 |
-
>
|
|
|
|
|
119 |
|
120 |
**[⬆️ Back to Top](#--)**
|
121 |
|
122 |
-
# Configuration 🔧
|
123 |
|
124 |
> For full configuration instructions, see: [**Configuration**](./docs/configuration.md)
|
125 |
|
@@ -127,18 +147,18 @@ Websurfx is configured through the config.lua file, located at `websurfx/config.
|
|
127 |
|
128 |
**[⬆️ Back to Top](#--)**
|
129 |
|
130 |
-
# Theming 🎨
|
131 |
|
132 |
> For full theming and customization instructions, see: [**Theming**](./docs/theming.md)
|
133 |
|
134 |
-
Websurfx comes with several themes and color schemes
|
135 |
|
136 |
**[⬆️ Back to Top](#--)**
|
137 |
|
138 |
# Multi-Language Support 🌍
|
139 |
|
140 |
> **Note**
|
141 |
-
> Currently, we do not support other languages
|
142 |
|
143 |
**[⬆️ Back to Top](#--)**
|
144 |
|
@@ -152,19 +172,19 @@ At present, we only support x86_64 architecture systems, but we would love to ha
|
|
152 |
|
153 |
## Why Websurfx?
|
154 |
|
155 |
-
The primary purpose of the Websurfx project is to create a fast, secure, and privacy-focused meta-search engine.
|
156 |
|
157 |
## Why AGPLv3?
|
158 |
|
159 |
-
Websurfx is distributed under the **AGPLv3** license to keep the source code open and transparent. This helps
|
160 |
|
161 |
## Why Rust?
|
162 |
|
163 |
-
|
164 |
|
165 |
**[⬆️ Back to Top](#--)**
|
166 |
|
167 |
-
# More
|
168 |
|
169 |
We are looking for more willing contributors to help grow this project. For more information on how you can contribute, check out the [project board](https://github.com/neon-mmd/websurfx/projects?query=is%3Aopen) and the [CONTRIBUTING.md](CONTRIBUTING.md) file for guidelines and rules for making contributions.
|
170 |
|
@@ -174,14 +194,15 @@ We are looking for more willing contributors to help grow this project. For more
|
|
174 |
|
175 |
> For full details and other ways you can help out, see: [**Contributing**]()
|
176 |
|
177 |
-
If you use Websurfx and would like to contribute to its development,
|
178 |
|
179 |
Several areas that we need a bit of help with at the moment are:
|
|
|
180 |
- **Better and more color schemes**: Help fix color schemes and add other famous color schemes.
|
181 |
- **Improve evasion code for bot detection** - Help improve code related to evading IP blocking and emulating human behaviors located in everyone's engine file.
|
182 |
- **Logo** - Help create a logo for the project and website.
|
183 |
- **Docker Support** - Help write a Docker Compose file for the project.
|
184 |
-
- Submit a PR to add a new feature, fix a bug, update the docs, add a theme, widget, or
|
185 |
- Star Websurfx on GitHub.
|
186 |
|
187 |
**[⬆️ Back to Top](#--)**
|
@@ -189,19 +210,19 @@ Several areas that we need a bit of help with at the moment are:
|
|
189 |
# Documentation 📘
|
190 |
|
191 |
> **Note**
|
192 |
-
> We welcome any contributions to the [documentation](
|
193 |
|
194 |
**[⬆️ Back to Top](#--)**
|
195 |
|
196 |
# Roadmap 🛣️
|
197 |
|
198 |
-
> Coming soon
|
199 |
|
200 |
**[⬆️ Back to Top](#--)**
|
201 |
|
202 |
-
# Contributing 🙋
|
203 |
|
204 |
-
Contributions are welcome from anyone. It doesn
|
205 |
|
206 |
## Not a developer but still want to contribute?
|
207 |
|
@@ -213,16 +234,18 @@ If you are a developer, have a look at the [CONTRIBUTING.org](CONTRIBUTING.md) d
|
|
213 |
|
214 |
**[⬆️ Back to Top](#--)**
|
215 |
|
216 |
-
# License 📜
|
217 |
|
218 |
Websurfx is licensed under the [AGPLv3](LICENSE) license.
|
219 |
|
220 |
**[⬆️ Back to Top](#--)**
|
221 |
|
222 |
-
# Credits 🤝
|
223 |
|
224 |
We would like to thank the following people for their contributions and support:
|
225 |
|
|
|
|
|
226 |
<p>
|
227 |
<br />
|
228 |
<a href="https://github.com/neon-mmd/websurfx/graphs/contributors">
|
@@ -231,6 +254,14 @@ We would like to thank the following people for their contributions and support:
|
|
231 |
<br />
|
232 |
</p>
|
233 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
234 |
**[⬆️ Back to Top](#--)**
|
235 |
|
236 |
---
|
|
|
1 |
+
<h1 align="center">
|
2 |
<img src="./images/websurfx_logo.png" alt="websurfx logo" align="center" />
|
3 |
</h1>
|
4 |
<p align="center">
|
5 |
<b align="center"><a href="README.md">Readme</a></b> |
|
6 |
<b><a href="https://discord.gg/SWnda7Mw5u">Discord</a></b> |
|
7 |
+
<b><a href="../../tree/HEAD/docs/instances.md">Instances</a></b> |
|
8 |
+
<b><a href="https://discord.gg/VKCAememnr">User Showcase</a></b> |
|
9 |
<b><a href="https://github.com/neon-mmd/websurfx">GitHub</a></b> |
|
10 |
+
<b><a href="../../tree/HEAD/docs/">Documentation</a></b>
|
11 |
<br /><br />
|
12 |
+
<a
|
13 |
+
href="https://github.com/awesome-selfhosted/awesome-selfhosted#search-engines"
|
14 |
+
>
|
15 |
+
<img
|
16 |
+
src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg"
|
17 |
+
alt="Awesome Self-Hosted"
|
18 |
+
/>
|
19 |
+
</a>
|
20 |
<a href="#">
|
21 |
<img
|
22 |
alt="GitHub code size in bytes"
|
|
|
49 |
>meta search engine</a
|
50 |
>
|
51 |
(pronounced as websurface or web-surface /wɛbˈsɜːrfəs/.) written in Rust. It
|
52 |
+
provides a quick and secure search experience while completely respecting user
|
53 |
privacy.</i
|
54 |
>
|
55 |
</p>
|
|
|
59 |
<p>
|
60 |
|
61 |
- **Getting Started**
|
62 |
+
- [🔭 Preview](#preview-)
|
63 |
+
- [🚀 Features](#features-)
|
64 |
+
- [🔗 Instances](instances-)
|
65 |
+
- [🛠️ Installation and Testing](#installation-and-testing-%EF%B8%8F)
|
66 |
+
- [🔧 Configuration](#configuration-)
|
67 |
- **Feature Overview**
|
68 |
+
- [🎨 Theming](#theming-)
|
69 |
+
- [🌍 Multi-Language Support](#multi-language-support-)
|
70 |
- **Community**
|
71 |
+
- [📊 System Requirements](#system-requirements-)
|
72 |
+
- [🗨️ FAQ (Frequently Asked Questions)](#faq-frequently-asked-questions-)
|
73 |
+
- [📣 More Contributors Wanted](#more-contributors-wanted-)
|
74 |
+
- [💖 Supporting Websurfx](#supporting-websurfx-)
|
75 |
+
- [📘 Documentation](#documentation-)
|
76 |
+
- [🛣️ Roadmap](#roadmap-)
|
77 |
+
- [🙋 Contributing](#contributing-)
|
78 |
+
- [📜 License](#license-)
|
79 |
+
- [🤝 Credits](#credits-)
|
80 |
|
81 |
</p>
|
82 |
</details>
|
83 |
|
84 |
+
# Preview 🔭
|
85 |
|
86 |
+
## Home Page
|
87 |
|
88 |
<img align="center" src="./images/main_page.png" />
|
89 |
|
|
|
97 |
|
98 |
**[⬆️ Back to Top](#--)**
|
99 |
|
100 |
+
# Instances 🔗
|
101 |
+
|
102 |
+
> For a full list of publicly available community driven `websurfx` instances to test or for daily use. see [**Instances**](./docs/instances.md)
|
103 |
+
|
104 |
+
**[⬆️ Back to Top](#--)**
|
105 |
|
106 |
+
# Features 🚀
|
107 |
+
|
108 |
+
- 🎨 Make Websurfx uniquely yours with twelve color schemes provided by default. It also supports creation of custom themes and color schemes in a quick and easy way, so unleash your creativity!
|
109 |
- 🔐 Fast, private, and secure
|
110 |
- 🆓 100% free and open source
|
111 |
- 💨 Ad-free and clean results
|
|
|
113 |
|
114 |
**[⬆️ Back to Top](#--)**
|
115 |
|
116 |
+
# Installation and Testing 🛠️
|
117 |
|
118 |
> For full setup instructions, see: [**Installation**](./docs/installation.md)
|
119 |
|
|
|
121 |
|
122 |
To get started with Websurfx, clone the repository, edit the config file, which is located in the `websurfx/` directory, and install the Redis server by following the instructions located [here](https://redis.io/docs/getting-started/) and then run the websurfx server and redis server using the following commands:
|
123 |
|
124 |
+
```shell
|
125 |
git clone https://github.com/neon-mmd/websurfx.git
|
126 |
cd websurfx
|
127 |
+
git checkout stable
|
128 |
cargo build -r
|
129 |
redis-server --port 8082 &
|
130 |
./target/release/websurfx
|
|
|
132 |
|
133 |
Once you have started the server, open your preferred web browser and navigate to <http://127.0.0.1:8080> to start using Websurfx.
|
134 |
|
135 |
+
> **Note**
|
136 |
+
>
|
137 |
+
> 1. The project is no longer in the testing phase and is now ready for production use.
|
138 |
+
> 2. There are many features still missing like `support for image search`, `different categories`, `quick apps`, etc but they will be added soon as part of future releases.
|
139 |
|
140 |
**[⬆️ Back to Top](#--)**
|
141 |
|
142 |
+
# Configuration 🔧
|
143 |
|
144 |
> For full configuration instructions, see: [**Configuration**](./docs/configuration.md)
|
145 |
|
|
|
147 |
|
148 |
**[⬆️ Back to Top](#--)**
|
149 |
|
150 |
+
# Theming 🎨
|
151 |
|
152 |
> For full theming and customization instructions, see: [**Theming**](./docs/theming.md)
|
153 |
|
154 |
+
Websurfx comes loaded with several themes and color schemes, which you can apply and edit through the config file. It also supports custom themes and color schemes using CSS, allowing you to make it truly yours.
|
155 |
|
156 |
**[⬆️ Back to Top](#--)**
|
157 |
|
158 |
# Multi-Language Support 🌍
|
159 |
|
160 |
> **Note**
|
161 |
+
> Currently, we do not support other languages but we will start accepting contributions regarding language support in the future. We believe language should never be a barrier to entry.
|
162 |
|
163 |
**[⬆️ Back to Top](#--)**
|
164 |
|
|
|
172 |
|
173 |
## Why Websurfx?
|
174 |
|
175 |
+
The primary purpose of the Websurfx project is to create a fast, secure, and privacy-focused meta-search engine. There are numerous meta-search engines available, but not all guarantee the security of their search engine, which is critical for maintaining privacy. Memory flaws, for example, can expose private or sensitive information, which is understandably bad. There is also the added problem of spam, ads, and inorganic results which most engines don't have a fool-proof answer to. Until now. With Websurfx I finally put a full stop to this problem. Websurfx is based on Rust, which ensures memory safety and removes such issues. Many meta-search engines also lack important features like advanced picture search, required by graphic designers, content providers, and others. Websurfx improves the user experience by providing these and other features, such as proper NSFW blocking and Micro-apps or Quick Results (providing a calculator, currency exchanges, etc in the search results).
|
176 |
|
177 |
## Why AGPLv3?
|
178 |
|
179 |
+
Websurfx is distributed under the **AGPLv3** license to keep the source code open and transparent. This helps keep malware, telemetry, and other dangers out of the project. **AGPLv3** is a strong copyleft license that ensures the software's source code, including any modifications or improvements made to the code, remains open and available to everyone.
|
180 |
|
181 |
## Why Rust?
|
182 |
|
183 |
+
Websurfx is based on Rust due to its memory safety features, which prevents vulnerabilities and makes the codebase more secure. Rust is also faster than C++, contributing to Websurfx's speed and responsiveness. Finally, the Rust ownership and borrowing system enables secure concurrency and thread safety in the program.
|
184 |
|
185 |
**[⬆️ Back to Top](#--)**
|
186 |
|
187 |
+
# More Contributors Wanted 📣
|
188 |
|
189 |
We are looking for more willing contributors to help grow this project. For more information on how you can contribute, check out the [project board](https://github.com/neon-mmd/websurfx/projects?query=is%3Aopen) and the [CONTRIBUTING.md](CONTRIBUTING.md) file for guidelines and rules for making contributions.
|
190 |
|
|
|
194 |
|
195 |
> For full details and other ways you can help out, see: [**Contributing**]()
|
196 |
|
197 |
+
If you use Websurfx and would like to contribute to its development, we're glad to have you on board! Contributions of any size or type are always welcome, and we will always acknowledge your efforts.
|
198 |
|
199 |
Several areas that we need a bit of help with at the moment are:
|
200 |
+
|
201 |
- **Better and more color schemes**: Help fix color schemes and add other famous color schemes.
|
202 |
- **Improve evasion code for bot detection** - Help improve code related to evading IP blocking and emulating human behaviors located in everyone's engine file.
|
203 |
- **Logo** - Help create a logo for the project and website.
|
204 |
- **Docker Support** - Help write a Docker Compose file for the project.
|
205 |
+
- Submit a PR to add a new feature, fix a bug, update the docs, add a theme, widget, or anything else.
|
206 |
- Star Websurfx on GitHub.
|
207 |
|
208 |
**[⬆️ Back to Top](#--)**
|
|
|
210 |
# Documentation 📘
|
211 |
|
212 |
> **Note**
|
213 |
+
> We welcome any contributions to the [documentation](../../tree/HEAD/docs/) as this will benefit everyone who uses this project.
|
214 |
|
215 |
**[⬆️ Back to Top](#--)**
|
216 |
|
217 |
# Roadmap 🛣️
|
218 |
|
219 |
+
> Coming soon! 🙂.
|
220 |
|
221 |
**[⬆️ Back to Top](#--)**
|
222 |
|
223 |
+
# Contributing 🙋
|
224 |
|
225 |
+
Contributions are welcome from anyone. It doesn't matter who you are; you can still contribute to the project in your own way.
|
226 |
|
227 |
## Not a developer but still want to contribute?
|
228 |
|
|
|
234 |
|
235 |
**[⬆️ Back to Top](#--)**
|
236 |
|
237 |
+
# License 📜
|
238 |
|
239 |
Websurfx is licensed under the [AGPLv3](LICENSE) license.
|
240 |
|
241 |
**[⬆️ Back to Top](#--)**
|
242 |
|
243 |
+
# Credits 🤝
|
244 |
|
245 |
We would like to thank the following people for their contributions and support:
|
246 |
|
247 |
+
**Contributors**
|
248 |
+
|
249 |
<p>
|
250 |
<br />
|
251 |
<a href="https://github.com/neon-mmd/websurfx/graphs/contributors">
|
|
|
254 |
<br />
|
255 |
</p>
|
256 |
|
257 |
+
**Stargazers**
|
258 |
+
|
259 |
+
<p>
|
260 |
+
<a href="https://github.com/neon-mmd/websurfx/stargazers">
|
261 |
+
<img src="https://reporoster.com/stars/dark/neon-mmd/websurfx" />
|
262 |
+
</a>
|
263 |
+
</p>
|
264 |
+
|
265 |
**[⬆️ Back to Top](#--)**
|
266 |
|
267 |
---
|
docker-compose.yml
CHANGED
@@ -1,3 +1,4 @@
|
|
|
|
1 |
version: "3.9"
|
2 |
services:
|
3 |
app:
|
@@ -5,11 +6,15 @@ services:
|
|
5 |
build: .
|
6 |
ports:
|
7 |
- 8080:8080
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
version: "3.9"
|
3 |
services:
|
4 |
app:
|
|
|
6 |
build: .
|
7 |
ports:
|
8 |
- 8080:8080
|
9 |
+
# Uncomment the following lines if you are using the `hybrid` or `redis` caching feature.
|
10 |
+
# depends_on:
|
11 |
+
# - redis
|
12 |
+
# links:
|
13 |
+
# - redis
|
14 |
+
volumes:
|
15 |
+
- ./websurfx/:/etc/xdg/websurfx/
|
16 |
+
# Uncomment the following lines if you are using the `hybrid` or `redis` caching feature.
|
17 |
+
# redis:
|
18 |
+
# image: redis:latest
|
19 |
+
# ports:
|
20 |
+
# - 6379:6379
|
docs/README.md
CHANGED
@@ -7,7 +7,9 @@
|
|
7 |
|
8 |
# Users
|
9 |
|
|
|
10 |
- [Installation](./installation.md)
|
|
|
11 |
- [Configuration](./configuration.md)
|
12 |
- [Theming](./theming.md)
|
13 |
|
|
|
7 |
|
8 |
# Users
|
9 |
|
10 |
+
- [Instances](./instances.md)
|
11 |
- [Installation](./installation.md)
|
12 |
+
- [Features](./features.md)
|
13 |
- [Configuration](./configuration.md)
|
14 |
- [Theming](./theming.md)
|
15 |
|
docs/configuration.md
CHANGED
@@ -11,33 +11,59 @@ If you have built `websurfx` from source then the configuration file will be loc
|
|
11 |
|
12 |
If you have installed `websurfx` using the package manager of your Linux distro then the default configuration file will be located at `/etc/xdg/websurfx/`. You can copy the default config to `~/.config/websurfx/` and make the changes there and rerun the websurfx server.
|
13 |
|
14 |
-
Some of the configuration options provided in the file are stated below. These are subdivided into
|
15 |
|
|
|
16 |
- Server
|
|
|
17 |
- Website
|
18 |
- Cache
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
20 |
## Server
|
21 |
|
22 |
- **port:** Port number on which server should be launched.
|
23 |
- **binding_ip_addr:** IP address on the which server should be launched.
|
24 |
-
- **production_use:** Whether to use production mode or not (in other words this option should be used if it is to be used to host it on the server to provide a service to a large number of users). If production_use is set to true. There will be a random delay before sending the request to the search engines, this is to prevent DDoSing the upstream search engines from a large number of simultaneous requests.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
|
26 |
## Website
|
27 |
|
28 |
- **colorscheme:** The colorscheme name which should be used for the website theme (the name should be in accordance to the colorscheme file name present in `public/static/colorschemes` folder).
|
29 |
|
30 |
-
> By Default we provide
|
31 |
>
|
32 |
> 1. catppuccin-mocha
|
33 |
-
> 2.
|
34 |
-
> 3.
|
35 |
-
> 4.
|
36 |
-
> 5.
|
37 |
-
> 6.
|
38 |
-
> 7.
|
39 |
-
> 8.
|
40 |
-
> 9.
|
|
|
|
|
|
|
41 |
|
42 |
- **theme:** The theme name which should be used for the website (again, the name should be in accordance to the theme file name present in `public/static/themes` folder).
|
43 |
|
@@ -47,6 +73,13 @@ Some of the configuration options provided in the file are stated below. These a
|
|
47 |
|
48 |
## Cache
|
49 |
|
50 |
-
- **
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
|
52 |
-
[⬅️
|
|
|
11 |
|
12 |
If you have installed `websurfx` using the package manager of your Linux distro then the default configuration file will be located at `/etc/xdg/websurfx/`. You can copy the default config to `~/.config/websurfx/` and make the changes there and rerun the websurfx server.
|
13 |
|
14 |
+
Some of the configuration options provided in the file are stated below. These are subdivided into the following categories:
|
15 |
|
16 |
+
- General
|
17 |
- Server
|
18 |
+
- Search
|
19 |
- Website
|
20 |
- Cache
|
21 |
+
- Search Engines
|
22 |
+
|
23 |
+
# General
|
24 |
+
|
25 |
+
- **logging:** An option to enable or disable logs.
|
26 |
+
- **debug:** An option to enable or disable debug mode.
|
27 |
+
- **threads:** The amount of threads that the app will use to run (the value should be greater than 0).
|
28 |
|
29 |
## Server
|
30 |
|
31 |
- **port:** Port number on which server should be launched.
|
32 |
- **binding_ip_addr:** IP address on the which server should be launched.
|
33 |
+
- **production_use:** Whether to use production mode or not (in other words this option should be used if it is to be used to host it on the server to provide a service to a large number of users). If production_use is set to true. There will be a random delay before sending the request to the search engines, this is to prevent DDoSing the upstream search engines from a large number of simultaneous requests.
|
34 |
+
- **request_timeout:** Timeout for the search requests sent to the upstream search engines to be fetched (value in seconds).
|
35 |
+
- **rate_limiter:** The configuration option to configure rate limiting on the search engine website.
|
36 |
+
|
37 |
+
## Search
|
38 |
+
|
39 |
+
- **safe_search:** This option is used to configure the search filtering based on different safe search levels. (value a number between 0 to 4)
|
40 |
+
|
41 |
+
> This option provides 4 levels of search filtering:
|
42 |
+
>
|
43 |
+
> - Level 0 - With this level no search filtering occurs.
|
44 |
+
> - Level 1 - With this level some search filtering occurs.
|
45 |
+
> - Level 2 - With this level the upstream search engines are restricted to send sensitive contents like NSFW search results, etc.
|
46 |
+
> - Level 3 - With this level the regex based filter lists is used alongside level 2 to filter more search results that have slipped in or custom results that needs to be filtered using the filter lists.
|
47 |
+
> - Level 4 - This level is similar to level 3 except in this level the regex based filter lists are used to disallow users to search sensitive or disallowed content. This level could be useful if you are parent or someone who wants to completely disallow their kids or yourself from watching sensitive content.
|
48 |
|
49 |
## Website
|
50 |
|
51 |
- **colorscheme:** The colorscheme name which should be used for the website theme (the name should be in accordance to the colorscheme file name present in `public/static/colorschemes` folder).
|
52 |
|
53 |
+
> By Default we provide 12 colorschemes to choose from these are:
|
54 |
>
|
55 |
> 1. catppuccin-mocha
|
56 |
+
> 2. dark-chocolate
|
57 |
+
> 3. dracula
|
58 |
+
> 4. gruvbox-dark
|
59 |
+
> 5. monokai
|
60 |
+
> 6. nord
|
61 |
+
> 7. oceanic-next
|
62 |
+
> 8. one-dark
|
63 |
+
> 9. solarized-dark
|
64 |
+
> 10. solarized-light
|
65 |
+
> 11. tokyo-night
|
66 |
+
> 12. tomorrow-night
|
67 |
|
68 |
- **theme:** The theme name which should be used for the website (again, the name should be in accordance to the theme file name present in `public/static/themes` folder).
|
69 |
|
|
|
73 |
|
74 |
## Cache
|
75 |
|
76 |
+
- **redis_url:** Redis connection url address on which the client should connect on.
|
77 |
+
|
78 |
+
> **Note**
|
79 |
+
> This option can be commented out if you have compiled the app without the `redis-cache` feature. For more information, See [**building**](./building.md).
|
80 |
+
|
81 |
+
## Search Engines
|
82 |
+
|
83 |
+
- **upstream_search_engines:** Select from the different upstream search engines from which the results should be fetched.
|
84 |
|
85 |
+
[⬅️ Go back to Home](./README.md)
|
docs/features.md
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Features
|
2 |
+
|
3 |
+
The project provides 4 caching options as conditionally compiled features. This helps reduce the size of the compiled app by only including the code that is necessary for a particular caching option.
|
4 |
+
|
5 |
+
The different caching features provided are as follows:
|
6 |
+
- No cache
|
7 |
+
- Redis cache
|
8 |
+
- In memory cache
|
9 |
+
- Hybrid cache
|
10 |
+
|
11 |
+
## Explaination
|
12 |
+
|
13 |
+
### No Cache
|
14 |
+
|
15 |
+
This feature can drastically reduce binary size but with the cost that subsequent search requests and previous & next page search results are not cached which can make navigating between pages slower. As well as page refreshes of the same page also becomes slower as each refresh has to fetch the results from the upstream search engines.
|
16 |
+
|
17 |
+
### Redis Cache
|
18 |
+
|
19 |
+
This feature allows the search engine to cache the results on the redis server. This feature can be useful for having a dedicated cache server for multiple devices hosted with the `Websurfx` server which can use the one dedicated cache server for hosting their cache on it. But a disadvantage of this solution is that if the `Redis`server is located far away (for example provided by a vps as service) and if it is unavailable or down for some reason then the `Websurfx` server would not be able to function properly or will crash on startup.
|
20 |
+
|
21 |
+
### In Memory Cache
|
22 |
+
|
23 |
+
This feature is the default feature provided by the project. This feature allows the search engine to cache the results in the memory which can help increase the speed of the fetched cache results and it also has an advantage that it is extremely reliable as all the results are stored in memory within the search engine. Though the disadvantage of this solution are that caching of results is slightly slower than the `redis-cache` solution, it requires a good amount of memory on the system and as such is not ideal for very low memory devices and is highly unscalable.
|
24 |
+
|
25 |
+
### Hybrid Cache
|
26 |
+
|
27 |
+
This feature provides the advantages of both `In Memory` caching and `Redis` caching and it is an ideal solution if you need a very resiliant and reliable solution for the `Websurfx` which can provide both speed and reliability. Like for example if the `Redis` server becomes unavailable then the search engine switches to `In Memory` caching until the server becomes available again. This solution can be useful for hosting `Websurfx` instance which will be used by hundreds or thousands of users over the world.
|
28 |
+
|
29 |
+
## Tabular Summary
|
30 |
+
|
31 |
+
|
32 |
+
| **Attributes** | **Hybrid** | **In-Memory** | **No Cache** | **Redis** |
|
33 |
+
|-----------------------------------------|------------|------------------------------------------------------|-----------------|------------------------|
|
34 |
+
| **Speed** | Fast | Caching is slow, but retrieval of cache data is fast | Slow | Fastest |
|
35 |
+
| **Reliability** | ✅ | ✅ | ✅ | ❌ |
|
36 |
+
| **Scalability** | ✅ | ❌ | - | ✅ |
|
37 |
+
| **Resiliancy** | ✅ | ✅ | ✅ | ❌ |
|
38 |
+
| **Production/Large Scale/Instance use** | ✅ | Not Recommended | Not Recommended | Not Recommended |
|
39 |
+
| **Low Memory Support** | ❌ | ❌ | ✅ | ❌ |
|
40 |
+
| **Binary Size** | Big | Bigger than `No Cache` | small | Bigger than `No Cache` |
|
41 |
+
|
42 |
+
[⬅️ Go back to Home](./README.md)
|
docs/installation.md
CHANGED
@@ -2,16 +2,17 @@
|
|
2 |
|
3 |
## Arch Linux
|
4 |
|
5 |
-
|
6 |
|
7 |
-
|
|
|
|
|
8 |
paru -S websurfx-edge-git
|
9 |
```
|
10 |
|
11 |
After installing it you can run the websurfx server by running the following commands:
|
12 |
|
13 |
-
```
|
14 |
-
redis-server --port 8082 &
|
15 |
websurfx
|
16 |
```
|
17 |
|
@@ -19,7 +20,79 @@ Once you have started the server, open your preferred web browser and navigate t
|
|
19 |
|
20 |
If you want to change the port or the ip or any other configuration setting checkout the [configuration docs](./configuration.md).
|
21 |
|
22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
|
24 |
The package is currently not available on other Linux distros. With contribution and support it can be made available on other distros as well 🙂.
|
25 |
|
@@ -34,6 +107,7 @@ To get started with Websurfx, clone the repository, edit the config file which i
|
|
34 |
```shell
|
35 |
git clone https://github.com/neon-mmd/websurfx.git
|
36 |
cd websurfx
|
|
|
37 |
cargo build -r
|
38 |
redis-server --port 8082 &
|
39 |
./target/release/websurfx
|
@@ -50,13 +124,63 @@ If you want to use the rolling/edge branch, run the following commands instead:
|
|
50 |
```shell
|
51 |
git clone https://github.com/neon-mmd/websurfx.git
|
52 |
cd websurfx
|
53 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
cargo build -r
|
55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
./target/release/websurfx
|
57 |
```
|
58 |
|
59 |
-
Once you have started the server,
|
60 |
|
61 |
If you want to change the port or the ip or any other configuration setting checkout the [configuration docs](./configuration.md).
|
62 |
|
@@ -64,7 +188,121 @@ If you want to change the port or the ip or any other configuration setting chec
|
|
64 |
|
65 |
Before you start, you will need [Docker](https://docs.docker.com/get-docker/) installed on your system first.
|
66 |
|
67 |
-
##
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
|
69 |
First clone the the repository by running the following command:
|
70 |
|
@@ -76,49 +314,82 @@ cd websurfx
|
|
76 |
After that edit the config.lua file located under `websurfx` directory. In the config file you will specifically need to change to values which is `binding_ip_addr` and `redis_connection_url` which should make the config look something like this:
|
77 |
|
78 |
```lua
|
79 |
-
--
|
|
|
|
|
|
|
|
|
|
|
80 |
port = "8080" -- port on which server should be launched
|
81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
|
83 |
-
-- Website
|
84 |
-- The different colorschemes provided are:
|
85 |
-- {{
|
86 |
-- catppuccin-mocha
|
|
|
87 |
-- dracula
|
|
|
88 |
-- monokai
|
89 |
-- nord
|
90 |
-- oceanic-next
|
|
|
91 |
-- solarized-dark
|
92 |
-- solarized-light
|
|
|
93 |
-- tomorrow-night
|
94 |
-- }}
|
95 |
colorscheme = "catppuccin-mocha" -- the colorscheme name which should be used for the website theme
|
96 |
theme = "simple" -- the theme name which should be used for the website
|
97 |
|
98 |
-
-- Caching
|
99 |
-
|
100 |
|
101 |
-
|
102 |
-
|
103 |
-
|
|
|
|
|
104 |
```
|
105 |
|
106 |
-
After this run the following command to deploy the app:
|
107 |
|
108 |
```bash
|
109 |
-
docker compose up -d --build
|
110 |
```
|
111 |
|
|
|
|
|
|
|
112 |
This will take around 5-10 mins for first deployment, afterwards the docker build stages will be cached so it will be faster to be build from next time onwards. After the above step finishes launch your preferred browser and then navigate to `http://<ip_address_of_the_device>:<whatever_port_you_provided_in_the_config>`.
|
113 |
|
114 |
-
|
115 |
|
116 |
-
For the
|
117 |
|
118 |
```bash
|
119 |
git clone https://github.com/neon-mmd/websurfx.git
|
120 |
cd websurfx
|
121 |
-
git checkout
|
122 |
```
|
123 |
|
124 |
-
[⬅️
|
|
|
2 |
|
3 |
## Arch Linux
|
4 |
|
5 |
+
### Rolling/Edge/Unstable
|
6 |
|
7 |
+
You can install `Websurfx` through the [Aur](https://aur.archlinux.org/packages/websurfx-git), By running the following command (using [paru](https://github.com/Morganamilo/paru)):
|
8 |
+
|
9 |
+
```shell
|
10 |
paru -S websurfx-edge-git
|
11 |
```
|
12 |
|
13 |
After installing it you can run the websurfx server by running the following commands:
|
14 |
|
15 |
+
```shell
|
|
|
16 |
websurfx
|
17 |
```
|
18 |
|
|
|
20 |
|
21 |
If you want to change the port or the ip or any other configuration setting checkout the [configuration docs](./configuration.md).
|
22 |
|
23 |
+
### Stable
|
24 |
+
|
25 |
+
For the stable version, follow the same steps as above (as mentioned for the `unstable/rolling/edge` version) with the only difference being that the package to be installed for stable version is called `websurfx-git` instead of `websurfx-edge-git`.
|
26 |
+
|
27 |
+
## NixOS
|
28 |
+
|
29 |
+
A `flake.nix` has been provided to allow installing `websurfx` easily. It utilizes [nearsk](https://github.com/nix-community/naersk) to automatically generate a derivation based on `Cargo.toml` and `Cargo.lock`.
|
30 |
+
|
31 |
+
The Websurfx project provides 2 versions/flavours for the flake `stable` and `rolling/unstable/edge`. The steps for each are covered below in different sections.
|
32 |
+
|
33 |
+
### Rolling/Edge/Unstable
|
34 |
+
|
35 |
+
To get started, First clone the repository, edit the config file which is located in the `websurfx` directory and then build and run the websurfx server by running the following commands:
|
36 |
+
|
37 |
+
```shell
|
38 |
+
git clone https://github.com/neon-mmd/websurfx.git
|
39 |
+
cd websurfx
|
40 |
+
cp -rf ./websurfx/ ~/.config/
|
41 |
+
$ mkdir /opt/websurfx/
|
42 |
+
$ cp -rf ./public/ /opt/websurfx/
|
43 |
+
nix build .#websurfx
|
44 |
+
nix run .#websurfx
|
45 |
+
```
|
46 |
+
|
47 |
+
> **Note**
|
48 |
+
> In the above command the dollar sign(**$**) refers to running the command in privilaged mode by using utilities `sudo`, `doas`, `pkgexec` or any other privilage access methods.
|
49 |
+
|
50 |
+
Once you have run the above set of commands, then open your preferred web browser and navigate to http://127.0.0.1:8080/ to start using Websurfx.
|
51 |
+
|
52 |
+
If you want to change the port or the ip or any other configuration setting checkout the [configuration docs](./configuration.md).
|
53 |
+
|
54 |
+
> Optionally, you may include it in your own flake by adding this repo to its inputs and adding it to `environment.systemPackages` as follows:
|
55 |
+
>
|
56 |
+
> ```nix
|
57 |
+
> {
|
58 |
+
> description = "My awesome configuration";
|
59 |
+
>
|
60 |
+
> inputs = {
|
61 |
+
> websurfx.url = "github:neon-mmd/websurfx";
|
62 |
+
> };
|
63 |
+
>
|
64 |
+
> outputs = { nixpkgs, ... }@inputs: {
|
65 |
+
> nixosConfigurations = {
|
66 |
+
> hostname = nixpkgs.lib.nixosSystem {
|
67 |
+
> system = "x86_64-linux";
|
68 |
+
> modules = [{
|
69 |
+
> environment.systemPackages = [inputs.websurfx.packages.x86_64-linux.websurfx];
|
70 |
+
> }];
|
71 |
+
> };
|
72 |
+
> };
|
73 |
+
> };
|
74 |
+
> }
|
75 |
+
> ```
|
76 |
+
|
77 |
+
### Stable
|
78 |
+
|
79 |
+
For the stable version, follow the same steps as above (as mentioned for the `unstable/rolling/edge version`) with an addition of one command which has to be performed after cloning and changing directory into the repository which makes the building step as follows:
|
80 |
+
|
81 |
+
```shell
|
82 |
+
git clone https://github.com/neon-mmd/websurfx.git
|
83 |
+
cd websurfx
|
84 |
+
git checkout stable
|
85 |
+
cp -rf ./websurfx/ ~/.config/
|
86 |
+
$ mkdir /opt/websurfx/
|
87 |
+
$ cp -rf ./public/ /opt/websurfx/
|
88 |
+
nix build .#websurfx
|
89 |
+
nix run .#websurfx
|
90 |
+
```
|
91 |
+
|
92 |
+
> **Note**
|
93 |
+
> In the above command the dollar sign(**$**) refers to running the command in privilaged mode by using utilities `sudo`, `doas`, `pkgexec` or any other privilage access methods.
|
94 |
+
|
95 |
+
## Other Distros
|
96 |
|
97 |
The package is currently not available on other Linux distros. With contribution and support it can be made available on other distros as well 🙂.
|
98 |
|
|
|
107 |
```shell
|
108 |
git clone https://github.com/neon-mmd/websurfx.git
|
109 |
cd websurfx
|
110 |
+
git checkout stable
|
111 |
cargo build -r
|
112 |
redis-server --port 8082 &
|
113 |
./target/release/websurfx
|
|
|
124 |
```shell
|
125 |
git clone https://github.com/neon-mmd/websurfx.git
|
126 |
cd websurfx
|
127 |
+
```
|
128 |
+
|
129 |
+
Once you have changed the directory to the `websurfx` directory then follow the build options listed below:
|
130 |
+
|
131 |
+
### Hybrid Cache
|
132 |
+
|
133 |
+
> For more information on the features and their pros and cons. see: [**Features**](./features.md)
|
134 |
+
|
135 |
+
To build the search engine with the `Hybrid caching` feature. Run the following build command:
|
136 |
+
|
137 |
+
```shell
|
138 |
+
cargo build -r --features redis-cache
|
139 |
+
```
|
140 |
+
|
141 |
+
### Memory Cache (Default Feature)
|
142 |
+
|
143 |
+
> For more information on the features and their pros and cons. see: [**Features**](./features.md)
|
144 |
+
|
145 |
+
To build the search engine with the `In-Memory caching` feature. Run the following build command:
|
146 |
+
|
147 |
+
```shell
|
148 |
cargo build -r
|
149 |
+
```
|
150 |
+
|
151 |
+
### No Cache
|
152 |
+
|
153 |
+
> For more information on the features and their pros and cons. see: [**Features**](./features.md)
|
154 |
+
|
155 |
+
To build the search engine with the `No caching` feature. Run the following build command:
|
156 |
+
|
157 |
+
```shell
|
158 |
+
cargo build -r --no-default-features
|
159 |
+
```
|
160 |
+
|
161 |
+
### Redis Cache
|
162 |
+
|
163 |
+
> For more information on the features and their pros and cons. see: [**Features**](./features.md)
|
164 |
+
|
165 |
+
To build the search engine with the `hybrid caching` feature. Run the following build command:
|
166 |
+
|
167 |
+
```shell
|
168 |
+
cargo build -r --no-default-features --features redis-cache
|
169 |
+
```
|
170 |
+
|
171 |
+
> Optionally, If you have build the app with the `Redis cache`or `Hybrid cache` feature (as mentioned above) then before launching the search engine run the following command:
|
172 |
+
>
|
173 |
+
> ```shell
|
174 |
+
> redis-server --port 8082 &
|
175 |
+
> ```
|
176 |
+
|
177 |
+
Once you have finished building the `search engine`. then run the following command to start the search engine:
|
178 |
+
|
179 |
+
```shell
|
180 |
./target/release/websurfx
|
181 |
```
|
182 |
|
183 |
+
Once you have started the server, then launch your preferred web browser and navigate to http://127.0.0.1:8080/ to start using Websurfx.
|
184 |
|
185 |
If you want to change the port or the ip or any other configuration setting checkout the [configuration docs](./configuration.md).
|
186 |
|
|
|
188 |
|
189 |
Before you start, you will need [Docker](https://docs.docker.com/get-docker/) installed on your system first.
|
190 |
|
191 |
+
## Prebuild
|
192 |
+
|
193 |
+
The Websurfx project provides several prebuild images based on the different features provided by the search engine. To get started using the prebuild image, you will first need to create a `docker-compose.yml` file with the following content:
|
194 |
+
|
195 |
+
```yaml
|
196 |
+
---
|
197 |
+
version: '3.9'
|
198 |
+
services:
|
199 |
+
app:
|
200 |
+
# Comment the line below if you don't want to use the `hybrid/latest` image.
|
201 |
+
image: neonmmd/websurfx:latest
|
202 |
+
# Uncomment the line below if you want to use the `no cache` image.
|
203 |
+
# image: neonmmd/websurfx:nocache
|
204 |
+
# Uncomment the line below if you want to use the `memory` image.
|
205 |
+
# image: neonmmd/websurfx:memory
|
206 |
+
# Uncomment the line below if you want to use the `redis` image.
|
207 |
+
# image: neonmmd/websurfx:redis
|
208 |
+
ports:
|
209 |
+
- 8080:8080
|
210 |
+
# Uncomment the following lines if you are using the `hybrid/latest` or `redis` image.
|
211 |
+
# depends_on:
|
212 |
+
# - redis
|
213 |
+
# links:
|
214 |
+
# - redis
|
215 |
+
volumes:
|
216 |
+
- ./websurfx/:/etc/xdg/websurfx/
|
217 |
+
# Uncomment the following lines if you are using the `hybrid/latest` or `redis` image.
|
218 |
+
# redis:
|
219 |
+
# image: redis:latest
|
220 |
+
# ports:
|
221 |
+
# - 6379:6379
|
222 |
+
```
|
223 |
+
|
224 |
+
Then make sure to edit the `docker-compose.yml` file as required. After that create a directory `websurfx` in the directory you have placed the `docker-compose.yml` file, and then in the new directory create two new empty files named `allowlist.txt` and `blocklist.txt`. Finally, create a new config file `config.lua` with the default configuration, which looks something like this:
|
225 |
+
|
226 |
+
```lua
|
227 |
+
-- ### General ###
|
228 |
+
logging = true -- an option to enable or disable logs.
|
229 |
+
debug = false -- an option to enable or disable debug mode.
|
230 |
+
threads = 8 -- the amount of threads that the app will use to run (the value should be greater than 0).
|
231 |
+
|
232 |
+
-- ### Server ###
|
233 |
+
port = "8080" -- port on which server should be launched
|
234 |
+
binding_ip = "0.0.0.0" --ip address on the which server should be launched.
|
235 |
+
production_use = false -- whether to use production mode or not (in other words this option should be used if it is to be used to host it on the server to provide a service to a large number of users (more than one))
|
236 |
+
-- if production_use is set to true
|
237 |
+
-- There will be a random delay before sending the request to the search engines, this is to prevent DDoSing the upstream search engines from a large number of simultaneous requests.
|
238 |
+
request_timeout = 30 -- timeout for the search requests sent to the upstream search engines to be fetched (value in seconds).
|
239 |
+
rate_limiter = {
|
240 |
+
number_of_requests = 20, -- The number of request that are allowed within a provided time limit.
|
241 |
+
time_limit = 3, -- The time limit in which the quantity of requests that should be accepted.
|
242 |
+
}
|
243 |
+
|
244 |
+
-- ### Search ###
|
245 |
+
-- Filter results based on different levels. The levels provided are:
|
246 |
+
-- {{
|
247 |
+
-- 0 - None
|
248 |
+
-- 1 - Low
|
249 |
+
-- 2 - Moderate
|
250 |
+
-- 3 - High
|
251 |
+
-- 4 - Aggressive
|
252 |
+
-- }}
|
253 |
+
safe_search = 2
|
254 |
+
|
255 |
+
-- ### Website ###
|
256 |
+
-- The different colorschemes provided are:
|
257 |
+
-- {{
|
258 |
+
-- catppuccin-mocha
|
259 |
+
-- dark-chocolate
|
260 |
+
-- dracula
|
261 |
+
-- gruvbox-dark
|
262 |
+
-- monokai
|
263 |
+
-- nord
|
264 |
+
-- oceanic-next
|
265 |
+
-- one-dark
|
266 |
+
-- solarized-dark
|
267 |
+
-- solarized-light
|
268 |
+
-- tokyo-night
|
269 |
+
-- tomorrow-night
|
270 |
+
-- }}
|
271 |
+
colorscheme = "catppuccin-mocha" -- the colorscheme name which should be used for the website theme
|
272 |
+
theme = "simple" -- the theme name which should be used for the website
|
273 |
+
|
274 |
+
-- ### Caching ###
|
275 |
+
redis_url = "redis://redis:6379" -- redis connection url address on which the client should connect on.
|
276 |
+
|
277 |
+
-- ### Search Engines ###
|
278 |
+
upstream_search_engines = {
|
279 |
+
DuckDuckGo = true,
|
280 |
+
Searx = false,
|
281 |
+
} -- select the upstream search engines from which the results should be fetched.
|
282 |
+
```
|
283 |
+
|
284 |
+
Then run the following command to deploy the search engine:
|
285 |
+
|
286 |
+
```shell
|
287 |
+
$ docker compose up -d
|
288 |
+
```
|
289 |
+
|
290 |
+
> **Note**
|
291 |
+
> In the above command the dollar sign(**$**) refers to running the command in privilaged mode by using utilities `sudo`, `doas`, `pkgexec` or any other privilage access methods.
|
292 |
+
|
293 |
+
Then launch the browser of your choice and navigate to http://<ip_address_of_the_device>:<whatever_port_you_provided_in_the_config>.
|
294 |
+
|
295 |
+
> **Note**
|
296 |
+
> The official prebuild images only support `stable` versions of the app and will not support `rolling/edge/unstable` versions. But with support and contribution it could be made available for these versions as well 🙂.
|
297 |
+
|
298 |
+
## Manual Deployment
|
299 |
+
|
300 |
+
This section covers how to deploy the app with docker manually by manually building the image and deploying it.
|
301 |
+
|
302 |
+
> **Note**
|
303 |
+
> This section is provided for those who want to futher customize the docker image or for those who are extra cautious about security.
|
304 |
+
|
305 |
+
### Unstable/Edge/Rolling
|
306 |
|
307 |
First clone the the repository by running the following command:
|
308 |
|
|
|
314 |
After that edit the config.lua file located under `websurfx` directory. In the config file you will specifically need to change to values which is `binding_ip_addr` and `redis_connection_url` which should make the config look something like this:
|
315 |
|
316 |
```lua
|
317 |
+
-- ### General ###
|
318 |
+
logging = true -- an option to enable or disable logs.
|
319 |
+
debug = false -- an option to enable or disable debug mode.
|
320 |
+
threads = 8 -- the amount of threads that the app will use to run (the value should be greater than 0).
|
321 |
+
|
322 |
+
-- ### Server ###
|
323 |
port = "8080" -- port on which server should be launched
|
324 |
+
binding_ip = "0.0.0.0" --ip address on the which server should be launched.
|
325 |
+
production_use = false -- whether to use production mode or not (in other words this option should be used if it is to be used to host it on the server to provide a service to a large number of users (more than one))
|
326 |
+
-- if production_use is set to true
|
327 |
+
-- There will be a random delay before sending the request to the search engines, this is to prevent DDoSing the upstream search engines from a large number of simultaneous requests.
|
328 |
+
request_timeout = 30 -- timeout for the search requests sent to the upstream search engines to be fetched (value in seconds).
|
329 |
+
rate_limiter = {
|
330 |
+
number_of_requests = 20, -- The number of request that are allowed within a provided time limit.
|
331 |
+
time_limit = 3, -- The time limit in which the quantity of requests that should be accepted.
|
332 |
+
}
|
333 |
+
|
334 |
+
-- ### Search ###
|
335 |
+
-- Filter results based on different levels. The levels provided are:
|
336 |
+
-- {{
|
337 |
+
-- 0 - None
|
338 |
+
-- 1 - Low
|
339 |
+
-- 2 - Moderate
|
340 |
+
-- 3 - High
|
341 |
+
-- 4 - Aggressive
|
342 |
+
-- }}
|
343 |
+
safe_search = 2
|
344 |
|
345 |
+
-- ### Website ###
|
346 |
-- The different colorschemes provided are:
|
347 |
-- {{
|
348 |
-- catppuccin-mocha
|
349 |
+
-- dark-chocolate
|
350 |
-- dracula
|
351 |
+
-- gruvbox-dark
|
352 |
-- monokai
|
353 |
-- nord
|
354 |
-- oceanic-next
|
355 |
+
-- one-dark
|
356 |
-- solarized-dark
|
357 |
-- solarized-light
|
358 |
+
-- tokyo-night
|
359 |
-- tomorrow-night
|
360 |
-- }}
|
361 |
colorscheme = "catppuccin-mocha" -- the colorscheme name which should be used for the website theme
|
362 |
theme = "simple" -- the theme name which should be used for the website
|
363 |
|
364 |
+
-- ### Caching ###
|
365 |
+
redis_url = "redis://redis:6379" -- redis connection url address on which the client should connect on.
|
366 |
|
367 |
+
-- ### Search Engines ###
|
368 |
+
upstream_search_engines = {
|
369 |
+
DuckDuckGo = true,
|
370 |
+
Searx = false,
|
371 |
+
} -- select the upstream search engines from which the results should be fetched.
|
372 |
```
|
373 |
|
374 |
+
After this make sure to edit the `docker-compose.yml` and `Dockerfile` files as required and run the following command to deploy the app:
|
375 |
|
376 |
```bash
|
377 |
+
$ docker compose up -d --build
|
378 |
```
|
379 |
|
380 |
+
> **Note**
|
381 |
+
> In the above command the dollar sign(**$**) refers to running the command in privilaged mode by using utilities `sudo`, `doas`, `pkgexec` or any other privilage access methods.
|
382 |
+
|
383 |
This will take around 5-10 mins for first deployment, afterwards the docker build stages will be cached so it will be faster to be build from next time onwards. After the above step finishes launch your preferred browser and then navigate to `http://<ip_address_of_the_device>:<whatever_port_you_provided_in_the_config>`.
|
384 |
|
385 |
+
### Stable
|
386 |
|
387 |
+
For the stable version, follow the same steps as above (as mentioned for the unstable/rolling/edge version) with an addition of one command which has to be performed after cloning and changing directory into the repository which makes the cloning step as follows:
|
388 |
|
389 |
```bash
|
390 |
git clone https://github.com/neon-mmd/websurfx.git
|
391 |
cd websurfx
|
392 |
+
git checkout stable
|
393 |
```
|
394 |
|
395 |
+
[⬅️ Go back to Home](./README.md)
|
docs/instances.md
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Instances
|
2 |
+
|
3 |
+
> To contribute your server instance, check out the contributing guide [here](https://github.com/neon-mmd/websurfx/blob/HEAD/CONTRIBUTING.md).
|
4 |
+
|
5 |
+
This page provides a list of `Websurfx` instances provided by us and our community.
|
6 |
+
|
7 |
+
|URL|Network|Version|Location|Behind Cloudflare?|Maintained By|TLS|IPv6|Comment|
|
8 |
+
|-|-|-|-|-|-|-|-|-|
|
9 |
+
|https://alamin655-websurfx.hf.space/|www|v0.21.4|🇺🇸 US||[websurfx project](https://github.com/neon-mmd/websurfx)|✅|||
|
10 |
+
|
11 |
+
|
12 |
+
[⬅️ Go back to Home](./README.md)
|
docs/theming.md
CHANGED
@@ -8,17 +8,17 @@ By default `websurfx` comes with 9 colorschemes to choose from which can be easi
|
|
8 |
|
9 |
Creating coloschemes is as easy as it gets it requires the user to have a theme file name with the colorscheme in which every space should be replaced with a `-` (dash) and it should end with a `.css` file extension. After creating the file you need to add the following code with the `colors` you want:
|
10 |
|
11 |
-
```
|
12 |
-
:root{
|
13 |
-
--
|
14 |
-
--
|
15 |
-
--
|
16 |
-
--
|
17 |
-
--
|
18 |
-
--
|
19 |
-
--
|
20 |
-
--
|
21 |
-
--
|
22 |
}
|
23 |
```
|
24 |
|
@@ -27,17 +27,17 @@ Creating coloschemes is as easy as it gets it requires the user to have a theme
|
|
27 |
|
28 |
**Example of `catppuccin-mocha` colorscheme:**
|
29 |
|
30 |
-
```
|
31 |
:root {
|
32 |
-
--
|
33 |
-
--
|
34 |
-
--
|
35 |
-
--
|
36 |
-
--
|
37 |
-
--
|
38 |
-
--
|
39 |
-
--
|
40 |
-
--
|
41 |
}
|
42 |
```
|
43 |
|
@@ -47,14 +47,15 @@ Creating coloschemes is as easy as it gets it requires the user to have a theme
|
|
47 |
|
48 |
By default `websurfx` comes with 1 theme to choose from which can be easily chosen using the config file. To how to change themes please view the [Configuration](https://github.com/neon-mmd/websurfx/wiki/configuration) section of the wiki.
|
49 |
|
50 |
-
## Custom
|
51 |
|
52 |
-
To write custom color scheme, it requires the user to have some knowledge of `css stylesheets`.
|
53 |
|
54 |
**Here is an example of `simple theme` (which we provide by default with the app) which will give the user a better idea on how to create a custom theme using it as a template:**
|
55 |
|
56 |
### General
|
57 |
-
|
|
|
58 |
* {
|
59 |
padding: 0;
|
60 |
margin: 0;
|
@@ -71,11 +72,13 @@ body {
|
|
71 |
justify-content: space-between;
|
72 |
align-items: center;
|
73 |
height: 100vh;
|
74 |
-
background: var(--
|
75 |
}
|
76 |
```
|
|
|
77 |
### Styles for the index page
|
78 |
-
|
|
|
79 |
.search-container {
|
80 |
display: flex;
|
81 |
flex-direction: column;
|
@@ -88,8 +91,10 @@ body {
|
|
88 |
display: flex;
|
89 |
}
|
90 |
```
|
|
|
91 |
### Styles for the search box and search button
|
92 |
-
|
|
|
93 |
.search_bar {
|
94 |
display: flex;
|
95 |
}
|
@@ -101,7 +106,7 @@ body {
|
|
101 |
outline: none;
|
102 |
border: none;
|
103 |
box-shadow: rgba(0, 0, 0, 1);
|
104 |
-
background: var(--
|
105 |
}
|
106 |
|
107 |
.search_bar button {
|
@@ -114,8 +119,8 @@ body {
|
|
114 |
outline: none;
|
115 |
border: none;
|
116 |
gap: 0;
|
117 |
-
background: var(--
|
118 |
-
color: var(--
|
119 |
font-weight: 600;
|
120 |
letter-spacing: 0.1rem;
|
121 |
}
|
@@ -124,11 +129,133 @@ body {
|
|
124 |
.search_bar button:hover {
|
125 |
filter: brightness(1.2);
|
126 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
### Styles for the footer and header
|
129 |
-
|
|
|
130 |
header {
|
131 |
-
background: var(--
|
132 |
width: 100%;
|
133 |
display: flex;
|
134 |
justify-content: right;
|
@@ -151,7 +278,7 @@ footer ul li a,
|
|
151 |
header ul li a:visited,
|
152 |
footer ul li a:visited {
|
153 |
text-decoration: none;
|
154 |
-
color: var(--
|
155 |
text-transform: capitalize;
|
156 |
letter-spacing: 0.1rem;
|
157 |
}
|
@@ -162,7 +289,27 @@ header ul li a {
|
|
162 |
|
163 |
header ul li a:hover,
|
164 |
footer ul li a:hover {
|
165 |
-
color: var(--
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
}
|
167 |
|
168 |
footer div span {
|
@@ -185,8 +332,10 @@ footer {
|
|
185 |
align-items: center;
|
186 |
}
|
187 |
```
|
|
|
188 |
### Styles for the search page
|
189 |
-
|
|
|
190 |
.results {
|
191 |
width: 90%;
|
192 |
display: flex;
|
@@ -213,28 +362,28 @@ footer {
|
|
213 |
|
214 |
.results_aggregated .result h1 a {
|
215 |
font-size: 1.5rem;
|
216 |
-
color: var(--
|
217 |
text-decoration: none;
|
218 |
letter-spacing: 0.1rem;
|
219 |
}
|
220 |
|
221 |
.results_aggregated .result h1 a:hover {
|
222 |
-
color: var(--
|
223 |
}
|
224 |
|
225 |
.results_aggregated .result h1 a:visited {
|
226 |
-
color: var(--
|
227 |
}
|
228 |
|
229 |
.results_aggregated .result small {
|
230 |
-
color: var(--
|
231 |
font-size: 1.1rem;
|
232 |
word-wrap: break-word;
|
233 |
line-break: anywhere;
|
234 |
}
|
235 |
|
236 |
.results_aggregated .result p {
|
237 |
-
color: var(--
|
238 |
font-size: 1.2rem;
|
239 |
margin-top: 0.3rem;
|
240 |
word-wrap: break-word;
|
@@ -245,13 +394,13 @@ footer {
|
|
245 |
text-align: right;
|
246 |
font-size: 1.2rem;
|
247 |
padding: 1rem;
|
248 |
-
color: var(--
|
249 |
}
|
250 |
```
|
251 |
|
252 |
-
### Styles for the 404 page
|
253 |
|
254 |
-
```
|
255 |
.error_container {
|
256 |
display: flex;
|
257 |
justify-content: center;
|
@@ -290,16 +439,18 @@ footer {
|
|
290 |
|
291 |
.error_content p a,
|
292 |
.error_content p a:visited {
|
293 |
-
color: var(--
|
294 |
text-decoration: none;
|
295 |
}
|
296 |
|
297 |
.error_content p a:hover {
|
298 |
-
color: var(--
|
299 |
}
|
300 |
```
|
|
|
301 |
### Styles for the previous and next button on the search page
|
302 |
-
|
|
|
303 |
.page_navigation {
|
304 |
padding: 0 0 2rem 0;
|
305 |
display: flex;
|
@@ -308,8 +459,8 @@ footer {
|
|
308 |
}
|
309 |
|
310 |
.page_navigation button {
|
311 |
-
background: var(--
|
312 |
-
color: var(--
|
313 |
padding: 1rem;
|
314 |
border-radius: 0.5rem;
|
315 |
outline: none;
|
@@ -326,40 +477,258 @@ footer {
|
|
326 |
This part is only available right now in the **rolling/edge/unstable** version
|
327 |
|
328 |
```css
|
329 |
-
.about-container article{
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
|
335 |
-
.about-container article h1{
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
|
340 |
-
.about-container article div{
|
341 |
-
|
342 |
-
|
343 |
|
344 |
-
.about-container a{
|
345 |
-
color:var(--
|
346 |
}
|
347 |
|
348 |
-
.about-container article h2{
|
349 |
-
color: var(--
|
350 |
font-size: 1.8rem;
|
351 |
padding-bottom: 10px;
|
352 |
}
|
353 |
|
354 |
-
.about-container p{
|
355 |
-
color:var(--
|
356 |
-
font-size:
|
357 |
padding-bottom: 10px;
|
358 |
}
|
359 |
|
360 |
-
.about-container h3{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
361 |
font-size: 1.5rem;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
362 |
}
|
363 |
```
|
364 |
|
365 |
-
[⬅️
|
|
|
8 |
|
9 |
Creating coloschemes is as easy as it gets it requires the user to have a theme file name with the colorscheme in which every space should be replaced with a `-` (dash) and it should end with a `.css` file extension. After creating the file you need to add the following code with the `colors` you want:
|
10 |
|
11 |
+
```css
|
12 |
+
:root {
|
13 |
+
--background-color: <background color>;
|
14 |
+
--foreground-color: <foreground color (text color on the website) >;
|
15 |
+
--color-one: <color 1>;
|
16 |
+
--color-two: <color 2>;
|
17 |
+
--color-three: <color 3>;
|
18 |
+
--color-four: <color 4>;
|
19 |
+
--color-five: <color 5>;
|
20 |
+
--color-six: <color 6>;
|
21 |
+
--color-seven: <color 7>;
|
22 |
}
|
23 |
```
|
24 |
|
|
|
27 |
|
28 |
**Example of `catppuccin-mocha` colorscheme:**
|
29 |
|
30 |
+
```css
|
31 |
:root {
|
32 |
+
--background-color: #1e1e2e;
|
33 |
+
--foreground-color: #cdd6f4;
|
34 |
+
--color-one: #45475a;
|
35 |
+
--color-two: #f38ba8;
|
36 |
+
--color-three: #a6e3a1;
|
37 |
+
--color-four: #f9e2af;
|
38 |
+
--color-five: #89b4fa;
|
39 |
+
--color-six: #f5c2e7;
|
40 |
+
--color-seven: #ffffff;
|
41 |
}
|
42 |
```
|
43 |
|
|
|
47 |
|
48 |
By default `websurfx` comes with 1 theme to choose from which can be easily chosen using the config file. To how to change themes please view the [Configuration](https://github.com/neon-mmd/websurfx/wiki/configuration) section of the wiki.
|
49 |
|
50 |
+
## Custom
|
51 |
|
52 |
+
To write custom color scheme, it requires the user to have some knowledge of `css stylesheets`.
|
53 |
|
54 |
**Here is an example of `simple theme` (which we provide by default with the app) which will give the user a better idea on how to create a custom theme using it as a template:**
|
55 |
|
56 |
### General
|
57 |
+
|
58 |
+
```css
|
59 |
* {
|
60 |
padding: 0;
|
61 |
margin: 0;
|
|
|
72 |
justify-content: space-between;
|
73 |
align-items: center;
|
74 |
height: 100vh;
|
75 |
+
background: var(--color-one);
|
76 |
}
|
77 |
```
|
78 |
+
|
79 |
### Styles for the index page
|
80 |
+
|
81 |
+
```css
|
82 |
.search-container {
|
83 |
display: flex;
|
84 |
flex-direction: column;
|
|
|
91 |
display: flex;
|
92 |
}
|
93 |
```
|
94 |
+
|
95 |
### Styles for the search box and search button
|
96 |
+
|
97 |
+
```css
|
98 |
.search_bar {
|
99 |
display: flex;
|
100 |
}
|
|
|
106 |
outline: none;
|
107 |
border: none;
|
108 |
box-shadow: rgba(0, 0, 0, 1);
|
109 |
+
background: var(--foreground-color);
|
110 |
}
|
111 |
|
112 |
.search_bar button {
|
|
|
119 |
outline: none;
|
120 |
border: none;
|
121 |
gap: 0;
|
122 |
+
background: var(--background-color);
|
123 |
+
color: var(--color-three);
|
124 |
font-weight: 600;
|
125 |
letter-spacing: 0.1rem;
|
126 |
}
|
|
|
129 |
.search_bar button:hover {
|
130 |
filter: brightness(1.2);
|
131 |
}
|
132 |
+
|
133 |
+
.search_area .search_options {
|
134 |
+
display: flex;
|
135 |
+
justify-content: space-between;
|
136 |
+
align-items: center;
|
137 |
+
}
|
138 |
+
|
139 |
+
.search_area .search_options select {
|
140 |
+
margin: 0.7rem 0;
|
141 |
+
width: 20rem;
|
142 |
+
background-color: var(--color-one);
|
143 |
+
color: var(--foreground-color);
|
144 |
+
padding: 1rem 2rem;
|
145 |
+
border-radius: 0.5rem;
|
146 |
+
outline: none;
|
147 |
+
border: none;
|
148 |
+
text-transform: capitalize;
|
149 |
+
}
|
150 |
+
|
151 |
+
.search_area .search_options option:hover {
|
152 |
+
background-color: var(--color-one);
|
153 |
+
}
|
154 |
+
|
155 |
+
.result_not_found {
|
156 |
+
display: flex;
|
157 |
+
flex-direction: column;
|
158 |
+
font-size: 1.5rem;
|
159 |
+
color: var(--foreground-color);
|
160 |
+
}
|
161 |
+
|
162 |
+
.result_not_found p {
|
163 |
+
margin: 1rem 0;
|
164 |
+
}
|
165 |
+
|
166 |
+
.result_not_found ul {
|
167 |
+
margin: 1rem 0;
|
168 |
+
}
|
169 |
+
|
170 |
+
.result_not_found img {
|
171 |
+
width: 40rem;
|
172 |
+
}
|
173 |
```
|
174 |
+
|
175 |
+
```css
|
176 |
+
/* styles for the error box */
|
177 |
+
.error_box .error_box_toggle_button {
|
178 |
+
background: var(--foreground-color);
|
179 |
+
}
|
180 |
+
|
181 |
+
.error_box .dropdown_error_box {
|
182 |
+
position: absolute;
|
183 |
+
display: none;
|
184 |
+
flex-direction: column;
|
185 |
+
background: var(--background-color);
|
186 |
+
border-radius: 0;
|
187 |
+
margin-left: 2rem;
|
188 |
+
min-height: 20rem;
|
189 |
+
min-width: 22rem;
|
190 |
+
}
|
191 |
+
.error_box .dropdown_error_box.show {
|
192 |
+
display: flex;
|
193 |
+
}
|
194 |
+
.error_box .dropdown_error_box .error_item,
|
195 |
+
.error_box .dropdown_error_box .no_errors {
|
196 |
+
display: flex;
|
197 |
+
align-items: center;
|
198 |
+
color: var(--foreground-color);
|
199 |
+
letter-spacing: 0.1rem;
|
200 |
+
padding: 1rem;
|
201 |
+
font-size: 1.2rem;
|
202 |
+
}
|
203 |
+
.error_box .dropdown_error_box .error_item {
|
204 |
+
justify-content: space-between;
|
205 |
+
}
|
206 |
+
.error_box .dropdown_error_box .no_errors {
|
207 |
+
min-height: 18rem;
|
208 |
+
justify-content: center;
|
209 |
+
}
|
210 |
+
|
211 |
+
.error_box .dropdown_error_box .error_item:hover {
|
212 |
+
box-shadow: inset 0 0 100px 100px rgba(255, 255, 255, 0.1);
|
213 |
+
}
|
214 |
+
|
215 |
+
.error_box .error_item .severity_color {
|
216 |
+
width: 1.2rem;
|
217 |
+
height: 1.2rem;
|
218 |
+
}
|
219 |
+
.results .result_disallowed,
|
220 |
+
.results .result_filtered,
|
221 |
+
.results .result_engine_not_selected {
|
222 |
+
display: flex;
|
223 |
+
justify-content: center;
|
224 |
+
align-items: center;
|
225 |
+
gap: 10rem;
|
226 |
+
font-size: 2rem;
|
227 |
+
color: var(--foreground-color);
|
228 |
+
margin: 0rem 7rem;
|
229 |
+
}
|
230 |
+
|
231 |
+
.results .result_disallowed .user_query,
|
232 |
+
.results .result_filtered .user_query,
|
233 |
+
.results .result_engine_not_selected .user_query {
|
234 |
+
color: var(--background-color);
|
235 |
+
font-weight: 300;
|
236 |
+
}
|
237 |
+
|
238 |
+
.results .result_disallowed img,
|
239 |
+
.results .result_filtered img,
|
240 |
+
.results .result_engine_not_selected img {
|
241 |
+
width: 30rem;
|
242 |
+
}
|
243 |
+
|
244 |
+
.results .result_disallowed div,
|
245 |
+
.results .result_filtered div,
|
246 |
+
.results .result_engine_not_selected div {
|
247 |
+
display: flex;
|
248 |
+
flex-direction: column;
|
249 |
+
gap: 1rem;
|
250 |
+
line-break: strict;
|
251 |
+
}
|
252 |
+
```
|
253 |
+
|
254 |
### Styles for the footer and header
|
255 |
+
|
256 |
+
```css
|
257 |
header {
|
258 |
+
background: var(--background-color);
|
259 |
width: 100%;
|
260 |
display: flex;
|
261 |
justify-content: right;
|
|
|
278 |
header ul li a:visited,
|
279 |
footer ul li a:visited {
|
280 |
text-decoration: none;
|
281 |
+
color: var(--color-two);
|
282 |
text-transform: capitalize;
|
283 |
letter-spacing: 0.1rem;
|
284 |
}
|
|
|
289 |
|
290 |
header ul li a:hover,
|
291 |
footer ul li a:hover {
|
292 |
+
color: var(--color-five);
|
293 |
+
}
|
294 |
+
|
295 |
+
footer div span {
|
296 |
+
font-size: 1.5rem;
|
297 |
+
color: var(--color-four);
|
298 |
+
}
|
299 |
+
|
300 |
+
footer div {
|
301 |
+
display: flex;
|
302 |
+
gap: 1rem;
|
303 |
+
}
|
304 |
+
|
305 |
+
footer {
|
306 |
+
background: var(--background-color);
|
307 |
+
width: 100%;
|
308 |
+
padding: 1rem;
|
309 |
+
display: flex;
|
310 |
+
flex-direction: column;
|
311 |
+
justify-content: center;
|
312 |
+
align-items: center;
|
313 |
}
|
314 |
|
315 |
footer div span {
|
|
|
332 |
align-items: center;
|
333 |
}
|
334 |
```
|
335 |
+
|
336 |
### Styles for the search page
|
337 |
+
|
338 |
+
```css
|
339 |
.results {
|
340 |
width: 90%;
|
341 |
display: flex;
|
|
|
362 |
|
363 |
.results_aggregated .result h1 a {
|
364 |
font-size: 1.5rem;
|
365 |
+
color: var(--color-two);
|
366 |
text-decoration: none;
|
367 |
letter-spacing: 0.1rem;
|
368 |
}
|
369 |
|
370 |
.results_aggregated .result h1 a:hover {
|
371 |
+
color: var(--color-five);
|
372 |
}
|
373 |
|
374 |
.results_aggregated .result h1 a:visited {
|
375 |
+
color: var(--background-color);
|
376 |
}
|
377 |
|
378 |
.results_aggregated .result small {
|
379 |
+
color: var(--color-three);
|
380 |
font-size: 1.1rem;
|
381 |
word-wrap: break-word;
|
382 |
line-break: anywhere;
|
383 |
}
|
384 |
|
385 |
.results_aggregated .result p {
|
386 |
+
color: var(--foreground-color);
|
387 |
font-size: 1.2rem;
|
388 |
margin-top: 0.3rem;
|
389 |
word-wrap: break-word;
|
|
|
394 |
text-align: right;
|
395 |
font-size: 1.2rem;
|
396 |
padding: 1rem;
|
397 |
+
color: var(--color-five);
|
398 |
}
|
399 |
```
|
400 |
|
401 |
+
### Styles for the 404 page
|
402 |
|
403 |
+
```css
|
404 |
.error_container {
|
405 |
display: flex;
|
406 |
justify-content: center;
|
|
|
439 |
|
440 |
.error_content p a,
|
441 |
.error_content p a:visited {
|
442 |
+
color: var(--color-two);
|
443 |
text-decoration: none;
|
444 |
}
|
445 |
|
446 |
.error_content p a:hover {
|
447 |
+
color: var(--color-five);
|
448 |
}
|
449 |
```
|
450 |
+
|
451 |
### Styles for the previous and next button on the search page
|
452 |
+
|
453 |
+
```css
|
454 |
.page_navigation {
|
455 |
padding: 0 0 2rem 0;
|
456 |
display: flex;
|
|
|
459 |
}
|
460 |
|
461 |
.page_navigation button {
|
462 |
+
background: var(--background-color);
|
463 |
+
color: var(--foreground-color);
|
464 |
padding: 1rem;
|
465 |
border-radius: 0.5rem;
|
466 |
outline: none;
|
|
|
477 |
This part is only available right now in the **rolling/edge/unstable** version
|
478 |
|
479 |
```css
|
480 |
+
.about-container article {
|
481 |
+
font-size: 1.5rem;
|
482 |
+
color: var(--foreground-color);
|
483 |
+
padding-bottom: 10px;
|
484 |
+
}
|
485 |
|
486 |
+
.about-container article h1 {
|
487 |
+
color: var(--color-two);
|
488 |
+
font-size: 2.8rem;
|
489 |
+
}
|
490 |
|
491 |
+
.about-container article div {
|
492 |
+
padding-bottom: 15px;
|
493 |
+
}
|
494 |
|
495 |
+
.about-container a {
|
496 |
+
color: var(--color-three);
|
497 |
}
|
498 |
|
499 |
+
.about-container article h2 {
|
500 |
+
color: var(--color-three);
|
501 |
font-size: 1.8rem;
|
502 |
padding-bottom: 10px;
|
503 |
}
|
504 |
|
505 |
+
.about-container p {
|
506 |
+
color: var(--foreground-color);
|
507 |
+
font-size: 1.6rem;
|
508 |
padding-bottom: 10px;
|
509 |
}
|
510 |
|
511 |
+
.about-container h3 {
|
512 |
+
font-size: 1.5rem;
|
513 |
+
}
|
514 |
+
|
515 |
+
.about-container {
|
516 |
+
width: 80%;
|
517 |
+
}
|
518 |
+
```
|
519 |
+
|
520 |
+
### Styles for the Settings Page
|
521 |
+
|
522 |
+
This part is only available right now in the **rolling/edge/unstable** version
|
523 |
+
|
524 |
+
```css
|
525 |
+
.settings_container {
|
526 |
+
display: flex;
|
527 |
+
justify-content: space-around;
|
528 |
+
width: 80dvw;
|
529 |
+
}
|
530 |
+
|
531 |
+
.settings h1 {
|
532 |
+
color: var(--color-two);
|
533 |
+
font-size: 2.5rem;
|
534 |
+
}
|
535 |
+
|
536 |
+
.settings hr {
|
537 |
+
border-color: var(--color-three);
|
538 |
+
margin: 0.3rem 0 1rem 0;
|
539 |
+
}
|
540 |
+
|
541 |
+
.settings_container .sidebar {
|
542 |
+
width: 30%;
|
543 |
+
cursor: pointer;
|
544 |
+
font-size: 2rem;
|
545 |
+
display: flex;
|
546 |
+
flex-direction: column;
|
547 |
+
margin-right: 0.5rem;
|
548 |
+
margin-left: -0.7rem;
|
549 |
+
padding: 0.7rem;
|
550 |
+
border-radius: 5px;
|
551 |
+
font-weight: bold;
|
552 |
+
margin-bottom: 0.5rem;
|
553 |
+
color: var(--foreground-color);
|
554 |
+
text-transform: capitalize;
|
555 |
+
gap: 1.5rem;
|
556 |
+
}
|
557 |
+
|
558 |
+
.settings_container .sidebar .btn {
|
559 |
+
padding: 0.5rem;
|
560 |
+
border-radius: 0.5rem;
|
561 |
+
}
|
562 |
+
|
563 |
+
.settings_container .sidebar .btn.active {
|
564 |
+
background-color: var(--color-two);
|
565 |
+
}
|
566 |
+
|
567 |
+
.settings_container .main_container {
|
568 |
+
width: 70%;
|
569 |
+
border-left: 1.5px solid var(--color-three);
|
570 |
+
padding-left: 3rem;
|
571 |
+
}
|
572 |
+
|
573 |
+
.settings_container .tab {
|
574 |
+
display: none;
|
575 |
+
}
|
576 |
+
|
577 |
+
.settings_container .tab.active {
|
578 |
+
display: flex;
|
579 |
+
flex-direction: column;
|
580 |
+
justify-content: space-around;
|
581 |
+
}
|
582 |
+
|
583 |
+
.settings_container button {
|
584 |
+
margin-top: 1rem;
|
585 |
+
padding: 1rem 2rem;
|
586 |
+
font-size: 1.5rem;
|
587 |
+
background: var(--color-three);
|
588 |
+
color: var(--background-color);
|
589 |
+
border-radius: 0.5rem;
|
590 |
+
border: 2px solid transparent;
|
591 |
+
font-weight: bold;
|
592 |
+
transition: all 0.1s ease-out;
|
593 |
+
cursor: pointer;
|
594 |
+
box-shadow: 5px 5px;
|
595 |
+
outline: none;
|
596 |
+
}
|
597 |
+
|
598 |
+
.settings_container button:active {
|
599 |
+
box-shadow: none;
|
600 |
+
translate: 5px 5px;
|
601 |
+
}
|
602 |
+
|
603 |
+
.settings_container .main_container .message {
|
604 |
+
font-size: 1.5rem;
|
605 |
+
color: var(--foreground-color);
|
606 |
+
}
|
607 |
+
|
608 |
+
.settings_container .tab h3 {
|
609 |
+
font-size: 2rem;
|
610 |
+
font-weight: bold;
|
611 |
+
color: var(--color-four);
|
612 |
+
margin-top: 1.5rem;
|
613 |
+
text-transform: capitalize;
|
614 |
+
}
|
615 |
+
|
616 |
+
.settings_container .tab .description {
|
617 |
font-size: 1.5rem;
|
618 |
+
margin-bottom: 0.5rem;
|
619 |
+
color: var(--foreground-color);
|
620 |
+
}
|
621 |
+
|
622 |
+
.settings_container .user_interface select,
|
623 |
+
.settings_container .general select {
|
624 |
+
margin: 0.7rem 0;
|
625 |
+
width: 20rem;
|
626 |
+
background-color: var(--background-color);
|
627 |
+
color: var(--foreground-color);
|
628 |
+
padding: 1rem 2rem;
|
629 |
+
border-radius: 0.5rem;
|
630 |
+
outline: none;
|
631 |
+
border: none;
|
632 |
+
text-transform: capitalize;
|
633 |
+
}
|
634 |
+
|
635 |
+
.settings_container .user_interface option:hover,
|
636 |
+
.settings_container .general option:hover {
|
637 |
+
background-color: var(--color-one);
|
638 |
+
}
|
639 |
+
|
640 |
+
.settings_container .engines .engine_selection {
|
641 |
+
display: flex;
|
642 |
+
flex-direction: column;
|
643 |
+
justify-content: center;
|
644 |
+
gap: 1rem;
|
645 |
+
padding: 1rem 0;
|
646 |
+
}
|
647 |
+
|
648 |
+
.settings_container .engines .toggle_btn {
|
649 |
+
color: var(--foreground-color);
|
650 |
+
font-size: 1.5rem;
|
651 |
+
display: flex;
|
652 |
+
gap: 0.5rem;
|
653 |
+
align-items: center;
|
654 |
+
}
|
655 |
+
|
656 |
+
.settings_container .engines hr {
|
657 |
+
margin: 0;
|
658 |
+
}
|
659 |
+
|
660 |
+
.settings_container .cookies input {
|
661 |
+
margin: 1rem 0rem;
|
662 |
+
}
|
663 |
+
```
|
664 |
+
|
665 |
+
### Styles for the Toggle Button
|
666 |
+
|
667 |
+
This part is only available right now in the **rolling/edge/unstable** version
|
668 |
+
|
669 |
+
```css
|
670 |
+
/* The switch - the box around the slider */
|
671 |
+
.switch {
|
672 |
+
position: relative;
|
673 |
+
display: inline-block;
|
674 |
+
width: 6rem;
|
675 |
+
height: 3.4rem;
|
676 |
+
}
|
677 |
+
|
678 |
+
/* Hide default HTML checkbox */
|
679 |
+
.switch input {
|
680 |
+
opacity: 0;
|
681 |
+
width: 0;
|
682 |
+
height: 0;
|
683 |
+
}
|
684 |
+
|
685 |
+
/* The slider */
|
686 |
+
.slider {
|
687 |
+
position: absolute;
|
688 |
+
cursor: pointer;
|
689 |
+
top: 0;
|
690 |
+
left: 0;
|
691 |
+
right: 0;
|
692 |
+
bottom: 0;
|
693 |
+
background-color: var(--background-color);
|
694 |
+
-webkit-transition: 0.4s;
|
695 |
+
transition: 0.4s;
|
696 |
+
}
|
697 |
+
|
698 |
+
.slider:before {
|
699 |
+
position: absolute;
|
700 |
+
content: '';
|
701 |
+
height: 2.6rem;
|
702 |
+
width: 2.6rem;
|
703 |
+
left: 0.4rem;
|
704 |
+
bottom: 0.4rem;
|
705 |
+
background-color: var(--foreground-color);
|
706 |
+
-webkit-transition: 0.4s;
|
707 |
+
transition: 0.4s;
|
708 |
+
}
|
709 |
+
|
710 |
+
input:checked + .slider {
|
711 |
+
background-color: var(--color-three);
|
712 |
+
}
|
713 |
+
|
714 |
+
input:focus + .slider {
|
715 |
+
box-shadow: 0 0 1px var(--color-three);
|
716 |
+
}
|
717 |
+
|
718 |
+
input:checked + .slider:before {
|
719 |
+
-webkit-transform: translateX(2.6rem);
|
720 |
+
-ms-transform: translateX(2.6rem);
|
721 |
+
transform: translateX(2.6rem);
|
722 |
+
}
|
723 |
+
|
724 |
+
/* Rounded sliders */
|
725 |
+
.slider.round {
|
726 |
+
border-radius: 3.4rem;
|
727 |
+
}
|
728 |
+
|
729 |
+
.slider.round:before {
|
730 |
+
border-radius: 50%;
|
731 |
}
|
732 |
```
|
733 |
|
734 |
+
[⬅️ Go back to Home](./README.md)
|
flake.lock
ADDED
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"nodes": {
|
3 |
+
"naersk": {
|
4 |
+
"inputs": {
|
5 |
+
"nixpkgs": "nixpkgs"
|
6 |
+
},
|
7 |
+
"locked": {
|
8 |
+
"lastModified": 1694081375,
|
9 |
+
"narHash": "sha256-vzJXOUnmkMCm3xw8yfPP5m8kypQ3BhAIRe4RRCWpzy8=",
|
10 |
+
"owner": "nix-community",
|
11 |
+
"repo": "naersk",
|
12 |
+
"rev": "3f976d822b7b37fc6fb8e6f157c2dd05e7e94e89",
|
13 |
+
"type": "github"
|
14 |
+
},
|
15 |
+
"original": {
|
16 |
+
"owner": "nix-community",
|
17 |
+
"ref": "master",
|
18 |
+
"repo": "naersk",
|
19 |
+
"type": "github"
|
20 |
+
}
|
21 |
+
},
|
22 |
+
"nixpkgs": {
|
23 |
+
"locked": {
|
24 |
+
"lastModified": 1695318763,
|
25 |
+
"narHash": "sha256-FHVPDRP2AfvsxAdc+AsgFJevMz5VBmnZglFUMlxBkcY=",
|
26 |
+
"path": "/nix/store/p7iz0r8gs6ppkhj83zjmwyd21k8b7v3y-source",
|
27 |
+
"rev": "e12483116b3b51a185a33a272bf351e357ba9a99",
|
28 |
+
"type": "path"
|
29 |
+
},
|
30 |
+
"original": {
|
31 |
+
"id": "nixpkgs",
|
32 |
+
"type": "indirect"
|
33 |
+
}
|
34 |
+
},
|
35 |
+
"nixpkgs_2": {
|
36 |
+
"locked": {
|
37 |
+
"lastModified": 1695318763,
|
38 |
+
"narHash": "sha256-FHVPDRP2AfvsxAdc+AsgFJevMz5VBmnZglFUMlxBkcY=",
|
39 |
+
"owner": "NixOS",
|
40 |
+
"repo": "nixpkgs",
|
41 |
+
"rev": "e12483116b3b51a185a33a272bf351e357ba9a99",
|
42 |
+
"type": "github"
|
43 |
+
},
|
44 |
+
"original": {
|
45 |
+
"owner": "NixOS",
|
46 |
+
"ref": "nixpkgs-unstable",
|
47 |
+
"repo": "nixpkgs",
|
48 |
+
"type": "github"
|
49 |
+
}
|
50 |
+
},
|
51 |
+
"root": {
|
52 |
+
"inputs": {
|
53 |
+
"naersk": "naersk",
|
54 |
+
"nixpkgs": "nixpkgs_2",
|
55 |
+
"utils": "utils"
|
56 |
+
}
|
57 |
+
},
|
58 |
+
"systems": {
|
59 |
+
"locked": {
|
60 |
+
"lastModified": 1681028828,
|
61 |
+
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
62 |
+
"owner": "nix-systems",
|
63 |
+
"repo": "default",
|
64 |
+
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
65 |
+
"type": "github"
|
66 |
+
},
|
67 |
+
"original": {
|
68 |
+
"owner": "nix-systems",
|
69 |
+
"repo": "default",
|
70 |
+
"type": "github"
|
71 |
+
}
|
72 |
+
},
|
73 |
+
"utils": {
|
74 |
+
"inputs": {
|
75 |
+
"systems": "systems"
|
76 |
+
},
|
77 |
+
"locked": {
|
78 |
+
"lastModified": 1694529238,
|
79 |
+
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
80 |
+
"owner": "numtide",
|
81 |
+
"repo": "flake-utils",
|
82 |
+
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
83 |
+
"type": "github"
|
84 |
+
},
|
85 |
+
"original": {
|
86 |
+
"owner": "numtide",
|
87 |
+
"repo": "flake-utils",
|
88 |
+
"type": "github"
|
89 |
+
}
|
90 |
+
}
|
91 |
+
},
|
92 |
+
"root": "root",
|
93 |
+
"version": 7
|
94 |
+
}
|
flake.nix
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
# Websurfx NixOS flake
|
3 |
+
inputs = {
|
4 |
+
naersk.url = "github:nix-community/naersk/master";
|
5 |
+
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
6 |
+
utils.url = "github:numtide/flake-utils";
|
7 |
+
};
|
8 |
+
|
9 |
+
outputs = {
|
10 |
+
naersk,
|
11 |
+
nixpkgs,
|
12 |
+
self,
|
13 |
+
utils,
|
14 |
+
}:
|
15 |
+
# We do this for all systems - namely x86_64-linux, aarch64-linux,
|
16 |
+
# x86_64-darwin and aarch64-darwin
|
17 |
+
utils.lib.eachDefaultSystem (system: let
|
18 |
+
pkgs = import nixpkgs {inherit system;};
|
19 |
+
naersk-lib = pkgs.callPackage naersk {};
|
20 |
+
in rec {
|
21 |
+
# Build via "nix build .#default"
|
22 |
+
packages.default = naersk-lib.buildPackage {
|
23 |
+
# The build dependencies
|
24 |
+
buildInputs = with pkgs; [pkg-config openssl];
|
25 |
+
src = ./.;
|
26 |
+
};
|
27 |
+
|
28 |
+
# Enter devshell with all the tools via "nix develop"
|
29 |
+
# or "nix-shell"
|
30 |
+
devShells.default = with pkgs;
|
31 |
+
mkShell {
|
32 |
+
buildInputs = [
|
33 |
+
actionlint
|
34 |
+
cargo
|
35 |
+
haskellPackages.hadolint
|
36 |
+
nodePackages_latest.cspell
|
37 |
+
nodePackages_latest.eslint
|
38 |
+
nodePackages_latest.markdownlint-cli2
|
39 |
+
nodePackages_latest.stylelint
|
40 |
+
redis
|
41 |
+
rustPackages.clippy
|
42 |
+
rustc
|
43 |
+
yamllint
|
44 |
+
];
|
45 |
+
RUST_SRC_PATH = rustPlatform.rustLibSrc;
|
46 |
+
};
|
47 |
+
|
48 |
+
# Build via "nix build .#websurfx", which is basically just
|
49 |
+
# calls the build function
|
50 |
+
packages.websurfx = packages.default;
|
51 |
+
});
|
52 |
+
}
|
images/create_fork_button.png
DELETED
Binary file (65 kB)
|
|
images/fork_button.png
DELETED
Binary file (44.6 kB)
|
|
images/fork_options_page.png
DELETED
Binary file (64.8 kB)
|
|
public/images/barricade.png
ADDED
![]() |
public/images/filter.png
ADDED
![]() |
public/images/info.svg
ADDED
|
public/images/no_results.gif
ADDED
![]() |