#+TITLE: DT's Doom Emacs Config
#+AUTHOR: Derek Taylor (DT)
#+STARTUP: showeverything

* FONTS
Doom exposes five (optional) variables for controlling fonts in Doom. Here
are the three important ones:

+ `doom-font' -- standard monospace font that is used for most things in Emacs.
+ `doom-variable-pitch-font' -- variable font which is useful in some Emacs plugins.
+ `doom-big-font' -- used in `doom-big-font-mode'; useful for presentations.

#+BEGIN_SRC emacs-lisp
(setq doom-font (font-spec :family "SauceCodePro Nerd Font" :size 15)
      doom-variable-pitch-font (font-spec :family "SauceCodePro Nerd Font" :size 15)
      doom-big-font (font-spec :family "SauceCodePro Nerd Font" :size 24))
#+END_SRC

* DOOM THEME
#+BEGIN_SRC emacs-lisp
(setq doom-theme 'doom-one)
(map! :leader
      :desc "Load new theme"
      "h t" #'counsel-load-theme)
#+END_SRC

* ORG MODE
Note that I wrapped everything in (after! org). Without this, my settings might be evaluated too early, which will result in my settings being overwritten by Doom's defaults.
#+BEGIN_SRC emacs-lisp
(after! org
  (setq org-directory "~/Org/"
        org-agenda-files '("~/Org/agenda.org")
        org-log-done 'time
        ;; ex. of org-link-abbrev-alist in action
        ;; [[arch-wiki:Name_of_Page][Description]]
        org-link-abbrev-alist
          '(("google" . "http://www.google.com/search?q=")
            ("arch-wiki" . "https://wiki.archlinux.org/index.php/")
            ("ddg" . "https://duckduckgo.com/?q=")
            ("wiki" . "https://en.wikipedia.org/wiki/"))
        org-todo-keywords '((sequence "TODO(t)" "PROJ(p)" "VIDEO(v)" "WAIT(w)" "|" "DONE(d)" "CANCELLED(c)" )))
  ;; Nicer bullets in org-mode
  (require 'org-bullets)
  (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))
#+END_SRC

* LINE SETTINGS
 #+BEGIN_SRC emacs-lisp
(setq display-line-numbers-type t)
(map! :leader
      :desc "Toggle truncate lines"
      "l t" #'toggle-truncate-lines)
#+END_SRC

* NEOTREE
Setting the neotree width to be adjustable.
#+BEGIN_SRC emacs-lisp
(setq neo-window-fixed-size nil)
#+END_SRC

* MANPAGES
#+BEGIN_SRC emacs-lisp
(require 'ox-groff)
#+END_SRC

* BROWSER (eww)
Set urls to open in a specific browser.  I set this to use Emacs' own browser (eww).
#+BEGIN_SRC emacs-lisp
(setq browse-url-browser-function 'eww-browse-url)
#+END_SRC

* SHELLS
The =inferior shell= is what you get when you run M-x shell. It is a wrapper around your default shell. It is governed by explicit-shell-file-name, the ESHELL environment variable or shell-file-name, in that order.  Below, I demonstrate how to change shell to use fish even though the default shell may be something else.  This will also make M-x term and M-x ansi-term default to fish, though it asks you to confirm before it launches.
#+BEGIN_SRC emacs-lisp
(setq shell-file-name "/bin/fish")
#+END_SRC

Sets the file for where I place my eshell aliases.
#+BEGIN_SRC emacs-lisp
(setq eshell-aliases-file "~/.doom.d/aliases")
#+END_SRC

* SPLITS
Force splits to open on the right
#+BEGIN_SRC emacs-lisp
(defun prefer-horizontal-split ()
  (set-variable 'split-height-threshold nil t)
  (set-variable 'split-width-threshold 40 t)) ; make this as low as needed
(add-hook 'markdown-mode-hook 'prefer-horizontal-split)
#+END_SRC

* TABS (centaur-tabs)
To use tabs in Doom Emacs, be sure to uncomment "tabs" in Doom's init.el.  Displays tabs at the top of the window similar to tabbed web browsers such as Firefox.  I don't actually use tabs in Emacs.  I placed this in my config to help others who may want tabs.  In the default configuration of Doom Emacs, there are just a few keybindings that use SPC-t, so it wasn't too difficult to find appropriate keybindings using that prefix for "tabs".
#+BEGIN_SRC emacs-lisp
(setq centaur-tabs-set-bar 'over
      centaur-tabs-set-icons t
      centaur-tabs-gray-out-icons 'buffer
      centaur-tabs-height 24
      centaur-tabs-set-modified-marker t
      centaur-tabs-style "bar"
      centaur-tabs-modified-marker "•")
(map! :leader
      :desc "Toggle tabs on/off"
      "t o" #'centaur-tabs-local-mode
      :leader
      :desc "Switch tab groups"
      "t s" #'centaur-tabs-counsel-switch-group
      :leader
      :desc "Toggle tab groups"
      "t t" #'centaur-tabs-toggle-groups
      :leader
      :desc "Kill all buffers in group"
      "t k" #'centaur-tabs-kill-all-buffer-in-current-group
      :leader
      :desc "Next tab"
      "t n" #'centaur-tabs-forward
      :leader
      :desc "Previous tab"
      "t p" #'centaur-tabs-backward)
#+END_SRC

* FILE MANAGER (dired)
Image previews in dired
#+BEGIN_SRC emacs-lisp
(map!
  (:after dired
    (:map dired-mode-map
     :leader
     "l i" #'peep-dired
     )))
(evil-define-key 'normal peep-dired-mode-map (kbd "j") 'peep-dired-next-file
                                             (kbd "k") 'peep-dired-prev-file)
(add-hook 'peep-dired-hook 'evil-normalize-keymaps)
#+END_SRC

* AUDIO PLAYER (emms)
#+BEGIN_SRC emacs-lisp
(use-package emms
  :ensure t
  :config
  (require 'emms-setup)
  (require 'emms-info)
  (require 'emms-cue)
  (require 'emms-mode-line)
  (require 'emms-playing-time)
  (setq emms-source-file-default-directory "~/Music/Non-Classical/70s-80s/")
  (setq emms-playlist-buffer-name "*Music*")
  (setq emms-info-asynchronously t)
  (unless (eq system-type 'windows-nt)
    (setq emms-source-file-directory-tree-function
          'emms-source-file-directory-tree-find))
  (emms-all)
  (emms-default-players)
  (emms-mode-line 1)
  (emms-playing-time 1))
#+END_SRC

* EMAIL CLIENT (mu4e)
 Setting up mu4e which is an email client that works within emacs.
 You must install mu4e and mbsync through your Linux distribution's
 package manager. Setting up smtp for sending mail. Make sure the gnutls command
 line utils are installed. Package 'gnutls-bin' in Debian/Ubuntu,
 and 'gnutls' in Arch.
 #+BEGIN_SRC emacs-lisp
(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu4e")
(require 'mu4e)
(setq mu4e-get-mail-command "mbsync -c ~/.emacs.d/mu4e/.mbsyncrc -a"
      mu4e-update-interval  300)
(setq
   user-mail-address "derek@distrotube.com"
   user-full-name  "Derek Taylor"
   mu4e-compose-signature
    (concat
      "Derek Taylor\n"
      "http://www.youtube.com/DistroTube\n"))
(require 'smtpmail)
(setq message-send-mail-function 'smtpmail-send-it
   starttls-use-gnutls t
   smtpmail-starttls-credentials '(("smtp.1and1.com" 587 nil nil))
   smtpmail-auth-credentials
     '(("smtp.1and1.com" 587 "derek@distrotube.com" nil))
   smtpmail-default-smtp-server "smtp.1and1.com"
   smtpmail-smtp-server "smtp.1and1.com"
   smtpmail-smtp-service 587)
#+END_SRC

* MASTODON CLIENT (mastodon)
Note that I wrapped my settings with (after! mastodon). Without this, my settings will be overwritten by the default settings for this module, which is "mastodon.social".
#+BEGIN_SRC emacs-lisp
(after! mastodon
  (setq mastodon-instance-url "https://mastodon.technology/"))
#+END_SRC

* REDDIT CLIENT (md4rd)
#+BEGIN_SRC emacs-lisp
(setq md4rd-subs-active '(archlinux commandline DistroTube DoomEmacs emacs freesoftware lbry linux linux4noobs linuxmasterrace linnuxquestions orgmode qutebrowser suckless Ubuntu unixporn UsabilityPorn vim xmonad))
#+END_SRC

* RSS READER (elfeed)
#+BEGIN_SRC emacs-lisp
(custom-set-variables
 '(elfeed-feeds
   (quote
    (("https://www.reddit.com/r/linux.rss" reddit linux)
     ("https://www.gamingonlinux.com/article_rss.php" gaming linux)
     ("https://hackaday.com/blog/feed/" hackaday linux)
     ("https://opensource.com/feed" opensource linux)
     ("https://linux.softpedia.com/backend.xml" softpedia linux)
     ("https://itsfoss.com/feed/" itsfoss linux)
     ("https://www.zdnet.com/topic/linux/rss.xml" zdnet linux)
     ("https://www.phoronix.com/rss.php" phoronix linux)
     ("http://feeds.feedburner.com/d0od" omgubuntu linux)
     ("https://www.computerworld.com/index.rss" computerworld linux)
     ("https://www.networkworld.com/category/linux/index.rss" networkworld linux)
     ("https://www.techrepublic.com/rssfeeds/topic/open-source/" techrepublic linux)
     ("https://betanews.com/feed" betanews linux)
     ("http://lxer.com/module/newswire/headlines.rss" lxer linux)
     ("https://distrowatch.com/news/dwd.xml" distrowatch linux)))))
#+END_SRC
