├── .gitattributes ├── .github └── workflows │ ├── deploy.yml │ └── validate.yml ├── .gitignore ├── README.md ├── docs ├── config.toml ├── content │ ├── _index.md │ └── lenses │ │ └── _index.md ├── package-lock.json ├── package.json ├── static │ ├── CNAME │ ├── css │ │ └── styles.css │ ├── images │ │ ├── favicon.png │ │ ├── favicon.svg │ │ ├── logo.png │ │ ├── logo@2x.png │ │ └── screenshot.png │ └── js │ │ └── search.js ├── styles-src │ └── styles.css ├── tailwind.config.js └── templates │ ├── base.html │ ├── index.html │ ├── macros.html │ ├── page.html │ ├── taxonomy_list.html │ └── taxonomy_single.html ├── index.ron ├── lenses ├── 2007scape │ └── 2007scape.ron ├── AUR │ └── AUR.ron ├── Akka │ └── Akka.ron ├── Android │ └── Android.ron ├── Angular │ └── Angular.ron ├── AngularJS │ └── AngularJS.ron ├── Ansible │ └── Ansible.ron ├── Apache_HTTP_Server │ └── Apache_HTTP_Server.ron ├── Bootstrap_3.4 │ └── Bootstrap_3.4.ron ├── Bootstrap_4.6 │ └── Bootstrap_4.6.ron ├── Bootstrap_5.2 │ └── Bootstrap_5.2.ron ├── Bourbon_7.0.0 │ └── Bourbon_7.0.0.ron ├── Bulbapedia │ └── Bulbapedia.ron ├── CBR │ └── CBR.ron ├── CMake │ └── CMake.ron ├── CSS │ └── CSS.ron ├── EldenRing │ └── EldenRing.ron ├── GTFOBins │ └── gtfobins.ron ├── Go │ └── Go.ron ├── HTML │ └── HTML.ron ├── Java_SE11 │ └── Java_SE11.ron ├── Java_SE18 │ └── Java_SE18.ron ├── Java_SE19 │ └── Java_SE19.ron ├── LOLBAS │ └── lolbas.ron ├── NodeJs │ └── NodeJs.ron ├── OSCP │ └── oscp.ron ├── OpenCritic │ └── OpenCritic.ron ├── RogueLegacy2 │ └── RogueLegacy2.ron ├── SNAP │ └── snap.ron ├── Scryfall │ └── scryfall.ron ├── Splunk │ └── splunk.ron ├── Steam │ └── steam.ron ├── Terraria │ └── Terraria.ron ├── Unity │ └── unity.ron ├── XKCD │ └── xkcd.ron ├── dbatools │ └── dbatools.ron ├── disco_elysium │ └── disco_elysium.ron ├── dnd │ └── dnd.ron ├── factorio │ └── factorio.ron ├── gentoo │ └── gentoo.ron ├── harrypotter_wiki │ └── harrypotter_wiki.ron ├── hogwarts_legacy │ └── hogwarts_legacy.ron ├── java │ └── java.ron ├── kotlin │ └── kotlin.ron ├── laravel │ └── laravel.ron ├── luigis_mansion │ └── luigis_mansion.ron ├── mbed68 │ └── mbed68.ron ├── pf2e │ └── ArchivesOfNethys.ron ├── pygame │ └── pygame.ron ├── pytorch │ └── pytorch.ron ├── rlang │ └── rlang.ron ├── ruby_on_rails │ └── ruby_on_rails.ron ├── rustlang │ └── rustlang.ron ├── scp │ └── scp.ron ├── smg │ └── smg.ron ├── stardew │ └── stardew.ron ├── tim-ferriss │ └── tim-ferriss.ron ├── twd │ └── twd.ron ├── unreal_4 │ └── unreal_4.ron ├── unreal_5 │ └── unreal_5.ron ├── vintage_story │ └── vintage_story.ron ├── vue │ └── vue.ron ├── wikipedia │ └── wikipedia.ron ├── wow │ └── wow.ron ├── wow_items │ └── wow_items.ron ├── wow_npcs │ └── wow_npcs.ron ├── wow_quests │ └── wow_quests.ron ├── wow_spells │ └── wow_spells.ron ├── yc │ └── yc.ron └── zelda_twilight_princess │ └── zelda_twilight_princess.ron └── validator ├── Cargo.lock ├── Cargo.toml └── src ├── entity.rs ├── main.rs └── repo.rs /.gitattributes: -------------------------------------------------------------------------------- 1 | *.warc.gz filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: build & deploy lens explorer site 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | 7 | jobs: 8 | build_and_deploy: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout main 12 | uses: actions/checkout@v3.0.0 13 | # Setup rust toolchain 14 | - name: Setup rust toolchain 15 | uses: actions-rs/toolchain@v1 16 | with: 17 | profile: minimal 18 | toolchain: stable 19 | components: clippy 20 | # Should help bring down build times 21 | - uses: Swatinem/rust-cache@v1 22 | with: 23 | key: "1" # increment this to bust the cache if needed 24 | # Generate the lens explorer site 25 | - name: generate lens detail pages 26 | run: cd validator && cargo run -- generate-explorer 27 | # Build & deploy site via Zola & Github Pages 28 | - name: Build and deploy 29 | uses: shalzz/zola-deploy-action@v0.16.1-1 30 | env: 31 | BUILD_DIR: docs 32 | PAGES_BRANCH: gh-pages 33 | GITHUB_TOKEN: ${{ secrets.PAT }} 34 | -------------------------------------------------------------------------------- /.github/workflows/validate.yml: -------------------------------------------------------------------------------- 1 | name: Lens & index validation 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | env: 10 | CARGO_TERM_COLOR: always 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | defaults: 15 | run: 16 | working-directory: ./validator 17 | steps: 18 | # Checkout source code 19 | - uses: actions/checkout@v3 20 | if: github.event_name == 'pull_request' 21 | with: 22 | fetch-depth: 0 23 | ref: ${{ github.event.pull_request.head.ref }} 24 | 25 | - uses: actions/checkout@v3 26 | if: github.event_name == 'push' 27 | with: 28 | fetch-depth: 0 29 | # Setup rust toolchain 30 | - name: Setup rust toolchain 31 | uses: actions-rs/toolchain@v1 32 | with: 33 | profile: minimal 34 | toolchain: stable 35 | components: clippy 36 | # Should help bring down build times 37 | - uses: Swatinem/rust-cache@v1 38 | with: 39 | key: "1" # increment this to bust the cache if needed 40 | - name: Run validator & generate index file 41 | run: cargo run 42 | - name: Create Pull Request 43 | if: github.ref == 'refs/heads/main' 44 | id: cpr 45 | uses: peter-evans/create-pull-request@v4 46 | with: 47 | token: ${{ secrets.PAT }} 48 | commit-message: Update index file 49 | committer: GitHub 50 | author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> 51 | signoff: false 52 | delete-branch: true 53 | title: '[Automated] Update index file & lens explorer' 54 | labels: | 55 | automated pr -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | validator/target 2 | docs/node_modules 3 | docs/public 4 | docs/content/lenses -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Spyglass Lens Directory 2 | 3 | The `lens-box` repository serves as the directory for all community lenses for 4 | Spyglass. 5 | 6 | The main directory website (https://lenses.spyglass.fyi) is auto-generated from 7 | information in this repo. 8 | 9 | ![lens directory website](/docs/static/images/screenshot.png) 10 | 11 | 12 | ## Contributions 13 | 14 | Do you have a lens that you'd like to add to our directory? 15 | 16 | - Be sure to validate & verify that your lens is usable using our utility [netrunner][netrunner]. 17 | - [Create a pull request](https://github.com/spyglass-search/lens-box/pulls) with your new lens. 18 | - Or contact us on our [Discord][discord] and we'll happily add to the community directory. 19 | 20 | Forks & updates 21 | 22 | - Lens missing something? Please open an issue and we'll fix it asap! 23 | 24 | [netrunner]: https://github.com/spyglass-search/netrunner 25 | [pull-request]: https://github.com/spyglass-search/lens-box/pulls 26 | [discord]: https://discord.gg/663wPVBSTB -------------------------------------------------------------------------------- /docs/config.toml: -------------------------------------------------------------------------------- 1 | default_language = "en" 2 | title = "Spyglass Lenses" 3 | 4 | # The URL the site will be built for 5 | base_url = "https://lenses.spyglass.fyi" 6 | 7 | # Whether to automatically compile all Sass files in the sass directory 8 | compile_sass = true 9 | 10 | # Whether to build a search index to be used later on by a JavaScript library 11 | build_search_index = true 12 | 13 | taxonomies = [ 14 | { name = "author", feed = true }, 15 | { name = "categories", feed = true } 16 | ] 17 | 18 | [markdown] 19 | # Whether to do syntax highlighting 20 | # Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola 21 | highlight_code = false 22 | 23 | [extra] 24 | date_format = "%B %e, %Y" 25 | 26 | [extra.social] 27 | github = "spyglass-search" 28 | twitter = "spyglassfyi" 29 | -------------------------------------------------------------------------------- /docs/content/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "index" 3 | template = "index.html" 4 | transparent = true 5 | sort_by = "date" 6 | paginate_by = 10 7 | +++ -------------------------------------------------------------------------------- /docs/content/lenses/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | sort_by = "title" 3 | +++ -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spyglass-lenses", 3 | "version": "1.0.0", 4 | "description": "Lens explorer for spyglass", 5 | "main": "index.js", 6 | "scripts": { 7 | "build": "tailwindcss -i ./styles-src/styles.css -o ./static/css/styles.css", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "author": "", 11 | "license": "MIT", 12 | "private": true, 13 | "devDependencies": { 14 | "tailwindcss": "^3.2.4" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /docs/static/CNAME: -------------------------------------------------------------------------------- 1 | lenses.spyglass.fyi -------------------------------------------------------------------------------- /docs/static/css/styles.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@200;300;400;500;600;700&family=PT+Serif:wght@400;700&display=swap"); 2 | 3 | /* 4 | ! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com 5 | */ 6 | 7 | /* 8 | 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 9 | 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) 10 | */ 11 | 12 | *, 13 | ::before, 14 | ::after { 15 | box-sizing: border-box; 16 | /* 1 */ 17 | border-width: 0; 18 | /* 2 */ 19 | border-style: solid; 20 | /* 2 */ 21 | border-color: #e5e7eb; 22 | /* 2 */ 23 | } 24 | 25 | ::before, 26 | ::after { 27 | --tw-content: ''; 28 | } 29 | 30 | /* 31 | 1. Use a consistent sensible line-height in all browsers. 32 | 2. Prevent adjustments of font size after orientation changes in iOS. 33 | 3. Use a more readable tab size. 34 | 4. Use the user's configured `sans` font-family by default. 35 | 5. Use the user's configured `sans` font-feature-settings by default. 36 | */ 37 | 38 | html { 39 | line-height: 1.5; 40 | /* 1 */ 41 | -webkit-text-size-adjust: 100%; 42 | /* 2 */ 43 | -moz-tab-size: 4; 44 | /* 3 */ 45 | -o-tab-size: 4; 46 | tab-size: 4; 47 | /* 3 */ 48 | font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 49 | /* 4 */ 50 | font-feature-settings: normal; 51 | /* 5 */ 52 | } 53 | 54 | /* 55 | 1. Remove the margin in all browsers. 56 | 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. 57 | */ 58 | 59 | body { 60 | margin: 0; 61 | /* 1 */ 62 | line-height: inherit; 63 | /* 2 */ 64 | } 65 | 66 | /* 67 | 1. Add the correct height in Firefox. 68 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 69 | 3. Ensure horizontal rules are visible by default. 70 | */ 71 | 72 | hr { 73 | height: 0; 74 | /* 1 */ 75 | color: inherit; 76 | /* 2 */ 77 | border-top-width: 1px; 78 | /* 3 */ 79 | } 80 | 81 | /* 82 | Add the correct text decoration in Chrome, Edge, and Safari. 83 | */ 84 | 85 | abbr:where([title]) { 86 | -webkit-text-decoration: underline dotted; 87 | text-decoration: underline dotted; 88 | } 89 | 90 | /* 91 | Remove the default font size and weight for headings. 92 | */ 93 | 94 | h1, 95 | h2, 96 | h3, 97 | h4, 98 | h5, 99 | h6 { 100 | font-size: inherit; 101 | font-weight: inherit; 102 | } 103 | 104 | /* 105 | Reset links to optimize for opt-in styling instead of opt-out. 106 | */ 107 | 108 | a { 109 | color: inherit; 110 | text-decoration: inherit; 111 | } 112 | 113 | /* 114 | Add the correct font weight in Edge and Safari. 115 | */ 116 | 117 | b, 118 | strong { 119 | font-weight: bolder; 120 | } 121 | 122 | /* 123 | 1. Use the user's configured `mono` font family by default. 124 | 2. Correct the odd `em` font sizing in all browsers. 125 | */ 126 | 127 | code, 128 | kbd, 129 | samp, 130 | pre { 131 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 132 | /* 1 */ 133 | font-size: 1em; 134 | /* 2 */ 135 | } 136 | 137 | /* 138 | Add the correct font size in all browsers. 139 | */ 140 | 141 | small { 142 | font-size: 80%; 143 | } 144 | 145 | /* 146 | Prevent `sub` and `sup` elements from affecting the line height in all browsers. 147 | */ 148 | 149 | sub, 150 | sup { 151 | font-size: 75%; 152 | line-height: 0; 153 | position: relative; 154 | vertical-align: baseline; 155 | } 156 | 157 | sub { 158 | bottom: -0.25em; 159 | } 160 | 161 | sup { 162 | top: -0.5em; 163 | } 164 | 165 | /* 166 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 167 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 168 | 3. Remove gaps between table borders by default. 169 | */ 170 | 171 | table { 172 | text-indent: 0; 173 | /* 1 */ 174 | border-color: inherit; 175 | /* 2 */ 176 | border-collapse: collapse; 177 | /* 3 */ 178 | } 179 | 180 | /* 181 | 1. Change the font styles in all browsers. 182 | 2. Remove the margin in Firefox and Safari. 183 | 3. Remove default padding in all browsers. 184 | */ 185 | 186 | button, 187 | input, 188 | optgroup, 189 | select, 190 | textarea { 191 | font-family: inherit; 192 | /* 1 */ 193 | font-size: 100%; 194 | /* 1 */ 195 | font-weight: inherit; 196 | /* 1 */ 197 | line-height: inherit; 198 | /* 1 */ 199 | color: inherit; 200 | /* 1 */ 201 | margin: 0; 202 | /* 2 */ 203 | padding: 0; 204 | /* 3 */ 205 | } 206 | 207 | /* 208 | Remove the inheritance of text transform in Edge and Firefox. 209 | */ 210 | 211 | button, 212 | select { 213 | text-transform: none; 214 | } 215 | 216 | /* 217 | 1. Correct the inability to style clickable types in iOS and Safari. 218 | 2. Remove default button styles. 219 | */ 220 | 221 | button, 222 | [type='button'], 223 | [type='reset'], 224 | [type='submit'] { 225 | -webkit-appearance: button; 226 | /* 1 */ 227 | background-color: transparent; 228 | /* 2 */ 229 | background-image: none; 230 | /* 2 */ 231 | } 232 | 233 | /* 234 | Use the modern Firefox focus style for all focusable elements. 235 | */ 236 | 237 | :-moz-focusring { 238 | outline: auto; 239 | } 240 | 241 | /* 242 | Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) 243 | */ 244 | 245 | :-moz-ui-invalid { 246 | box-shadow: none; 247 | } 248 | 249 | /* 250 | Add the correct vertical alignment in Chrome and Firefox. 251 | */ 252 | 253 | progress { 254 | vertical-align: baseline; 255 | } 256 | 257 | /* 258 | Correct the cursor style of increment and decrement buttons in Safari. 259 | */ 260 | 261 | ::-webkit-inner-spin-button, 262 | ::-webkit-outer-spin-button { 263 | height: auto; 264 | } 265 | 266 | /* 267 | 1. Correct the odd appearance in Chrome and Safari. 268 | 2. Correct the outline style in Safari. 269 | */ 270 | 271 | [type='search'] { 272 | -webkit-appearance: textfield; 273 | /* 1 */ 274 | outline-offset: -2px; 275 | /* 2 */ 276 | } 277 | 278 | /* 279 | Remove the inner padding in Chrome and Safari on macOS. 280 | */ 281 | 282 | ::-webkit-search-decoration { 283 | -webkit-appearance: none; 284 | } 285 | 286 | /* 287 | 1. Correct the inability to style clickable types in iOS and Safari. 288 | 2. Change font properties to `inherit` in Safari. 289 | */ 290 | 291 | ::-webkit-file-upload-button { 292 | -webkit-appearance: button; 293 | /* 1 */ 294 | font: inherit; 295 | /* 2 */ 296 | } 297 | 298 | /* 299 | Add the correct display in Chrome and Safari. 300 | */ 301 | 302 | summary { 303 | display: list-item; 304 | } 305 | 306 | /* 307 | Removes the default spacing and border for appropriate elements. 308 | */ 309 | 310 | blockquote, 311 | dl, 312 | dd, 313 | h1, 314 | h2, 315 | h3, 316 | h4, 317 | h5, 318 | h6, 319 | hr, 320 | figure, 321 | p, 322 | pre { 323 | margin: 0; 324 | } 325 | 326 | fieldset { 327 | margin: 0; 328 | padding: 0; 329 | } 330 | 331 | legend { 332 | padding: 0; 333 | } 334 | 335 | ol, 336 | ul, 337 | menu { 338 | list-style: none; 339 | margin: 0; 340 | padding: 0; 341 | } 342 | 343 | /* 344 | Prevent resizing textareas horizontally by default. 345 | */ 346 | 347 | textarea { 348 | resize: vertical; 349 | } 350 | 351 | /* 352 | 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 353 | 2. Set the default placeholder color to the user's configured gray 400 color. 354 | */ 355 | 356 | input::-moz-placeholder, textarea::-moz-placeholder { 357 | opacity: 1; 358 | /* 1 */ 359 | color: #9ca3af; 360 | /* 2 */ 361 | } 362 | 363 | input::placeholder, 364 | textarea::placeholder { 365 | opacity: 1; 366 | /* 1 */ 367 | color: #9ca3af; 368 | /* 2 */ 369 | } 370 | 371 | /* 372 | Set the default cursor for buttons. 373 | */ 374 | 375 | button, 376 | [role="button"] { 377 | cursor: pointer; 378 | } 379 | 380 | /* 381 | Make sure disabled buttons don't get the pointer cursor. 382 | */ 383 | 384 | :disabled { 385 | cursor: default; 386 | } 387 | 388 | /* 389 | 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 390 | 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) 391 | This can trigger a poorly considered lint error in some tools but is included by design. 392 | */ 393 | 394 | img, 395 | svg, 396 | video, 397 | canvas, 398 | audio, 399 | iframe, 400 | embed, 401 | object { 402 | display: block; 403 | /* 1 */ 404 | vertical-align: middle; 405 | /* 2 */ 406 | } 407 | 408 | /* 409 | Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) 410 | */ 411 | 412 | img, 413 | video { 414 | max-width: 100%; 415 | height: auto; 416 | } 417 | 418 | /* Make elements with the HTML hidden attribute stay hidden by default */ 419 | 420 | [hidden] { 421 | display: none; 422 | } 423 | 424 | *, ::before, ::after{ 425 | --tw-border-spacing-x: 0; 426 | --tw-border-spacing-y: 0; 427 | --tw-translate-x: 0; 428 | --tw-translate-y: 0; 429 | --tw-rotate: 0; 430 | --tw-skew-x: 0; 431 | --tw-skew-y: 0; 432 | --tw-scale-x: 1; 433 | --tw-scale-y: 1; 434 | --tw-pan-x: ; 435 | --tw-pan-y: ; 436 | --tw-pinch-zoom: ; 437 | --tw-scroll-snap-strictness: proximity; 438 | --tw-ordinal: ; 439 | --tw-slashed-zero: ; 440 | --tw-numeric-figure: ; 441 | --tw-numeric-spacing: ; 442 | --tw-numeric-fraction: ; 443 | --tw-ring-inset: ; 444 | --tw-ring-offset-width: 0px; 445 | --tw-ring-offset-color: #fff; 446 | --tw-ring-color: rgb(59 130 246 / 0.5); 447 | --tw-ring-offset-shadow: 0 0 #0000; 448 | --tw-ring-shadow: 0 0 #0000; 449 | --tw-shadow: 0 0 #0000; 450 | --tw-shadow-colored: 0 0 #0000; 451 | --tw-blur: ; 452 | --tw-brightness: ; 453 | --tw-contrast: ; 454 | --tw-grayscale: ; 455 | --tw-hue-rotate: ; 456 | --tw-invert: ; 457 | --tw-saturate: ; 458 | --tw-sepia: ; 459 | --tw-drop-shadow: ; 460 | --tw-backdrop-blur: ; 461 | --tw-backdrop-brightness: ; 462 | --tw-backdrop-contrast: ; 463 | --tw-backdrop-grayscale: ; 464 | --tw-backdrop-hue-rotate: ; 465 | --tw-backdrop-invert: ; 466 | --tw-backdrop-opacity: ; 467 | --tw-backdrop-saturate: ; 468 | --tw-backdrop-sepia: ; 469 | } 470 | 471 | ::backdrop{ 472 | --tw-border-spacing-x: 0; 473 | --tw-border-spacing-y: 0; 474 | --tw-translate-x: 0; 475 | --tw-translate-y: 0; 476 | --tw-rotate: 0; 477 | --tw-skew-x: 0; 478 | --tw-skew-y: 0; 479 | --tw-scale-x: 1; 480 | --tw-scale-y: 1; 481 | --tw-pan-x: ; 482 | --tw-pan-y: ; 483 | --tw-pinch-zoom: ; 484 | --tw-scroll-snap-strictness: proximity; 485 | --tw-ordinal: ; 486 | --tw-slashed-zero: ; 487 | --tw-numeric-figure: ; 488 | --tw-numeric-spacing: ; 489 | --tw-numeric-fraction: ; 490 | --tw-ring-inset: ; 491 | --tw-ring-offset-width: 0px; 492 | --tw-ring-offset-color: #fff; 493 | --tw-ring-color: rgb(59 130 246 / 0.5); 494 | --tw-ring-offset-shadow: 0 0 #0000; 495 | --tw-ring-shadow: 0 0 #0000; 496 | --tw-shadow: 0 0 #0000; 497 | --tw-shadow-colored: 0 0 #0000; 498 | --tw-blur: ; 499 | --tw-brightness: ; 500 | --tw-contrast: ; 501 | --tw-grayscale: ; 502 | --tw-hue-rotate: ; 503 | --tw-invert: ; 504 | --tw-saturate: ; 505 | --tw-sepia: ; 506 | --tw-drop-shadow: ; 507 | --tw-backdrop-blur: ; 508 | --tw-backdrop-brightness: ; 509 | --tw-backdrop-contrast: ; 510 | --tw-backdrop-grayscale: ; 511 | --tw-backdrop-hue-rotate: ; 512 | --tw-backdrop-invert: ; 513 | --tw-backdrop-opacity: ; 514 | --tw-backdrop-saturate: ; 515 | --tw-backdrop-sepia: ; 516 | } 517 | 518 | .left-0{ 519 | left: 0px; 520 | } 521 | 522 | .top-0{ 523 | top: 0px; 524 | } 525 | 526 | .z-0{ 527 | z-index: 0; 528 | } 529 | 530 | .z-10{ 531 | z-index: 10; 532 | } 533 | 534 | .my-auto{ 535 | margin-top: auto; 536 | margin-bottom: auto; 537 | } 538 | 539 | .mx-auto{ 540 | margin-left: auto; 541 | margin-right: auto; 542 | } 543 | 544 | .ml-2{ 545 | margin-left: 0.5rem; 546 | } 547 | 548 | .mb-6{ 549 | margin-bottom: 1.5rem; 550 | } 551 | 552 | .mb-1{ 553 | margin-bottom: 0.25rem; 554 | } 555 | 556 | .mt-2{ 557 | margin-top: 0.5rem; 558 | } 559 | 560 | .mb-32{ 561 | margin-bottom: 8rem; 562 | } 563 | 564 | .mb-4{ 565 | margin-bottom: 1rem; 566 | } 567 | 568 | .mb-2{ 569 | margin-bottom: 0.5rem; 570 | } 571 | 572 | .ml-auto{ 573 | margin-left: auto; 574 | } 575 | 576 | .mt-4{ 577 | margin-top: 1rem; 578 | } 579 | 580 | .mr-1{ 581 | margin-right: 0.25rem; 582 | } 583 | 584 | .block{ 585 | display: block; 586 | } 587 | 588 | .flex{ 589 | display: flex; 590 | } 591 | 592 | .h-auto{ 593 | height: auto; 594 | } 595 | 596 | .h-full{ 597 | height: 100%; 598 | } 599 | 600 | .h-5{ 601 | height: 1.25rem; 602 | } 603 | 604 | .h-screen{ 605 | height: 100vh; 606 | } 607 | 608 | .h-4{ 609 | height: 1rem; 610 | } 611 | 612 | .w-screen{ 613 | width: 100vw; 614 | } 615 | 616 | .w-full{ 617 | width: 100%; 618 | } 619 | 620 | .w-32{ 621 | width: 8rem; 622 | } 623 | 624 | .w-5{ 625 | width: 1.25rem; 626 | } 627 | 628 | .w-4{ 629 | width: 1rem; 630 | } 631 | 632 | .max-w-screen-md{ 633 | max-width: 768px; 634 | } 635 | 636 | .grow-0{ 637 | flex-grow: 0; 638 | } 639 | 640 | .flex-row{ 641 | flex-direction: row; 642 | } 643 | 644 | .flex-col{ 645 | flex-direction: column; 646 | } 647 | 648 | .place-content-center{ 649 | place-content: center; 650 | } 651 | 652 | .content-center{ 653 | align-content: center; 654 | } 655 | 656 | .items-center{ 657 | align-items: center; 658 | } 659 | 660 | .justify-center{ 661 | justify-content: center; 662 | } 663 | 664 | .gap-4{ 665 | gap: 1rem; 666 | } 667 | 668 | .gap-8{ 669 | gap: 2rem; 670 | } 671 | 672 | .gap-2{ 673 | gap: 0.5rem; 674 | } 675 | 676 | .gap-1{ 677 | gap: 0.25rem; 678 | } 679 | 680 | .truncate{ 681 | overflow: hidden; 682 | text-overflow: ellipsis; 683 | white-space: nowrap; 684 | } 685 | 686 | .rounded-full{ 687 | border-radius: 9999px; 688 | } 689 | 690 | .rounded{ 691 | border-radius: 0.25rem; 692 | } 693 | 694 | .rounded-md{ 695 | border-radius: 0.375rem; 696 | } 697 | 698 | .border-2{ 699 | border-width: 2px; 700 | } 701 | 702 | .border{ 703 | border-width: 1px; 704 | } 705 | 706 | .border-b-2{ 707 | border-bottom-width: 2px; 708 | } 709 | 710 | .border-b{ 711 | border-bottom-width: 1px; 712 | } 713 | 714 | .border-white{ 715 | --tw-border-opacity: 1; 716 | border-color: rgb(255 255 255 / var(--tw-border-opacity)); 717 | } 718 | 719 | .border-gray-200{ 720 | --tw-border-opacity: 1; 721 | border-color: rgb(229 231 235 / var(--tw-border-opacity)); 722 | } 723 | 724 | .border-neutral-200{ 725 | --tw-border-opacity: 1; 726 | border-color: rgb(229 229 229 / var(--tw-border-opacity)); 727 | } 728 | 729 | .border-b-orange-100{ 730 | --tw-border-opacity: 1; 731 | border-bottom-color: rgb(255 237 213 / var(--tw-border-opacity)); 732 | } 733 | 734 | .bg-orange-100{ 735 | --tw-bg-opacity: 1; 736 | background-color: rgb(255 237 213 / var(--tw-bg-opacity)); 737 | } 738 | 739 | .bg-white{ 740 | --tw-bg-opacity: 1; 741 | background-color: rgb(255 255 255 / var(--tw-bg-opacity)); 742 | } 743 | 744 | .bg-cyan-600{ 745 | --tw-bg-opacity: 1; 746 | background-color: rgb(8 145 178 / var(--tw-bg-opacity)); 747 | } 748 | 749 | .bg-green-700{ 750 | --tw-bg-opacity: 1; 751 | background-color: rgb(21 128 61 / var(--tw-bg-opacity)); 752 | } 753 | 754 | .bg-gray-200{ 755 | --tw-bg-opacity: 1; 756 | background-color: rgb(229 231 235 / var(--tw-bg-opacity)); 757 | } 758 | 759 | .p-2{ 760 | padding: 0.5rem; 761 | } 762 | 763 | .p-4{ 764 | padding: 1rem; 765 | } 766 | 767 | .px-8{ 768 | padding-left: 2rem; 769 | padding-right: 2rem; 770 | } 771 | 772 | .py-4{ 773 | padding-top: 1rem; 774 | padding-bottom: 1rem; 775 | } 776 | 777 | .py-8{ 778 | padding-top: 2rem; 779 | padding-bottom: 2rem; 780 | } 781 | 782 | .px-2{ 783 | padding-left: 0.5rem; 784 | padding-right: 0.5rem; 785 | } 786 | 787 | .py-0\.5{ 788 | padding-top: 0.125rem; 789 | padding-bottom: 0.125rem; 790 | } 791 | 792 | .py-0{ 793 | padding-top: 0px; 794 | padding-bottom: 0px; 795 | } 796 | 797 | .px-4{ 798 | padding-left: 1rem; 799 | padding-right: 1rem; 800 | } 801 | 802 | .py-2{ 803 | padding-top: 0.5rem; 804 | padding-bottom: 0.5rem; 805 | } 806 | 807 | .px-1{ 808 | padding-left: 0.25rem; 809 | padding-right: 0.25rem; 810 | } 811 | 812 | .pt-4{ 813 | padding-top: 1rem; 814 | } 815 | 816 | .pb-8{ 817 | padding-bottom: 2rem; 818 | } 819 | 820 | .pt-8{ 821 | padding-top: 2rem; 822 | } 823 | 824 | .pb-4{ 825 | padding-bottom: 1rem; 826 | } 827 | 828 | .pb-1{ 829 | padding-bottom: 0.25rem; 830 | } 831 | 832 | .text-center{ 833 | text-align: center; 834 | } 835 | 836 | .font-serif{ 837 | font-family: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; 838 | } 839 | 840 | .font-mono{ 841 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 842 | } 843 | 844 | .text-lg{ 845 | font-size: 1.125rem; 846 | line-height: 1.75rem; 847 | } 848 | 849 | .text-sm{ 850 | font-size: 0.875rem; 851 | line-height: 1.25rem; 852 | } 853 | 854 | .text-4xl{ 855 | font-size: 2.25rem; 856 | line-height: 2.5rem; 857 | } 858 | 859 | .text-xs{ 860 | font-size: 0.75rem; 861 | line-height: 1rem; 862 | } 863 | 864 | .text-xl{ 865 | font-size: 1.25rem; 866 | line-height: 1.75rem; 867 | } 868 | 869 | .font-semibold{ 870 | font-weight: 600; 871 | } 872 | 873 | .font-bold{ 874 | font-weight: 700; 875 | } 876 | 877 | .italic{ 878 | font-style: italic; 879 | } 880 | 881 | .leading-relaxed{ 882 | line-height: 1.625; 883 | } 884 | 885 | .text-white{ 886 | --tw-text-opacity: 1; 887 | color: rgb(255 255 255 / var(--tw-text-opacity)); 888 | } 889 | 890 | .text-neutral-500{ 891 | --tw-text-opacity: 1; 892 | color: rgb(115 115 115 / var(--tw-text-opacity)); 893 | } 894 | 895 | .text-neutral-700{ 896 | --tw-text-opacity: 1; 897 | color: rgb(64 64 64 / var(--tw-text-opacity)); 898 | } 899 | 900 | .text-neutral-600{ 901 | --tw-text-opacity: 1; 902 | color: rgb(82 82 82 / var(--tw-text-opacity)); 903 | } 904 | 905 | .text-cyan-600{ 906 | --tw-text-opacity: 1; 907 | color: rgb(8 145 178 / var(--tw-text-opacity)); 908 | } 909 | 910 | .text-gray-600{ 911 | --tw-text-opacity: 1; 912 | color: rgb(75 85 99 / var(--tw-text-opacity)); 913 | } 914 | 915 | .text-gray-400{ 916 | --tw-text-opacity: 1; 917 | color: rgb(156 163 175 / var(--tw-text-opacity)); 918 | } 919 | 920 | .text-cyan-700{ 921 | --tw-text-opacity: 1; 922 | color: rgb(14 116 144 / var(--tw-text-opacity)); 923 | } 924 | 925 | .underline{ 926 | text-decoration-line: underline; 927 | } 928 | 929 | .ring{ 930 | --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); 931 | --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color); 932 | box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); 933 | } 934 | 935 | .filter{ 936 | filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); 937 | } 938 | 939 | code { 940 | background: #DDD; 941 | border-radius: 4px; 942 | padding: 2px 4px; 943 | } 944 | 945 | .hover\:border-sky-600:hover{ 946 | --tw-border-opacity: 1; 947 | border-color: rgb(2 132 199 / var(--tw-border-opacity)); 948 | } 949 | 950 | .hover\:bg-green-900:hover{ 951 | --tw-bg-opacity: 1; 952 | background-color: rgb(20 83 45 / var(--tw-bg-opacity)); 953 | } 954 | 955 | .hover\:bg-cyan-700:hover{ 956 | --tw-bg-opacity: 1; 957 | background-color: rgb(14 116 144 / var(--tw-bg-opacity)); 958 | } 959 | 960 | .hover\:text-sky-600:hover{ 961 | --tw-text-opacity: 1; 962 | color: rgb(2 132 199 / var(--tw-text-opacity)); 963 | } 964 | 965 | .hover\:underline:hover{ 966 | text-decoration-line: underline; 967 | } 968 | 969 | .active\:bg-green-900:active{ 970 | --tw-bg-opacity: 1; 971 | background-color: rgb(20 83 45 / var(--tw-bg-opacity)); 972 | } 973 | 974 | @media (min-width: 640px){ 975 | .sm\:flex-row{ 976 | flex-direction: row; 977 | } 978 | 979 | .sm\:items-center{ 980 | align-items: center; 981 | } 982 | 983 | .sm\:gap-8{ 984 | gap: 2rem; 985 | } 986 | 987 | .sm\:px-16{ 988 | padding-left: 4rem; 989 | padding-right: 4rem; 990 | } 991 | } -------------------------------------------------------------------------------- /docs/static/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spyglass-search/lens-box/57f03e6db992d817961cb890ac573eaaa3f7f635/docs/static/images/favicon.png -------------------------------------------------------------------------------- /docs/static/images/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spyglass-search/lens-box/57f03e6db992d817961cb890ac573eaaa3f7f635/docs/static/images/logo.png -------------------------------------------------------------------------------- /docs/static/images/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spyglass-search/lens-box/57f03e6db992d817961cb890ac573eaaa3f7f635/docs/static/images/logo@2x.png -------------------------------------------------------------------------------- /docs/static/images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spyglass-search/lens-box/57f03e6db992d817961cb890ac573eaaa3f7f635/docs/static/images/screenshot.png -------------------------------------------------------------------------------- /docs/static/js/search.js: -------------------------------------------------------------------------------- 1 | function debounce(func, wait) { 2 | var timeout; 3 | 4 | return function () { 5 | var context = this; 6 | var args = arguments; 7 | clearTimeout(timeout); 8 | 9 | timeout = setTimeout(function () { 10 | timeout = null; 11 | func.apply(context, args); 12 | }, wait); 13 | }; 14 | } 15 | 16 | // Taken from mdbook 17 | // The strategy is as follows: 18 | // First, assign a value to each word in the document: 19 | // Words that correspond to search terms (stemmer aware): 40 20 | // Normal words: 2 21 | // First word in a sentence: 8 22 | // Then use a sliding window with a constant number of words and count the 23 | // sum of the values of the words within the window. Then use the window that got the 24 | // maximum sum. If there are multiple maximas, then get the last one. 25 | // Enclose the terms in . 26 | function makeTeaser(body, terms) { 27 | console.log(body, terms); 28 | var TERM_WEIGHT = 40; 29 | var NORMAL_WORD_WEIGHT = 2; 30 | var FIRST_WORD_WEIGHT = 8; 31 | var TEASER_MAX_WORDS = 30; 32 | 33 | var stemmedTerms = terms.map(function (w) { 34 | return elasticlunr.stemmer(w.toLowerCase()); 35 | }); 36 | var termFound = false; 37 | var index = 0; 38 | var weighted = []; // contains elements of ["word", weight, index_in_document] 39 | 40 | // split in sentences, then words 41 | var sentences = body.toLowerCase().split(". "); 42 | 43 | for (var i in sentences) { 44 | var words = sentences[i].split(" "); 45 | var value = FIRST_WORD_WEIGHT; 46 | 47 | for (var j in words) { 48 | var word = words[j]; 49 | 50 | if (word.length > 0) { 51 | for (var k in stemmedTerms) { 52 | if (elasticlunr.stemmer(word).startsWith(stemmedTerms[k])) { 53 | value = TERM_WEIGHT; 54 | termFound = true; 55 | } 56 | } 57 | weighted.push([word, value, index]); 58 | value = NORMAL_WORD_WEIGHT; 59 | } 60 | 61 | index += word.length; 62 | index += 1; // ' ' or '.' if last word in sentence 63 | } 64 | 65 | index += 1; // because we split at a two-char boundary '. ' 66 | } 67 | 68 | if (weighted.length === 0) { 69 | return body; 70 | } 71 | 72 | var windowWeights = []; 73 | var windowSize = Math.min(weighted.length, TEASER_MAX_WORDS); 74 | // We add a window with all the weights first 75 | var curSum = 0; 76 | for (var i = 0; i < windowSize; i++) { 77 | curSum += weighted[i][1]; 78 | } 79 | windowWeights.push(curSum); 80 | 81 | for (var i = 0; i < weighted.length - windowSize; i++) { 82 | curSum -= weighted[i][1]; 83 | curSum += weighted[i + windowSize][1]; 84 | windowWeights.push(curSum); 85 | } 86 | 87 | // If we didn't find the term, just pick the first window 88 | var maxSumIndex = 0; 89 | if (termFound) { 90 | var maxFound = 0; 91 | // backwards 92 | for (var i = windowWeights.length - 1; i >= 0; i--) { 93 | if (windowWeights[i] > maxFound) { 94 | maxFound = windowWeights[i]; 95 | maxSumIndex = i; 96 | } 97 | } 98 | } 99 | 100 | var teaser = []; 101 | var startIndex = weighted[maxSumIndex][2]; 102 | for (var i = maxSumIndex; i < maxSumIndex + windowSize; i++) { 103 | var word = weighted[i]; 104 | if (startIndex < word[2]) { 105 | // missing text from index to start of `word` 106 | teaser.push(body.substring(startIndex, word[2])); 107 | startIndex = word[2]; 108 | } 109 | 110 | // add around search terms 111 | if (word[1] === TERM_WEIGHT) { 112 | teaser.push(""); 113 | } 114 | startIndex = word[2] + word[0].length; 115 | teaser.push(body.substring(word[2], startIndex)); 116 | 117 | if (word[1] === TERM_WEIGHT) { 118 | teaser.push(""); 119 | } 120 | } 121 | teaser.push("…"); 122 | return teaser.join(""); 123 | } 124 | 125 | function formatSearchResultItem(item, terms) { 126 | return '
' 127 | + `${item.doc.title}` 128 | + `
${makeTeaser(item.doc.body, terms)}
` 129 | + '
'; 130 | } 131 | 132 | function initSearch() { 133 | var $searchInput = document.getElementById("search"); 134 | var $searchResults = document.querySelector(".search-results"); 135 | var $searchResultsItems = document.querySelector(".search-results__items"); 136 | var MAX_ITEMS = 10; 137 | 138 | var options = { 139 | bool: "AND", 140 | fields: { 141 | title: {boost: 2}, 142 | body: {boost: 1}, 143 | } 144 | }; 145 | var currentTerm = ""; 146 | console.log(`loaded ${window.searchIndex.length} documents`); 147 | var index = elasticlunr.Index.load(window.searchIndex); 148 | 149 | $searchInput.addEventListener("keyup", debounce(function() { 150 | var term = $searchInput.value.trim(); 151 | if (term === currentTerm || !index) { 152 | return; 153 | } 154 | $searchResults.style.display = term === "" ? "none" : "block"; 155 | $searchResultsItems.innerHTML = ""; 156 | currentTerm = term; 157 | if (term === "") { 158 | return; 159 | } 160 | 161 | var results = index.search(term, options); 162 | if (results.length === 0) { 163 | $searchResults.style.display = "none"; 164 | return; 165 | } 166 | 167 | for (var i = 0; i < Math.min(results.length, MAX_ITEMS); i++) { 168 | var item = document.createElement("li"); 169 | item.innerHTML = formatSearchResultItem(results[i], term.split(" ")); 170 | $searchResultsItems.appendChild(item); 171 | } 172 | }, 150)); 173 | 174 | window.addEventListener('click', function(e) { 175 | if ($searchResults.style.display == "block" && !$searchResults.contains(e.target)) { 176 | $searchResults.style.display = "none"; 177 | } 178 | }); 179 | } 180 | 181 | 182 | if (document.readyState === "complete" || 183 | (document.readyState !== "loading" && !document.documentElement.doScroll) 184 | ) { 185 | initSearch(); 186 | } else { 187 | document.addEventListener("DOMContentLoaded", initSearch); 188 | } 189 | -------------------------------------------------------------------------------- /docs/styles-src/styles.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@200;300;400;500;600;700&family=PT+Serif:wght@400;700&display=swap"); 2 | 3 | @tailwind base; 4 | @tailwind components; 5 | @tailwind utilities; 6 | 7 | code { 8 | 9 | background: #DDD; 10 | border-radius: 4px; 11 | padding: 2px 4px; 12 | } -------------------------------------------------------------------------------- /docs/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | "static/**/*.js", 5 | "templates/**/*.html", 6 | "content/**/*.md" 7 | ], 8 | theme: { 9 | extend: {}, 10 | }, 11 | plugins: [], 12 | } 13 | -------------------------------------------------------------------------------- /docs/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | {% block meta %} 10 | {% endblock meta %} 11 | 12 | 13 | 14 | 15 | 16 | 17 | {% block title %}{{ config.title }}{% endblock title %} 18 | {% if config.generate_feed %} 19 | {% block rss %} 20 | 26 | {% endblock rss %} 27 | {% endif %} 28 | 29 | {% block extra_head %} 30 | {% endblock extra_head %} 31 | 32 | 33 |
34 |
35 |
36 | 37 | logo 41 | 42 |
43 | 82 |
83 |
84 |
85 |
86 |
    87 | {% set current_url_str = current_url | as_str %} 88 | {% set language_site_base = get_url(path="@/_index.md", lang=lang) | as_str %} 89 | {% set language_site_path_without_prefix = current_url | trim_start_matches(pat=language_site_base) | 90 | trim_end_matches(pat="/") %} 91 | {% set language_site_path = '/' ~ language_site_path_without_prefix %} 92 |
  • 93 | 95 | Browse All Lenses 96 | 97 |
  • 98 |
  • 99 | 101 | Download Spyglass 102 | 109 | 110 | 111 | 112 |
  • 113 |
114 |
115 |
116 | {% block content %} 117 | {% endblock content %} 118 |
119 |
120 | 121 | 122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /docs/templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% import "macros.html" as macros %} 3 | {% block content %} 4 |
5 | {% set section = get_section(path="lenses/_index.md") -%} 6 | {% for page in section.pages | sort(attribute="extra.sort") -%} 7 | {{ macros::lens_item(page=page) }} 8 | {% endfor %} 9 |
10 | {% endblock content %} -------------------------------------------------------------------------------- /docs/templates/macros.html: -------------------------------------------------------------------------------- 1 | {% macro render_tag(tag) %} 2 | 5 | {{tag}} 6 | 7 | {% endmacro %} 8 | 9 | {% macro lens_item(page) %} 10 |
11 | 12 |

{{ page.title }}

13 |
14 |
{{ page.description }}
15 |
18 |
19 | 30 | 31 | 32 | 33 | 34 | 35 | {{ page.taxonomies.author|first }} 36 |
37 | {% if page.taxonomies.categories %} 38 |
39 | 49 | 52 | 53 | 54 | {% for tag in page.taxonomies.categories %} 55 | {{ self::render_tag(tag=tag) }} 56 | {% endfor %} 57 |
58 | {% endif %} 59 |
60 |
61 | {% if page.extra.summary %} {{ page.extra.summary | safe | striptags }} {% 62 | else %} {{ page.content | safe | striptags | truncate(length=100) }} {% 63 | endif %} 64 |
65 |
66 | {% endmacro lens_item %} -------------------------------------------------------------------------------- /docs/templates/page.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% import "macros.html" as macros %} 3 | 4 | {% block title %}{{ config.title }} • {{ page.title }}{% endblock title %} 5 | 6 | {% block meta %} 7 | 8 | 9 | 10 | 11 | 12 | 13 | {% endblock %} 14 | 15 | {% block content %} 16 |
17 |
18 | 29 |
30 | {% if page.taxonomies.author %} 31 |
32 | 33 | Author: 34 | {{ page.taxonomies.author|first }} 35 |
36 | {% endif %} 37 | {% if page.taxonomies.categories %} 38 |
39 | 40 | Categories: 41 | {% for tag in page.taxonomies.categories %} 42 | {{ macros::render_tag(tag=tag) }} 43 | {% endfor %} 44 |
45 | {% endif %} 46 |
47 |
48 | 49 |
50 |
51 |

How do I use this?

52 |
53 | Lenses are the secret sauce of Spyglass. They let you filter search results to 54 | find exactly what you're looking for, whether it's a specific website or a topic. 55 | Want to quickly reference your favorite wiki or guide? Spyglass makes it easy to 56 | create your own library of information to search through. 57 |
58 |
59 | 60 |
61 |

What is in this lens?

62 |
{{ page.description }}
63 |
64 | 65 |
66 |
67 |

Lens Configuration

68 | 70 | 73 | 74 | 75 | 76 | View Source 77 | 78 |
79 |
80 | This section defines how a lenses are configured to work. The domains & urls help 81 | point our crawlers to what should be indexed. The rules help decide which documents 82 | can be safely ignored or definitely included. 83 |
84 |
85 | 86 |

Domains

87 |
88 | {% if page.extra.domains %} 89 |
    90 | {% for domain in page.extra.domains %} 91 |
  • {{ domain }}
  • 92 | {% endfor %} 93 |
94 | {% else %} 95 | None specified 96 | {% endif %} 97 |
98 | 99 |

URLs

100 |
101 | In addition to domains, URL patterns are used to narrow down what is crawled even 102 | more. 103 |
104 |
105 | {% if page.extra.urls %} 106 |
    107 | {% for url in page.extra.urls %} 108 |
  • {{ url }}
  • 109 | {% endfor %} 110 |
  • ...
  • 111 |
112 | {% else %} 113 | None specified 114 | {% endif %} 115 |
116 | 117 |

Rules

118 |
119 | {% if page.extra.rules %} 120 |
    121 | {% for item in page.extra.rules %} 122 |
  • {{ item }}
  • 123 | {% endfor %} 124 |
125 | {% else %} 126 | None specified 127 | {% endif %} 128 |
129 | 130 |
131 |
🔭
132 |
133 | {% endblock %} 134 | -------------------------------------------------------------------------------- /docs/templates/taxonomy_list.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block content %} 4 |
5 |
6 |

Browse by Category

7 | 19 |
20 |
21 | {% endblock content %} 22 | -------------------------------------------------------------------------------- /docs/templates/taxonomy_single.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% import "macros.html" as macros %} 3 | 4 | {% block content %} 5 |
6 |
7 | {{ term.name -}} 8 |
9 | 10 | {% for page in term.pages | sort(attribute="extra.sort") %} 11 | {{ macros::lens_item(page=page) }} 12 | {% endfor %} 13 |
14 | {% endblock content %} 15 | -------------------------------------------------------------------------------- /index.ron: -------------------------------------------------------------------------------- 1 | [ 2 | ( 3 | author: "a5huynh", 4 | description: "Old School Runescape wiki and useful reference guides, utilities, and more.", 5 | name: "2007scape", 6 | label: "Old School RuneScape (OSRS) wiki", 7 | sha: "2672f23ea77ced7078bdae120dc5148339a0f30cb5760da57d78b05ad0f7c71c", 8 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/2007scape/2007scape.ron", 9 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/2007scape/2007scape.ron", 10 | categories: [ 11 | "Games", 12 | "MMORPG", 13 | ], 14 | ), 15 | ( 16 | author: "spyglass-search", 17 | description: "Akka API Documentation", 18 | name: "Akka", 19 | label: "Akka", 20 | sha: "d3857807f8ca19b7ebcf33a4056df7b4a296cde5ee4b44b8006747ec6e76b110", 21 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Akka/Akka.ron", 22 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Akka/Akka.ron", 23 | categories: [ 24 | "Programming", 25 | ], 26 | ), 27 | ( 28 | author: "spyglass-search", 29 | description: "Android API Documentation", 30 | name: "Android", 31 | label: "Android", 32 | sha: "72407d14c5f39af6aacf2aaa2a6b642f5f321e88041b75290e9bfa04e6596057", 33 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Android/Android.ron", 34 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Android/Android.ron", 35 | categories: [ 36 | "Programming", 37 | ], 38 | ), 39 | ( 40 | author: "spyglass-search", 41 | description: "Angular API Documentation", 42 | name: "Angular", 43 | label: "Angular", 44 | sha: "05cf2095234443181b679cbf2ac07afde022b64171bf7e6938c5093638836eb3", 45 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Angular/Angular.ron", 46 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Angular/Angular.ron", 47 | categories: [ 48 | "Programming", 49 | "Web Development", 50 | ], 51 | ), 52 | ( 53 | author: "spyglass-search", 54 | description: "AngularJS API Documentation", 55 | name: "AngularJS", 56 | label: "AngularJS", 57 | sha: "e74103812de70973a9801921cf51871ce1f85b857a78254c0348cf247250db6b", 58 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/AngularJS/AngularJS.ron", 59 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/AngularJS/AngularJS.ron", 60 | categories: [ 61 | "Programming", 62 | "Web Development", 63 | ], 64 | ), 65 | ( 66 | author: "spyglass-search", 67 | description: "Ansible API Documentation", 68 | name: "Ansible", 69 | label: "Ansible", 70 | sha: "45ae306a0f77ca2213340fcd2f1a27931f6ad51d6546de4562a7645a4add2d81", 71 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Ansible/Ansible.ron", 72 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Ansible/Ansible.ron", 73 | categories: [ 74 | "Developer Tools", 75 | ], 76 | ), 77 | ( 78 | author: "spyglass-search", 79 | description: "Apache HTTP Server API Documentation", 80 | name: "Apache_HTTP_Server", 81 | label: "Apache HTTP Server", 82 | sha: "22ad2ac033dd324898ba7f3653582ccc48a58681b704517c5b2fa68a04a17a8f", 83 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Apache_HTTP_Server/Apache_HTTP_Server.ron", 84 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Apache_HTTP_Server/Apache_HTTP_Server.ron", 85 | categories: [ 86 | "Developer Tools", 87 | ], 88 | ), 89 | ( 90 | author: "HLennart", 91 | description: "Archives of Nethys Pathfinder 2e", 92 | name: "ArchivesOfNethys", 93 | label: "ArchivesOfNethys", 94 | sha: "5ca0445414282ae8d9c96c2ff9a9f572560c2f9074a29b16a91028e93c5f4cbe", 95 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/pf2e/ArchivesOfNethys.ron", 96 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/pf2e/ArchivesOfNethys.ron", 97 | categories: [], 98 | ), 99 | ( 100 | author: "popcar2", 101 | description: "Arch User Repository, so you can find packages quickly.", 102 | name: "AUR", 103 | label: "Arch Linux User Repository (AUR)", 104 | sha: "13e4a929f1ceb94a3b62372f809450adc89b56e85afc8071cedc485d9a786dbc", 105 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/AUR/AUR.ron", 106 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/AUR/AUR.ron", 107 | categories: [ 108 | "Package Repository", 109 | ], 110 | ), 111 | ( 112 | author: "spyglass-search", 113 | description: "Bootstrap 3.4 API Documentation", 114 | name: "Bootstrap_3.4", 115 | label: "Bootstrap 3.4", 116 | sha: "2b2aca827f9e4282764c4b67a33b8ef5282c4b7ca013b0d1a05f060773b0ed3e", 117 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Bootstrap_3.4/Bootstrap_3.4.ron", 118 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Bootstrap_3.4/Bootstrap_3.4.ron", 119 | categories: [ 120 | "Programming", 121 | "Web Development", 122 | ], 123 | ), 124 | ( 125 | author: "spyglass-search", 126 | description: "Bootstrap 4.6 API Documentation", 127 | name: "Bootstrap_4.6", 128 | label: "Bootstrap 4.6", 129 | sha: "d97ad84482b8b5db000d0ba5fd43a1a9c295cb6ad191389854d2ece5662d09b3", 130 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Bootstrap_4.6/Bootstrap_4.6.ron", 131 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Bootstrap_4.6/Bootstrap_4.6.ron", 132 | categories: [ 133 | "Programming", 134 | "Web Development", 135 | ], 136 | ), 137 | ( 138 | author: "spyglass-search", 139 | description: "Bootstrap 5.2 API Documentation", 140 | name: "Bootstrap_5.2", 141 | label: "Bootstrap 5.2", 142 | sha: "75b5daf160469dfbf3231a6d994f99ea3252ff47fe825d125c8aac958b987412", 143 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Bootstrap_5.2/Bootstrap_5.2.ron", 144 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Bootstrap_5.2/Bootstrap_5.2.ron", 145 | categories: [ 146 | "Programming", 147 | "Web Development", 148 | ], 149 | ), 150 | ( 151 | author: "spyglass-search", 152 | description: "Bourbon 7.0.0 API Documentation", 153 | name: "Bourbon_7.0.0", 154 | label: "Bourbon 7.0.0", 155 | sha: "165763f53455e025bb97a8aec84388a89390786c48ad65a5a5db026c2f483f58", 156 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Bourbon_7.0.0/Bourbon_7.0.0.ron", 157 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Bourbon_7.0.0/Bourbon_7.0.0.ron", 158 | categories: [ 159 | "Programming", 160 | "Web Development", 161 | ], 162 | ), 163 | ( 164 | author: "spyglass-search", 165 | description: "Pokémon encyclopedia", 166 | name: "Bulbapedia", 167 | label: "Bulbapedia", 168 | sha: "49687156a46e988a544d0e1c922aae45dc7ed476ec09f76f12747b04fd0a0e58", 169 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Bulbapedia/Bulbapedia.ron", 170 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Bulbapedia/Bulbapedia.ron", 171 | categories: [ 172 | "Games", 173 | ], 174 | ), 175 | ( 176 | author: "popcar2", 177 | description: "Comic Book Roundup, a review aggregator for comic books & graphic novels.", 178 | name: "CBR", 179 | label: "Comic Book Roundup", 180 | sha: "4b176270f46df0e41f943c1123986a9a88d3fc70172673c41330bb5a7e3492f2", 181 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/CBR/CBR.ron", 182 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/CBR/CBR.ron", 183 | categories: [ 184 | "Comics", 185 | "Reviews", 186 | ], 187 | ), 188 | ( 189 | author: "spyglass-search", 190 | description: "CMake API Documentation", 191 | name: "CMake", 192 | label: "CMake", 193 | sha: "359c7b3d7a75e932bbd9bfa7bd2051637a0d54121630c30acdbeee41c9e9d2b2", 194 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/CMake/CMake.ron", 195 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/CMake/CMake.ron", 196 | categories: [ 197 | "Developer Tools", 198 | ], 199 | ), 200 | ( 201 | author: "spyglass-search", 202 | description: "CSS Documentation", 203 | name: "CSS", 204 | label: "CSS", 205 | sha: "0870fca48baa594e6836db3982c6793cc8e7c11119453101d9825e4d7d0006d3", 206 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/CSS/CSS.ron", 207 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/CSS/CSS.ron", 208 | categories: [ 209 | "Programming", 210 | "Web Development", 211 | ], 212 | ), 213 | ( 214 | author: "Marco Kleinert", 215 | description: "dbatools cmdlet documentation", 216 | name: "dbatools", 217 | label: "dbatools", 218 | sha: "6bffc59ea5bd32fa4d546c3e938047c8b57583836ac725f94d86f658b2811f09", 219 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/dbatools/dbatools.ron", 220 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/dbatools/dbatools.ron", 221 | categories: [ 222 | "database administration", 223 | ], 224 | ), 225 | ( 226 | author: "spyglass-search", 227 | description: "Disco Elysium Wiki", 228 | name: "disco_elysium", 229 | label: "Disco Elysium", 230 | sha: "ded0fc97abef9c96a2c3a60887252bcc2a105edbf0864343d1f022cc2b888f53", 231 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/disco_elysium/disco_elysium.ron", 232 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/disco_elysium/disco_elysium.ron", 233 | categories: [ 234 | "Games", 235 | ], 236 | ), 237 | ( 238 | author: "lagoja", 239 | description: "D&D 5E reference guide for classes, equipment, feats, magic items, monsters, spells, etc.", 240 | name: "dnd", 241 | label: "Dungeons & Dragons 5E", 242 | sha: "701e951ce58260fef3997d84f986050239c456fb67780e24533eafdaf4231e00", 243 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/dnd/dnd.ron", 244 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/dnd/dnd.ron", 245 | categories: [ 246 | "Games", 247 | "TTRPG", 248 | ], 249 | ), 250 | ( 251 | author: "popcar2", 252 | description: "Elden Ring Fextralife Wiki", 253 | name: "EldenRing", 254 | label: "Elden Ring", 255 | sha: "ba521ea1a154c2a0922d04ef6247ed4aefebedc1cc3b9a327a753ff6a679cf47", 256 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/EldenRing/EldenRing.ron", 257 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/EldenRing/EldenRing.ron", 258 | categories: [ 259 | "Games", 260 | ], 261 | ), 262 | ( 263 | author: "a5huynh", 264 | description: "Factorio wiki & subreddit. Factorio is a game in which you build and maintain factories.", 265 | name: "factorio", 266 | label: "Factorio", 267 | sha: "dad97b0fedbc257fe5a86c01a5d8c75c271ef9aedd95f9b11e8a8781958af0e6", 268 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/factorio/factorio.ron", 269 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/factorio/factorio.ron", 270 | categories: [ 271 | "Games", 272 | ], 273 | ), 274 | ( 275 | author: "pknessness", 276 | description: "Gentoo Documentation", 277 | name: "gentoo", 278 | label: "Gentoo Linux Wiki", 279 | sha: "81532638dd3fa7ff04e132a92af18a82979ed1225a911c3d47ea29968f3d279d", 280 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/gentoo/gentoo.ron", 281 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/gentoo/gentoo.ron", 282 | categories: [ 283 | "Operating Systems", 284 | ], 285 | ), 286 | ( 287 | author: "spyglass-search", 288 | description: "Go API Documentation", 289 | name: "Go", 290 | label: "Go Language Documentation", 291 | sha: "cbac5636d46da8a789735184edf2e85b27d047866b150a00ffc44579ca29f482", 292 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Go/Go.ron", 293 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Go/Go.ron", 294 | categories: [ 295 | "Programming", 296 | ], 297 | ), 298 | ( 299 | author: "TheSelox", 300 | description: "GTFOBins is a curated list of Unix binaries that can be used to bypass local security restrictions in misconfigured systems.", 301 | name: "gtfobins", 302 | label: "GTFOBins", 303 | sha: "9b33a1aa303d8eb2afc19779dab4fd91e5baaf1b1cdc6d6c8d94307256f61533", 304 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/GTFOBins/gtfobins.ron", 305 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/GTFOBins/gtfobins.ron", 306 | categories: [ 307 | "Computer Security", 308 | ], 309 | ), 310 | ( 311 | author: "spyglass-search", 312 | description: "Harry Potter Fandom Wiki", 313 | name: "harrypotter_wiki", 314 | label: "Harry Potter Wiki", 315 | sha: "4bdc99e7a0aa0a4259200c201db23d9b6694fbccd7bb5b96055cf824fa55ddb6", 316 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/harrypotter_wiki/harrypotter_wiki.ron", 317 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/harrypotter_wiki/harrypotter_wiki.ron", 318 | categories: [ 319 | "Media", 320 | ], 321 | ), 322 | ( 323 | author: "spyglass-search", 324 | description: "Hogwarts Legacy Fandom Wiki", 325 | name: "hogwarts_legacy", 326 | label: "Hogwarts Legacy Wiki", 327 | sha: "f330defa05b9f996e92789c741d344a4e32e47ba6e8669d2f9edeaa818653fc4", 328 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/hogwarts_legacy/hogwarts_legacy.ron", 329 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/hogwarts_legacy/hogwarts_legacy.ron", 330 | categories: [ 331 | "Games", 332 | ], 333 | ), 334 | ( 335 | author: "spyglass-search", 336 | description: "HTML API Documentation", 337 | name: "HTML", 338 | label: "HTML", 339 | sha: "381113f9d59fbc31a031fcc6561916d69f50048f7076edc795fc09c416a91956", 340 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/HTML/HTML.ron", 341 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/HTML/HTML.ron", 342 | categories: [ 343 | "Programming", 344 | "Web Development", 345 | ], 346 | ), 347 | ( 348 | author: "oparaskos", 349 | description: "Java reference material.", 350 | name: "java", 351 | label: "Java Reference Material", 352 | sha: "06216cbb0712582bd84a1963356eeb6110235d3bc4e5e008ff0faa6fe19ea323", 353 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/java/java.ron", 354 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/java/java.ron", 355 | categories: [ 356 | "Programming", 357 | ], 358 | ), 359 | ( 360 | author: "spyglass-search", 361 | description: "Java SE11 API Documentation", 362 | name: "Java_SE11", 363 | label: "Java SE11 Documentation", 364 | sha: "499768829036c1298de7106532dba810d2f173e139bbb65ff4594ea628b35e21", 365 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Java_SE11/Java_SE11.ron", 366 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Java_SE11/Java_SE11.ron", 367 | categories: [ 368 | "Programming", 369 | ], 370 | ), 371 | ( 372 | author: "spyglass-search", 373 | description: "Java SE18 API Documentation", 374 | name: "Java_SE18", 375 | label: "Java SE18 Documentation", 376 | sha: "10199a17aa99a3c9a08ce529f957b2ad9c9966f514191ca9bd84171dc2991b42", 377 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Java_SE18/Java_SE18.ron", 378 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Java_SE18/Java_SE18.ron", 379 | categories: [ 380 | "Programming", 381 | ], 382 | ), 383 | ( 384 | author: "spyglass-search", 385 | description: "Java SE19 API Documentation", 386 | name: "Java_SE19", 387 | label: "Java SE19 Documentation", 388 | sha: "5775520f981280218bb2d50a0a155ea522764b9b95fa13d523cad32c03df2ecc", 389 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Java_SE19/Java_SE19.ron", 390 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Java_SE19/Java_SE19.ron", 391 | categories: [ 392 | "Programming", 393 | ], 394 | ), 395 | ( 396 | author: "oparaskos", 397 | description: "Kotlin reference material.", 398 | name: "kotlin", 399 | label: "Kotlin", 400 | sha: "ccbfaa70301f7066caa3f91511e01f82a9611846769c3f2b41d52147b17d935f", 401 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/kotlin/kotlin.ron", 402 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/kotlin/kotlin.ron", 403 | categories: [ 404 | "Programming", 405 | ], 406 | ), 407 | ( 408 | author: "Mohd-PH", 409 | description: "A lens for Laravel, a popular PHP framework", 410 | name: "laravel", 411 | label: "Laravel", 412 | sha: "30c94c7907f47503757916fb34c12e9e925de172a940f0e128e169fcf66b1a75", 413 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/laravel/laravel.ron", 414 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/laravel/laravel.ron", 415 | categories: [ 416 | "Programming", 417 | "Web Development", 418 | "PHP", 419 | ], 420 | ), 421 | ( 422 | author: "TheSelox", 423 | description: "Living Off The Land Binaries, Scripts and Libraries", 424 | name: "lolbas", 425 | label: "LOLBAS Project", 426 | sha: "a1492c14d1c43591b240eb4d082f79d1e724059b5119f63097e437772374929c", 427 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/LOLBAS/lolbas.ron", 428 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/LOLBAS/lolbas.ron", 429 | categories: [ 430 | "Computer Security", 431 | ], 432 | ), 433 | ( 434 | author: "pknessness", 435 | description: "Luigi\'s Mansion Walkthrough", 436 | name: "luigis_mansion", 437 | label: "Luigis Mansion Guide", 438 | sha: "d1cc911930b6842bfdc42795fcaf050edf860d0438f48e7259746cb1f359b577", 439 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/luigis_mansion/luigis_mansion.ron", 440 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/luigis_mansion/luigis_mansion.ron", 441 | categories: [ 442 | "Games", 443 | ], 444 | ), 445 | ( 446 | author: "pknessness", 447 | description: "MBED 6.8 Documentation", 448 | name: "mbed68", 449 | label: "MBED 6.8 Documentation", 450 | sha: "586c0f27790bcee4a894e60370e1fef82fa2d8998d7a46e7a3a2a606a525f2ec", 451 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/mbed68/mbed68.ron", 452 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/mbed68/mbed68.ron", 453 | categories: [ 454 | "Programming", 455 | ], 456 | ), 457 | ( 458 | author: "spyglass-search", 459 | description: "NodeJs API Documentation", 460 | name: "NodeJs", 461 | label: "NodeJS API Documentation", 462 | sha: "ef37703de3e35e4cab70b9b30dd19f164bc7701fc113d3197fe80e9afd98505f", 463 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/NodeJs/NodeJs.ron", 464 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/NodeJs/NodeJs.ron", 465 | categories: [ 466 | "Programming", 467 | "Web Development", 468 | ], 469 | ), 470 | ( 471 | author: "popcar2", 472 | description: "Opencritic: A review aggregation website for video games!", 473 | name: "OpenCritic", 474 | label: "OpenCritic: Games Reviews", 475 | sha: "f8fde0697d0764c5b219aac164bdcd5e7cdac21c44c668790c866346f930cbe5", 476 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/OpenCritic/OpenCritic.ron", 477 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/OpenCritic/OpenCritic.ron", 478 | categories: [ 479 | "Games", 480 | "Reviews", 481 | ], 482 | ), 483 | ( 484 | author: "musashi - savdbroek", 485 | description: "OSCP related Guides & Tools", 486 | name: "oscp", 487 | label: "OSCP Certification", 488 | sha: "190b4139ad969ddcb0de383e176d4effb79cf1330cf7b9d11b2aa9c381880f47", 489 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/OSCP/oscp.ron", 490 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/OSCP/oscp.ron", 491 | categories: [ 492 | "Computer Security", 493 | ], 494 | ), 495 | ( 496 | author: "pknessness", 497 | description: "Pygame Documentation", 498 | name: "pygame", 499 | label: "pygame", 500 | sha: "74180ea4bd50bb9a0a8d68dcbc423307230345080b2ee115d7ceb835ead3b98f", 501 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/pygame/pygame.ron", 502 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/pygame/pygame.ron", 503 | categories: [ 504 | "Programming", 505 | "Game Development", 506 | ], 507 | ), 508 | ( 509 | author: "gRox167", 510 | description: "pytorch documentation", 511 | name: "pytorch", 512 | label: "pytorch", 513 | sha: "6ce19b8be533ad99d147b1581095bf506d92c8a56c41ddbaf5276d4d3436c79d", 514 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/pytorch/pytorch.ron", 515 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/pytorch/pytorch.ron", 516 | categories: [ 517 | "Programming", 518 | ], 519 | ), 520 | ( 521 | author: "Mohd-PH", 522 | description: "R language for statistical analysis targeted websites", 523 | name: "rlang", 524 | label: "R Language Docs", 525 | sha: "5f516441281812d2441011da1c9671cbe229c955269ad3aca077c6713ed02101", 526 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/rlang/rlang.ron", 527 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/rlang/rlang.ron", 528 | categories: [ 529 | "Programming", 530 | ], 531 | ), 532 | ( 533 | author: "popcar2", 534 | description: "Rogue Legacy 2 wiki", 535 | name: "RogueLegacy2", 536 | label: "Rogue Legacy 2 Wiki", 537 | sha: "a16b3b974008ae3f0db3340c14bb9ba12b2322fa7d19107db8c2ef1770ad53e8", 538 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/RogueLegacy2/RogueLegacy2.ron", 539 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/RogueLegacy2/RogueLegacy2.ron", 540 | categories: [ 541 | "Games", 542 | ], 543 | ), 544 | ( 545 | author: "c_sonnier", 546 | description: "Ruby on Rails official website, documentation, and blog posts.", 547 | name: "ruby_on_rails", 548 | label: "Ruby on Rails", 549 | sha: "e60175204c9980991d30f92fb4e352a5151bb9e127e377c31f04277d8fefd70d", 550 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/ruby_on_rails/ruby_on_rails.ron", 551 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/ruby_on_rails/ruby_on_rails.ron", 552 | categories: [ 553 | "Programming", 554 | "Web Development", 555 | ], 556 | ), 557 | ( 558 | author: "a5huynh", 559 | description: "Rustlang official website, documentation, and blog posts.", 560 | name: "rustlang", 561 | label: "Rust Language Websites & Documentation", 562 | sha: "79561976cedb7a3e30eee3792558c05c62fa3d11cf4686abc3ac078407c36057", 563 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/rustlang/rustlang.ron", 564 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/rustlang/rustlang.ron", 565 | categories: [ 566 | "Programming", 567 | ], 568 | ), 569 | ( 570 | author: "Jack G", 571 | description: "The SCP Foundation Wiki", 572 | name: "scp", 573 | label: "SCP Foundation", 574 | sha: "553c2d7dc3bbc030ad6c93ad4f171777d221092d57a4bb64d2eb226457490d05", 575 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/scp/scp.ron", 576 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/scp/scp.ron", 577 | categories: [ 578 | "Media", 579 | ], 580 | ), 581 | ( 582 | author: "Haz0ret", 583 | description: "Searches through Scryfall and Gatherer to locate magic: the gathering sources", 584 | name: "scryfall", 585 | label: "Magic the Gathering (MtG)", 586 | sha: "35f1e5a1e51185b23a0ebef83ff655113b4b39341138179e0853d8d8a34738ba", 587 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Scryfall/scryfall.ron", 588 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Scryfall/scryfall.ron", 589 | categories: [ 590 | "Games", 591 | ], 592 | ), 593 | ( 594 | author: "pknessness", 595 | description: "Super Mario Galaxy 1 and 2 Wiki", 596 | name: "smg", 597 | label: "Super Mario Galaxy 1 & 2", 598 | sha: "dba630a4dcd21aa7ab2ca36c498265c3398a78b110944cdf536507d1422a45c1", 599 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/smg/smg.ron", 600 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/smg/smg.ron", 601 | categories: [ 602 | "Games", 603 | ], 604 | ), 605 | ( 606 | author: "pknessness", 607 | description: "Indexes snapcraft, the app store for linux.", 608 | name: "snap", 609 | label: "Snapcraft: Linux App Store", 610 | sha: "df24e3af00c6a6150d021b93700b7f507b8f2283f5c3dbeb52e2887567b3fcef", 611 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/SNAP/snap.ron", 612 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/SNAP/snap.ron", 613 | categories: [ 614 | "Package Repository", 615 | ], 616 | ), 617 | ( 618 | author: "TheSelox", 619 | description: "Find documentation on SPL commands", 620 | name: "splunk", 621 | label: "Splunk SPL commands", 622 | sha: "781e41c96d32dbe2f881cff3aad6d0ec6c77e2066e4ef7b9f2b2b104cd97e9ca", 623 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Splunk/splunk.ron", 624 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Splunk/splunk.ron", 625 | categories: [ 626 | "Log Management", 627 | ], 628 | ), 629 | ( 630 | author: "a5huynh", 631 | description: "Stardew Valley wiki", 632 | name: "stardew", 633 | label: "Stardew Valley", 634 | sha: "1e2ea371be301a0e0e0d469ff4348b0a2e4777c72752a182f18d6f7e0c3bba32", 635 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/stardew/stardew.ron", 636 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/stardew/stardew.ron", 637 | categories: [ 638 | "Games", 639 | ], 640 | ), 641 | ( 642 | author: "popcar2", 643 | description: "Find games quickly on Steam, the popular PC video game store!", 644 | name: "steam", 645 | label: "Steam Store", 646 | sha: "7c9404e0afe0e9da26cadc167dd492d8f698d81785cf01ed99201a3af789b3f0", 647 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Steam/steam.ron", 648 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Steam/steam.ron", 649 | categories: [ 650 | "Games", 651 | ], 652 | ), 653 | ( 654 | author: "popcar2", 655 | description: "Terraria wiki.gg for all your adventuring needs!", 656 | name: "Terraria", 657 | label: "Terraria", 658 | sha: "4f036319f6ea6a4cb80254419fdee9a850b8fee957caf84dbcca966b56e2261f", 659 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Terraria/Terraria.ron", 660 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Terraria/Terraria.ron", 661 | categories: [ 662 | "Games", 663 | ], 664 | ), 665 | ( 666 | author: "jwl", 667 | description: "An index of Tim Ferriss\' blog + podcasts", 668 | name: "tim-ferriss", 669 | label: "Tim Ferriss Blog & Podcasts", 670 | sha: "effb96d3170465eaafb58448839d47aa06157d09e2652ad54e3c760bb2b220b7", 671 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/tim-ferriss/tim-ferriss.ron", 672 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/tim-ferriss/tim-ferriss.ron", 673 | categories: [ 674 | "Media", 675 | ], 676 | ), 677 | ( 678 | author: "a5huynh", 679 | description: "The Walking Dead (/twd) lens includes all information\n about the comic series, novels, video games, and television shows, including\n character statuses and current storyline plot-points.", 680 | name: "twd", 681 | label: "The Walking Dead", 682 | sha: "26e945b9cc74cd765a66b7293b10cf81ab7dcdc3db224ecad7308b1d508f7c49", 683 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/twd/twd.ron", 684 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/twd/twd.ron", 685 | categories: [ 686 | "Media", 687 | "Television", 688 | ], 689 | ), 690 | ( 691 | author: "oparaskos", 692 | description: "Unity targeted websites", 693 | name: "unity", 694 | label: "Unity", 695 | sha: "7f03d4f17414e5aa3ec4f7d1834bff96d896a80ecf014c1aad295c4d559b3660", 696 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/Unity/unity.ron", 697 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/Unity/unity.ron", 698 | categories: [ 699 | "Programming", 700 | "Game Development", 701 | ], 702 | ), 703 | ( 704 | author: "oparaskos", 705 | description: "Unreal Engine 4.27 editor/engine documentation", 706 | name: "unreal_4", 707 | label: "Unreal Engine 4.27 Docs", 708 | sha: "639f5ce0bcddb47850ea49b8b3e04544be80c12e2597408965f2660ca8712a4a", 709 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/unreal_4/unreal_4.ron", 710 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/unreal_4/unreal_4.ron", 711 | categories: [ 712 | "Programming", 713 | "Game Development", 714 | ], 715 | ), 716 | ( 717 | author: "oparaskos", 718 | description: "Unreal Engine 5.2 editor/engine documentation", 719 | name: "unreal_5", 720 | label: "Unreal Engine 5.2 Docs", 721 | sha: "db75eb63ef5a9466dfb0194351b0aadad3282d9e306cfb8d9b9dc9b9119df9dd", 722 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/unreal_5/unreal_5.ron", 723 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/unreal_5/unreal_5.ron", 724 | categories: [ 725 | "Programming", 726 | "Game Development", 727 | ], 728 | ), 729 | ( 730 | author: "popcar2", 731 | description: "Vintage Story wiki", 732 | name: "vintage_story", 733 | label: "Vintage Story", 734 | sha: "05e50fc2041b4f53704a26e7ba9d3022595a09ee7a73cd6925f1efa31e335218", 735 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/vintage_story/vintage_story.ron", 736 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/vintage_story/vintage_story.ron", 737 | categories: [ 738 | "Games", 739 | ], 740 | ), 741 | ( 742 | author: "Mohd-PH", 743 | description: "A lens for Vue, a progressive JavaScript framework!", 744 | name: "vue", 745 | label: "Vue", 746 | sha: "5458ee170fb4927c5ee71db6fe631d51bf284c40c672cb800ac5b6adda2650a9", 747 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/vue/vue.ron", 748 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/vue/vue.ron", 749 | categories: [ 750 | "Programming", 751 | "Web Development", 752 | "Javascript", 753 | ], 754 | ), 755 | ( 756 | author: "spyglass-search", 757 | description: "Top 50k wikipedia articles", 758 | name: "wikipedia", 759 | label: "Wikipedia", 760 | sha: "7dac042ccf3267d053e97d8da8570a8cbc43460c475e0bd1e0e85873ec8b775f", 761 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/wikipedia/wikipedia.ron", 762 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/wikipedia/wikipedia.ron", 763 | categories: [ 764 | "Knowledge", 765 | ], 766 | ), 767 | ( 768 | author: "Chicken", 769 | description: "Search through achievements, classes, and more! This includes everything but items, NPCs, and quests.", 770 | name: "wow", 771 | label: "World of Warcraft (WoW) Guides & General Info", 772 | sha: "901933f951ae611ffad1f26bcfb95c6d99b971b4dcb57f8d1bf38e4e67e2b6cb", 773 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/wow/wow.ron", 774 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/wow/wow.ron", 775 | categories: [ 776 | "Games", 777 | "MMORPG", 778 | ], 779 | ), 780 | ( 781 | author: "Chicken", 782 | description: "Search through all WoW items and item sets!", 783 | name: "wow_items", 784 | label: "World of Warcraft (WoW) Items", 785 | sha: "8b85fe5899c4a3e7b5395fe3e78655f7fcbbe3eaa9f8cc268867309063eae20f", 786 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/wow_items/wow_items.ron", 787 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/wow_items/wow_items.ron", 788 | categories: [ 789 | "Games", 790 | "MMORPG", 791 | ], 792 | ), 793 | ( 794 | author: "Chicken", 795 | description: "Search through World of Warcraft (WoW) NPCs!", 796 | name: "wow_npcs", 797 | label: "World of Warcraft (WoW) NPCs", 798 | sha: "f0b58914bc82b14c805011d89a57955129a89f4269ef55fba52bc45f3ef5f2e7", 799 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/wow_npcs/wow_npcs.ron", 800 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/wow_npcs/wow_npcs.ron", 801 | categories: [ 802 | "Games", 803 | "MMORPG", 804 | ], 805 | ), 806 | ( 807 | author: "Chicken", 808 | description: "Search through all WoW quests!", 809 | name: "wow_quests", 810 | label: "World of Warcraft (WoW) Quests", 811 | sha: "79a4431c4c9675ac1e3a266b0be2dc89d1dec25a354b830a7a23c5434541359f", 812 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/wow_quests/wow_quests.ron", 813 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/wow_quests/wow_quests.ron", 814 | categories: [ 815 | "Games", 816 | "MMORPG", 817 | ], 818 | ), 819 | ( 820 | author: "Chicken", 821 | description: "Search through World of Warcraft (WoW) spells & abilities!", 822 | name: "wow_spells", 823 | label: "World of Warcraft (WoW) Spells", 824 | sha: "8318e73f6d8151057dc26ef85b88e93341e93feaadf6c32fb94292242b69446a", 825 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/wow_spells/wow_spells.ron", 826 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/wow_spells/wow_spells.ron", 827 | categories: [ 828 | "Games", 829 | "MMORPG", 830 | ], 831 | ), 832 | ( 833 | author: "popcar2", 834 | description: "xkcd webcomics, now ready to pull out at a moment\'s notice!", 835 | name: "xkcd", 836 | label: "xkcd", 837 | sha: "4367a7b19a68127faa365c1147d406170e0850da9ff867c5e7fb88a13bc2dc43", 838 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/XKCD/xkcd.ron", 839 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/XKCD/xkcd.ron", 840 | categories: [ 841 | "Comics", 842 | "Media", 843 | ], 844 | ), 845 | ( 846 | author: "a5huynh", 847 | description: "YC articles / blog posts for a handy quick reference to startup materials", 848 | name: "yc", 849 | label: "YCombinator", 850 | sha: "7b1b9627b00b9763bf14384166aa2556b731f9a12c9f4ca36d7879f248bfa6f8", 851 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/yc/yc.ron", 852 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/yc/yc.ron", 853 | categories: [ 854 | "Startups", 855 | ], 856 | ), 857 | ( 858 | author: "pknessness", 859 | description: "Legend of Zelda Twilight Princess Walkthrough", 860 | name: "zelda_twilight_princess", 861 | label: "Zelda: Twilight Princess", 862 | sha: "76d8ac58203a4835bf2d0b8148437b052ca3ef8dd58dca8290aff27e72d01419", 863 | download_url: "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses/zelda_twilight_princess/zelda_twilight_princess.ron", 864 | html_url: "https://github.com/spyglass-search/lens-box/blob/main/lenses/zelda_twilight_princess/zelda_twilight_princess.ron", 865 | categories: [ 866 | "Games", 867 | ], 868 | ), 869 | ] -------------------------------------------------------------------------------- /lenses/2007scape/2007scape.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "2007scape", 4 | label: "Old School RuneScape (OSRS) wiki", 5 | author: "a5huynh", 6 | description: Some("Old School Runescape wiki and useful reference guides, utilities, and more."), 7 | categories: ["Games" , "MMORPG"], 8 | domains: [], 9 | urls: [ 10 | "https://oldschool.runescape.wiki/w/" 11 | ], 12 | rules: [ 13 | // Wiki related actions 14 | SkipURL("https://oldschool.runescape.wiki/w/*action=*"), 15 | SkipURL("https://oldschool.runescape.wiki/w/*curid=*"), 16 | SkipURL("https://oldschool.runescape.wiki/w/*diff=*"), 17 | SkipURL("https://oldschool.runescape.wiki/w/*oldid=*"), 18 | SkipURL("https://oldschool.runescape.wiki/w/*printable=*"), 19 | SkipURL("https://oldschool.runescape.wiki/w/*redirect=*"), 20 | SkipURL("https://oldschool.runescape.wiki/w/*veaction=*"), 21 | // Special pages 22 | SkipURL("https://oldschool.runescape.wiki/w/*_talk:*"), 23 | SkipURL("https://oldschool.runescape.wiki/w/Category:*"), 24 | SkipURL("https://oldschool.runescape.wiki/w/Concept:*"), 25 | SkipURL("https://oldschool.runescape.wiki/w/Exchange:*"), 26 | SkipURL("https://oldschool.runescape.wiki/w/File:*"), 27 | SkipURL("https://oldschool.runescape.wiki/w/Forum:*"), 28 | SkipURL("https://oldschool.runescape.wiki/w/Help:*"), 29 | SkipURL("https://oldschool.runescape.wiki/w/MediaWiki:*"), 30 | SkipURL("https://oldschool.runescape.wiki/w/Module:*"), 31 | SkipURL("https://oldschool.runescape.wiki/w/RuneScape:*"), 32 | SkipURL("https://oldschool.runescape.wiki/w/Special:*"), 33 | SkipURL("https://oldschool.runescape.wiki/w/Social_media:*"), 34 | SkipURL("https://oldschool.runescape.wiki/w/Talk:*"), 35 | SkipURL("https://oldschool.runescape.wiki/w/Template:*"), 36 | SkipURL("https://oldschool.runescape.wiki/w/*/Template*"), 37 | SkipURL("https://oldschool.runescape.wiki/w/Transcript:*"), 38 | SkipURL("https://oldschool.runescape.wiki/w/User:*"), 39 | SkipURL("https://oldschool.runescape.wiki/w/smw/*"), 40 | ] 41 | ) 42 | -------------------------------------------------------------------------------- /lenses/AUR/AUR.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "AUR", 4 | label: "Arch Linux User Repository (AUR)", 5 | author: "popcar2", 6 | description: Some("Arch User Repository, so you can find packages quickly."), 7 | categories: ["Package Repository"], 8 | domains: [], 9 | urls: [ 10 | "https://archlinux.org/packages/", 11 | "https://aur.archlinux.org/packages/" 12 | ], 13 | rules: [ 14 | LimitURLDepth("https://aur.archlinux.org/packages/", 1), 15 | SkipURL("https://archlinux.org/packages/*source=*"), 16 | SkipURL("https://archlinux.org/packages/?maintainer=*"), 17 | SkipURL("https://archlinux.org/packages/?packager=*"), 18 | SkipURL("https://archlinux.org/packages/*/download/"), 19 | SkipURL("https://archlinux.org/packages/*/download"), 20 | SkipURL("https://archlinux.org/packages/*/files/"), 21 | SkipURL("https://archlinux.org/packages/*/flag/"), 22 | SkipURL("https://archlinux.org/packages/*/sonames/"), 23 | // Disable testing repos. You can't view this anyways. 24 | SkipURL("https://archlinux.org/packages/testing*"), 25 | SkipURL("https://archlinux.org/packages/community-testing*"), 26 | SkipURL("https://archlinux.org/packages/staging*"), 27 | SkipURL("https://archlinux.org/packages/community-staging*"), 28 | ] 29 | ) -------------------------------------------------------------------------------- /lenses/Akka/Akka.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Akka", 4 | description: Some("Akka API Documentation"), 5 | categories: [ 6 | "Programming" 7 | ], 8 | domains: [], 9 | urls: [ 10 | "https://doc.akka.io/api/akka/current/" 11 | ], 12 | version: "1", 13 | rules: [], 14 | ) -------------------------------------------------------------------------------- /lenses/Android/Android.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Android", 4 | description: Some("Android API Documentation"), 5 | categories: ["Programming"], 6 | domains: [], 7 | urls: [ 8 | "https://developers.google.com/android/", 9 | "https://developers.google.com/android.html", 10 | "https://developer.android.com/" 11 | ], 12 | version: "1", 13 | rules: [], 14 | pipeline: None, 15 | ) -------------------------------------------------------------------------------- /lenses/Angular/Angular.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Angular", 4 | description: Some("Angular API Documentation"), 5 | categories: ["Programming", "Web Development"], 6 | domains: [ 7 | "https://update.angular.io", 8 | "https://angular.io/"], 9 | urls: [], 10 | version: "1", 11 | rules: [], 12 | pipeline: None, 13 | ) -------------------------------------------------------------------------------- /lenses/AngularJS/AngularJS.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "AngularJS", 4 | description: Some("AngularJS API Documentation"), 5 | categories: ["Programming", "Web Development"], 6 | domains: [], 7 | urls: [ 8 | "https://code.angularjs.org/1.8.2/docs/", 9 | ], 10 | version: "1", 11 | rules: [] 12 | ) -------------------------------------------------------------------------------- /lenses/Ansible/Ansible.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Ansible", 4 | description: Some("Ansible API Documentation"), 5 | categories: ["Developer Tools"], 6 | domains: [], 7 | urls: [ 8 | "https://docs.ansible.com/ansible/latest/", 9 | ], 10 | version: "1", 11 | rules: [], 12 | ) -------------------------------------------------------------------------------- /lenses/Apache_HTTP_Server/Apache_HTTP_Server.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Apache_HTTP_Server", 4 | label: "Apache HTTP Server", 5 | description: Some("Apache HTTP Server API Documentation"), 6 | categories: ["Developer Tools"], 7 | domains: [], 8 | urls: [ 9 | "https://httpd.apache.org/docs/current" 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) -------------------------------------------------------------------------------- /lenses/Bootstrap_3.4/Bootstrap_3.4.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Bootstrap_3.4", 4 | label: "Bootstrap 3.4", 5 | description: Some("Bootstrap 3.4 API Documentation"), 6 | categories: ["Programming", "Web Development"], 7 | domains: [], 8 | urls: [ 9 | "https://getbootstrap.com/docs/3.4/" 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) -------------------------------------------------------------------------------- /lenses/Bootstrap_4.6/Bootstrap_4.6.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Bootstrap_4.6", 4 | label: "Bootstrap 4.6", 5 | description: Some("Bootstrap 4.6 API Documentation"), 6 | categories: ["Programming", "Web Development"], 7 | domains: [], 8 | urls: [ 9 | "https:///getbootstrap.com/docs/4.6/" 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) -------------------------------------------------------------------------------- /lenses/Bootstrap_5.2/Bootstrap_5.2.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Bootstrap_5.2", 4 | label: "Bootstrap 5.2", 5 | description: Some("Bootstrap 5.2 API Documentation"), 6 | categories: ["Programming", "Web Development"], 7 | domains: [], 8 | urls: [ 9 | "https://getbootstrap.com/docs/5.2/" 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) -------------------------------------------------------------------------------- /lenses/Bourbon_7.0.0/Bourbon_7.0.0.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Bourbon_7.0.0", 4 | label: "Bourbon 7.0.0", 5 | description: Some("Bourbon 7.0.0 API Documentation"), 6 | categories: ["Programming", "Web Development"], 7 | domains: [], 8 | urls: [ 9 | "https://www.bourbon.io/docs/7.0.0/", 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) -------------------------------------------------------------------------------- /lenses/Bulbapedia/Bulbapedia.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Bulbapedia", 4 | label: "Bulbapedia", 5 | description: Some("Pokémon encyclopedia"), 6 | categories: ["Games"], 7 | domains: [], 8 | urls: [ 9 | "https://bulbapedia.bulbagarden.net/wiki/", 10 | ], 11 | version: "1", 12 | rules: [ 13 | SkipURL("https://bulbapedia.bulbagarden.net/wiki/File*"), 14 | SkipURL("https://bulbapedia.bulbagarden.net/wiki/User_talk:*"), 15 | SkipURL("https://bulbapedia.bulbagarden.net/wiki/index.php*"), 16 | SkipURL("https://bulbapedia.bulbagarden.net/wiki/Special*"), 17 | SkipURL("https://bulbapedia.bulbagarden.net/wiki/User:*"), 18 | SkipURL("https://bulbapedia.bulbagarden.net/wiki/Template:*"), 19 | SkipURL("https://bulbapedia.bulbagarden.net/wiki/Talk:*"), 20 | SkipURL("https://bulbapedia.bulbagarden.net/wiki/Help:*"), 21 | ], 22 | ) -------------------------------------------------------------------------------- /lenses/CBR/CBR.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "CBR", 4 | label: "Comic Book Roundup", 5 | author: "popcar2", 6 | description: Some("Comic Book Roundup, a review aggregator for comic books & graphic novels."), 7 | categories: ["Comics", "Reviews"], 8 | domains: [], 9 | urls: [ 10 | "https://comicbookroundup.com/comic-books/reviews/", 11 | "https://comicbookroundup.com/comic-books/top-comics$", 12 | ], 13 | rules: [ 14 | LimitURLDepth("https://comicbookroundup.com/comic-books/reviews", 2), 15 | SkipURL("https://comicbookroundup.com/comic-books/reviews/*?*"), 16 | SkipURL("https://comicbookroundup.com/comic-books/reviews/*#*"), 17 | ] 18 | ) 19 | -------------------------------------------------------------------------------- /lenses/CMake/CMake.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "CMake", 4 | description: Some("CMake API Documentation"), 5 | categories: ["Developer Tools"], 6 | domains: [], 7 | urls: [ 8 | "https://cmake.org/cmake/help/latest/" 9 | ], 10 | version: "1", 11 | rules: [], 12 | ) -------------------------------------------------------------------------------- /lenses/CSS/CSS.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "CSS", 4 | description: Some("CSS Documentation"), 5 | categories: ["Programming", "Web Development"], 6 | domains: [], 7 | urls: [ 8 | "https://yari-demos.prod.mdn.mozit.cloud/zh-CN/docs/Web/CSS/", 9 | "https://developer.mozilla.org/", 10 | "https://github.com/mdn/learning-area/contributors/main/css/", 11 | "https://interactive-examples.mdn.mozilla.net/pages/css/", 12 | "https://developer.mozilla.org/en-US/docs/MDN/Writing_guidelines/Writing_style_guide/Code_style_guide/CSS", 13 | "https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/HTML_and_CSS", 14 | "https://developer.mozilla.org/en-US/docs/Learn/Accessibility/CSS_and_JavaScript/Test_your_skills__CSS_and_JavaScript_accessibility", 15 | "https://developer.mozilla.org/en-US/docs/Learn/Accessibility/CSS_and_JavaScript", 16 | "https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/CSS_basics", 17 | "https://developer.mozilla.org/en-US/docs/Learn/CSS", 18 | "https://developer.mozilla.org/en-US/docs/Learn/CSS/", 19 | "https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context", 20 | "https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started/Challenge_solutions", 21 | "https://developer.mozilla.org/en-US/docs/Web/css-2", 22 | "https://developer.mozilla.org/en-US/docs/Web/CSS", 23 | "https://developer.mozilla.org/en-US/docs/Web/CSS/", 24 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericArray", 25 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSSkewX/CSSSkewX", 26 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSSkewX/ax", 27 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/cssText", 28 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/item", 29 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/parentRule", 30 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/getPropertyPriority", 31 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/setProperty", 32 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/length", 33 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/getPropertyCSSValue", 34 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/msGetPropertyEnabled", 35 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/getPropertyValue", 36 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/msPutPropertyEnabled", 37 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/removeProperty", 38 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/cssFloat", 39 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSValueList", 40 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRule", 41 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathProduct/CSSMathProduct", 42 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathProduct/values", 43 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSValue", 44 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Typed_OM_API/Guide", 45 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Painting_API", 46 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSUnitValue", 47 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMediaRule/media", 48 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformValue", 49 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSSkewX", 50 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSkeyframeRule-2", 51 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathValue/operator", 52 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSUnparsedValue/entries", 53 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSUnparsedValue/keys", 54 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSUnparsedValue/length", 55 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSUnparsedValue/forEach", 56 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSUnparsedValue/values", 57 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSUnparsedValue/CSSUnparsedValue", 58 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Counter_Styles", 59 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPositionValue", 60 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathSum", 61 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSScale/z", 62 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSScale/y", 63 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSScale/x", 64 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSScale/CSSScale", 65 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSSkewY", 66 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/Determining_the_dimensions_of_elements", 67 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/Using_dynamic_styling_information", 68 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/CSS_Declaration", 69 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/Managing_screen_orientation", 70 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/CSS_Declaration_Block", 71 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathMax", 72 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRule/cssText", 73 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRule/parentRule", 74 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRule/type", 75 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRule/parentStyleSheet", 76 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTranslate/z", 77 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTranslate/y", 78 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTranslate/CSSTranslate", 79 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTranslate/x", 80 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNamespaceRule", 81 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSImportRule", 82 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPropertyRule", 83 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration", 84 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMatrixComponent", 85 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSFontFaceRule", 86 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet", 87 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformComponent", 88 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformValue/CSSTransformValue", 89 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformValue/toMatrix", 90 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformValue/entries", 91 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformValue/keys", 92 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformValue/length", 93 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformValue/forEach", 94 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformValue/values", 95 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformValue/is2D", 96 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPageRule", 97 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue", 98 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleValue/parseAll", 99 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleValue/parse", 100 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSkeyframeRule/style", 101 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSkeyframeRule/keyText", 102 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPerspective/length", 103 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPerspective/CSSPerspective", 104 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Painting_API/Guide", 105 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPerspective", 106 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNamespaceRule/namespaceURI", 107 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNamespaceRule/prefix", 108 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue/getRGBColorValue", 109 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue/getStringValue", 110 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue/primitiveType", 111 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue/getCounterValue", 112 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue/setFloatValue", 113 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue/getRectValue", 114 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue/getFloatValue", 115 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue/setStringValue", 116 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSValueList/item", 117 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSValueList/length", 118 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathMin", 119 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleRule", 120 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathInvert", 121 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSGroupingRule/insertRule", 122 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSGroupingRule/cssRules", 123 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSGroupingRule/deleteRule", 124 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSVariableReferenceValue/variable", 125 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSVariableReferenceValue/fallback", 126 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSVariableReferenceValue/CSSVariableReferenceValue", 127 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSConditionRule", 128 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericArray/length", 129 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMatrixComponent/CSSMatrixComponent", 130 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMatrixComponent/matrix", 131 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSFontFaceRule/style", 132 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPageRule/style", 133 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPageRule/selectorText", 134 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSValue/cssText", 135 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSValue/cssValueType", 136 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathValue", 137 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule/findRule", 138 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule/appendRule", 139 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule/cssRules", 140 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule/deleteRule", 141 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule/name", 142 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathProduct", 143 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model", 144 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSImageValue", 145 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathNegate/value", 146 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathNegate/CSSMathNegate", 147 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathSum/CSSMathSum", 148 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathSum/values", 149 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRuleList", 150 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRotate/angle", 151 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRotate/z", 152 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRotate/y", 153 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRotate/CSSRotate", 154 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRotate/x", 155 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSSkew/ay", 156 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSSkew/ax", 157 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSSkew/CSSSkew", 158 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Typed_OM_API", 159 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSUnparsedValue", 160 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRotate", 161 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTranslate", 162 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSVariableReferenceValue", 163 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSUnitValue/CSSUnitValue", 164 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSUnitValue/value", 165 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSUnitValue/unit", 166 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSCounterStyleRule", 167 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathNegate", 168 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSConditionRule/conditionText", 169 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule", 170 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathMin/CSSMathMin", 171 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathMin/values", 172 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathMax/CSSMathMax", 173 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathMax/values", 174 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSSupportsRule", 175 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleRule/styleMap", 176 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleRule/style", 177 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleRule/selectorText", 178 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSGroupingRule", 179 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/max", 180 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/mul", 181 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/to", 182 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/div", 183 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/sub", 184 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/type", 185 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/add", 186 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/min", 187 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/parse", 188 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/toSum", 189 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/equals", 190 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformComponent/toMatrix", 191 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformComponent/toString", 192 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSTransformComponent/is2D", 193 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPropertyRule/name", 194 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPropertyRule/syntax", 195 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPropertyRule/initialvalue", 196 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPropertyRule/inherits", 197 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/replace", 198 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/removeRule", 199 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/ownerRule", 200 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/addRule", 201 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/CSSStyleSheet", 202 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/insertRule", 203 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/cssRules", 204 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/deleteRule", 205 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/replaceSync", 206 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/rules", 207 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Properties_and_Values_API", 208 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPositionValue/CSSPositionValue", 209 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPositionValue/y", 210 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPositionValue/x", 211 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframeRule", 212 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS", 213 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape", 214 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS/supports", 215 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS/RegisterProperty", 216 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS/paintWorklet", 217 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS/registerProperty-2", 218 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS/factory_functions", 219 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMediaRule", 220 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSScale", 221 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSImportRule/stylesheet", 222 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSImportRule/media", 223 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSImportRule/href", 224 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue", 225 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathInvert/value", 226 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSMathInvert/CSSMathInvert", 227 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSKeywordValue", 228 | "https://developer.mozilla.org/en-US/docs/Web/API/CSS_Properties_and_Values_API/guide", 229 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSCounterStyleRule/additiveSymbols", 230 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSCounterStyleRule/pad", 231 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSCounterStyleRule/negative", 232 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSCounterStyleRule/system", 233 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSCounterStyleRule/symbols", 234 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSCounterStyleRule/fallback", 235 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSCounterStyleRule/suffix", 236 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSCounterStyleRule/speakAs", 237 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSCounterStyleRule/name", 238 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSCounterStyleRule/range", 239 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSCounterStyleRule/prefix", 240 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleValue", 241 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRuleList/item", 242 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSRuleList/length", 243 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSSkewY/CSSSkewY", 244 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSSkewY/ay", 245 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSKeywordValue/value", 246 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSKeywordValue/CSSKeywordValue", 247 | "https://developer.mozilla.org/en-US/docs/Web/API/CSSSkew", 248 | "https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/SVG_and_CSS", 249 | "https://developer.mozilla.org/en-US/docs/Glossary/Block/CSS", 250 | "https://developer.mozilla.org/en-US/docs/Glossary/CSS_Selector", 251 | "https://developer.mozilla.org/en-US/docs/Glossary/Descriptor_(CSS)", 252 | "https://developer.mozilla.org/en-US/docs/Glossary/Property/CSS", 253 | "https://developer.mozilla.org/en-US/docs/Glossary/CSS", 254 | ], 255 | version: "1", 256 | rules: [], 257 | ) -------------------------------------------------------------------------------- /lenses/EldenRing/EldenRing.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "EldenRing", 4 | label: "Elden Ring", 5 | author: "popcar2", 6 | description: Some("Elden Ring Fextralife Wiki"), 7 | categories: ["Games"], 8 | domains: [], 9 | urls: [ 10 | "https://eldenring.wiki.fextralife.com/" 11 | ], 12 | rules: [ 13 | // Ignore misc wiki pages 14 | SkipURL("https://eldenring.wiki.fextralife.com/file/*"), 15 | SkipURL("https://eldenring.wiki.fextralife.com/*tooltip*"), 16 | SkipURL("https://eldenring.wiki.fextralife.com/*id=*"), 17 | // Edge case 18 | SkipURL("https://eldenring.wiki.fextralife.com/ws/*"), 19 | ] 20 | ) 21 | -------------------------------------------------------------------------------- /lenses/GTFOBins/gtfobins.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "gtfobins", 4 | label: "GTFOBins", 5 | author: "TheSelox", 6 | description: Some("GTFOBins is a curated list of Unix binaries that can be used to bypass local security restrictions in misconfigured systems."), 7 | categories: ["Computer Security"], 8 | is_enabled: true, 9 | domains: [ 10 | "https://gtfobins.github.io", 11 | ], 12 | urls: [ 13 | "https://gtfobins.github.io/", 14 | ], 15 | rules: [] 16 | ) 17 | -------------------------------------------------------------------------------- /lenses/Go/Go.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Go", 4 | label: "Go Language Documentation", 5 | description: Some("Go API Documentation"), 6 | categories: ["Programming"], 7 | domains: [], 8 | urls: [ 9 | "https://go.dev/doc/", 10 | "https://go.dev/ref/", 11 | "https://go.dev/security/", 12 | "https://pkg.go.dev/", 13 | ], 14 | version: "1", 15 | rules: [], 16 | ) -------------------------------------------------------------------------------- /lenses/Java_SE11/Java_SE11.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Java_SE11", 4 | label: "Java SE11 Documentation", 5 | description: Some("Java SE11 API Documentation"), 6 | categories: ["Programming"], 7 | domains: [], 8 | urls: [ 9 | "https://docs.oracle.com/en/java/javase/11/docs/api/", 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) -------------------------------------------------------------------------------- /lenses/Java_SE18/Java_SE18.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Java_SE18", 4 | label: "Java SE18 Documentation", 5 | description: Some("Java SE18 API Documentation"), 6 | categories: ["Programming"], 7 | domains: [], 8 | urls: [ 9 | "https://docs.oracle.com/en/java/javase/18/docs/api/", 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) -------------------------------------------------------------------------------- /lenses/Java_SE19/Java_SE19.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "Java_SE19", 4 | label: "Java SE19 Documentation", 5 | description: Some("Java SE19 API Documentation"), 6 | categories: ["Programming"], 7 | domains: [], 8 | urls: [ 9 | "https://docs.oracle.com/en/java/javase/19/docs/api/", 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) -------------------------------------------------------------------------------- /lenses/LOLBAS/lolbas.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "lolbas", 4 | label: "LOLBAS Project", 5 | author: "TheSelox", 6 | description: Some("Living Off The Land Binaries, Scripts and Libraries"), 7 | categories: ["Computer Security"], 8 | is_enabled: true, 9 | domains: [ 10 | "https://lolbas-project.github.io", 11 | ], 12 | urls: [ 13 | "https://lolbas-project.github.io/", 14 | ], 15 | rules: [ 16 | SkipURL("https://lolbas-project.github.io/api"), 17 | ] 18 | ) 19 | -------------------------------------------------------------------------------- /lenses/NodeJs/NodeJs.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "NodeJs", 4 | label: "NodeJS API Documentation", 5 | description: Some("NodeJs API Documentation"), 6 | categories: ["Programming", "Web Development"], 7 | domains: [], 8 | urls: [ 9 | "https://nodejs.org/api/" 10 | ], 11 | version: "1", 12 | rules: [], 13 | pipeline: None, 14 | ) -------------------------------------------------------------------------------- /lenses/OSCP/oscp.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | author: "musashi - savdbroek", 4 | name: "oscp", 5 | label: "OSCP Certification", 6 | description: Some("OSCP related Guides & Tools"), 7 | categories: ["Computer Security"], 8 | domains: [], 9 | urls: [ 10 | // Shell Generator: 11 | "https://www.revshells.com/$", 12 | // Bigger sheets 13 | "https://github.com/0xsyr0/OSCP$", 14 | "https://www.noobsec.net/oscp-cheatsheet/$", 15 | "https://therealunicornsecurity.github.io/OSCP/$", 16 | "https://gist.github.com/evanrolfe/892da7f0ef34bcd2c2b70cbd9080e33c$", 17 | "https://github.com/akenofu/OSCP-Cheat-Sheet/blob/master/README.md$", 18 | // Unix exploitation: 19 | "https://wadcoms.github.io/#$", 20 | "https://www.noobsec.net/privesc-linux/$", 21 | "https://0x1.gitlab.io/exploit/Linux-Privilege-Escalation/$", 22 | // Windows Priv ESC 23 | "https://wadcoms.github.io/#$", 24 | "https://wadcoms.github.io/#+Shell+Privilege%20Escalation+Windows$", 25 | "https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md$", 26 | "https://infosecwriteups.com/privilege-escalation-in-windows-380bee3a2842$", 27 | "https://www.noobsec.net/privesc-windows/$", 28 | "https://github.com/gtworek/Priv2Admin$", 29 | "https://hideandsec.sh/books/windows-sNL/page/in-the-potato-family-i-want-them-all$", 30 | // For Powershell Scripts: 31 | "https://github.com/GhostPack/Seatbelt$", 32 | "https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1$", 33 | // Password Harvesting 34 | "https://github.com/AlessandroZ/LaZagne$", 35 | // Active Directory 36 | "https://gist.github.com/ssstonebraker/a1964b2f20acc8edb239409b6c4906ce$", 37 | "https://hideandsec.sh/books/cheatsheets-82c/page/active-directory$", 38 | "https://drop.savdbroek.nl/FiYsSaMf/pentest_ad_dark.png$", 39 | "https://gist.github.com/insi2304/484a4e92941b437bad961fcacda82d49$", 40 | "https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md$", 41 | "https://hideandsec.sh/books/cheatsheets-82c/page/active-directory-python-edition#bkmrk-acls---adminsdholder$", 42 | // BOF 43 | "https://boschko.ca/braindead-buffer-overflow-guide-to-pass-the-oscp-blindfolded/$", 44 | // File Transfers 45 | "https://ironhackers.es/en/cheatsheet/transferir-archivos-post-explotacion-cheatsheet/$", 46 | // Hashcat Hashes 47 | "https://hashcat.net/wiki/doku.php?id=example_hashes$" 48 | ], 49 | 50 | rules: [] 51 | ) 52 | -------------------------------------------------------------------------------- /lenses/OpenCritic/OpenCritic.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "OpenCritic", 4 | label: "OpenCritic: Games Reviews", 5 | author: "popcar2", 6 | description: Some("Opencritic: A review aggregation website for video games!"), 7 | categories: ["Games", "Reviews"], 8 | domains: [], 9 | urls: [ 10 | "https://opencritic.com/" 11 | ], 12 | rules: [ 13 | // Ignore media & reviews; they already exist in the game's page 14 | SkipURL("https://opencritic.com/*/reviews"), 15 | SkipURL("https://opencritic.com/*/media"), 16 | SkipURL("https://opencritic.com/*/export"), 17 | // Ignore news articles. Trust me, nobody cares. 18 | SkipURL("https://opencritic.com/news/*"), 19 | // Ignore critic pages. They're unimportant imo, and take up >6k pages. 20 | SkipURL("https://opencritic.com/critic/*"), 21 | // Ignore duplicate pages 22 | SkipURL("https://opencritic.com/*/media"), 23 | SkipURL("https://opencritic.com/*page=*"), 24 | SkipURL("https://opencritic.com/*ref=*"), 25 | SkipURL("https://opencritic.com/*sort=*"), 26 | SkipURL("https://opencritic.com/*order=*"), 27 | SkipURL("https://opencritic.com/*/name"), 28 | SkipURL("https://opencritic.com/*/percent-recommended"), 29 | SkipURL("https://opencritic.com/*/num-reviews"), 30 | SkipURL("https://opencritic.com/*/date"), 31 | // Ignore resources 32 | SkipURL("https://opencritic.com/*.ttf"), 33 | SkipURL("https://opencritic.com/*.css"), 34 | SkipURL("https://opencritic.com/*.woff*"), 35 | SkipURL("https://opencritic.com/*.eot"), 36 | SkipURL("https://opencritic.com/*.js"), 37 | SkipURL("https://opencritic.com/*.svg"), 38 | SkipURL("https://opencritic.com/*.webmanifest"), 39 | ] 40 | ) 41 | -------------------------------------------------------------------------------- /lenses/RogueLegacy2/RogueLegacy2.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "RogueLegacy2", 4 | label: "Rogue Legacy 2 Wiki", 5 | author: "popcar2", 6 | description: Some("Rogue Legacy 2 wiki"), 7 | categories: ["Games"], 8 | domains: [], 9 | urls: [ 10 | "https://rogue-legacy-2.fandom.com/wiki/" 11 | ], 12 | rules: [ 13 | // Trash pages 14 | SkipURL("https://rogue-legacy-2.fandom.com/wiki/*action=*"), 15 | SkipURL("https://rogue-legacy-2.fandom.com/wiki/*file=*"), 16 | SkipURL("https://rogue-legacy-2.fandom.com/wiki/*so=*"), 17 | SkipURL("https://rogue-legacy-2.fandom.com/wiki/*#articleComments*"), 18 | // Misc wiki pages 19 | SkipURL("https://rogue-legacy-2.fandom.com/wiki/Special:*"), 20 | SkipURL("https://rogue-legacy-2.fandom.com/wiki/User:*"), 21 | SkipURL("https://rogue-legacy-2.fandom.com/wiki/Template:*"), 22 | SkipURL("https://rogue-legacy-2.fandom.com/wiki/File:*"), 23 | SkipURL("https://rogue-legacy-2.fandom.com/wiki/MediaWiki:*"), 24 | SkipURL("https://rogue-legacy-2.fandom.com/wiki/User_blog:*"), 25 | SkipURL("https://rogue-legacy-2.fandom.com/wiki/Talk:*"), 26 | ] 27 | ) 28 | -------------------------------------------------------------------------------- /lenses/SNAP/snap.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "snap", 4 | label: "Snapcraft: Linux App Store", 5 | author: "pknessness", 6 | description: Some("Indexes snapcraft, the app store for linux."), 7 | categories: ["Package Repository"], 8 | domains: ["snapcraft.io"], 9 | urls: [], 10 | is_enabled: true, 11 | ) 12 | 13 | -------------------------------------------------------------------------------- /lenses/Scryfall/scryfall.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "scryfall", 4 | label: "Magic the Gathering (MtG)", 5 | author: "Haz0ret", 6 | description: Some("Searches through Scryfall and Gatherer to locate magic: the gathering sources"), 7 | categories: ["Games"], 8 | domains: [], 9 | is_enabled: true, 10 | urls: [ 11 | "https://gatherer.wizards.com/Pages/Card/", 12 | "https://scryfall.com/card/" 13 | ] 14 | ) 15 | -------------------------------------------------------------------------------- /lenses/Splunk/splunk.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "splunk", 4 | label: "Splunk SPL commands", 5 | author: "TheSelox", 6 | description: Some("Find documentation on SPL commands"), 7 | categories: ["Log Management"], 8 | domains: [], 9 | urls: [ 10 | "https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/ListOfSearchCommands", 11 | "https://docs.splunk.com/Documentation/Splunk/latest/SearchReference", 12 | "https://docs.splunk.com/Splexicon", 13 | ], 14 | rules: [ 15 | SkipURL("https://docs.splunk.com/*action=pdfbook*"), 16 | SkipURL("https://docs.splunk.com/*download*"), 17 | SkipURL("https://www.splunk.com/*"), 18 | ] 19 | ) 20 | -------------------------------------------------------------------------------- /lenses/Steam/steam.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "steam", 4 | label: "Steam Store", 5 | author: "popcar2", 6 | description: Some("Find games quickly on Steam, the popular PC video game store!"), 7 | categories: ["Games"], 8 | domains: [], 9 | urls: [ 10 | "https://store.steampowered.com/app/" 11 | ], 12 | rules: [ 13 | // This only indexes games 14 | LimitURLDepth("https://store.steampowered.com/app", 1), 15 | SkipURL("https://store.steampowered.com/app/*?*"), 16 | SkipURL("https://store.steampowered.com/app/*.jpg"), 17 | SkipURL("https://store.steampowered.com/app/*.png"), 18 | SkipURL("https://store.steampowered.com/app/*source=*"), 19 | SkipURL("https://store.steampowered.com/app/*%*"), 20 | ] 21 | ) -------------------------------------------------------------------------------- /lenses/Terraria/Terraria.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "2", 3 | name: "Terraria", 4 | label: "Terraria", 5 | author: "popcar2", 6 | description: Some("Terraria wiki.gg for all your adventuring needs!"), 7 | categories: ["Games"], 8 | domains: [], 9 | urls: [ 10 | "https://terraria.wiki.gg/wiki/" 11 | ], 12 | rules: [ 13 | // Trash pages 14 | SkipURL("https://terraria.wiki.gg/wiki/*rdfrom=*"), 15 | SkipURL("https://terraria.wiki.gg/wiki/*redirect=*"), 16 | SkipURL("https://terraria.wiki.gg/wiki/*pagefrom=*"), 17 | SkipURL("https://terraria.wiki.gg/wiki/*action=*"), 18 | SkipURL("https://terraria.wiki.gg/wiki/*oldid=*"), 19 | // Misc wiki pages 20 | SkipURL("https://terraria.wiki.gg/wiki/File:*"), 21 | SkipURL("https://terraria.wiki.gg/wiki/MediaWiki:*"), 22 | SkipURL("https://terraria.wiki.gg/wiki/Special:*"), 23 | SkipURL("https://terraria.wiki.gg/wiki/Terraria_Wiki:*"), 24 | SkipURL("https://terraria.wiki.gg/wiki/User:*"), 25 | SkipURL("https://terraria.wiki.gg/wiki/User_talk:*"), 26 | SkipURL("https://terraria.wiki.gg/wiki/Template_talk:*"), 27 | SkipURL("https://terraria.wiki.gg/wiki/Talk:*"), 28 | SkipURL("https://terraria.wiki.gg/wiki/Guide_talk:*"), 29 | SkipURL("https://terraria.wiki.gg/wiki/Template:*"), 30 | SkipURL("https://terraria.wiki.gg/wiki/Module:*"), 31 | SkipURL("https://terraria.wiki.gg/wiki/Help:*"), 32 | SkipURL("https://terraria.wiki.gg/wiki/*/doc"), 33 | SkipURL("https://terraria.wiki.gg/wiki/*/content"), 34 | // Ignore languages 35 | SkipURL("https://terraria.wiki.gg/wiki/*/cs"), 36 | SkipURL("https://terraria.wiki.gg/wiki/*/es"), 37 | SkipURL("https://terraria.wiki.gg/wiki/*/lt"), 38 | SkipURL("https://terraria.wiki.gg/wiki/*/it"), 39 | SkipURL("https://terraria.wiki.gg/wiki/*/ja"), 40 | SkipURL("https://terraria.wiki.gg/wiki/*/vi"), 41 | SkipURL("https://terraria.wiki.gg/wiki/*/nl"), 42 | SkipURL("https://terraria.wiki.gg/wiki/*/yue"), 43 | SkipURL("https://terraria.wiki.gg/wiki/*/tr"), 44 | SkipURL("https://terraria.wiki.gg/wiki/*/no"), 45 | SkipURL("https://terraria.wiki.gg/wiki/*/th"), 46 | SkipURL("https://terraria.wiki.gg/wiki/*/hi"), 47 | SkipURL("https://terraria.wiki.gg/wiki/*/id"), 48 | SkipURL("https://terraria.wiki.gg/wiki/*/el"), 49 | SkipURL("https://terraria.wiki.gg/wiki/*/sv"), 50 | SkipURL("https://terraria.wiki.gg/wiki/*/lv"), 51 | SkipURL("https://terraria.wiki.gg/wiki/*/fi"), 52 | ] 53 | ) -------------------------------------------------------------------------------- /lenses/Unity/unity.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "unity", 4 | label: "Unity", 5 | author: "oparaskos", 6 | description: Some("Unity targeted websites"), 7 | categories: ["Programming", "Game Development"], 8 | domains: [], 9 | urls: [ 10 | "https://docs.unity3d.com/Manual", 11 | "https://docs.unity3d.com/ScriptReference", 12 | "https://openupm.com/packages/" 13 | ], 14 | rules: [ 15 | SkipURL("https://docs.unity3d.com/201*"), 16 | SkipURL("https://docs.unity3d.com/5*"), 17 | SkipURL("https://docs.unity3d.com/*source=*"), 18 | SkipURL("https://docs.unity3d.com/*30_search.html"), 19 | SkipURL("https://docs.unity3d.com/*_ga=*"), 20 | SkipURL("https://docs.unity3d.com/*from=*"), 21 | SkipURL("https://docs.unity3d.com/*fbclid=*"), 22 | ] 23 | ) -------------------------------------------------------------------------------- /lenses/XKCD/xkcd.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "xkcd", 4 | author: "popcar2", 5 | description: Some("xkcd webcomics, now ready to pull out at a moment's notice!"), 6 | categories: ["Comics", "Media"], 7 | domains: [], 8 | urls: [ 9 | "https://xkcd.com/" 10 | ], 11 | rules: [ 12 | SkipURL("https://xkcd.com/*.xml"), 13 | SkipURL("https://xkcd.com/*.json"), 14 | SkipURL("https://xkcd.com/*.png"), 15 | SkipURL("https://xkcd.com/*fbclid=*"), 16 | SkipURL("https://xkcd.com/*source=*"), 17 | SkipURL("https://xkcd.com/*large"), 18 | ] 19 | ) -------------------------------------------------------------------------------- /lenses/dbatools/dbatools.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "Marco Kleinert", 3 | name: "dbatools", 4 | label: "dbatools", 5 | description: Some("dbatools cmdlet documentation"), 6 | categories: ["database administration"], 7 | domains: [], 8 | urls: [ 9 | "https://docs.dbatools.io/" 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) -------------------------------------------------------------------------------- /lenses/disco_elysium/disco_elysium.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "disco_elysium", 4 | label: "Disco Elysium", 5 | description: Some("Disco Elysium Wiki"), 6 | categories: ["Games"], 7 | domains: [], 8 | urls: [ 9 | "https://discoelysium.fandom.com/wiki", 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) -------------------------------------------------------------------------------- /lenses/dnd/dnd.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "dnd", 4 | label: "Dungeons & Dragons 5E", 5 | author: "lagoja", 6 | description: Some("D&D 5E reference guide for classes, equipment, feats, magic items, monsters, spells, etc."), 7 | categories: ["Games", "TTRPG"], 8 | domains: [], 9 | urls: [ 10 | "https://roll20.net/compendium/dnd5e", 11 | "https://www.dndbeyond.com/backgrounds", 12 | "https://www.dndbeyond.com/classes", 13 | "https://www.dndbeyond.com/equipment", 14 | "https://www.dndbeyond.com/feats", 15 | "https://www.dndbeyond.com/magic-items", 16 | "https://www.dndbeyond.com/monsters", 17 | "https://www.dndbeyond.com/races", 18 | "https://www.dndbeyond.com/spells", 19 | "https://www.dndbeyond.com/vehicles", 20 | ], 21 | rules: [ 22 | // Skip search result pages 23 | SkipURL("https://www.dndbeyond.com/*?*filter*"), 24 | ] 25 | ) 26 | -------------------------------------------------------------------------------- /lenses/factorio/factorio.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "factorio", 4 | label: "Factorio", 5 | author: "a5huynh", 6 | description: Some("Factorio wiki & subreddit. Factorio is a game in which you build and maintain factories."), 7 | categories: ["Games"], 8 | domains: [], 9 | urls: [ 10 | "https://wiki.factorio.com" 11 | ], 12 | rules: [ 13 | // Factorio wiki has a very loose robots.txt, so lets pare it down a bit. 14 | // Only index english pages 15 | SkipURL("https://wiki.factorio.com/*/cs"), 16 | SkipURL("https://wiki.factorio.com/*/da"), 17 | SkipURL("https://wiki.factorio.com/*/de"), 18 | SkipURL("https://wiki.factorio.com/*/es"), 19 | SkipURL("https://wiki.factorio.com/*/fr"), 20 | SkipURL("https://wiki.factorio.com/*/hu"), 21 | SkipURL("https://wiki.factorio.com/*/it"), 22 | SkipURL("https://wiki.factorio.com/*/ja"), 23 | SkipURL("https://wiki.factorio.com/*/ko"), 24 | SkipURL("https://wiki.factorio.com/*/ms"), 25 | SkipURL("https://wiki.factorio.com/*/nl"), 26 | SkipURL("https://wiki.factorio.com/*/pl"), 27 | SkipURL("https://wiki.factorio.com/*/pt-br"), 28 | SkipURL("https://wiki.factorio.com/*/pt-pt"), 29 | SkipURL("https://wiki.factorio.com/*/ru"), 30 | SkipURL("https://wiki.factorio.com/*/sv"), 31 | SkipURL("https://wiki.factorio.com/*/tr"), 32 | SkipURL("https://wiki.factorio.com/*/uk"), 33 | SkipURL("https://wiki.factorio.com/*/vi"), 34 | SkipURL("https://wiki.factorio.com/*/zh"), 35 | // Ignore API 36 | SkipURL("https://wiki.factorio.com/api.php"), 37 | SkipURL("https://wiki.factorio.com/index.php*"), 38 | SkipURL("https://wiki.factorio.com/Prototype/*"), 39 | // Ignore media wiki related pages 40 | SkipURL("https://wiki.factorio.com/*action=*"), 41 | SkipURL("https://wiki.factorio.com/*_talk:*"), 42 | SkipURL("https://wiki.factorio.com/File:*"), 43 | SkipURL("https://wiki.factorio.com/Infobox:*"), 44 | SkipURL("https://wiki.factorio.com/Property:*"), 45 | SkipURL("https://wiki.factorio.com/Special:*"), 46 | SkipURL("https://wiki.factorio.com/Talk:*"), 47 | SkipURL("https://wiki.factorio.com/Template:*"), 48 | SkipURL("https://wiki.factorio.com/User:*"), 49 | SkipURL("https://wiki.factorio.com/Version_history"), 50 | SkipURL("https://wiki.factorio.com/*title=Special:*"), 51 | ] 52 | ) -------------------------------------------------------------------------------- /lenses/gentoo/gentoo.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "gentoo", 4 | label: "Gentoo Linux Wiki", 5 | author: "pknessness", 6 | description: Some("Gentoo Documentation"), 7 | categories: ["Operating Systems"], 8 | domains: [], 9 | urls: ["https://wiki.gentoo.org/wiki/"], 10 | ) -------------------------------------------------------------------------------- /lenses/harrypotter_wiki/harrypotter_wiki.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "harrypotter_wiki", 4 | label: "Harry Potter Wiki", 5 | description: Some("Harry Potter Fandom Wiki"), 6 | categories: ["Media"], 7 | domains: [], 8 | urls: [ 9 | "https://harrypotter.fandom.com/wiki/", 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) -------------------------------------------------------------------------------- /lenses/hogwarts_legacy/hogwarts_legacy.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "spyglass-search", 3 | name: "hogwarts_legacy", 4 | label: "Hogwarts Legacy Wiki", 5 | description: Some("Hogwarts Legacy Fandom Wiki"), 6 | categories: ["Games"], 7 | domains: [], 8 | urls: [ 9 | "https://hogwarts-legacy.fandom.com/wiki", 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) -------------------------------------------------------------------------------- /lenses/java/java.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "java", 4 | label: "Java Reference Material", 5 | author: "oparaskos", 6 | description: Some("Java reference material."), 7 | categories: ["Programming"], 8 | domains: [], 9 | urls: [ 10 | "https://docs.oracle.com/en/java/javase/18/docs/api", 11 | "https://docs.oracle.com/javase/8/docs/api/", 12 | "https://github.com/FasterXML/jackson-docs/tree/master/", 13 | "https://github.com/FasterXML/jackson-docs/wiki", 14 | "https://docs.spring.io/spring-framework/docs/current/javadoc-api/", 15 | "https://logging.apache.org/log4j/", 16 | "https://commons.apache.org", 17 | "https://docs.gradle.org/current/javadoc/" 18 | ] 19 | ) -------------------------------------------------------------------------------- /lenses/kotlin/kotlin.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "kotlin", 4 | label: "Kotlin", 5 | author: "oparaskos", 6 | description: Some("Kotlin reference material."), 7 | categories: ["Programming"], 8 | domains: [], 9 | urls: [ 10 | "https://kotlinlang.org/docs/", 11 | "https://docs.spring.io/spring-framework/docs/current/kdoc-api/", 12 | "https://gradle.github.io/kotlin-dsl-docs/api/" 13 | ] 14 | ) -------------------------------------------------------------------------------- /lenses/laravel/laravel.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | author: "Mohd-PH", 4 | name: "laravel", 5 | label: "Laravel", 6 | description: Some("A lens for Laravel, a popular PHP framework"), 7 | categories: ["Programming", "Web Development", "PHP"], 8 | domains: [], 9 | urls: [ 10 | "https://laravel.com/docs/master", 11 | "https://laravel.com/docs/master/artisan", 12 | "https://laravel.com/docs/master/authentication", 13 | "https://laravel.com/docs/master/authorization", 14 | "https://laravel.com/docs/master/billing", 15 | "https://laravel.com/docs/master/blade", 16 | "https://laravel.com/docs/master/broadcasting", 17 | "https://laravel.com/docs/master/cache", 18 | "https://laravel.com/docs/master/cashier-paddle", 19 | "https://laravel.com/docs/master/collections", 20 | "https://laravel.com/docs/master/configuration", 21 | "https://laravel.com/docs/master/console-tests", 22 | "https://laravel.com/docs/master/container/", 23 | "https://laravel.com/docs/master/contracts", 24 | "https://laravel.com/docs/master/contributions", 25 | "https://laravel.com/docs/master/controllers", 26 | "https://laravel.com/docs/master/csrf", 27 | "https://laravel.com/docs/master/database", 28 | "https://laravel.com/docs/master/database-testing", 29 | "https://laravel.com/docs/master/deployment", 30 | "https://laravel.com/docs/master/dusk", 31 | "https://laravel.com/docs/master/eloquent", 32 | "https://laravel.com/docs/master/eloquent-collections", 33 | "https://laravel.com/docs/master/eloquent-factories", 34 | "https://laravel.com/docs/master/eloquent-mutators", 35 | "https://laravel.com/docs/master/eloquent-relationships", 36 | "https://laravel.com/docs/master/eloquent-resources", 37 | "https://laravel.com/docs/master/eloquent-serialization", 38 | "https://laravel.com/docs/master/encryption", 39 | "https://laravel.com/docs/master/envoy/", 40 | "https://laravel.com/docs/master/errors", 41 | "https://laravel.com/docs/master/events", 42 | "https://laravel.com/docs/master/facades", 43 | "https://laravel.com/docs/master/filesystem", 44 | "https://laravel.com/docs/master/fortify", 45 | "https://laravel.com/docs/master/frontend", 46 | "https://laravel.com/docs/master/hashing", 47 | "https://laravel.com/docs/master/helpers", 48 | "https://laravel.com/docs/master/homestead", 49 | "https://laravel.com/docs/master/homestead?ref=hackernoon.com", 50 | "https://laravel.com/docs/master/horizon", 51 | "https://laravel.com/docs/master/http-client", 52 | "https://laravel.com/docs/master/http-tests", 53 | "https://laravel.com/docs/master/installation", 54 | "https://laravel.com/docs/master/lifecycle", 55 | "https://laravel.com/docs/master/localization", 56 | "https://laravel.com/docs/master/logging", 57 | "https://laravel.com/docs/master/mail", 58 | "https://laravel.com/docs/master/middleware", 59 | "https://laravel.com/docs/master/migrations", 60 | "https://laravel.com/docs/master/mix", 61 | "https://laravel.com/docs/master/mocking", 62 | "https://laravel.com/docs/master/notifications", 63 | "https://laravel.com/docs/master/octane", 64 | "https://laravel.com/docs/master/packages", 65 | "https://laravel.com/docs/master/pagination", 66 | "https://laravel.com/docs/master/passport", 67 | "https://laravel.com/docs/master/passport?ref=laravelmade.com", 68 | "https://laravel.com/docs/master/passwords", 69 | "https://laravel.com/docs/master/pint", 70 | "https://laravel.com/docs/master/providers", 71 | "https://laravel.com/docs/master/queries", 72 | "https://laravel.com/docs/master/queues", 73 | "https://laravel.com/docs/master/rate-limiting", 74 | "https://laravel.com/docs/master/redirects", 75 | "https://laravel.com/docs/master/redis", 76 | "https://laravel.com/docs/master/releases", 77 | "https://laravel.com/docs/master/releases?e", 78 | "https://laravel.com/docs/master/requests", 79 | "https://laravel.com/docs/master/responses", 80 | "https://laravel.com/docs/master/routing", 81 | "https://laravel.com/docs/master/sail", 82 | "https://laravel.com/docs/master/sanctum", 83 | "https://laravel.com/docs/master/scheduling", 84 | "https://laravel.com/docs/master/scheduling?ref=hackernoon.com", 85 | "https://laravel.com/docs/master/scout", 86 | "https://laravel.com/docs/master/seeding", 87 | "https://laravel.com/docs/master/session", 88 | "https://laravel.com/docs/master/socialite", 89 | "https://laravel.com/docs/master/starter-kits", 90 | "https://laravel.com/docs/master/structure", 91 | "https://laravel.com/docs/master/telescope", 92 | "https://laravel.com/docs/master/testing", 93 | "https://laravel.com/docs/master/upgrade", 94 | "https://laravel.com/docs/master/urls", 95 | "https://laravel.com/docs/master/valet", 96 | "https://laravel.com/docs/master/validation", 97 | "https://laravel.com/docs/master/verification", 98 | "https://laravel.com/docs/master/views", 99 | "https://laravel.com/docs/master/vite" 100 | ], 101 | rules: [] 102 | ) -------------------------------------------------------------------------------- /lenses/luigis_mansion/luigis_mansion.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "luigis_mansion", 4 | label: "Luigis Mansion Guide", 5 | author: "pknessness", 6 | description: Some("Luigi's Mansion Walkthrough"), 7 | categories: ["Games"], 8 | domains: [], 9 | urls: [ 10 | "https://www.ign.com/wikis/luigis-mansion/" 11 | ], 12 | is_enabled: true, 13 | ) -------------------------------------------------------------------------------- /lenses/mbed68/mbed68.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "mbed68", 4 | label: "MBED 6.8 Documentation", 5 | author: "pknessness", 6 | description: Some("MBED 6.8 Documentation"), 7 | categories: ["Programming"], 8 | domains: [], 9 | urls: ["https://os.mbed.com/docs/mbed-os/v6.8/"], 10 | is_enabled: true, 11 | ) 12 | 13 | -------------------------------------------------------------------------------- /lenses/pf2e/ArchivesOfNethys.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | author: "HLennart", 4 | name: "ArchivesOfNethys", 5 | description: Some("Archives of Nethys Pathfinder 2e"), 6 | is_enabled: true, 7 | domains: [], 8 | 9 | urls: [ 10 | "https://2e.aonprd.com/Ancestries.aspx", 11 | "https://2e.aonprd.com/Archetypes.aspx", 12 | "https://2e.aonprd.com/Backgrounds.aspx", 13 | "https://2e.aonprd.com/Classes.aspx", 14 | "https://2e.aonprd.com/Skills.aspx", 15 | "https://2e.aonprd.com/Equipment.aspx", 16 | "https://2e.aonprd.com/Feats.aspx", 17 | "https://2e.aonprd.com/Afflictions.aspx", 18 | "https://2e.aonprd.com/Creatures.aspx", 19 | "https://2e.aonprd.com/Hazards.aspx", 20 | "https://2e.aonprd.com/Rules.aspx", 21 | "https://2e.aonprd.com/Actions.aspx", 22 | "https://2e.aonprd.com/Conditions.aspx", 23 | "https://2e.aonprd.com/GMScreen.aspx", 24 | "https://2e.aonprd.com/PlayersGuide.aspx", 25 | "https://2e.aonprd.com/Traits.aspx", 26 | "https://2e.aonprd.com/SpellLists.aspx", 27 | 28 | ], 29 | 30 | rules: [ 31 | SkipURL("https://2e.aonprd.com/*)/*"), 32 | SkipURL("https://2e.aonprd.com/*AspxAutoDetectCookieSupport*"), 33 | SkipURL("https://2e.aonprd.com/*aspx/*"), 34 | SkipURL("https://2e.aonprd.com/*&values*"), 35 | SkipURL("https://2e.aonprd.com/*&sort*"), 36 | SkipURL("https://2e.aonprd.com/*&display*"), 37 | SkipURL("https://2e.aonprd.com/*&q=*"), 38 | SkipURL("https://2e.aonprd.com/*?Group*"), 39 | ] 40 | ) 41 | -------------------------------------------------------------------------------- /lenses/pygame/pygame.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "pygame", 4 | author: "pknessness", 5 | description: Some("Pygame Documentation"), 6 | categories: ["Programming", "Game Development"], 7 | domains: [], 8 | urls: [ 9 | "https://www.pygame.org/docs/ref/", 10 | "https://devdocs.io/pygame/" 11 | ] 12 | ) -------------------------------------------------------------------------------- /lenses/pytorch/pytorch.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "gRox167", 3 | name: "pytorch", 4 | label: "pytorch", 5 | description: Some("pytorch documentation"), 6 | categories: ["Programming"], 7 | domains: [], 8 | urls: [ 9 | "https://pytorch.org/docs/", 10 | ], 11 | version: "1", 12 | rules: [], 13 | ) 14 | -------------------------------------------------------------------------------- /lenses/rlang/rlang.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | author: "Mohd-PH", 4 | name: "rlang", 5 | label: "R Language Docs", 6 | description: Some("R language for statistical analysis targeted websites"), 7 | categories: ["Programming"], 8 | domains: [], 9 | urls: [ 10 | "https://cran.r-project.org/doc/manuals/r-release/", 11 | "https://ggplot2.tidyverse.org", 12 | "https://dplyr.tidyverse.org", 13 | "https://tidyr.tidyverse.org", 14 | "https://readr.tidyverse.org", 15 | "https://purrr.tidyverse.org", 16 | "https://tibble.tidyverse.org", 17 | "https://stringr.tidyverse.org", 18 | "https://forcats.tidyverse.org", 19 | "https://reprex.tidyverse.org", 20 | ], 21 | 22 | rules: [] 23 | ) 24 | -------------------------------------------------------------------------------- /lenses/ruby_on_rails/ruby_on_rails.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "ruby_on_rails", 4 | label: "Ruby on Rails", 5 | author: "c_sonnier", 6 | description: Some("Ruby on Rails official website, documentation, and blog posts."), 7 | categories: ["Programming", "Web Development"], 8 | domains: [ 9 | "guides.rubyonrails.org", 10 | "weblog.rubyonrails.org", 11 | "rubyweekly.com", 12 | "everydayrails.com", 13 | "www.rubyflow.com", 14 | "www.driftingruby.com", 15 | "ruby.libhunt.com", 16 | "www.rubyguides.com", 17 | "andycroll.com", 18 | "boringrails.com" 19 | ], 20 | urls: [ 21 | "https://www.codewithjason.com/articles/", 22 | "https://codefol.io/posts/", 23 | "https://tenderlovemaking.com/", 24 | "https://www.mikeperham.com/" 25 | ], 26 | rules: [], 27 | ) 28 | -------------------------------------------------------------------------------- /lenses/rustlang/rustlang.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "rustlang", 4 | label: "Rust Language Websites & Documentation", 5 | author: "a5huynh", 6 | description: Some("Rustlang official website, documentation, and blog posts."), 7 | categories: ["Programming"], 8 | domains: [ 9 | "doc.rust-lang.org", 10 | "blog.rust-lang.org", 11 | "www.rust-lang.org", 12 | ], 13 | urls: [], 14 | rules: [], 15 | ) -------------------------------------------------------------------------------- /lenses/scp/scp.ron: -------------------------------------------------------------------------------- 1 | ( 2 | author: "Jack G", 3 | name: "scp", 4 | label: "SCP Foundation", 5 | description: Some("The SCP Foundation Wiki"), 6 | categories: ["Media"], 7 | domains: [ 8 | "scp-wiki.wikidot.com", 9 | ], 10 | version: "1", 11 | urls: [], 12 | rules: [ 13 | SkipURL("http://scp-wiki.wikidot.com/forum*"), 14 | SkipURL("http://scp-wiki.wikidot.com/fragment:*"), 15 | SkipURL("http://scp-wiki.wikidot.com/theme:*"), 16 | ], 17 | ) -------------------------------------------------------------------------------- /lenses/smg/smg.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "smg", 4 | label: "Super Mario Galaxy 1 & 2", 5 | author: "pknessness", 6 | description: Some("Super Mario Galaxy 1 and 2 Wiki"), 7 | categories: ["Games"], 8 | domains: [], 9 | urls: [ 10 | "https://supermariogalaxy.fandom.com/wiki/", 11 | ], 12 | rules: [ 13 | SkipURL("https://supermariogalaxy.fandom.com/wiki/*Special:Contributions*"), 14 | ] 15 | ) -------------------------------------------------------------------------------- /lenses/stardew/stardew.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "stardew", 4 | label: "Stardew Valley", 5 | author: "a5huynh", 6 | description: Some("Stardew Valley wiki"), 7 | categories: ["Games"], 8 | domains: [ 9 | "stardewvalleywiki.com" 10 | ], 11 | urls: [], 12 | rules: [ 13 | SkipURL("https://*.stardewvalleywiki.com/mediawiki*"), 14 | SkipURL("https://stardewvalleywiki.com/Category_talk:*"), 15 | SkipURL("https://stardewvalleywiki.com/Category:*"), 16 | SkipURL("https://stardewvalleywiki.com/File_talk:*"), 17 | SkipURL("https://stardewvalleywiki.com/File:*"), 18 | SkipURL("https://stardewvalleywiki.com/mediawiki*"), 19 | SkipURL("https://stardewvalleywiki.com/Special:*"), 20 | SkipURL("https://stardewvalleywiki.com/Stardew_Valley_Wiki:*"), 21 | SkipURL("https://stardewvalleywiki.com/Talk:*"), 22 | SkipURL("https://stardewvalleywiki.com/Template_talk:*"), 23 | SkipURL("https://stardewvalleywiki.com/Template:*"), 24 | SkipURL("https://stardewvalleywiki.com/User_talk:*"), 25 | SkipURL("https://stardewvalleywiki.com/User:*"), 26 | ] 27 | ) 28 | -------------------------------------------------------------------------------- /lenses/tim-ferriss/tim-ferriss.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "tim-ferriss", 4 | label: "Tim Ferriss Blog & Podcasts", 5 | author: "jwl", 6 | description: Some("An index of Tim Ferriss' blog + podcasts"), 7 | categories: ["Media"], 8 | domains: [ 9 | "tim.blog" 10 | ], 11 | urls: [], 12 | rules: [ 13 | SkipURL("https://tim.blog/*?shared=*"), 14 | SkipURL("https://tim.blog/category/*"), 15 | SkipURL("https://tim.blog/tag/*"), 16 | // Ignore Google AMP pages 17 | SkipURL("https://tim.blog/*/amp/*"), 18 | SkipURL("https://tim.blog/*utm_campaign=*"), 19 | // Ignore comments 20 | SkipURL("https://tim.blog/*/comment-page*"), 21 | SkipURL("https://tim.blog/*replytocom=*"), 22 | SkipURL("https://tim.blog/*like_comment=*"), 23 | // Ignore wordpress specific routes 24 | SkipURL("https://tim.blog/wp-content/*"), 25 | ] 26 | ) 27 | -------------------------------------------------------------------------------- /lenses/twd/twd.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "twd", 4 | label: "The Walking Dead", 5 | author: "a5huynh", 6 | description: Some(r#"The Walking Dead (/twd) lens includes all information 7 | about the comic series, novels, video games, and television shows, including 8 | character statuses and current storyline plot-points."#), 9 | categories: ["Media", "Television"], 10 | domains: [], 11 | urls: [ 12 | "https://walkingdead.fandom.com/wiki" 13 | ], 14 | rules: [ 15 | // Skip wiki related actions 16 | SkipURL("https://walkingdead.fandom.com/wiki/*action=*"), 17 | SkipURL("https://walkingdead.fandom.com/wiki/*diff=*"), 18 | SkipURL("https://walkingdead.fandom.com/wiki/*oldid=*"), 19 | // Skip meta categories & user related pages 20 | SkipURL("https://walkingdead.fandom.com/wiki/Category:*"), 21 | SkipURL("https://walkingdead.fandom.com/wiki/Board_Thread:*"), 22 | SkipURL("https://walkingdead.fandom.com/wiki/File:*"), 23 | SkipURL("https://walkingdead.fandom.com/wiki/Message_Wall:*"), 24 | SkipURL("https://walkingdead.fandom.com/wiki/Talk:*"), 25 | SkipURL("https://walkingdead.fandom.com/wiki/Template:*"), 26 | SkipURL("https://walkingdead.fandom.com/wiki/Thread:*"), 27 | SkipURL("https://walkingdead.fandom.com/wiki/Special:*"), 28 | SkipURL("https://walkingdead.fandom.com/wiki/*/Gallery*"), 29 | SkipURL("https://walkingdead.fandom.com/wiki/User:*"), 30 | SkipURL("https://walkingdead.fandom.com/wiki/User_blog:*"), 31 | SkipURL("https://walkingdead.fandom.com/wiki/User_blog_comment:*"), 32 | SkipURL("https://walkingdead.fandom.com/wiki/User_talk:*"), 33 | ] 34 | ) 35 | -------------------------------------------------------------------------------- /lenses/unreal_4/unreal_4.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | author: "oparaskos", 4 | name: "unreal_4", 5 | label: "Unreal Engine 4.27 Docs", 6 | description: Some("Unreal Engine 4.27 editor/engine documentation"), 7 | categories: ["Programming", "Game Development"], 8 | domains: [], 9 | urls: [ 10 | "https://docs.unrealengine.com/4.27/en-US" 11 | ] 12 | ) -------------------------------------------------------------------------------- /lenses/unreal_5/unreal_5.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | author: "oparaskos", 4 | name: "unreal_5", 5 | label: "Unreal Engine 5.2 Docs", 6 | description: Some("Unreal Engine 5.2 editor/engine documentation"), 7 | categories: ["Programming", "Game Development"], 8 | domains: [], 9 | urls: [ 10 | "https://docs.unrealengine.com/5.2/en-US" 11 | ] 12 | ) -------------------------------------------------------------------------------- /lenses/vintage_story/vintage_story.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "vintage_story", 4 | label: "Vintage Story", 5 | author: "popcar2", 6 | description: Some("Vintage Story wiki"), 7 | categories: ["Games"], 8 | domains: [], 9 | urls: [ 10 | "https://wiki.vintagestory.at/" 11 | ], 12 | rules: [ 13 | // Exclude different languages 14 | SkipURL("https://wiki.vintagestory.at/*/en"), 15 | SkipURL("https://wiki.vintagestory.at/*/de"), 16 | SkipURL("https://wiki.vintagestory.at/*/es"), 17 | SkipURL("https://wiki.vintagestory.at/*/pl"), 18 | SkipURL("https://wiki.vintagestory.at/*/ru"), 19 | SkipURL("https://wiki.vintagestory.at/*/fr"), 20 | SkipURL("https://wiki.vintagestory.at/*/it"), 21 | SkipURL("https://wiki.vintagestory.at/*/pt-br"), 22 | SkipURL("https://wiki.vintagestory.at/*/uk"), 23 | SkipURL("https://wiki.vintagestory.at/*/ja"), 24 | // Ignore misc wiki pages 25 | SkipURL("https://wiki.vintagestory.at/*&action=*"), 26 | SkipURL("https://wiki.vintagestory.at/*&oldid=*"), 27 | SkipURL("https://wiki.vintagestory.at/*Talk:*"), 28 | SkipURL("https://wiki.vintagestory.at/*printable=*"), 29 | SkipURL("https://wiki.vintagestory.at/*redirect=*"), 30 | SkipURL("https://wiki.vintagestory.at/*User:*"), 31 | SkipURL("https://wiki.vintagestory.at/*Special:*"), 32 | SkipURL("https://wiki.vintagestory.at/*&diff=*"), 33 | SkipURL("https://wiki.vintagestory.at/*Template:*"), 34 | SkipURL("https://wiki.vintagestory.at/*File:*"), 35 | SkipURL("https://wiki.vintagestory.at/*.png"), 36 | SkipURL("https://wiki.vintagestory.at/*.gif"), 37 | SkipURL("https://wiki.vintagestory.at/*MediaWiki:*"), 38 | SkipURL("https://wiki.vintagestory.at/*search=*"), 39 | // Edge cases 40 | SkipURL("https://wiki.vintagestory.at/*%2F*"), 41 | SkipURL("https://wiki.vintagestory.at/*Vintage_Story_Wiki:*"), 42 | SkipURL("https://wiki.vintagestory.at/*&MobileAction=*"), 43 | SkipURL("https://wiki.vintagestory.at/*&returnto=*"), 44 | ] 45 | ) 46 | -------------------------------------------------------------------------------- /lenses/vue/vue.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | author: "Mohd-PH", 4 | name: "vue", 5 | label: "Vue", 6 | description: Some("A lens for Vue, a progressive JavaScript framework!"), 7 | categories: ["Programming", "Web Development", "Javascript"], 8 | domains: [], 9 | urls: [ 10 | "https://vuejs.org/guide/", 11 | "https://vuejs.org/api/", 12 | "https://router.vuejs.org/guide/", 13 | "https://router.vuejs.org/api/", 14 | "https://pinia.vuejs.org/", 15 | ], 16 | rules: [] 17 | ) 18 | -------------------------------------------------------------------------------- /lenses/wow/wow.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "wow", 4 | label: "World of Warcraft (WoW) Guides & General Info", 5 | author: "Chicken", 6 | description: Some("Search through achievements, classes, and more! This includes everything but items, NPCs, and quests."), 7 | categories: ["Games", "MMORPG"], 8 | domains: [], 9 | urls: [ 10 | "https://www.wowhead.com/achievements", 11 | "https://www.wowhead.com/affixes", 12 | "https://www.wowhead.com/azerite-essence-powers", 13 | "https://www.wowhead.com/azerite-essences", 14 | "https://www.wowhead.com/battle-pets", 15 | "https://www.wowhead.com/classes", 16 | "https://www.wowhead.com/currencies", 17 | "https://www.wowhead.com/events", 18 | "https://www.wowhead.com/factions", 19 | "https://www.wowhead.com/garrisons", 20 | "https://www.wowhead.com/hunter-pets", 21 | "https://www.wowhead.com/icons", 22 | "https://www.wowhead.com/maps", 23 | "https://www.wowhead.com/objects", 24 | "https://www.wowhead.com/outfits", 25 | "https://www.wowhead.com/races", 26 | "https://www.wowhead.com/resources", 27 | "https://www.wowhead.com/sounds", 28 | "https://www.wowhead.com/storylines", 29 | "https://www.wowhead.com/titles", 30 | "https://www.wowhead.com/zones", 31 | // Individual references 32 | "https://www.wowhead.com/achievement=", 33 | "https://www.wowhead.com/affix=", 34 | // Individual classes 35 | "https://www.wowhead.com/class=", 36 | // Individual currencies 37 | "https://www.wowhead.com/currency=", 38 | // Individual factions 39 | "https://www.wowhead.com/faction=", 40 | "https://www.wowhead.com/pet=", 41 | // WoW guides 42 | "https://www.icy-veins.com/wow/", 43 | ], 44 | rules: [] 45 | ) 46 | 47 | -------------------------------------------------------------------------------- /lenses/wow_items/wow_items.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "wow_items", 4 | label: "World of Warcraft (WoW) Items", 5 | author: "Chicken", 6 | description: Some("Search through all WoW items and item sets!"), 7 | categories: ["Games", "MMORPG"], 8 | domains: [], 9 | urls: [ 10 | "https://www.wowhead.com/item-sets", 11 | "https://www.wowhead.com/items", 12 | // Individual items 13 | "https://www.wowhead.com/item=", 14 | // Individual item-sets 15 | "https://www.wowhead.com/item-set=", 16 | ], 17 | rules: [] 18 | ) -------------------------------------------------------------------------------- /lenses/wow_npcs/wow_npcs.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "wow_npcs", 4 | label: "World of Warcraft (WoW) NPCs", 5 | author: "Chicken", 6 | description: Some("Search through World of Warcraft (WoW) NPCs!"), 7 | categories: ["Games", "MMORPG"], 8 | domains: [], 9 | urls: [ 10 | "https://www.wowhead.com/npcs$", 11 | "https://www.wowhead.com/npc=", 12 | ], 13 | rules: [] 14 | ) -------------------------------------------------------------------------------- /lenses/wow_quests/wow_quests.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "wow_quests", 4 | label: "World of Warcraft (WoW) Quests", 5 | author: "Chicken", 6 | description: Some("Search through all WoW quests!"), 7 | categories: ["Games", "MMORPG"], 8 | domains: [], 9 | urls: [ 10 | "https://www.wowhead.com/quests$", 11 | "https://www.wowhead.com/quest=", 12 | ], 13 | rules: [] 14 | ) -------------------------------------------------------------------------------- /lenses/wow_spells/wow_spells.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "wow_spells", 4 | label: "World of Warcraft (WoW) Spells", 5 | author: "Chicken", 6 | description: Some("Search through World of Warcraft (WoW) spells & abilities!"), 7 | categories: ["Games", "MMORPG"], 8 | domains: [], 9 | urls: [ 10 | "https://www.wowhead.com/skills$", 11 | "https://www.wowhead.com/spells$", 12 | // Individual spells 13 | "https://www.wowhead.com/skill=", 14 | "https://www.wowhead.com/spell=", 15 | ], 16 | rules: [ 17 | // Ignore filters / notFound pages 18 | SkipURL("https://www.wowhead.com/*?*power*"), 19 | SkipURL("https://www.wowhead.com/*bonus=*"), 20 | SkipURL("https://www.wowhead.com/*filter=*"), 21 | SkipURL("https://www.wowhead.com/*ilvl=*"), 22 | SkipURL("https://www.wowhead.com/*name:*"), 23 | SkipURL("https://www.wowhead.com/*notFound=*"), 24 | // Ignore map data 25 | SkipURL("https://www.wowhead.com/maps?*data=*"), 26 | ] 27 | ) 28 | 29 | -------------------------------------------------------------------------------- /lenses/yc/yc.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "yc", 4 | label: "YCombinator", 5 | author: "a5huynh", 6 | description: Some("YC articles / blog posts for a handy quick reference to startup materials"), 7 | categories: ["Startups"], 8 | domains: [ 9 | "paulgraham.com" 10 | ], 11 | urls: [ 12 | "https://www.ycombinator.com/blog", 13 | "https://www.ycombinator.com/library", 14 | "https://www.ycombinator.com/documents", 15 | ], 16 | rules: [ 17 | SkipURL("http://*.paulgraham.com"), 18 | SkipURL("http://paulgraham.com*?*"), 19 | SkipURL("https://paulgraham.com*?*"), 20 | SkipURL("https://www.ycombinator.com/*fbclid*"), 21 | SkipURL("https://www.ycombinator.com/*ref=*"), 22 | SkipURL("https://www.ycombinator.com/*utm_*"), 23 | SkipURL("https://www.ycombinator.com/*utm_*"), 24 | SkipURL("https://www.ycombinator.com/blog/content/*"), 25 | ] 26 | ) -------------------------------------------------------------------------------- /lenses/zelda_twilight_princess/zelda_twilight_princess.ron: -------------------------------------------------------------------------------- 1 | ( 2 | version: "1", 3 | name: "zelda_twilight_princess", 4 | label: "Zelda: Twilight Princess", 5 | author: "pknessness", 6 | description: Some("Legend of Zelda Twilight Princess Walkthrough"), 7 | categories: ["Games"], 8 | domains: [], 9 | urls: [ 10 | "https://www.zeldadungeon.net/twilight-princess-walkthrough/" 11 | ], 12 | is_enabled: true, 13 | ) -------------------------------------------------------------------------------- /validator/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "aho-corasick" 7 | version = "0.7.20" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" 10 | dependencies = [ 11 | "memchr", 12 | ] 13 | 14 | [[package]] 15 | name = "android_system_properties" 16 | version = "0.1.5" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 19 | dependencies = [ 20 | "libc", 21 | ] 22 | 23 | [[package]] 24 | name = "anyhow" 25 | version = "1.0.68" 26 | source = "registry+https://github.com/rust-lang/crates.io-index" 27 | checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" 28 | 29 | [[package]] 30 | name = "autocfg" 31 | version = "1.1.0" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 34 | 35 | [[package]] 36 | name = "base64" 37 | version = "0.13.1" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 40 | 41 | [[package]] 42 | name = "bitflags" 43 | version = "1.3.2" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 46 | 47 | [[package]] 48 | name = "blake2" 49 | version = "0.10.6" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" 52 | dependencies = [ 53 | "digest", 54 | ] 55 | 56 | [[package]] 57 | name = "block-buffer" 58 | version = "0.10.3" 59 | source = "registry+https://github.com/rust-lang/crates.io-index" 60 | checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" 61 | dependencies = [ 62 | "generic-array", 63 | ] 64 | 65 | [[package]] 66 | name = "bumpalo" 67 | version = "3.12.0" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" 70 | 71 | [[package]] 72 | name = "bytes" 73 | version = "1.3.0" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" 76 | 77 | [[package]] 78 | name = "cc" 79 | version = "1.0.78" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" 82 | 83 | [[package]] 84 | name = "cfg-if" 85 | version = "1.0.0" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 88 | 89 | [[package]] 90 | name = "chrono" 91 | version = "0.4.23" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" 94 | dependencies = [ 95 | "iana-time-zone", 96 | "js-sys", 97 | "num-integer", 98 | "num-traits", 99 | "time", 100 | "wasm-bindgen", 101 | "winapi", 102 | ] 103 | 104 | [[package]] 105 | name = "clap" 106 | version = "4.0.32" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39" 109 | dependencies = [ 110 | "bitflags", 111 | "clap_derive", 112 | "clap_lex", 113 | "is-terminal", 114 | "once_cell", 115 | "strsim", 116 | "termcolor", 117 | ] 118 | 119 | [[package]] 120 | name = "clap_derive" 121 | version = "4.0.21" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014" 124 | dependencies = [ 125 | "heck", 126 | "proc-macro-error", 127 | "proc-macro2", 128 | "quote", 129 | "syn", 130 | ] 131 | 132 | [[package]] 133 | name = "clap_lex" 134 | version = "0.3.0" 135 | source = "registry+https://github.com/rust-lang/crates.io-index" 136 | checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" 137 | dependencies = [ 138 | "os_str_bytes", 139 | ] 140 | 141 | [[package]] 142 | name = "codespan-reporting" 143 | version = "0.11.1" 144 | source = "registry+https://github.com/rust-lang/crates.io-index" 145 | checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" 146 | dependencies = [ 147 | "termcolor", 148 | "unicode-width", 149 | ] 150 | 151 | [[package]] 152 | name = "core-foundation-sys" 153 | version = "0.8.3" 154 | source = "registry+https://github.com/rust-lang/crates.io-index" 155 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 156 | 157 | [[package]] 158 | name = "crypto-common" 159 | version = "0.1.6" 160 | source = "registry+https://github.com/rust-lang/crates.io-index" 161 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 162 | dependencies = [ 163 | "generic-array", 164 | "typenum", 165 | ] 166 | 167 | [[package]] 168 | name = "cxx" 169 | version = "1.0.91" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" 172 | dependencies = [ 173 | "cc", 174 | "cxxbridge-flags", 175 | "cxxbridge-macro", 176 | "link-cplusplus", 177 | ] 178 | 179 | [[package]] 180 | name = "cxx-build" 181 | version = "1.0.91" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" 184 | dependencies = [ 185 | "cc", 186 | "codespan-reporting", 187 | "once_cell", 188 | "proc-macro2", 189 | "quote", 190 | "scratch", 191 | "syn", 192 | ] 193 | 194 | [[package]] 195 | name = "cxxbridge-flags" 196 | version = "1.0.91" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" 199 | 200 | [[package]] 201 | name = "cxxbridge-macro" 202 | version = "1.0.91" 203 | source = "registry+https://github.com/rust-lang/crates.io-index" 204 | checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" 205 | dependencies = [ 206 | "proc-macro2", 207 | "quote", 208 | "syn", 209 | ] 210 | 211 | [[package]] 212 | name = "digest" 213 | version = "0.10.6" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" 216 | dependencies = [ 217 | "block-buffer", 218 | "crypto-common", 219 | "subtle", 220 | ] 221 | 222 | [[package]] 223 | name = "errno" 224 | version = "0.2.8" 225 | source = "registry+https://github.com/rust-lang/crates.io-index" 226 | checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" 227 | dependencies = [ 228 | "errno-dragonfly", 229 | "libc", 230 | "winapi", 231 | ] 232 | 233 | [[package]] 234 | name = "errno-dragonfly" 235 | version = "0.1.2" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" 238 | dependencies = [ 239 | "cc", 240 | "libc", 241 | ] 242 | 243 | [[package]] 244 | name = "generic-array" 245 | version = "0.14.6" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" 248 | dependencies = [ 249 | "typenum", 250 | "version_check", 251 | ] 252 | 253 | [[package]] 254 | name = "hashbrown" 255 | version = "0.12.3" 256 | source = "registry+https://github.com/rust-lang/crates.io-index" 257 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 258 | 259 | [[package]] 260 | name = "heck" 261 | version = "0.4.0" 262 | source = "registry+https://github.com/rust-lang/crates.io-index" 263 | checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" 264 | 265 | [[package]] 266 | name = "hermit-abi" 267 | version = "0.2.6" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" 270 | dependencies = [ 271 | "libc", 272 | ] 273 | 274 | [[package]] 275 | name = "hex" 276 | version = "0.4.3" 277 | source = "registry+https://github.com/rust-lang/crates.io-index" 278 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 279 | 280 | [[package]] 281 | name = "iana-time-zone" 282 | version = "0.1.53" 283 | source = "registry+https://github.com/rust-lang/crates.io-index" 284 | checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" 285 | dependencies = [ 286 | "android_system_properties", 287 | "core-foundation-sys", 288 | "iana-time-zone-haiku", 289 | "js-sys", 290 | "wasm-bindgen", 291 | "winapi", 292 | ] 293 | 294 | [[package]] 295 | name = "iana-time-zone-haiku" 296 | version = "0.1.1" 297 | source = "registry+https://github.com/rust-lang/crates.io-index" 298 | checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" 299 | dependencies = [ 300 | "cxx", 301 | "cxx-build", 302 | ] 303 | 304 | [[package]] 305 | name = "indexmap" 306 | version = "1.9.2" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" 309 | dependencies = [ 310 | "autocfg", 311 | "hashbrown", 312 | ] 313 | 314 | [[package]] 315 | name = "io-lifetimes" 316 | version = "1.0.3" 317 | source = "registry+https://github.com/rust-lang/crates.io-index" 318 | checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" 319 | dependencies = [ 320 | "libc", 321 | "windows-sys", 322 | ] 323 | 324 | [[package]] 325 | name = "is-terminal" 326 | version = "0.4.2" 327 | source = "registry+https://github.com/rust-lang/crates.io-index" 328 | checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" 329 | dependencies = [ 330 | "hermit-abi", 331 | "io-lifetimes", 332 | "rustix", 333 | "windows-sys", 334 | ] 335 | 336 | [[package]] 337 | name = "js-sys" 338 | version = "0.3.61" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" 341 | dependencies = [ 342 | "wasm-bindgen", 343 | ] 344 | 345 | [[package]] 346 | name = "libc" 347 | version = "0.2.139" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" 350 | 351 | [[package]] 352 | name = "link-cplusplus" 353 | version = "1.0.8" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" 356 | dependencies = [ 357 | "cc", 358 | ] 359 | 360 | [[package]] 361 | name = "linux-raw-sys" 362 | version = "0.1.4" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" 365 | 366 | [[package]] 367 | name = "lock_api" 368 | version = "0.4.9" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" 371 | dependencies = [ 372 | "autocfg", 373 | "scopeguard", 374 | ] 375 | 376 | [[package]] 377 | name = "log" 378 | version = "0.4.17" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 381 | dependencies = [ 382 | "cfg-if", 383 | ] 384 | 385 | [[package]] 386 | name = "memchr" 387 | version = "2.5.0" 388 | source = "registry+https://github.com/rust-lang/crates.io-index" 389 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 390 | 391 | [[package]] 392 | name = "mio" 393 | version = "0.8.5" 394 | source = "registry+https://github.com/rust-lang/crates.io-index" 395 | checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" 396 | dependencies = [ 397 | "libc", 398 | "log", 399 | "wasi 0.11.0+wasi-snapshot-preview1", 400 | "windows-sys", 401 | ] 402 | 403 | [[package]] 404 | name = "num-integer" 405 | version = "0.1.45" 406 | source = "registry+https://github.com/rust-lang/crates.io-index" 407 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 408 | dependencies = [ 409 | "autocfg", 410 | "num-traits", 411 | ] 412 | 413 | [[package]] 414 | name = "num-traits" 415 | version = "0.2.15" 416 | source = "registry+https://github.com/rust-lang/crates.io-index" 417 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 418 | dependencies = [ 419 | "autocfg", 420 | ] 421 | 422 | [[package]] 423 | name = "num_cpus" 424 | version = "1.15.0" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" 427 | dependencies = [ 428 | "hermit-abi", 429 | "libc", 430 | ] 431 | 432 | [[package]] 433 | name = "once_cell" 434 | version = "1.17.0" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" 437 | 438 | [[package]] 439 | name = "os_str_bytes" 440 | version = "6.4.1" 441 | source = "registry+https://github.com/rust-lang/crates.io-index" 442 | checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" 443 | 444 | [[package]] 445 | name = "parking_lot" 446 | version = "0.12.1" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 449 | dependencies = [ 450 | "lock_api", 451 | "parking_lot_core", 452 | ] 453 | 454 | [[package]] 455 | name = "parking_lot_core" 456 | version = "0.9.5" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" 459 | dependencies = [ 460 | "cfg-if", 461 | "libc", 462 | "redox_syscall", 463 | "smallvec", 464 | "windows-sys", 465 | ] 466 | 467 | [[package]] 468 | name = "pin-project-lite" 469 | version = "0.2.9" 470 | source = "registry+https://github.com/rust-lang/crates.io-index" 471 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 472 | 473 | [[package]] 474 | name = "proc-macro-error" 475 | version = "1.0.4" 476 | source = "registry+https://github.com/rust-lang/crates.io-index" 477 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 478 | dependencies = [ 479 | "proc-macro-error-attr", 480 | "proc-macro2", 481 | "quote", 482 | "syn", 483 | "version_check", 484 | ] 485 | 486 | [[package]] 487 | name = "proc-macro-error-attr" 488 | version = "1.0.4" 489 | source = "registry+https://github.com/rust-lang/crates.io-index" 490 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 491 | dependencies = [ 492 | "proc-macro2", 493 | "quote", 494 | "version_check", 495 | ] 496 | 497 | [[package]] 498 | name = "proc-macro2" 499 | version = "1.0.49" 500 | source = "registry+https://github.com/rust-lang/crates.io-index" 501 | checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" 502 | dependencies = [ 503 | "unicode-ident", 504 | ] 505 | 506 | [[package]] 507 | name = "quote" 508 | version = "1.0.23" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" 511 | dependencies = [ 512 | "proc-macro2", 513 | ] 514 | 515 | [[package]] 516 | name = "redox_syscall" 517 | version = "0.2.16" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 520 | dependencies = [ 521 | "bitflags", 522 | ] 523 | 524 | [[package]] 525 | name = "regex" 526 | version = "1.7.0" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" 529 | dependencies = [ 530 | "aho-corasick", 531 | "memchr", 532 | "regex-syntax", 533 | ] 534 | 535 | [[package]] 536 | name = "regex-syntax" 537 | version = "0.6.28" 538 | source = "registry+https://github.com/rust-lang/crates.io-index" 539 | checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" 540 | 541 | [[package]] 542 | name = "ron" 543 | version = "0.8.0" 544 | source = "registry+https://github.com/rust-lang/crates.io-index" 545 | checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff" 546 | dependencies = [ 547 | "base64", 548 | "bitflags", 549 | "serde", 550 | ] 551 | 552 | [[package]] 553 | name = "rustix" 554 | version = "0.36.6" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" 557 | dependencies = [ 558 | "bitflags", 559 | "errno", 560 | "io-lifetimes", 561 | "libc", 562 | "linux-raw-sys", 563 | "windows-sys", 564 | ] 565 | 566 | [[package]] 567 | name = "scopeguard" 568 | version = "1.1.0" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 571 | 572 | [[package]] 573 | name = "scratch" 574 | version = "1.0.3" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" 577 | 578 | [[package]] 579 | name = "serde" 580 | version = "1.0.152" 581 | source = "registry+https://github.com/rust-lang/crates.io-index" 582 | checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" 583 | dependencies = [ 584 | "serde_derive", 585 | ] 586 | 587 | [[package]] 588 | name = "serde_derive" 589 | version = "1.0.152" 590 | source = "registry+https://github.com/rust-lang/crates.io-index" 591 | checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" 592 | dependencies = [ 593 | "proc-macro2", 594 | "quote", 595 | "syn", 596 | ] 597 | 598 | [[package]] 599 | name = "serde_spanned" 600 | version = "0.6.1" 601 | source = "registry+https://github.com/rust-lang/crates.io-index" 602 | checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" 603 | dependencies = [ 604 | "serde", 605 | ] 606 | 607 | [[package]] 608 | name = "signal-hook-registry" 609 | version = "1.4.0" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" 612 | dependencies = [ 613 | "libc", 614 | ] 615 | 616 | [[package]] 617 | name = "smallvec" 618 | version = "1.10.0" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" 621 | 622 | [[package]] 623 | name = "socket2" 624 | version = "0.4.7" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" 627 | dependencies = [ 628 | "libc", 629 | "winapi", 630 | ] 631 | 632 | [[package]] 633 | name = "spyglass-lens" 634 | version = "0.1.6" 635 | source = "registry+https://github.com/rust-lang/crates.io-index" 636 | checksum = "4e2ebbd0eff5a2ebf86cdc693c1b314722aee201702f9746b6309c43e4867f70" 637 | dependencies = [ 638 | "anyhow", 639 | "blake2", 640 | "hex", 641 | "regex", 642 | "ron", 643 | "serde", 644 | ] 645 | 646 | [[package]] 647 | name = "strsim" 648 | version = "0.10.0" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 651 | 652 | [[package]] 653 | name = "subtle" 654 | version = "2.4.1" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 657 | 658 | [[package]] 659 | name = "syn" 660 | version = "1.0.107" 661 | source = "registry+https://github.com/rust-lang/crates.io-index" 662 | checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" 663 | dependencies = [ 664 | "proc-macro2", 665 | "quote", 666 | "unicode-ident", 667 | ] 668 | 669 | [[package]] 670 | name = "termcolor" 671 | version = "1.1.3" 672 | source = "registry+https://github.com/rust-lang/crates.io-index" 673 | checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" 674 | dependencies = [ 675 | "winapi-util", 676 | ] 677 | 678 | [[package]] 679 | name = "time" 680 | version = "0.1.45" 681 | source = "registry+https://github.com/rust-lang/crates.io-index" 682 | checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" 683 | dependencies = [ 684 | "libc", 685 | "wasi 0.10.0+wasi-snapshot-preview1", 686 | "winapi", 687 | ] 688 | 689 | [[package]] 690 | name = "tokio" 691 | version = "1.25.0" 692 | source = "registry+https://github.com/rust-lang/crates.io-index" 693 | checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" 694 | dependencies = [ 695 | "autocfg", 696 | "bytes", 697 | "libc", 698 | "memchr", 699 | "mio", 700 | "num_cpus", 701 | "parking_lot", 702 | "pin-project-lite", 703 | "signal-hook-registry", 704 | "socket2", 705 | "tokio-macros", 706 | "windows-sys", 707 | ] 708 | 709 | [[package]] 710 | name = "tokio-macros" 711 | version = "1.8.2" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" 714 | dependencies = [ 715 | "proc-macro2", 716 | "quote", 717 | "syn", 718 | ] 719 | 720 | [[package]] 721 | name = "toml" 722 | version = "0.7.2" 723 | source = "registry+https://github.com/rust-lang/crates.io-index" 724 | checksum = "f7afcae9e3f0fe2c370fd4657108972cbb2fa9db1b9f84849cefd80741b01cb6" 725 | dependencies = [ 726 | "serde", 727 | "serde_spanned", 728 | "toml_datetime", 729 | "toml_edit", 730 | ] 731 | 732 | [[package]] 733 | name = "toml_datetime" 734 | version = "0.6.1" 735 | source = "registry+https://github.com/rust-lang/crates.io-index" 736 | checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" 737 | dependencies = [ 738 | "serde", 739 | ] 740 | 741 | [[package]] 742 | name = "toml_edit" 743 | version = "0.19.4" 744 | source = "registry+https://github.com/rust-lang/crates.io-index" 745 | checksum = "9a1eb0622d28f4b9c90adc4ea4b2b46b47663fde9ac5fafcb14a1369d5508825" 746 | dependencies = [ 747 | "indexmap", 748 | "serde", 749 | "serde_spanned", 750 | "toml_datetime", 751 | "winnow", 752 | ] 753 | 754 | [[package]] 755 | name = "typenum" 756 | version = "1.16.0" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" 759 | 760 | [[package]] 761 | name = "unicode-ident" 762 | version = "1.0.6" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" 765 | 766 | [[package]] 767 | name = "unicode-width" 768 | version = "0.1.10" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" 771 | 772 | [[package]] 773 | name = "validator" 774 | version = "0.1.0" 775 | dependencies = [ 776 | "anyhow", 777 | "blake2", 778 | "chrono", 779 | "clap", 780 | "hex", 781 | "ron", 782 | "serde", 783 | "spyglass-lens", 784 | "tokio", 785 | "toml", 786 | ] 787 | 788 | [[package]] 789 | name = "version_check" 790 | version = "0.9.4" 791 | source = "registry+https://github.com/rust-lang/crates.io-index" 792 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 793 | 794 | [[package]] 795 | name = "wasi" 796 | version = "0.10.0+wasi-snapshot-preview1" 797 | source = "registry+https://github.com/rust-lang/crates.io-index" 798 | checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" 799 | 800 | [[package]] 801 | name = "wasi" 802 | version = "0.11.0+wasi-snapshot-preview1" 803 | source = "registry+https://github.com/rust-lang/crates.io-index" 804 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 805 | 806 | [[package]] 807 | name = "wasm-bindgen" 808 | version = "0.2.84" 809 | source = "registry+https://github.com/rust-lang/crates.io-index" 810 | checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" 811 | dependencies = [ 812 | "cfg-if", 813 | "wasm-bindgen-macro", 814 | ] 815 | 816 | [[package]] 817 | name = "wasm-bindgen-backend" 818 | version = "0.2.84" 819 | source = "registry+https://github.com/rust-lang/crates.io-index" 820 | checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" 821 | dependencies = [ 822 | "bumpalo", 823 | "log", 824 | "once_cell", 825 | "proc-macro2", 826 | "quote", 827 | "syn", 828 | "wasm-bindgen-shared", 829 | ] 830 | 831 | [[package]] 832 | name = "wasm-bindgen-macro" 833 | version = "0.2.84" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" 836 | dependencies = [ 837 | "quote", 838 | "wasm-bindgen-macro-support", 839 | ] 840 | 841 | [[package]] 842 | name = "wasm-bindgen-macro-support" 843 | version = "0.2.84" 844 | source = "registry+https://github.com/rust-lang/crates.io-index" 845 | checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" 846 | dependencies = [ 847 | "proc-macro2", 848 | "quote", 849 | "syn", 850 | "wasm-bindgen-backend", 851 | "wasm-bindgen-shared", 852 | ] 853 | 854 | [[package]] 855 | name = "wasm-bindgen-shared" 856 | version = "0.2.84" 857 | source = "registry+https://github.com/rust-lang/crates.io-index" 858 | checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" 859 | 860 | [[package]] 861 | name = "winapi" 862 | version = "0.3.9" 863 | source = "registry+https://github.com/rust-lang/crates.io-index" 864 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 865 | dependencies = [ 866 | "winapi-i686-pc-windows-gnu", 867 | "winapi-x86_64-pc-windows-gnu", 868 | ] 869 | 870 | [[package]] 871 | name = "winapi-i686-pc-windows-gnu" 872 | version = "0.4.0" 873 | source = "registry+https://github.com/rust-lang/crates.io-index" 874 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 875 | 876 | [[package]] 877 | name = "winapi-util" 878 | version = "0.1.5" 879 | source = "registry+https://github.com/rust-lang/crates.io-index" 880 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 881 | dependencies = [ 882 | "winapi", 883 | ] 884 | 885 | [[package]] 886 | name = "winapi-x86_64-pc-windows-gnu" 887 | version = "0.4.0" 888 | source = "registry+https://github.com/rust-lang/crates.io-index" 889 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 890 | 891 | [[package]] 892 | name = "windows-sys" 893 | version = "0.42.0" 894 | source = "registry+https://github.com/rust-lang/crates.io-index" 895 | checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" 896 | dependencies = [ 897 | "windows_aarch64_gnullvm", 898 | "windows_aarch64_msvc", 899 | "windows_i686_gnu", 900 | "windows_i686_msvc", 901 | "windows_x86_64_gnu", 902 | "windows_x86_64_gnullvm", 903 | "windows_x86_64_msvc", 904 | ] 905 | 906 | [[package]] 907 | name = "windows_aarch64_gnullvm" 908 | version = "0.42.0" 909 | source = "registry+https://github.com/rust-lang/crates.io-index" 910 | checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" 911 | 912 | [[package]] 913 | name = "windows_aarch64_msvc" 914 | version = "0.42.0" 915 | source = "registry+https://github.com/rust-lang/crates.io-index" 916 | checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" 917 | 918 | [[package]] 919 | name = "windows_i686_gnu" 920 | version = "0.42.0" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" 923 | 924 | [[package]] 925 | name = "windows_i686_msvc" 926 | version = "0.42.0" 927 | source = "registry+https://github.com/rust-lang/crates.io-index" 928 | checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" 929 | 930 | [[package]] 931 | name = "windows_x86_64_gnu" 932 | version = "0.42.0" 933 | source = "registry+https://github.com/rust-lang/crates.io-index" 934 | checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" 935 | 936 | [[package]] 937 | name = "windows_x86_64_gnullvm" 938 | version = "0.42.0" 939 | source = "registry+https://github.com/rust-lang/crates.io-index" 940 | checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" 941 | 942 | [[package]] 943 | name = "windows_x86_64_msvc" 944 | version = "0.42.0" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" 947 | 948 | [[package]] 949 | name = "winnow" 950 | version = "0.3.3" 951 | source = "registry+https://github.com/rust-lang/crates.io-index" 952 | checksum = "faf09497b8f8b5ac5d3bb4d05c0a99be20f26fd3d5f2db7b0716e946d5103658" 953 | dependencies = [ 954 | "memchr", 955 | ] 956 | -------------------------------------------------------------------------------- /validator/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "validator" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | anyhow = "1.0" 10 | blake2 = "0.10.4" 11 | clap = { version = "4.0.32", features = ["derive"] } 12 | chrono = "0.4.23" 13 | hex = "0.4.3" 14 | ron = "0.8" 15 | serde = { version = "1.0", features = ["derive"] } 16 | spyglass-lens = "0.1.6" 17 | toml = "0.7.2" 18 | tokio = { version = "1.25.0", features = ["full"] } -------------------------------------------------------------------------------- /validator/src/entity.rs: -------------------------------------------------------------------------------- 1 | use std::path::PathBuf; 2 | 3 | use serde::{Deserialize, Serialize}; 4 | 5 | #[derive(Clone, Deserialize, Serialize)] 6 | pub struct InstallableLens { 7 | pub author: String, 8 | pub description: String, 9 | /// Unique ID for lens 10 | pub name: String, 11 | /// Human readable string for lens. 12 | pub label: String, 13 | pub sha: String, 14 | pub download_url: String, 15 | pub html_url: String, 16 | #[serde(skip)] 17 | pub path: PathBuf, 18 | pub categories: Vec, 19 | } 20 | -------------------------------------------------------------------------------- /validator/src/main.rs: -------------------------------------------------------------------------------- 1 | use blake2::{Blake2s256, Digest}; 2 | use clap::{Parser, Subcommand}; 3 | use std::collections::HashMap; 4 | use std::ffi::OsStr; 5 | use std::fs; 6 | use std::path::PathBuf; 7 | use std::process::ExitCode; 8 | 9 | mod entity; 10 | mod repo; 11 | 12 | use entity::InstallableLens; 13 | use spyglass_lens::LensConfig; 14 | 15 | #[derive(Parser)] 16 | #[command(author, version, about, long_about = None)] 17 | pub struct ValidatorCli { 18 | #[arg(short, long)] 19 | pub dry_run: bool, 20 | #[command(subcommand)] 21 | command: Option, 22 | } 23 | 24 | #[derive(Subcommand)] 25 | enum Commands { 26 | /// Generate lens explorer site 27 | GenerateExplorer, 28 | /// (Default) Validates lenses & generate index file 29 | Validate, 30 | } 31 | 32 | const INDEX_FILE: &str = "../index.ron"; 33 | const LENS_FOLDER: &str = "../lenses"; 34 | const HTML_URL_PREFIX: &str = "https://github.com/spyglass-search/lens-box/blob/main/lenses"; 35 | const DL_URL_PREFIX: &str = 36 | "https://raw.githubusercontent.com/spyglass-search/lens-box/main/lenses"; 37 | 38 | fn validate_lens(lens: &InstallableLens) -> anyhow::Result<()> { 39 | println!("validating {} - {:?}", lens.name, lens.label); 40 | 41 | let mut components = lens.download_url.split('/').collect::>(); 42 | 43 | let file = components.pop().expect("Unable to get file path"); 44 | 45 | let parent = components.pop().expect("Unable to get parent file path"); 46 | 47 | // Attempt to parse lens 48 | let contents = 49 | fs::read_to_string(format!("../lenses/{}/{}", parent, file)).expect("Unable to read lens"); 50 | ron::from_str::(&contents)?; 51 | 52 | Ok(()) 53 | } 54 | 55 | fn find_lens(path: &PathBuf) -> Option<(PathBuf, String)> { 56 | for file in std::fs::read_dir(path) 57 | .expect("Unable to read directory") 58 | .flatten() 59 | { 60 | let path = file.path(); 61 | if path.is_file() && path.extension() == Some(OsStr::new("ron")) { 62 | if let Ok(file_contents) = std::fs::read_to_string(file.path()) { 63 | return Some((path, file_contents)); 64 | } 65 | } 66 | } 67 | 68 | None 69 | } 70 | 71 | fn check_lenses() -> anyhow::Result> { 72 | let mut updated_lenses = Vec::new(); 73 | 74 | // Find folders to check for lenses 75 | let mut lenses = Vec::new(); 76 | for path in std::fs::read_dir(LENS_FOLDER)?.flatten() { 77 | if path.path().is_dir() { 78 | lenses.push(path); 79 | } 80 | } 81 | 82 | let mut categories: HashMap = HashMap::new(); 83 | 84 | for path in lenses { 85 | if let Some((file_path, file_contents)) = find_lens(&path.path()) { 86 | let lens = match ron::from_str::(&file_contents) { 87 | Ok(lens) => lens, 88 | Err(err) => { 89 | eprintln!("Unable to parse {} - {}", path.path().display(), err); 90 | continue; 91 | } 92 | }; 93 | 94 | for cat in &lens.categories { 95 | let num = categories.entry(cat.to_string()).or_insert(0); 96 | *num += 1; 97 | } 98 | 99 | let parent = file_path 100 | .parent() 101 | .expect("No parent path") 102 | .components() 103 | .last() 104 | .expect("Last component") 105 | .as_os_str() 106 | .to_str() 107 | .expect("Unable to convert parent directory to &str"); 108 | 109 | let file_name = file_path 110 | .file_name() 111 | .expect("Should have a filename") 112 | .to_str() 113 | .expect("Unable to convert filename to &str"); 114 | 115 | let mut hasher = Blake2s256::new(); 116 | hasher.update(file_contents); 117 | let res = hasher.finalize(); 118 | 119 | if file_name != format!("{}.ron", lens.name) { 120 | return Err(anyhow::anyhow!( 121 | "{} lens file should match lens name", 122 | lens.name 123 | )); 124 | } 125 | 126 | let label = lens.label(); 127 | updated_lenses.push(InstallableLens { 128 | author: lens.author, 129 | description: lens.description.unwrap_or_default(), 130 | name: lens.name, 131 | label, 132 | sha: hex::encode(res), 133 | path: file_path.clone(), 134 | categories: lens.categories, 135 | download_url: format!("{}/{}/{}", DL_URL_PREFIX, parent, file_name), 136 | html_url: format!("{}/{}/{}", HTML_URL_PREFIX, parent, file_name), 137 | }); 138 | } 139 | } 140 | 141 | println!("Category Stats"); 142 | println!("--------------"); 143 | let mut sorted = categories.iter().collect::>(); 144 | sorted.sort(); 145 | for (key, count) in sorted.iter() { 146 | println!("{key}: {count}") 147 | } 148 | 149 | // Sort by name 150 | updated_lenses.sort_by(|a, b| a.name.to_lowercase().cmp(&b.name.to_lowercase())); 151 | println!("\nFound {} lenses\n", updated_lenses.len()); 152 | Ok(updated_lenses) 153 | } 154 | 155 | fn validate_index_file() -> anyhow::Result<()> { 156 | let file_contents = fs::read_to_string(INDEX_FILE)?; 157 | if let Ok(index) = ron::from_str::>(&file_contents) { 158 | println!("index.ron successfully parsed"); 159 | 160 | // Loop through index and validate len files 161 | for lens in index { 162 | validate_lens(&lens)?; 163 | } 164 | } 165 | 166 | Ok(()) 167 | } 168 | 169 | #[tokio::main] 170 | async fn main() -> ExitCode { 171 | let cli = ValidatorCli::parse(); 172 | match check_lenses() { 173 | Ok(updated) => { 174 | match &cli.command { 175 | None | Some(Commands::Validate) => { 176 | let ser = ron::ser::to_string_pretty(&updated, Default::default()) 177 | .expect("Unable to serialize index"); 178 | 179 | // Write out new index file. 180 | if !cli.dry_run { 181 | fs::write(INDEX_FILE, ser).expect("Unable to write index"); 182 | } 183 | 184 | // Validate index file. 185 | if let Err(e) = validate_index_file() { 186 | println!("index validation failed: {}", e); 187 | return ExitCode::FAILURE; 188 | } 189 | 190 | ExitCode::SUCCESS 191 | } 192 | Some(Commands::GenerateExplorer) => { 193 | // Generate docs 194 | println!("\ngenerating lens explorer site..."); 195 | let base_path = repo::get_and_clean_doc_path(&cli); 196 | for lens in &updated { 197 | if let Err(e) = repo::generate_page(&cli, &base_path, lens) { 198 | println!("page generation failure: {}", e); 199 | return ExitCode::FAILURE; 200 | } 201 | } 202 | println!("generated {} pages", updated.len()); 203 | 204 | ExitCode::SUCCESS 205 | } 206 | } 207 | } 208 | Err(err) => { 209 | println!("Error checking lens {:?}", err); 210 | ExitCode::FAILURE 211 | } 212 | } 213 | } 214 | -------------------------------------------------------------------------------- /validator/src/repo.rs: -------------------------------------------------------------------------------- 1 | use chrono::{DateTime, Utc}; 2 | use serde::Serialize; 3 | use spyglass_lens::LensConfig; 4 | use std::collections::HashMap; 5 | use std::fs; 6 | use std::path::{Path, PathBuf}; 7 | use toml::Value; 8 | 9 | use crate::entity::InstallableLens; 10 | use crate::ValidatorCli; 11 | 12 | #[derive(Serialize)] 13 | struct RepoItem { 14 | title: String, 15 | date: String, 16 | description: String, 17 | extra: HashMap, 18 | taxonomies: HashMap, 19 | } 20 | 21 | const DOCS_FOLDER: &str = "../docs"; 22 | const SOURCE_URL_PREFIX: &str = "https://github.com/spyglass-search/lens-box/blob/main/lenses"; 23 | 24 | pub fn get_and_clean_doc_path(cli: &ValidatorCli) -> PathBuf { 25 | let docs_path = Path::new(DOCS_FOLDER).join("content/lenses"); 26 | 27 | // No need to clean up the directory if this is a dry run 28 | if cli.dry_run { 29 | return docs_path; 30 | } 31 | 32 | fs::read_dir(docs_path.clone()) 33 | .expect("Unable to walk DOCS_FOLDER") 34 | .flatten() 35 | .collect::>() 36 | .iter() 37 | .for_each(|file| { 38 | if file.file_name() != "_index.md" { 39 | let _ = fs::remove_file(file.path()); 40 | } 41 | }); 42 | 43 | docs_path 44 | } 45 | 46 | pub fn generate_page( 47 | cli: &ValidatorCli, 48 | base_path: &Path, 49 | lens: &InstallableLens, 50 | ) -> anyhow::Result<()> { 51 | if let Ok(lens_config) = ron::from_str::(&std::fs::read_to_string(&lens.path)?) { 52 | let file_name = format!("{}.md", lens.name); 53 | 54 | let title = if lens.label.is_empty() { 55 | lens.name.to_string() 56 | } else { 57 | lens.label.to_string() 58 | }; 59 | 60 | let mut taxos: HashMap = HashMap::new(); 61 | taxos.insert("author".to_string(), vec![lens.author.to_string()].into()); 62 | taxos.insert("categories".to_string(), lens_config.categories.into()); 63 | 64 | let mut extra: HashMap = HashMap::new(); 65 | extra.insert("sort".to_string(), title.to_lowercase().into()); 66 | extra.insert("identifier".to_string(), lens_config.name.into()); 67 | extra.insert("domains".to_string(), lens_config.domains.into()); 68 | extra.insert("source_url".to_string(), format!("{}/{}/{}.ron", SOURCE_URL_PREFIX, lens.name, lens.name).into()); 69 | 70 | // No need to show huge amount of urls 71 | let mut truncated_urls = lens_config.urls.clone(); 72 | truncated_urls.truncate(10); 73 | extra.insert("urls".to_string(), truncated_urls.into()); 74 | extra.insert( 75 | "rules".to_string(), 76 | lens_config 77 | .rules 78 | .iter() 79 | .map(|rule| rule.to_string()) 80 | .collect::>() 81 | .into(), 82 | ); 83 | 84 | let date = if let Ok(metadata) = lens.path.metadata() { 85 | if let Ok(last_mod) = metadata.modified() { 86 | let date: DateTime = DateTime::from(last_mod); 87 | Some(date.format("%Y-%m-%d").to_string()) 88 | } else { 89 | None 90 | } 91 | } else { 92 | None 93 | }; 94 | 95 | let repo_item = RepoItem { 96 | title, 97 | description: lens.description.to_string(), 98 | date: date.unwrap_or_else(|| "2023-01-01".to_string()), 99 | extra, 100 | taxonomies: taxos, 101 | }; 102 | 103 | if let Ok(res) = toml::ser::to_string_pretty(&repo_item) { 104 | if !cli.dry_run { 105 | fs::write(base_path.join(file_name), format!("+++\n{}+++\n", res))?; 106 | } 107 | } 108 | 109 | Ok(()) 110 | } else { 111 | Err(anyhow::anyhow!(format!( 112 | "Unable to parse {}", 113 | lens.path.display() 114 | ))) 115 | } 116 | } 117 | --------------------------------------------------------------------------------