dotfiles/nyxt/init.lisp
2021-09-27 17:13:21 -05:00

256 lines
8.1 KiB
Common Lisp

(in-package #:nyxt-user) ; While implicit, this allows SLY to know which package we are in.
(dolist (file (list (nyxt-init-file "slynk.lisp"))))
(dolist (file (list (nyxt-init-file "glyphs.lisp"))))
(load-after-system :slynk (nyxt-init-file "slynk.lisp"))
;; (defvar *chris-prompt-keymap (make-keymap "chris-prompt-map"))
;; (define-key *chris-prompt-keymap*
;; "escape" 'cancel-input
;; "C-j" 'select-next
;; "C-k" 'select-previous)
;; (define-mode chris-prompt-mode ()
;; "Dummy mode for the custom key bindings in `*chris-prompt-keymap*'."
;; ((keymap-scheme (keymap:make-scheme
;; scheme:vi-insert *chris-prompt-keymap*))
;; (visible-in-status-p nil)))
;; Always restore history and don't ask
(define-configuration browser
((session-restore-prompt :always-restore)))
(define-configuration (prompt-buffer)
((default-modes
(append
'(vi-insert-mode)
%slot-default%))))
(define-configuration browser
((external-editor-program '("/usr/bin/emacsclient"))))
;; Create a function to launch mpv with given url
(defun mpv (url)
"MPV launches with given url using the fast profile."
(uiop:run-program (list "mpv" "--profile=fast" url "&")))
;; Create a function to download videos with youtube-dl in alacritty
(defun youtube-dl (url)
"Download videos and audio with youtube-dl in alacritty for feedback"
(uiop:run-program
(list "alacritty" "-e" "youtube-dl" "-o ~/Videos/%(title)s.%(ext)s" url)))
;; Let's create a function to hint videos, convert the url to a sting, and play them in MPV
(define-command hint-mpv (&key nyxt/web-mode::annotate-visible-only-p)
"Show a set of element hints, and copy the URL of the user inputted one."
(nyxt/web-mode:query-hints "Copy element URL"
(lambda (nyxt/web-mode::result)
;; this converts the url to a string to be used in mpv
(let*
((url
(format nil "~a"
(url (first nyxt/web-mode::result)))))
;; here we take that string and pipe it into mpv
(mpv url)))
:annotate-visible-only-p
nyxt/web-mode::annotate-visible-only-p))
;; Let's create a function to hint videos, convert the url to a sting, and download with ytdl
(define-command hint-ytdl (&key nyxt/web-mode::annotate-visible-only-p)
"Show a set of element hints, and copy the URL of the user inputted one."
(nyxt/web-mode:query-hints "Copy element URL"
(lambda (nyxt/web-mode::result)
;; this converts the url to a string to be used in mpv
(let*
((url
(format nil "~a"
(url (first nyxt/web-mode::result)))))
;; here we take that string and pipe it into mpv
(youtube-dl url)))
:annotate-visible-only-p
nyxt/web-mode::annotate-visible-only-p))
;; These are my own keys that are layered over vi-normal. A lot of these
;; are similar to qutebrowser.
(defvar *chris-keymap* (make-keymap "chris-map"))
(define-key *chris-keymap*
"K" 'switch-buffer-next
"J" 'switch-buffer-previous
"b" 'switch-buffer
"v" 'hint-mpv
"V" 'hint-ytdl
"d" 'delete-current-buffer
"D" 'delete-buffer
"r" 'reload-current-buffer
"R" 'reload-buffers)
(define-mode chris-mode ()
"Dummy mode for the custom key bindings in `*chris-keymap*'."
((keymap-scheme
(keymap:make-scheme
scheme:vi-normal *chris-keymap*))
(visible-in-status-p nil)))
(define-configuration buffer
((default-modes
(append
'(vi-normal-mode
auto-mode
reduce-tracking-mode
force-https-mode
chris-mode)
%slot-default%))))
(define-configuration buffer
((search-engines
(list
(make-instance 'search-engine
:shortcut "s"
:search-url "https://search.tfcconnection.org/?q=~a"
:fallback-url "https://search.tfcconnection.org")))))
(define-configuration nyxt/vi-mode:vi-normal-mode
((visible-in-status-p nil)))
(define-configuration nyxt/vi-mode:vi-insert-mode
((visible-in-status-p nil)))
(define-configuration status-buffer
((style
(str:concat
%slot-default%
(cl-css:css
'((body
:background "#282a36"
:color "#e2e4e5"
:line-height "1fr")
("#container-vi"
:grid-template-columns "0px 30px 2fr 0px 240px")
("#controls"
:background-color "#282a36"
:color "#f3f99d"
:width "0px"
:padding-left "0px"
:hidden)
("#url"
:background-color "#282a36"
:color "#5af78e")
("#modes"
:background-color "#282a36"
:color "#f3f99d")
("#tabs"
:background-color "#282a36"
:color "#5af78e")
(".tab"
:background-color "#282a36"
:color "#9aedfe")
(".tab:hover"
:background-color "#282a36"
:color "#f1f1f0")
(".button"
:background-color "#282a36"
:color "#5af78e")
(".button:hover"
:background-color "#282a36"
:color "#f1f1f0")
(".arrow"
:width "0px"
:height "0px")
(".arrow-right"
:background-color "#282a36"
:color "#5af78e")
(".arrow-left"
:background-color "#282a36"
:color "#5af78e")
))))))
(define-configuration internal-buffer
((style
(str:concat
%slot-default%
(cl-css:css
'((body
:background "#282a36"
:color "#e2e4e5")
(.button
:color "#e2e4e5")))))))
(define-configuration window
((message-buffer-style
(str:concat
%slot-default%
(cl-css:css
'((body
:background-color "#282a36"
:color "#e2e4e5")))))))
(define-configuration prompt-buffer
((style
(str:concat
%slot-default%
(cl-css:css
'((body
:background-color "#282a36"
:color "#e2e4e5")
("#prompt-area-vi"
:background-color "#282a36"
:color "#57c7ff")
("#prompt"
:background-color "#282a36"
:color "#e2e4e5")
("#input"
:background-color "#282a36"
:color "#e2e4e5")
("#suggestions"
:background-color "#282a36"
:color "#e2e4e5")
(.vi-insert-mode
:background-color "#282a36")
(.vi-normal-mode
:background-color "#282a36")
(.source
:margin-left "5px")
(.source-name
:background-color "#282a36"
:color "#e2e4e5")
(.source-content
:background-color "#282a36"
:color "#e2e4e5")
;; (".source-content td"
;; :background-color "#282a36"
;; :color "#e2e4e5")
(".source-content th"
:background-color "#43454f"
:color "#e2e4e5")
("#selection"
:background-color "#57c7ff"
:color "#34353e")
(.marked
:background-color "#5af78e"
:color "#34353e")
(.selected
:background-color "#57c7ff"
:color "#34353e")
(.button
:color "#e2e4e5")))))))
(in-package #:nyxt-user) ; While implicit, this allows SLY to know which package we are in.
(load "~/quicklisp/setup.lisp")
(ql:quickload :slynk)
(define-command-global start-slynk (&optional (slynk-port *swank-port*))
"Start a Slynk server that can be connected to, for instance, in
Emacs via SLY.
Warning: This allows Nyxt to be controlled remotely, that is, to execute
arbitrary code with the privileges of the user running Nyxt. Make sure
you understand the security risks associated with this before running
this command."
(slynk:create-server :port slynk-port :dont-close t)
(echo "Slynk server started at port ~a" slynk-port))
(start-slynk)