]> git.armaanb.net Git - config.org.git/blobdiff - config.org
Add calfw config
[config.org.git] / config.org
index ba34383800d04504f0645885b967573502416ea0..50268b39cd43b3f9769d1f453006d4c88b44850d 100644 (file)
@@ -15,9 +15,7 @@ Another important choice has been to integrate Emacs into a large part of my com
 Lastly, I use Evil mode. I think modal keybindings are simple and more ergonomic than standard Emacs style, and Vim keybindings are what I'm comfortable with and are pervasive throughout computing.
 ** TODOs
 *** TODO Turn keybinding and hook declarations into use-package declarations where possible
-*** TODO Put configs with passwords in here with some kind of authentication
-- Offlineimap
-- irc.el
+*** TODO Include offlineimap config
 ** License
 Released under the [[https://opensource.org/licenses/MIT][MIT license]] by Armaan Bhojwani, 2021. Note that many snippets are taken from online, and other sources, who are credited for their work at the snippet.
 * Package management
@@ -269,9 +267,9 @@ Add back C-a/C-x
     (add-to-list 'org-structure-template-alist '("za" . "src conf :tangle ~/.config/zathura/zathurarc"))
     (add-to-list 'org-structure-template-alist '("ff1" . "src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userChrome.css"))
     (add-to-list 'org-structure-template-alist '("ff2" . "src css :tangle ~/.mozilla/firefox/armaan-release/chrome/userContent.css"))
-    (add-to-list 'org-structure-template-alist '("xr" . "src conf :tangle ~/.Xresources")
-    (add-to-list 'org-structure-template-alist '("tm" . "src conf :tangle ~/.tmux.conf")
-    (add-to-list 'org-structure-template-alist '("gp" . "src conf :tangle ~/.gnupg/gpg.conf")
+    (add-to-list 'org-structure-template-alist '("xr" . "src conf :tangle ~/.Xresources"))
+    (add-to-list 'org-structure-template-alist '("tm" . "src conf :tangle ~/.tmux.conf"))
+    (add-to-list 'org-structure-template-alist '("gp" . "src conf :tangle ~/.gnupg/gpg.conf"))
     (add-to-list 'org-structure-template-alist '("ag" . "src conf :tangle ~/.gnupg/gpg-agent.conf")))
 #+end_src
 * Autocompletion
@@ -359,6 +357,7 @@ Contexts are a not very well known feature of mu4e that makes it super easy to m
           mu4e-confirm-quit nil
           mu4e-view-use-gnus t
           mail-user-agent 'mu4e-user-agent
+          mail-context-policy 'pick-first
           mu4e-contexts
           `( ,(make-mu4e-context
                :name "school"
@@ -397,8 +396,9 @@ Contexts are a not very well known feature of mu4e that makes it super easy to m
                          :key ?b))
     :hook ((mu4e-compose-mode . flyspell-mode)
            (mu4e-compose-mode . auto-fill-mode)
-           (mu4e-view-mode-hook . turn-on-visual-line-mode)))
-
+           (mu4e-view-mode-hook . turn-on-visual-line-mode)
+           (message-send-hook . (lambda () (unless (yes-or-no-p "Ya sure 'bout that?")
+                                             (signal 'quit nil))))))
 #+end_src
 Discourage Gnus from displaying HTML emails
 #+begin_src emacs-lisp
@@ -445,30 +445,91 @@ Some EWW enhancements.
   (global-set-key (kbd "C-c w") 'eww)
 #+end_src
 ** IRC
-*** Setup ERC
-#+begin_src emacs-lisp
-  (use-package erc
-    :straight (:type built-in)
+Circe is a really nice IRC client, that claims to be above RCIRC and below ERC in terms of features. ERC felt a bit messy and finicky to me, and Circe has all the features that I need. This setup gets the password for my bouncer (Pounce) instances via my =~/.authinfo.gpg= file.
+#+begin_src emacs-lisp
+  (defun fetch-password (&rest params)
+    (require 'auth-source)
+    (let ((match (car (apply 'auth-source-search params))))
+      (if match
+          (let ((secret (plist-get match :secret)))
+            (if (functionp secret)
+                (funcall secret)
+              secret))
+        (error "Password not found for %S" params))))
+
+  (use-package circe
     :config
-    (erc-notifications-mode 1)
-    (erc-track-enable)
-    (erc-smiley-disable)
-    :custom (erc-prompt-for-password . nil))
+    (enable-lui-track)
+    (enable-circe-color-nicks)
+    (circe "libera")
+    (circe "oftc")
+    (circe "tilde")
+    (setq circe-networks '(("libera"
+                            :host "irc.armaanb.net"
+                            :nick "emacs"
+                            :user "emacs"
+                            :use-tls t
+                            :port "6698"
+                            :pass (lambda (null) (fetch-password
+                                                  :login "emacs"
+                                                  :machine "irc.armaanb.net"
+                                                  :port 6698)))
+                           ("oftc"
+                            :host "irc.armaanb.net"
+                            :nick "emacs"
+                            :user "emacs"
+                            :use-tls t
+                            :port "6699"
+                            :pass (lambda (null) (fetch-password
+                                                  :login "emacs"
+                                                  :machine "irc.armaanb.net"
+                                                  :port 6699)))
+                           ("tilde"
+                            :host "irc.armaanb.net"
+                            :nick "emacs"
+                            :user "emacs"
+                            :use-tls t
+                            :port "6696"
+                            :pass (lambda (null) (fetch-password
+                                                  :login "emacs"
+                                                  :machine "irc.armaanb.net"
+                                                  :port 6696)))
+                           ))
+    :custom (circe-default-part-message "goodbye!")
+    :bind (:map circe-mode-map ("C-c C-r" . circe-reconnect-all)))
+#+end_src
+** Calendar
+#+begin_src emacs-lisp
+  (defun sync-calendar ()
+    "Sync calendars with vdirsyncer"
+    (interactive)
+    (shell-command "vdirsyncer -vcritical sync"))
 
-  (use-package erc-hl-nicks
-    :config (erc-hl-nicks-mode 1))
+  (use-package calfw
+    :bind (:map cfw:calendar-mode-map ("C-S-u" . sync-calendar)))
+  (use-package calfw-ical)
+  (use-package calfw-org)
 
-  (defun acheam-irc ()
-    "Connect to irc"
+  (defun acheam-calendar ()
+    "Open calendars"
     (interactive)
-    (erc-tls :server "irc.armaanb.net" :nick "emacs"))
+    (cfw:open-calendar-buffer
+     :contents-sources (list
+                        (cfw:org-create-source "Green")
+                        (cfw:ical-create-source
+                         "Personal"
+                         "~/.local/share/vdirsyncer/mailbox/Y2FsOi8vMC8zMQ.ics"
+                         "Gray")
+                        (cfw:ical-create-source
+                         "Personal"
+                         "~/.local/share/vdirsyncer/mailbox/Y2FsOi8vMC8zMQ.ics"
+                         "Red")
+                        (cfw:ical-create-source
+                         "School"
+                         "~/.local/share/vdirsyncer/school/abhojwani22@nobles.edu.ics"
+                         "Cyan"))))
 
-  (acheam-irc)
-#+end_src
-** Emacs Anywhere
-Use Emacs globally. Use the Emacs daemon and bind a key in your wm to =emacsclient --eval "(emacs-everywhere)"=.
-#+begin_src emacs-lisp
-  (use-package emacs-everywhere)
+  (global-set-key (kbd "C-c c") 'acheam-calendar)
 #+end_src
 * Emacs IDE
 ** Code cleanup
@@ -711,6 +772,14 @@ No more clogging up init.el.
               "0c" '0x0-upload-kill-ring
               "0p" '0x0-upload-popup))
 #+end_src
+** Automatically clean buffers
+#+begin_src emacs-lisp
+  ;; Don't kill Circe buffers
+  (add-to-list 'clean-buffer-list-kill-never-regexps (lambda (buffer-name)
+                                                       (with-current-buffer buffer-name
+                                                         (derived-mode-p 'lui-mode))))
+  (midnight-mode)
+#+end_src
 * Tangles
 ** Spectrwm
 *** General settings
@@ -771,16 +840,16 @@ No more clogging up init.el.
 **** Programs
 #+begin_src conf :tangle ~/.spectrwm.conf
   program[email] = emacsclient -c --eval "(mu4e)"
-  program[irc] = emacsclient -c --eval '(switch-to-buffer "irc.armaanb.net:6697")'
+  program[irc] = emacsclient -c --eval '(switch-to-buffer "irc.armaanb.net:6698")'
+  program[rss] = emacsclient -c --eval '(elfeed)'
   program[emacs] = emacsclient -c
   program[firefox] = firefox
   program[calc] = st -e because -l
-  program[emacs-anywhere] = emacsclient --eval "(emacs-everywhere)"
 
   bind[email] = MOD+Control+1
   bind[irc] = MOD+Control+2
-  bind[firefox] = MOD+Control+3
-  bind[emacs-anywhere] = MOD+Control+4
+  bind[rss] = MOD+Control+3
+  bind[firefox] = MOD+Control+4
   bind[calc] = MOD+Control+5
   bind[emacs] = MOD+Control+Return
 #+end_src
@@ -915,12 +984,11 @@ No more clogging up init.el.
   alias grep='grep -in --color=auto'
   alias mkdir='mkdir -pv'
   alias lanex='java -jar ~/.local/share/lxc/lanxchange.jar'
-  alias vim=$EDITOR
-  alias emacs=$EDITOR
+  emacs() { $EDITOR "$@" & }
+  alias vim="emacs"
 #+end_src
 **** System management
 #+begin_src shell :tangle ~/.config/ash/ashrc
-  alias pkill='pkill -i'
   alias crontab='crontab-argh'
   alias sudo='doas'
   alias pasu='git -C ~/.password-store push'
@@ -1238,6 +1306,8 @@ Modus operandi theme.
   set -g status off
   set -g mouse on
   set-window-option -g mode-keys vi
+  bind-key -T copy-mode-vi 'v' send -X begin-selection
+  bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'
 #+end_src
 ** GPG
 *** Config