(if (string= system-type "windows-nt")
(setq
dj/dropbox "C:/Users/dick jones/Dropbox/"
dj/nextcloud "C:/Users/dick jones/spambiNC/"
dj/mpv "mpv.exe"
browse-url-browser-function 'browse-url-generic
browse-url-generic-program "C:/Users/dick jones/AppData/Local/Chromium/Application/chrome.exe")
(if (string= system-type "gnu/linux")
(setq
dj/dropbox "~/Dropbox/"
dj/nextcloud "~/doc/nc/"
dj/mpv "mpv")))
(setq evil-want-integration t)
(scroll-bar-mode 0)
(show-paren-mode t)
(blink-cursor-mode 0)
(tool-bar-mode -1)
(menu-bar-mode 0)
(setq visible-bell 1)
(electric-pair-mode 1)
(global-visual-line-mode 1)
(global-linum-mode 1)
(global-hl-line-mode 0)
(set-frame-font "hack 11" nil t)
(use-package yasnippet
:ensure t
:config
(add-hook 'org-mode-hook '(lambda () (set (make-local-variable 'yas-indent-line) 'fixed))))
(use-package yasnippet-snippets
:ensure t)
(yas-global-mode 1)
(use-package flycheck
:ensure t
:config
(setq flycheck-idle-change-delay 4
flycheck-check-syntax-automatically '(save mode-enable)))
(global-flycheck-mode)
(setq flycheck-python-flake8-executable "C:/Program Files (x86)/Python38-32/Scripts/flake8.exe")
(setq flycheck-c/c++-clang-executable "c:/Program Files/LLVM/bin/clang.exe")
Auto complete framework
(use-package company
:ensure t
:hook (after-init . global-company-mode)
:custom
(company-tooltip-limit 10)
(company-idle-delay 0.15)
(company-minimum-prefix-length 2)
(company-require-match 'never)
:config
(add-to-list 'company-backends 'company-elisp)
(add-to-list 'company-backends 'company-yasnippet)
(add-to-list 'company-backends 'company-capf))
(add-hook 'after-init-hook 'global-company-mode)
(global-company-mode t)
(use-package company-irony
:ensure t)
(use-package company-irony-c-headers
:ensure t)
(use-package company-emoji
:ensure t)
(use-package company-auctex
:ensure t)
(use-package company-bibtex
:ensure t)
(use-package company-c-headers
:ensure t)
(use-package company-ledger
:ensure t)
(use-package iedit
:ensure t
:bind ("C-:" . iedit-mode))
(defun xah-copy-file-path (&optional @dir-path-only-p)
"Copy the current buffer's file path or dired path to `kill-ring'.
Result is full path.
If `universal-argument' is called first, copy only the dir path.
If in dired, copy the file/dir cursor is on, or marked files.
If a buffer is not file and not dired, copy value of `default-directory' (which is usually the “current” dir when that buffer was created)
URL `http://ergoemacs.org/emacs/emacs_copy_file_path.html'
Version 2017-09-01"
(interactive "P")
(let (($fpath
(if (string-equal major-mode 'dired-mode)
(progn
(let (($result (mapconcat 'identity (dired-get-marked-files) "\n")))
(if (equal (length $result) 0)
(progn default-directory )
(progn $result))))
(if (buffer-file-name)
(buffer-file-name)
(expand-file-name default-directory)))))
(kill-new
(if @dir-path-only-p
(progn
(message "Directory path copied: 「%s」" (file-name-directory $fpath))
(file-name-directory $fpath))
(progn
(message "File path copied: 「%s」" $fpath)
$fpath )))))
(global-set-key (kbd "C-c C-p") 'xah-copy-file-path)
(dolist (hook '(org-mode-hook))
(add-hook hook (lambda () (flyspell-mode))))
(setq ispell-program-name "hunspell")
(setq ispell-dictionary "en_US")
(use-package flyspell-correct
:ensure t
:after flyspell
:bind* (:map flyspell-mode-map ("C-'" . flyspell-correct-wrapper)))
(use-package flyspell-correct-ivy
:ensure t
:after flyspell-correct)
(use-package ddskk
:ensure t
:bind (("C-x C-j" . skk-mode))
:config
(setq skk-large-jiyso "/usr/share/skk/SKK-JISYO.L"))
(use-package ledger-mode
:ensure t
:init
(setq ledger-clear-whole-transactions 1)
:mode "\\.dat\\'")
(use-package anki-connect
:ensure t)
(use-package anki-mode
:ensure t
:bind ("C-c r" . anki-mode-cloze-region))
(use-package gruvbox-theme
:ensure t)
(use-package badwolf-theme
:ensure t)
;(load-theme 'gruvbox t)
(load-theme 'badwolf t)
(global-set-key (kbd "<f5>") 'revert-buffer)
(defalias 'yes-or-no-p 'y-or-n-p)
(setq backup-directory-alist `(("." . "~/.config/saves")))
(use-package dashboard
:ensure t
:init
(page-break-lines-mode)
:config
(dashboard-setup-startup-hook)
;(turn-on-page-break-lines-mode t)
(setq
dashboard-banner-logo-title "ただいま おにいちゃん!"
dashboard-center-content t
dashboard-set-navigator t
global-page-break-lines-mode t))
(use-package swiper
:ensure t)
(use-package counsel
:ensure t)
(ivy-mode 1)
(ivy-rich-mode 1)
(setq ivy-use-virtual-buffers t)
(setq enable-recursive-minibuffers t)
;; enable this if you want `swiper' to use it
(setq search-default-mode #'char-fold-to-regexp)
(global-set-key "\C-s" 'swiper)
;(global-set-key (kbd "C-c C-r") 'ivy-resume)
;(global-set-key (kbd "<f6>") 'ivy-resume)
(global-set-key (kbd "M-x") 'counsel-M-x)
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
(global-set-key (kbd "<f1> f") 'counsel-describe-function)
(global-set-key (kbd "<f1> v") 'counsel-describe-variable)
(global-set-key (kbd "<f1> l") 'counsel-find-library)
(global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol)
(global-set-key (kbd "<f2> u") 'counsel-unicode-char)
;(global-set-key (kbd "C-c g") 'counsel-git)
;(global-set-key (kbd "C-c j") 'counsel-git-grep)
;(global-set-key (kbd "C-c k") 'counsel-ag)
;(global-set-key (kbd "C-x l") 'counsel-locate)
;(global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
;(global-set-key (kbd "C-x d") 'counsel-dired)
(global-set-key (kbd "M-s") 'avy-goto-char)
(global-set-key (kbd "C-x b") 'counsel-switch-buffer)
(define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history)
(use-package ivy-yasnippet
:ensure t
:bind (("C-c y" . ivy-yasnippet)))
;; unset M- digit keys
(dotimes (n 10)
(global-unset-key (kbd (format "M-%d" n))))
(use-package workgroups2
:ensure t
;; :bind (:map workgroups-mode-map
;; (("M-1" . wg-switch-to-workgroup-at-index-0))
;; (("M-2" . wg-switch-to-workgroup-at-index-1))
;; (("M-3" . wg-switch-to-workgroup-at-index-2))
;; (("M-4" . wg-switch-to-workgroup-at-index-3)))
:config
(setq wg-workgroups-mode-exit-save-behavior 'save)
(setq wg-emacs-exit-save-behavior 'save)
(setq wg-mode-line-display-on t)
(setq wg-session-file "~/.emacs.d/.emacs_workgroups"))
(workgroups-mode t)
(use-package evil
:ensure t
:init
(setq evil-want-integration t)
(setq evil-want-keybinding nil)
:config
(evil-mode 1))
(use-package evil-org
:ensure t)
(use-package evil-org
:ensure t
:config
(add-hook 'org-mode-hook 'evil-org-mode)
(add-hook 'evil-org-mode-hook
(lambda ()
(evil-org-set-key-theme)))
(require 'evil-org-agenda)
(evil-org-agenda-set-keys))
(use-package evil-collection
:after evil dired-subtree elfeed
:ensure t
:config
(evil-collection-init)
(evil-collection-define-key 'normal 'elfeed-search-mode-map
"gw" 'dj/ElfeedWatch
"ga" 'dj/ElfeedListen
"gb" 'dj/ElfeedBrowse
"gu" 'elfeed-update
"gd" 'dj/ElfeedDownload)
(evil-collection-define-key 'normal 'elfeed-show-mode-map
"gw" 'dj/ElfeedWatch
"ga" 'dj/ElfeedListen
"gb" 'dj/ElfeedBrowse
"gd" 'dj/ElfeedDownload))
(use-package evil-collection
:after evil
:ensure t
:config
(evil-collection-init))
(use-package elpy
:ensure t
:config
(elpy-enable))
(setq elpy-rpc-python-command "python")
(use-package magit
:ensure t)
(defun cls ()
"Clear the eshell buffer. Changed to cls for win10."
(let ((inhibit-read-only t))
(erase-buffer)
(eshell-send-input)))
(defun eshell-handle-ansi-color ()
(ansi-color-apply-on-region eshell-last-output-start
eshell-last-output-end))
(defun custom-eshell ()
"Highlight eshell pwd and prompt separately."
(mapconcat
(lambda (list)
(propertize (car list)
'read-only t
'font-lock-face (cdr list)
'front-sticky '(font-lock-face read-only)
'rear-nonsticky '(font-lock-face read-only)))
`((,(abbreviate-file-name (eshell/pwd)) :foreground "#339CDB")
(,(if (zerop (user-uid)) " # " " $ ") :foreground "#C678DD"))
""))
(setq eshell-highlight-prompt nil
eshell-prompt-function #'custom-eshell)
(add-hook 'comint-mode-hook
(defun rm-comint-postoutput-scroll-to-bottom ()
(remove-hook 'comint-output-filter-functions
'comint-postoutput-scroll-to-bottom)))
(use-package org
:ensure t
:pin org
:config
(org-babel-do-load-languages
'org-babel-load-languages '((python . t))))
(setq
org-directory (concat dj/dropbox "/org/")
org-archive-location (concat org-directory "archive.org::"))
;; org ricing
(setq org-startup-indented t
org-bullets-bullet-list '(" ") ;; no bullets, needs org-bullets package
;org-ellipsis "" ;; folding symbol
org-pretty-entities t
org-hide-emphasis-markers t
;; show actually italicized text instead of /italicized text/
org-agenda-block-separator ""
org-fontify-whole-heading-line t
org-fontify-done-headline t
org-fontify-quote-and-verse-blocks t)
(setq org-startup-with-inline-images t)
(use-package org-roam
:ensure t
:custom
;;C:\Users\dick jones\Dropbox\org\roamv2
(org-roam-directory (file-truename (concat dj/dropbox "org/roamv2")))
(org-roam-dailies-directory (concat dj/dropbox "org/roamv2/dailies"))
(org-roam-dailies-capture-templates
'(("d" "default" entry "* %<%I:%M> %?"
:if-new (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n#+date: %U\n#+STARTUP: inlineimages\nTime-stamp: <>"))
))
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n i" . org-roam-node-insert)
:map org-mode-map
("C-M-i" . completion-at-point))
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n g" . org-roam-graph)
("C-c n i" . org-roam-node-insert)
("C-c n c" . org-roam-capture)
;; Dailies
("C-c d j" . org-roam-dailies-capture-today)
("C-c d s" . org-roam-dailies-goto-yesterday)
("C-c d d" . org-roam-dailies-goto-today)
("C-c d f" . org-roam-dailies-goto-tommorow)))
(setq org-roam-v2-ack t)
;; dailies capture template
(org-roam-db-autosync-mode)
(require 'time-stamp)
(add-hook 'write-file-functions 'time-stamp)
(add-hook 'org-mode-hook '(lambda ()
(set (make-local-variable 'company-backends)
'((company-dabbrev-code company-capf)))))
;; Show Directories Nodes are in
(cl-defmethod org-roam-node-directories ((node org-roam-node))
(if-let ((dirs (file-name-directory (file-relative-name (org-roam-node-file node) org-roam-directory))))
(format "(%s)" (string-join (f-split dirs) "/"))
""))
(setq org-roam-node-display-template "${directories:10} ${title:*} ${tags:10}")
;; Show number of backlinks a Node has
(cl-defmethod org-roam-node-directories ((node org-roam-node))
(if-let ((dirs (file-name-directory (file-relative-name (org-roam-node-file node) org-roam-directory))))
(format "(%s)" (car (f-split dirs)))
""))
(cl-defmethod org-roam-node-backlinkscount ((node org-roam-node))
(let* ((count (caar (org-roam-db-query
[:select (funcall count source)
:from links
:where (= dest $s1)
:and (= type "id")]
(org-roam-node-id node)))))
(format "[%d]" count)))
(setq org-roam-node-display-template "${directories:10} ${tags:10} ${title:100} ${backlinkscount:6}")
;; If using org-roam-protocol
(require 'org-roam-protocol)
(setq org-roam-db-node-include-function
(defun rasen/org-roam-include ()
;; exclude org-fc headlines from org-roam
(not (member "fc" (org-get-tags)))))
(defun org-hide-properties ()
"Hide all org-mode headline property drawers in buffer. Could be slow if it has a lot of overlays."
(interactive)
(save-excursion
(goto-char (point-min))
(while (re-search-forward
"^ *:properties:\n\\( *:.+?:.*\n\\)+ *:end:\n" nil t)
(let ((ov_this (make-overlay (match-beginning 0) (match-end 0))))
(overlay-put ov_this 'display "")
(overlay-put ov_this 'hidden-prop-drawer t))))
(put 'org-toggle-properties-hide-state 'state 'hidden))
(defun org-show-properties ()
"Show all org-mode property drawers hidden by org-hide-properties."
(interactive)
(remove-overlays (point-min) (point-max) 'hidden-prop-drawer t)
(put 'org-toggle-properties-hide-state 'state 'shown))
(defun org-toggle-properties ()
"Toggle visibility of property drawers."
(interactive)
(if (eq (get 'org-toggle-properties-hide-state 'state) 'hidden)
(org-show-properties)
(org-hide-properties)))
(setq org-roam-v2-ack t)
(setq org-roam-capture-templates '(("d" "default" plain "%?"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n#+date: %U\n#+STARTUP: inlineimages\nTime-stamp: <>")
:unnarrowed t)))
(use-package vulpea
:ensure t)
(defun vulpea-migrate-buffer ()
"Migrate current buffer note to `org-roam' v2."
;; Create file level ID if it doesn't exist yet
(org-with-point-at 1
(org-id-get-create))
;; update title (just to make sure it's lowercase)
(vulpea-buffer-title-set (vulpea-buffer-prop-get "title"))
;; move roam_key into properties drawer roam_ref
(when-let* ((ref (vulpea-buffer-prop-get "roam_key")))
(org-set-property "ROAM_REFS" ref)
(let ((case-fold-search t))
(org-with-point-at 1
(while (re-search-forward "^#\\+roam_key:" (point-max) t)
(beginning-of-line)
(kill-line 1)))))
;; move roam_alias into properties drawer roam_aliases
(when-let* ((aliases (vulpea-buffer-prop-get-list "roam_alias")))
(org-set-property "ROAM_ALIASES"
(combine-and-quote-strings aliases))
(let ((case-fold-search t))
(org-with-point-at 1
(while (re-search-forward "^#\\+roam_alias:" (point-max) t)
(beginning-of-line)
(kill-line 1)))))
;; move roam_tags into filetags
(let* ((roam-tags (vulpea-buffer-prop-get-list "roam_tags"))
(file-tags (vulpea-buffer-prop-get-list "filetags"))
(path-tags (seq-filter
(lambda (x) (not (string-empty-p x)))
(split-string
(string-remove-prefix
org-roam-directory
(file-name-directory (buffer-file-name)))
"/")))
(tags (seq-map
(lambda (tag)
(setq tag (replace-regexp-in-string
;; see `org-tag-re'
"[^[:alnum:]_@#%]"
"_" ; use any valid char - _@#%
tag))
(if (or
(string-prefix-p "status" tag 'ignore-case)
(string-prefix-p "content" tag 'ignore-case)
(string-equal "Project" tag))
(setq tag (downcase tag)))
tag)
(seq-uniq (append roam-tags file-tags path-tags)))))
(when tags
(apply #'vulpea-buffer-tags-set tags)
(let ((case-fold-search t))
(org-with-point-at 1
(while (re-search-forward "^#\\+roam_tags:" (point-max) t)
(beginning-of-line)
(kill-line 1))))))
(save-buffer))
(defun vulpea-migrate-db ()
"Migrate all notes."
(interactive)
(dolist (f (org-roam--list-all-files))
(with-current-buffer (find-file f)
(message "migrating %s" f)
(vulpea-migrate-buffer)))
;; Step 2: Build cache
(org-roam-db-sync 'force))
(use-package deft
:ensure t
:after org
:bind
("C-c n d" . deft)
:config
(setq deft-directory concat dj/dropbox "/org/roam/"))
(use-package websocket
:ensure t)
(use-package simple-httpd
:ensure t)
(add-to-list 'load-path "~/.emacs.d/site-lisp/org-roam-ui")
(load-library "org-roam-ui")
(use-package org-superstar
:ensure t
:config
(setq org-hide-emphasis-markers t))
(add-hook 'org-mode-hook (lambda () (org-superstar-mode 1)))
(setq org-todo-keywords
'((sequence "TODO(t)" "DOING(@d)" "|" "DONE(D)")
(sequence "PLANNING(p)" "|" "ABANDONED(a)")))
(setq org-todo-keyword-faces
'(
("DOING" . (:foreground "#D19A66" :weight bold))
("DONE" . (:foreground "#98C379" :weight bold))
("PLANNING" . (:foreground "#ffff00" :weight bold))
("ABANDONED" . (:foreground "#BE5046" :weight bold))
))
(use-package org-super-agenda
:ensure t
:config
(org-super-agenda-mode t))
(use-package ox-reveal
:ensure ox-reveal)
(use-package htmlize
:ensure t)
(setq org-reveal-root "file:///d:/Tools/reveal.js")
(setq org-capture-templates
'(("x" "Misc." entry (file+headline (concat dj/dropbox "/org/capture.org") "Misc.")
"* %? %i %^G\n %i\n %a")
("m" "Mathematics" entry (file+headline (concat dj/dropbox "/org/capture.org") "Maths")
"* %?\nEntered on %U\n %i\n %a\n Chapter: ")
("n" "News" entry (file+headline (concat dj/dropbox "/org/capture.org") "News")
"* %?\nEntered on %U\n %i\n %a\n")
("t" "TODO" entry (file+headline "c:/Users/dick jones/Dropbox/org/shared/TODO.org" "MISC")
"* TODO %?\nEntered on %U\n ")
("C" "Calendar Entry" entry (file+headline (concat dj/dropbox "/org/TODO.org") "General")
"* TODO %?\nEntered on %U\n ")
("c" "Code Snippets" entry (file+headline (concat dj/dropbox "/org/capture.org") "Code Snippets")
"* %?\nEntered on %U\n %i\n %a")))
(setq org-export-html-style-include-default nil)
(use-package org-cliplink
:ensure t
:bind (:map org-mode-map
("C-c m" . org-cliplink)))
(use-package org-download
:ensure t
:defer t
:init
;; Add handlers for drag-and-drop when Org is loaded.
(with-eval-after-load 'org
(org-download-enable))
:bind ("M-9" . org-download-yank)
:config
(setq-default org-download-method 'directory
org-download-heading-lvl nil
org-download-image-dir (concat dj/dropbox "images/orgImages")
org-image-actual-width 300))
(use-package org-noter
:ensure t
:bind (:map nov-mode-map
(("I" . org-noter-insert-note)))
:config
(setq org-noter-notes-window-location 'other-frame
org-noter-always-create-frame nil
org-noter-hide-other nil))
;(use-package org-pdftools
; :ensure t
; (org-pdftools-setup-link))
(use-package org-noter-pdftools
:after org-noter
:config
(with-eval-after-load 'pdf-annot
(add-hook 'pdf-annot-activate-handler-functions #'org-noter-pdftools-jump-to-note)))
(use-package org-yt
:load-path "site-lisp/org-yt.+end_src")
(use-package elfeed
:ensure t)
(use-package elfeed-org
:ensure t)
(setq rmh-elfeed-org-files (list "~/.emacs.d/elfeedURLS.org")
rmh-elfeed-org-tree-id "elfeed")
(use-package elfeed-goodies
:ensure t
:config (elfeed-goodies/setup))
(elfeed-org)
(define-key elfeed-search-mode-map (kbd "w") #'dj/ElfeedWatch)
(defun dj/ElfeedWatch ()
"Copy the selected feed items to clipboard and kill-ring."
(interactive)
(let* ((entries (elfeed-search-selected))
(links (mapcar #'elfeed-entry-link entries))
(links-str (mapconcat #'identity links " ")))
(when entries
(elfeed-untag entries 'unread)
(kill-new links-str)
; (if (fboundp 'gui-set-selection)
; (gui-set-selection elfeed-search-clipboard-type links-str)
; (with-no-warnings
; (x-set-selection elfeed-search-clipboard-type links-str)))
(let* ((video links-str))
(start-process "dj/mpv" nil
"dj/mpv"
video)
"--ytdl-format=bestaudio/best")
(message "Starting stream...")
(mapc #'elfeed-search-update-entry entries)
(unless (or elfeed-search-remain-on-entry (use-region-p))
(forward-line)))))
(defun dj/ElfeedListen ()
"Copy the selected feed items to clipboard and kill-ring."
(interactive)
(let* ((entries (elfeed-search-selected))
(links (mapcar #'elfeed-entry-link entries))
(links-str (mapconcat #'identity links " ")))
(when entries
(elfeed-untag entries 'unread)
(kill-new links-str)
(let* ((video links-str))
(start-process "dj/mpv" nil
"dj/mpv"
video
"--no-video"))
(message "Starting stream...")
(mapc #'elfeed-search-update-entry entries)
(unless (or elfeed-search-remain-on-entry (use-region-p))
(forward-line)))))
(defun dj/ElfeedBrowse ()
"Copy the selected feed items to clipboard and kill-ring."
(interactive)
(let* ((entries (elfeed-search-selected))
(links (mapcar #'elfeed-entry-link entries))
(links-str (mapconcat #'identity links " ")))
(when entries
(elfeed-untag entries 'unread)
(kill-new links-str)
(let* ((video links-str))
(browse-url video)
(message "Browsing Url...")
(mapc #'elfeed-search-update-entry entries)
(unless (or elfeed-search-remain-on-entry (use-region-p))
(forward-line))))))
(use-package ytel
:ensure t
:config
(setq ytel-invidious-api-url "https://invidious.snopyta.org"))
(defvar invidious-instances-url
"https://api.invidious.io/instances.json?pretty=1&sort_by=health")
(defun ytel-instances-fetch-json ()
"Fetch list of invidious instances as json, sorted by health."
(let
((url-request-method "GET")
(url-request-extra-headers
'(("Accept" . "application/json"))))
(with-current-buffer
(url-retrieve-synchronously invidious-instances-url)
(goto-char (point-min))
(re-search-forward "^$")
(let* ((json-object-type 'alist)
(json-array-type 'list)
(json-key-type 'string))
(json-read)))))
(defun ytel-instances-alist-from-json ()
"Make the json of invidious instances into an alist."
(let ((jsonlist (ytel-instances-fetch-json))
(inst ()))
(while jsonlist
(push (concat "https://" (caar jsonlist)) inst)
(setq jsonlist (cdr jsonlist)))
(nreverse inst)))
(defun ytel-choose-instance ()
"Prompt user to choose an invidious instance to use."
(interactive)
(setq ytel-invidious-api-url
(or (condition-case nil
(completing-read "Using instance: "
(subseq (ytel-instances-alist-from-json) 0 11) nil "confirm" "https://") ; "healthiest" 12 instances; no require match
(error nil))
"https://invidious.synopyta.org"))) ; fallback
(defun ytel-watch ()
"Stream video at point in dj/mpv."
(interactive)
(let* ((video (ytel-get-current-video))
(id (ytel-video-id video)))
(start-process "ytel dj/mpv" nil
"dj/mpv"
(concat "https://www.youtube.com/watch?v=" id))
"--ytdl-format=bestaudio/best")
(message "Starting streaming..."))
(defun ytel-watch-replace ()
"Stream video at point in dj/mpv."
(interactive)
(let* ((video (ytel-get-current-video))
(id (ytel-video-id video)))
(start-process "ytel dj/mpv" nil
"dj/mpv"
(concat "https://www.youtube.com/watch?v=" id))
"--ytdl-format=bestaudio/best")
(message "Starting streaming...")
(ytel-remove-current-video))
(defun dj/ytwatch ()
"Stream video at point in dj/mpv."
(require 'ytel)
(interactive)
(let* ((video (read-string "Enter Video URL: ")))
(start-process "youtube-watch" nil
"dj/mpv"
video)
"--ytdl-format=bestaudio/best")
(message "Starting stream..."))
(defun dj/twitchWatch ()
"Stream video at point in dj/mpv."
(require 'ytel)
(interactive)
(let* ((user (read-string "Enter Twitch Usernam: ")))
(start-process "dj/twitchWatch" nil
"dj/mpv"
user)
"--ytdl-format=bestaudio/best")
(message "Starting stream..."))
(defun dj/ytelYank ()
"Will yank from current position in ytel."
(interactive)
(let ((fuck (ytel-get-current-video)))
(kill-new (concat "https://invidio.us/watch?v="(ytel-video-id fuck)))
(message (concat "Yanked: " (concat "https://invidio.us/watch?v="(ytel-video-id fuck))))))
(define-key ytel-mode-map (kbd "w") 'ytel-watch)
(define-key ytel-mode-map (kbd "W") 'ytel-watch-replace)
(define-key ytel-mode-map (kbd "j") 'next-line)
(define-key ytel-mode-map (kbd "k") 'previous-line)
(define-key ytel-mode-map (kbd "G") 'end-of-buffer)
(define-key ytel-mode-map (kbd "g") 'beginning-of-buffer)
(define-key ytel-mode-map (kbd "y") 'dj/ytelYank)
(define-key ytel-mode-map (kbd "w") 'ytel-watch)
(define-key ytel-mode-map (kbd "W") 'ytel-watch-replace)
(define-key ytel-mode-map (kbd "j") 'next-line)
(define-key ytel-mode-map (kbd "k") 'previous-line)
(define-key ytel-mode-map (kbd "G") 'end-of-buffer)
(define-key ytel-mode-map (kbd "g") 'beginning-of-buffer)
(define-key ytel-mode-map (kbd "y") 'dj/ytelYank)
(use-package nov
:after org-noter
:ensure t
:config
(evil-collection-define-key 'normal 'nov-mode-map
"i" 'org-noter-insert-note
"o" 'nov-browse-url))
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
(defun my-nov-font-setup ()
"ahahaha lol."
(face-remap-add-relative 'variable-pitch :family "ETBembo RomanLF"
:height 1.0))
(add-hook 'nov-mode-hook 'my-nov-font-setup)
Dump of irc and twitch shit
(defun start-twitch-irc ()
"Connects to Twitch."
(interactive)
(erc-tls :server "irc.chat.twitch.tv"
:port 6697
:nick "spamb1"
:password "oauth:fxwsl28pwgpxs8orpq1kwfixahm7ij")
)
(setq erc-kill-buffer-on-part t)
(setq erc-kill-server-buffer-on-quit t)
(use-package alert
:ensure t
:config
(require 'alert)
(setq alert-default-style 'libnotify)
(setq alert-fade-time 4))
;;; sauron
(use-package sauron
:ensure t
:config
(require 'sauron-org)
(setq sauron-modules '(sauron-erc
sauron-dbus
sauron-org
sauron-notifications
sauron-jabber
sauron-identica))
(setq sauron-dbus-cookie t)
(setq sauron-debug t)
(setq
sauron-max-line-length 144
sauron-watch-patterns
'("@")
sauron-watch-nicks
'("onurcyukruk"))
(add-hook 'sauron-event-added-functions #'sauron-alert-el-adapter)
(global-set-key (kbd "\C-c1") 'sauron-start))
(setq sauron-separate-frame nil)
(alert-add-rule :mode 'erc-mode
:predicate
#'(lambda (info)
(string-match (concat "\\`[^&].*onurcyukruk\\'")
(erc-format-target-and/or-network)))
:style 'libnotify
:continue t)
(use-package pdf-tools
:ensure t)
; (pdf-loader-org-pdftools
; :ensure t)
(use-package nyan-mode
:ensure t
:config
(nyan-mode 1)
(nyan-start-animation)
(nyan-toggle-wavy-trail))
(add-to-list 'load-path "~/.emacs.d/site-lisp/imgur.el")
(add-to-list 'load-path "~/.emacs.d/site-lisp/meme/")
(require 'imgur)
(require 'meme)
(autoload 'meme "meme.el" "Create a meme from a collection" t)
(autoload 'meme-file "meme.el" "Create a meme from a file" t)
;(use-package literate-calc-mode
; :hook (org-mode . literate-calc-minor-mode))
(use-package dired-rainbow
:ensure t
:config
(progn
(dired-rainbow-define-chmod directory "#6cb2eb" "d.*")
(dired-rainbow-define html "#eb5286" ("css" "less" "sass" "scss" "htm" "html" "jhtm" "mht" "eml" "mustache" "xhtml"))
(dired-rainbow-define xml "#f2d024" ("xml" "xsd" "xsl" "xslt" "wsdl" "bib" "json" "msg" "pgn" "rss" "yaml" "yml" "rdata"))
(dired-rainbow-define document "#9561e2" ("docm" "doc" "docx" "odb" "odt" "pdb" "pdf" "ps" "rtf" "djvu" "epub" "odp" "ppt" "pptx"))
(dired-rainbow-define markdown "#ffed4a" ("org" "etx" "info" "markdown" "md" "mkd" "nfo" "pod" "rst" "tex" "textfile" "txt"))
(dired-rainbow-define database "#6574cd" ("xlsx" "xls" "csv" "accdb" "db" "mdb" "sqlite" "nc"))
(dired-rainbow-define media "#de751f" ("mp3" "mp4" "MP3" "MP4" "avi" "mpeg" "mpg" "flv" "ogg" "mov" "mid" "midi" "wav" "aiff" "flac" "mkv" "webm"))
(dired-rainbow-define image "#f66d9b" ("tiff" "tif" "cdr" "gif" "ico" "jpeg" "jpg" "png" "psd" "eps" "svg"))
(dired-rainbow-define log "#c17d11" ("log"))
(dired-rainbow-define shell "#f6993f" ("awk" "bash" "bat" "sed" "sh" "zsh" "vim" "fish"))
(dired-rainbow-define interpreted "#38c172" ("py" "ipynb" "rb" "pl" "t" "msql" "mysql" "pgsql" "sql" "r" "clj" "cljs" "scala" "js"))
(dired-rainbow-define compiled "#4dc0b5" ("asm" "cl" "lisp" "el" "c" "h" "c++" "h++" "hpp" "hxx" "m" "cc" "cs" "cp" "cpp" "go" "f" "for" "ftn" "f90" "f95" "f03" "f08" "s" "rs" "hi" "hs" "pyc" ".java"))
(dired-rainbow-define executable "#8cc4ff" ("exe" "msi"))
(dired-rainbow-define compressed "#51d88a" ("7z" "zip" "bz2" "tgz" "txz" "gz" "xz" "z" "Z" "jar" "war" "ear" "rar" "sar" "xpi" "apk" "xz" "tar"))
(dired-rainbow-define packaged "#faad63" ("deb" "rpm" "apk" "jad" "jar" "cab" "pak" "pk3" "vdf" "vpk" "bsp"))
(dired-rainbow-define encrypted "#ffed4a" ("gpg" "pgp" "asc" "bfe" "enc" "signature" "sig" "p12" "pem"))
(dired-rainbow-define fonts "#6cb2eb" ("afm" "fon" "fnt" "pfb" "pfm" "ttf" "otf"))
(dired-rainbow-define partition "#e3342f" ("dmg" "iso" "bin" "nrg" "qcow" "toast" "vcd" "vmdk" "bak"))
(dired-rainbow-define vc "#0074d9" ("git" "gitignore" "gitattributes" "gitmodules"))
(dired-rainbow-define-chmod executable-unix "#38c172" "-.*x.*")
))
(use-package dired-subtree
:ensure t
:config
(define-key dired-mode-map "n" 'dired-subtree-insert)
(define-key dired-mode-map "N" 'dired-subtree-remove))
(with-eval-after-load 'dired-subtree
(evil-collection-define-key 'normal 'dired-mode-map
(kbd "TAB") 'dired-subtree-toggle
(kbd "M-j") 'dired-subtree-next-sibling
(kbd "M-k") 'dired-subtree-previous-sibling
"n" 'dired-subtree-insert
"N" 'dired-subtree-remove))
(define-key dired-mode-map "n" 'dired-subtree-insert)
(define-key dired-mode-map "N" 'dired-subtree-remove)
(use-package dired-open
:ensure t
:init (require 'dired-open))
(use-package doom-modeline
:ensure t
:init (doom-modeline-mode 1))
(use-package which-key
:ensure t)
(which-key-mode)
(use-package ace-window
:ensure t
:init
(progn
(global-set-key [remap other-window] 'ace-window)
(custom-set-faces
'(aw-leading-char-face
((t (:inherit ace-jump-face-foreground :height 2.5)))))
))
(use-package emojify
:ensure t
:config
(global-emojify-mode t))
;; (use-package helm-bibtex
;; :ensure t
;; :config
;; (setq bibtex-completion-bibliography
;; '((concat dj/dropbox "/bib/ref.bib"))
;; bibtex-completion-library-path
;; '((concat dj/nextcloud "/Resources/"))
;; bibtex-completion-pdf-field "File"))
(use-package helm-bibtex
:ensure t
:bind ("<f6>" . helm-bibtex)
:config
(setq bibtex-completion-bibliography
'("C:Users/dick jones/Dropbox/bib/ref.bib"))
(setq bibtex-completion-library-path
'("C:Users/dick jones/spambiNC/Resources")))
(use-package org-ref
:ensure t
:bind* (:map org-mode-map
("C-c ]" . org-ref-ivy-insert-cite-link))
:config
(setq reftex-default-bibliography '("C:Users/dick jones/Dropbox/bib/ref.bib"))
(setq bibtex-completion-pdf-open-function
(lambda (fpath)
(start-process "open" "*open*" "open" fpath)))
(setq org-ref-default-bibliography '("C:Users/dick jones/Dropbox/bib/ref.bib"))
(setq org-ref-pdf-directory '("C:Users/dick jones/Dropbox/bib/ref.bib")))
(use-package org-roam-bibtex
:after org-roam
:hook (org-roam-mode . org-roam-bibtex-mode)
:bind (:map org-mode-map
(("C-c n a" . orb-note-actions))))
(setq browse-url-browser-function 'browse-url-chromium)
Misc. Keybinds
(global-set-key (kbd "C-c s") 'eshell)
(global-set-key (kbd "C-c l") org-stored-links)
(global-set-key (kbd "C-c a") (lambda () (interactive) (org-agenda nil "a")))
(global-set-key (kbd "C-c c") 'org-capture)
(global-set-key (kbd "C-c p") 'counsel-bookmark)
(global-set-key (kbd "C-c C-p") 'xah-copy-file-path)
(global-set-key (kbd "C-c C-'") 'dj/ytwatch)
(global-set-key (kbd "C-c w") 'elfeed)
(global-set-key (kbd "<f10>") 'org-todo-list)