blob: 22bbb6c0a0613efc7723fc43ab41dfe917a2eaa5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
;;; -*- lexical-binding: t; -*-
;;; Commentary:
;;; Code:
(require 'selector)
(require 'dash)
(require 'fill-column)
(defun bd/browse (url &optional pref &rest _)
"Given PREF, launches URL in one of librewolf, torbrowser,
icecat, or eww."
(interactive)
(pcase pref
(0 (eww url))
(_ (start-process "librewolf" nil "librewolf" "--new-window" url))))
(setopt browse-url-browser-function 'bd/browse)
(defun bd/selector-bookmarks ()
"Selector source for all bookmarks."
(selector-source-create
"Bookmarks"
:candidates
(-map
(lambda (b) (selector-candidate-create (car b) :value (cdr b)))
bd/bookmarks)
:actions
(list (lambda (x) (apply #'bd/browse x)))))
(defmacro bd/search-candidate (name url pref)
"Syntax for a search candidate given NAME, URL, and PREF."
`(selector-candidate-create
,(concat "Search " name)
:type 'dummy
:action (lambda (_) (browse-url (concat ,url (selector-input)) ,pref))))
(defun rip (url)
"Play URL (or search string) in mpv."
(message "Ludu %s" url)
(start-process "rip" nil
"mpv" "--force-window=yes"
(concat (if (string-match "https://.*" url)
"ytdl://"
"ytdl://ytsearch:") url)))
(defun bd/selector-rip ()
"Selector source for streaming a video off of youtube."
(selector-candidate-create
"Search Immediate"
:type 'dummy
:action (lambda (_) (rip (selector-input)))))
(defun bd/selector-search ()
"Selector source for all search engines."
(selector-source-create
"Browser"
:candidates
(list (bd/search-candidate "SearXNG" "https://searx.operationnull.com/searxng/search?q=" 0)
(bd/search-candidate "Wikipedia" "https://en.wikipedia.org/w/index.php?search=" 0)
(bd/search-candidate "Invidious" "https://inv.nadeko.net/search?q=" 0)
(bd/search-candidate "Urban Dictionary" "https://www.urbandictionary.com/define.php?term=" 0)
(bd/search-candidate "Archwiki" "https://wiki.archlinux.org/index.php?title=Special%3ASearch&search=" 0)
(bd/selector-rip)
(bd/search-candidate "Web" "" 1))))
(defun bd/browse-dispatcher ()
"Select and `browse-url' a bookmark or search feature."
(interactive)
(unwind-protect
(selector
(list (bd/selector-bookmarks)
(bd/selector-search)))))
(setopt browse-url-handlers
`((,(regexp-opt '("youtube.com" "youtu.be" "vid.puffyan.us" "deezer.page" "deezer.com")) .
(lambda (url &rest _) (rip url))))
url-privacy-level '(email os emacs lastloc cookies))
(use-package elpher
:bind
(:map elpher-mode-map
("l" . #'elpher-back)
("d" . #'elpher-download)
("w" . #'elpher-copy-current-url)
("A" . #'elpher-copy-link-url)
("E" . #'elpher-bookmark-current)
("TAB" . #'elpher-next-link)
("g" . #'elpher-reload)
("G" . #'elpher-go))
:config
(defun bd/elpher (original url &optional new-window)
"Handle gemini links."
(cond ((string-match-p "\\`\\(gemini\\|gopher\\)://" url)
(elpher-go url))
(t (funcall original url new-window))))
(advice-add 'eww :around 'bd/elpher)
(setopt elpher-default-url-type "gemini"
elpher-connection-timeout 120
elpher-gemini-max-fill-width 85
elpher-use-emacs-bookmark-menu t))
(use-package eww
:defer 1
:bind
(:map eww-mode-map
("i" . eww-toggle-images))
:config
(setopt eww-search-prefix "https://searx.operationnull.com/searxng/search?q="
eww-auto-rename-buffer 'title
eww-browse-url-new-window-is-tab nil
browse-url-secondary-browser-function #'bd/browse
eww-header-line-format nil
eww-use-browse-url (regexp-opt '("mailto:"
"youtube.com"
"youtu.be"))
shr-use-fonts nil
shr-inhibit-images t
shr-cookie-policy nil
shr-max-width 90))
(provide 'bd--browse)
;;; bd--browse.el ends here
|