summaryrefslogtreecommitdiff
path: root/.config/emacs/modules/bd--browse.el
blob: b4e77aa577812ee3af6df200358a0679598cc5da (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
;;; -*- lexical-binding: t; -*-
;;; Commentary:
;;; Code:

(require 'selector)
(require 'dash)
(require 'fill-column)
(defvar bd/bookmarks nil) ;; in secret file
;;;; searching
(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))
    (1 (start-process "icecat" nil "icecat" "--new-window" url))
    (2 (start-process "torbrowser" nil "torbrowser" "--new-window" url))
    (_ (start-process "librewolf" nil "librewolf" "--new-window" url))))
(setopt browse-url-browser-function 'bd/browse)

(defun bd/selector-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)
  `(selector-candidate-create
    ,(concat "Search " name)
    :type 'dummy
    :action (lambda (_) (browse-url (concat ,url (selector-input)) ,pref))))

(defun bd/selector-search ()
  (selector-source-create
   "Browser"
   :candidates
   (list (bd/search-candidate "DuckDuckGo" "https://www.duckduckgo.com/?q=" 3)
         (bd/search-candidate "Wikipedia" "https://en.wikipedia.org/w/index.php?search=" 3)
         (bd/search-candidate "Invidious" "https://yewtu.be/search?q=" 0)
         (bd/search-candidate "Urban Dictionary" "https://www.urbandictionary.com/define.php?term=" 1)
         (bd/search-candidate "Archwiki" "https://wiki.archlinux.org/index.php?title=Special%3ASearch&search=" 1)
         (bd/search-candidate "Web" "" 3))))

(defun bd/visit-bookmark ()
  "Select and `browse-url' a bookmark."
  (interactive)
  (unwind-protect
      (selector
       (list (bd/selector-bookmarks)
             (bd/selector-search)))))

(setopt browse-url-handlers
        `((,(regexp-opt '("youtube.com" "youtu.be")) .
           (lambda (url &rest _)
             (message "Ludu %s" url)
             (start-process-shell-command "rip-video" nil (concat "rip-video " url)))))
        url-privacy-level '(email os emacs lastloc cookies))

(use-package shr
  :defer t
  :custom
  (shr-use-fonts t)
  (shr-cookie-policy nil)
  (shr-max-width 85))

(use-package eww
  :hook
  ((eww-after-render . (lambda ()
			 (setq-local fill-column-desired-width 90)
			 (fill-column-mode))))
  :custom
  (eww-search-prefix "https://duckduckgo.com/html/?q=")
  (eww-auto-rename-buffer 'title)
  (eww-use-browse-url (regexp-opt '("mailto:"
                                    "youtube.com"
                                    "youtu.be"))))

(use-package apropos
  :bind (("C-h a" . selector-apropos)))


(provide 'bd--browse)
;;; bd-browse ends here