[emacs] assimilate haskell-mode
[~bandali/configs] / init.org
index ca8ab93..84f8408 100644 (file)
--- a/init.org
+++ b/init.org
@@ -44,7 +44,6 @@ byte-compiled the packages. Something along these lines should work:
 git clone https://github.com/aminb/dotfiles ~/.emacs.d
 cd ~/.emacs.d
 make bootstrap-borg
-make tangle-init
 make bootstrap
 make build
 #+end_src
@@ -168,10 +167,6 @@ done initializing.
 (add-hook
  'after-init-hook
  (lambda ()
-   (let ((elapsed (float-time (time-subtract (current-time)
-                                             ab--before-user-init-time))))
-     (message "Loading %s...done (%.3fs) [after-init]"
-              user-init-file elapsed))
    (setq gc-cons-threshold ab--gc-cons-threshold
          gc-cons-percentage ab--gc-cons-percentage
          file-name-handler-alist ab--file-name-handler-alist)))
@@ -353,17 +348,28 @@ Font stack with better unicode support, around =Ubuntu Mono= and
   (set-fontset-font
    ft
    'unicode
-   (font-spec
-    :name "Hack")
+   (font-spec :name "DejaVu Sans Mono")
    nil
    'append)
+  ;; (set-fontset-font
+  ;;  ft
+  ;;  'unicode
+  ;;  (font-spec
+  ;;   :name "Symbola monospacified for DejaVu Sans Mono")
+  ;;  nil
+  ;;  'append)
+  ;; (set-fontset-font
+  ;;  ft
+  ;;  #x2115  ; ℕ
+  ;;  (font-spec :name "DejaVu Sans Mono")
+  ;;  nil
+  ;;  'append)
   (set-fontset-font
    ft
-   'unicode
-   (font-spec
-    :name "Symbola monospacified for DejaVu Sans Mono")
+   (cons ?Α ?ω)
+   (font-spec :name "DejaVu Sans Mono" :size 14)
    nil
-   'append))
+   'prepend))
 #+end_src
 
 * Core
@@ -534,7 +540,7 @@ Roll your own modal mode
 
 *** [[https://github.com/ch11ng/exwm][EXWM]] (window manager)
 
-#+begin_src emacs-lisp
+#+begin_src emacs-lisp :tangle no
 (use-package exwm
   :demand t
   :config
@@ -564,11 +570,11 @@ Roll your own modal mode
                           (interactive)
                           (exwm-workspace-switch-create i))))
   ;; 's-SPC': Launch application
-  (exwm-input-set-key
-   (kbd "s-SPC")
-   (lambda (command)
-     (interactive (list (read-shell-command "➜ ")))
-     (start-process-shell-command command nil command)))
+  ;; (exwm-input-set-key
+  ;;  (kbd "s-SPC")
+  ;;  (lambda (command)
+  ;;    (interactive (list (read-shell-command "➜ ")))
+  ;;    (start-process-shell-command command nil command)))
 
   (exwm-input-set-key (kbd "M-s-SPC") #'counsel-linux-app)
 
@@ -590,8 +596,8 @@ Roll your own modal mode
           ([?\C-v] . [next])
           ([?\C-d] . [delete])
           ([?\C-k] . [S-end delete])
-          ;; cut/paste
-          ([?\C-w] . [?\C-x])
+          ;; cut/copy/paste
+          ;; ([?\C-w] . [?\C-x])
           ([?\M-w] . [?\C-c])
           ([?\C-y] . [?\C-v])
           ;; search
@@ -608,11 +614,154 @@ Roll your own modal mode
   (require 'exwm-randr)
   (exwm-randr-enable)
 
+  ;; (exwm-input-set-key
+  ;;  (kbd "s-<return>")
+  ;;  (lambda ()
+  ;;    (interactive)
+  ;;    (start-process "urxvt" nil "urxvt")))
+
+  ;; (exwm-input-set-key
+  ;;  (kbd "s-SPC")  ;; rofi doesn't properly launch programs when started from emacs
+  ;;  (lambda ()
+  ;;    (interactive)
+  ;;    (start-process-shell-command "rofi-run" nil "rofi -show run -display-run '> ' -display-window ' 🗔 '")))
+
+  ;; (exwm-input-set-key
+  ;;  (kbd "s-/")
+  ;;  (lambda ()
+  ;;    (interactive)
+  ;;    (start-process-shell-command "rofi-win" nil "rofi -show window  -display-run '> ' -display-window ' 🗔 '")))
+
+  ;; (exwm-input-set-key
+  ;;  (kbd "M-SPC")
+  ;;  (lambda ()
+  ;;    (interactive)
+  ;;    (start-process "rofi-pass" nil "rofi-pass")))
+
+  ;; (exwm-input-set-key
+  ;;  (kbd "<XF86AudioMute>")
+  ;;  (lambda ()
+  ;;    (interactive)
+  ;;    (start-process-shell-command "pamixer" nil "pamixer --toggle-mute")))
+
+  ;; (exwm-input-set-key
+  ;;  (kbd "<XF86AudioLowerVolume>")
+  ;;  (lambda ()
+  ;;    (interactive)
+  ;;    (start-process-shell-command "pamixer" nil "pamixer --allow-boost --decrease 5")))
+
+  ;; (exwm-input-set-key
+  ;;  (kbd "<XF86AudioRaiseVolume>")
+  ;;  (lambda ()
+  ;;    (interactive)
+  ;;    (start-process-shell-command "pamixer" nil "pamixer --allow-boost --increase 5")))
+
+  ;; (exwm-input-set-key
+  ;;  (kbd "<XF86AudioPlay>")
+  ;;  (lambda ()
+  ;;    (interactive)
+  ;;    (start-process-shell-command "mpc" nil "mpc toggle")))
+
+  ;; (exwm-input-set-key
+  ;;  (kbd "<XF86AudioPrev>")
+  ;;  (lambda ()
+  ;;    (interactive)
+  ;;    (start-process-shell-command "mpc" nil "mpc prev")))
+
+  ;; (exwm-input-set-key
+  ;;  (kbd "<XF86AudioNext>")
+  ;;  (lambda ()
+  ;;    (interactive)
+  ;;    (start-process-shell-command "mpc" nil "mpv next")))
+
+  (defun ab--exwm-pasystray ()
+    "A command used to start pasystray."
+    (interactive)
+    (if (executable-find "pasystray")
+       (progn
+          (message "EXWM: starting pasystray ...")
+          (start-process-shell-command "pasystray" nil "pasystray --notify=all"))
+      (message "EXWM: pasystray is not installed, abort!")))
+
+  (add-hook 'exwm-init-hook #'ab--exwm-pasystray)
+
+  (exwm-input-set-key
+   (kbd "s-t")
+   (lambda ()
+     (interactive)
+     (exwm-floating-toggle-floating)))
+
   (exwm-input-set-key
-   (kbd "M-SPC")
+   (kbd "s-f")
    (lambda ()
      (interactive)
-     (start-process "rofi-pass" nil "rofi-pass"))))
+     (exwm-layout-toggle-fullscreen)))
+
+  (exwm-input-set-key
+   (kbd "s-w")
+   (lambda ()
+     (interactive)
+     (kill-buffer (current-buffer))))
+
+  (exwm-input-set-key
+   (kbd "s-q")
+   (lambda ()
+     (interactive)
+     (exwm-manage--kill-client))))
+#+end_src
+
+**** sxhkdrc
+:PROPERTIES:
+:header-args+: :tangle ~/.config/sxhkd/sxhkdrc :mkdirp yes
+:END:
+
+#+begin_src conf :tangle no
+# terminal emulator
+super + Return
+       urxvt
+
+# program launcher
+super + space
+       rofi -show run -display-run '> ' -display-window ' 🗔 '
+
+# window finder
+super + slash
+       rofi -show window  -display-run '> ' -display-window ' 🗔 '
+
+# password manager
+alt + space
+       rofi-pass
+
+# make sxhkd reload its configuration files:
+super + Escape
+       pkill -USR1 -x sxhkd
+
+# volume {up,down}
+XF86Audio{Raise,Lower}Volume
+       pamixer --allow-boost --{in,de}crease 5
+
+# mute
+XF86AudioMute
+       pamixer --toggle-mute
+
+# playback control
+XF86Audio{Play,Prev,Next}
+       mpc {toggle,prev,next}
+
+# Toggle keyboard layout
+# super + F7
+#      toggle-layout
+
+# Toggle Xfce presentation mode
+# XF86LaunchB
+#      toggle-presentation-mode
+
+# monitor brightness
+XF86MonBrightness{Up,Down}
+       light -{A,U} 5
+
+super + apostrophe
+       rofi-light
 #+end_src
 
 *** [[https://orgmode.org/][Org mode]]
@@ -690,7 +839,7 @@ There's no way I could top that, so I won't attempt to.
 
 #+begin_src emacs-lisp
 (use-package counsel
-  :defer 1.5
+  :defer 1
   :bind (([remap execute-extended-command] . counsel-M-x)
          ([remap find-file] . counsel-find-file)
          ("s-r"     . counsel-recentf)
@@ -784,7 +933,7 @@ TODO: break this giant source block down into individual org sections.
 
 * Programming modes
 
-** Lean mode
+** [[https://github.com/leanprover/lean-mode][Lean]]
 
 #+begin_src emacs-lisp
 (use-package lean-mode
@@ -792,6 +941,15 @@ TODO: break this giant source block down into individual org sections.
              ("S-SPC" . company-complete)))
 #+end_src
 
+** [[https://github.com/haskell/haskell-mode][Haskell]]
+
+#+begin_src emacs-lisp
+(use-package haskell-mode
+  :config
+  (setq haskell-indentation-layout-offset 4
+        haskell-indentation-left-offset 4
+        haskell-indentation-ifte-offset 4))
+#+end_src
 * Post initialization
 :PROPERTIES:
 :CUSTOM_ID: post-initialization