Browse Source

Updating against doom and font fallback

Eiyeron Fulmincendii 5 years ago
parent
commit
f1da8ca207
3 changed files with 101 additions and 46 deletions
  1. 55 12
      config.org
  2. 46 31
      init.el
  3. 0 3
      packages.el

+ 55 - 12
config.org

@@ -36,24 +36,47 @@ described fonts. Yet, Pragmata is neicely designed and made in a way I'm still
 discovering little details after weeks of daily usage, like properly managing
 combining characters like F⃣. I really like those small touches and of course the
 mighty ligatures.
+
+On the other hand, I don't always want to install all the fonts everywhere, so
+let's build first a font selector so I can gracefully fallback on other fonts
+when needed.
+
+I'm using a homebrew filter function directly taken from a cookbook page [[https://www.emacswiki.org/emacs/ElispCookbook#toc39][here]] so
+I can skip requiring ~cl~ or ~seq~ at launch.
+#+begin_src emacs-lisp
+(defun chicken/filter (condp lst)
+  (delq nil
+        (mapcar (lambda (x) (and (funcall condp x) x)) lst)))
+
+(defun chicken/select-first-available-font (fonts-to-select)
+  (let ((available-fonts (font-family-list)))
+    (car (chicken/filter (lambda (elt) (member elt available-fonts)) fonts-to-select))))
+
+(chicken/select-first-available-font '("PragmataPro Liga" "PragmataPro" "Consolas" "Courrier New"))
+#+end_src
+
+Now the font proper selection
 #+BEGIN_SRC emacs-lisp
-(let ((base-size 12))
+(let ((base-size 12)
+      (code-font (chicken/select-first-available-font '("PragmataPro Liga" "PragmataPro" "Consolas" "Courrier New")))
+      (variable-font (chicken/select-first-available-font '("PragmataPro Liga" "PragmataPro" "Segoe UI")))
+      (unicode-font (chicken/select-first-available-font '("PragmataPro Liga" "PragmataPro" "Segoe UI")))
+      (serif-font (chicken/select-first-available-font '("Iosevka Slab" "Courrier New" "Courrier New"))))
   (setq doom-font (font-spec
-                   :family "PragmataPro Liga"
+                   :family code-font
                    :size base-size)
         doom-variable-pitch-font (font-spec
-                                  :family "PragmataPro Liga"
+                                  :family variable-font
                                   :size base-size)
         doom-unicode-font (font-spec
-                           :family "PragmataPro Liga"
+                           :family unicode-font
                            :size base-size)
         doom-big-font (font-spec
-                       :family "PragmataPro Liga"
+                       :family code-font
                        :size (* base-size 2))
         doom-serif-font (font-spec
-                         :family "Iosevka Slab"
+                         :family serif-font
                          :size base-size)))
-
 #+END_SRC
 
 A note about the serif font: I can't set the styling set for a given font on
@@ -83,14 +106,34 @@ and forcing the usage of icons for situations where I use emacs in daemon mode,
 which occured quite often on Windows with Spacemacs, due to the latter's
 increased boot time.
 
+I'm disabling the font icons when one of the fonts (here GitHub's) isn't present
+so I can directly fallback on the unicode symbols. Allows me to tone down the
+visual noise.
+
 #+BEGIN_SRC emacs-lisp
-(setq doom-modeline-icon t)
-(setq doom-modeline-major-mode-icon t)
+(if (member "github-octicons" (font-family-list))
+    (progn
+      (setq doom-modeline-icon t)
+      (setq doom-modeline-major-mode-icon t))
+  (progn
+    (setq doom-modeline-icon nil)
+    (setq doom-modeline-unicode-fallback t)))
+
 ;; FIXME What does it lack to work?
+;;(setq doom-modeline-enable-word-count t)
+;;(setq doom-modeline-continuous-word-count-modes
+;;      '(markdown-mode gfm-mode org-mode))
+
 (setq doom-modeline-enable-word-count t)
 (setq doom-modeline-continuous-word-count-modes
       '(markdown-mode gfm-mode org-mode))
 #+END_SRC
+*** Line numbers
+I like my line numbers in italic, for no sensible reason. It just looks good to
+me.
+#+begin_src emacs-lisp
+(set-face-italic 'line-number t)
+#+end_src
 * Python
 ** Python-x
 Python-x allows me to have the same cell-based workflow than on Jupter or
@@ -128,10 +171,10 @@ configurations later.
         (message "Can't find the org note folder.")))))
 #+END_SRC
 ** TODO Org Bullets
-Doom's default bullets for org doesn't work perfectly in Windows. Let's use
-another set that'll work on my computers.
+Doom's default bullets, using ~org-superstar~, for org doesn't work perfectly in
+Windows. Let's use another set that'll work on my computers.
 #+BEGIN_SRC emacs-lisp
-(setq org-bullets-bullet-list '("■" "▩" "▦" "▨" "▤" "□"))
+(setq org-superstar-headline-bullets-list '("■" "▩" "▦" "▨" "▤" "□"))
 #+END_SRC
 ** TODO Todo lists
 I'd like to track when I finish tasks. I'm not feeling that adding a note each

+ 46 - 31
init.el

@@ -1,12 +1,18 @@
 ;;; init.el -*- lexical-binding: t; -*-
 
-;; Copy this file to ~/.doom.d/init.el or ~/.config/doom/init.el ('doom install'
-;; will do this for you). The `doom!' block below controls what modules are
-;; enabled and in what order they will be loaded. Remember to run 'doom refresh'
-;; after modifying it.
+;; This file controls what Doom modules are enabled and what order they load
+;; in. Remember to run 'doom sync' after modifying it!
+
+;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
+;;      documentation. There you'll find a "Module Index" link where you'll find
+;;      a comprehensive list of Doom's modules and what flags they support.
+
+;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
+;;      'C-c c k' for non-vim users) to view its documentation. This works on
+;;      flags as well (those symbols that start with a plus).
 ;;
-;; More information about these modules (and what flags they support) can be
-;; found in modules/README.org.
+;;      Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
+;;      directory (for easy access to its source code).
 
 (doom! :input
        ;;chinese
@@ -27,49 +33,56 @@
        hl-todo           ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
        ;;hydra
        ;;indent-guides     ; highlighted indent columns
+       ;;minimap           ; show a map of the code on the side
        modeline          ; snazzy, Atom-inspired modeline, plus API
-       nav-flash         ; blink the current line after jumping
+       ;;nav-flash         ; blink cursor line after big motions
        ;;neotree           ; a project drawer, like NERDTree for vim
        ophints           ; highlight the region an operation acts on
-       (popup            ; tame sudden yet inevitable temporary windows
-        +all             ; catch all popups that start with an asterix
-        +defaults)       ; default popup rules
+       (popup +defaults)   ; tame sudden yet inevitable temporary windows
        (pretty-code       ; replace bits of code with pretty symbols
-        +pragmata-pro)
+        ;;+pragmata-pro) ; HACK @work
+        )
        ;;tabs              ; an tab bar for Emacs
-       ;;treemacs          ; a project drawer, like neotree but cooler
+       treemacs          ; a project drawer, like neotree but cooler
        ;;unicode           ; extended unicode support for various languages
        vc-gutter         ; vcs diff in the fringe
        vi-tilde-fringe   ; fringe tildes to mark beyond EOB
-       window-select     ; visually switch windows
+       ;;window-select     ; visually switch windows
        workspaces        ; tab emulation, persistence & separate workspaces
+       ;;zen               ; distraction-free coding or writing
 
        :editor
        (evil +everywhere); come to the dark side, we have cookies
        file-templates    ; auto-snippets for empty files
        fold              ; (nigh) universal code folding
-       (format +onsave)  ; automated prettiness
+       ;;(format +onsave)  ; automated prettiness
        ;;god               ; run Emacs commands without modifier keys
        ;;lispy             ; vim for lisp, for people who don't like vim
-       multiple-cursors  ; editing in many places at once
+       ;;multiple-cursors  ; editing in many places at once
        ;;objed             ; text object editing for the innocent
        ;;parinfer          ; turn lisp into python, sort of
-       rotate-text       ; cycle region at point between text candidates
+       ;;rotate-text       ; cycle region at point between text candidates
        snippets          ; my elves. They type so I don't have to
        ;;word-wrap         ; soft wrapping with language-aware indent
 
        :emacs
        dired             ; making dired pretty [functional]
        electric          ; smarter, keyword-based electric-indent
-       ibuffer           ; interactive buffer management
+       ;;ibuffer         ; interactive buffer management
+       undo              ; persistent, smarter undo for your inevitable mistakes
        vc                ; version-control and Emacs, sitting in a tree
 
        :term
-       ;;eshell            ; a consistent, cross-platform shell (WIP)
-       ;;shell             ; a terminal REPL for Emacs
-       ;;term              ; terminals in Emacs
-       ;;vterm             ; another terminals in Emacs
+       ;;eshell            ; the elisp shell that works everywhere
+       ;;shell             ; simple shell REPL for Emacs
+       ;;term              ; basic terminal emulator for Emacs
+       ;;vterm             ; the best terminal emulation in Emacs
 
+       :checkers
+       syntax              ; tasing you for every semicolon you forget
+       ;;spell             ; tasing you for misspelling mispelling
+       ;;grammar           ; tasing grammar mistake every you make
+      
        :tools
        ;;ansible
        ;;debugger          ; FIXME stepping through code, to help you add bugs
@@ -78,11 +91,8 @@
        editorconfig      ; let someone else argue about tabs vs spaces
        ;;ein               ; tame Jupyter notebooks with emacs
        (eval +overlay)     ; run code, run (also, repls)
-       flycheck          ; tasing you for every semicolon you forget
-       ;;flyspell          ; tasing you for misspelling mispelling
        ;;gist              ; interacting with github gists
-       (lookup           ; helps you navigate your code and documentation
-        +docsets)        ; ...or in Dash docsets locally
+       lookup              ; navigate your code and its documentation
        ;;lsp
        ;;macos             ; MacOS-specific commands
        magit             ; a git porcelain for Emacs
@@ -91,20 +101,21 @@
        ;;pdf               ; pdf enhancements
        ;;prodigy           ; FIXME managing external services & code builders
        ;;rgb               ; creating color strings
+       ;;taskrunner        ; taskrunner for all your projects
        ;;terraform         ; infrastructure as code
        ;;tmux              ; an API for interacting with tmux
        ;;upload            ; map local to remote projects via ssh/ftp
 
        :lang
        ;;agda              ; types of types of types of types...
-       ;;assembly          ; assembly for fun or debugging
        ;;cc                ; C/C++/Obj-C madness
        ;;clojure           ; java with a lisp
        ;;common-lisp       ; if you've seen one lisp, you've seen them all
        ;;coq               ; proofs-as-programs
        ;;crystal           ; ruby at the speed of c
        ;;csharp            ; unity, .NET, and mono shenanigans
-       data              ; config/data formats
+       ;;data              ; config/data formats
+       ;;(dart +flutter)   ; paint ui and not much else
        ;;elixir            ; erlang done right
        ;;elm               ; care for a cup of TEA?
        emacs-lisp        ; drown in parentheses
@@ -112,10 +123,13 @@
        ;;ess               ; emacs speaks statistics
        ;;faust             ; dsp, but you get to keep your soul
        ;;fsharp           ; ML stands for Microsoft's Language
-       ;;go                ; the hipster dialect
+       ;;fstar             ; (dependent) types and (monadic) effects and Z3
+       ;;gdscript          ; the language you waited for
+       ;;(go +lsp)         ; the hipster dialect
        ;;(haskell +dante)  ; a language that's lazier than I am
        ;;hy                ; readability of scheme w/ speed of python
        ;;idris             ;
+       ;;json              ; At least it ain't XML
        ;;(java +meghanada) ; the poster child for carpal tunnel syndrome
        ;;javascript        ; all(hope(abandon(ye(who(enter(here))))))
        ;;julia             ; a better, faster MATLAB
@@ -130,6 +144,7 @@
        ;;nix               ; I hereby declare "nix geht mehr!"
        ;;ocaml             ; an objective camel
        (org              ; organize your plain life in plain text
+        +brain           ; A chicken brain, aren't you
         +dragndrop       ; drag & drop files/images into org buffers
         ;;+hugo            ; use Emacs for hugo blogging
         +jupyter         ; ipython/jupyter support for babel
@@ -145,15 +160,17 @@
        ;;racket            ; a DSL for DSLs
        ;;rest              ; Emacs as a REST client
        ;;rst               ; ReST in peace
-       ;;ruby              ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
+       ;;(ruby +rails)     ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
        ;;rust              ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
        ;;scala             ; java, but good
        ;;scheme            ; a fully conniving family of lisps
        sh                ; she sells {ba,z,fi}sh shells on the C xor
+       ;;sml
        ;;solidity          ; do you need a blockchain? No.
        ;;swift             ; who asked for emoji variables?
        ;;terra             ; Earth and Moon in alignment for performance.
        ;;web               ; the tubes
+       ;;yaml              ; JSON, but readable
 
        :email
        ;;(mu4e +gmail)
@@ -165,8 +182,6 @@
        ;;irc               ; how neckbeards socialize
        ;;(rss +org)        ; emacs as an RSS reader
        ;;twitter           ; twitter client https://twitter.com/vnought
-       (write             ; emacs for writers (fiction, notes, papers, etc.)
-        +write-mode)
 
        :config
        literate

+ 0 - 3
packages.el

@@ -15,6 +15,3 @@
 
 ;; IPython-like cell handling
 (package! python-x)
-
-;; Org-brain, my friend!
-(package! org-brain)