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
 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
 combining characters like F⃣. I really like those small touches and of course the
 mighty ligatures.
 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
 #+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
   (setq doom-font (font-spec
-                   :family "PragmataPro Liga"
+                   :family code-font
                    :size base-size)
                    :size base-size)
         doom-variable-pitch-font (font-spec
         doom-variable-pitch-font (font-spec
-                                  :family "PragmataPro Liga"
+                                  :family variable-font
                                   :size base-size)
                                   :size base-size)
         doom-unicode-font (font-spec
         doom-unicode-font (font-spec
-                           :family "PragmataPro Liga"
+                           :family unicode-font
                            :size base-size)
                            :size base-size)
         doom-big-font (font-spec
         doom-big-font (font-spec
-                       :family "PragmataPro Liga"
+                       :family code-font
                        :size (* base-size 2))
                        :size (* base-size 2))
         doom-serif-font (font-spec
         doom-serif-font (font-spec
-                         :family "Iosevka Slab"
+                         :family serif-font
                          :size base-size)))
                          :size base-size)))
-
 #+END_SRC
 #+END_SRC
 
 
 A note about the serif font: I can't set the styling set for a given font on
 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
 which occured quite often on Windows with Spacemacs, due to the latter's
 increased boot time.
 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
 #+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?
 ;; 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-enable-word-count t)
 (setq doom-modeline-continuous-word-count-modes
 (setq doom-modeline-continuous-word-count-modes
       '(markdown-mode gfm-mode org-mode))
       '(markdown-mode gfm-mode org-mode))
 #+END_SRC
 #+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
 ** Python-x
 ** Python-x
 Python-x allows me to have the same cell-based workflow than on Jupter or
 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.")))))
         (message "Can't find the org note folder.")))))
 #+END_SRC
 #+END_SRC
 ** TODO Org Bullets
 ** 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
 #+BEGIN_SRC emacs-lisp
-(setq org-bullets-bullet-list '("■" "▩" "▦" "▨" "▤" "□"))
+(setq org-superstar-headline-bullets-list '("■" "▩" "▦" "▨" "▤" "□"))
 #+END_SRC
 #+END_SRC
 ** TODO Todo lists
 ** TODO Todo lists
 I'd like to track when I finish tasks. I'm not feeling that adding a note each
 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; -*-
 ;;; 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
 (doom! :input
        ;;chinese
        ;;chinese
@@ -27,49 +33,56 @@
        hl-todo           ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
        hl-todo           ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
        ;;hydra
        ;;hydra
        ;;indent-guides     ; highlighted indent columns
        ;;indent-guides     ; highlighted indent columns
+       ;;minimap           ; show a map of the code on the side
        modeline          ; snazzy, Atom-inspired modeline, plus API
        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
        ;;neotree           ; a project drawer, like NERDTree for vim
        ophints           ; highlight the region an operation acts on
        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
        (pretty-code       ; replace bits of code with pretty symbols
-        +pragmata-pro)
+        ;;+pragmata-pro) ; HACK @work
+        )
        ;;tabs              ; an tab bar for Emacs
        ;;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
        ;;unicode           ; extended unicode support for various languages
        vc-gutter         ; vcs diff in the fringe
        vc-gutter         ; vcs diff in the fringe
        vi-tilde-fringe   ; fringe tildes to mark beyond EOB
        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
        workspaces        ; tab emulation, persistence & separate workspaces
+       ;;zen               ; distraction-free coding or writing
 
 
        :editor
        :editor
        (evil +everywhere); come to the dark side, we have cookies
        (evil +everywhere); come to the dark side, we have cookies
        file-templates    ; auto-snippets for empty files
        file-templates    ; auto-snippets for empty files
        fold              ; (nigh) universal code folding
        fold              ; (nigh) universal code folding
-       (format +onsave)  ; automated prettiness
+       ;;(format +onsave)  ; automated prettiness
        ;;god               ; run Emacs commands without modifier keys
        ;;god               ; run Emacs commands without modifier keys
        ;;lispy             ; vim for lisp, for people who don't like vim
        ;;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
        ;;objed             ; text object editing for the innocent
        ;;parinfer          ; turn lisp into python, sort of
        ;;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
        snippets          ; my elves. They type so I don't have to
        ;;word-wrap         ; soft wrapping with language-aware indent
        ;;word-wrap         ; soft wrapping with language-aware indent
 
 
        :emacs
        :emacs
        dired             ; making dired pretty [functional]
        dired             ; making dired pretty [functional]
        electric          ; smarter, keyword-based electric-indent
        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
        vc                ; version-control and Emacs, sitting in a tree
 
 
        :term
        :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
        :tools
        ;;ansible
        ;;ansible
        ;;debugger          ; FIXME stepping through code, to help you add bugs
        ;;debugger          ; FIXME stepping through code, to help you add bugs
@@ -78,11 +91,8 @@
        editorconfig      ; let someone else argue about tabs vs spaces
        editorconfig      ; let someone else argue about tabs vs spaces
        ;;ein               ; tame Jupyter notebooks with emacs
        ;;ein               ; tame Jupyter notebooks with emacs
        (eval +overlay)     ; run code, run (also, repls)
        (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
        ;;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
        ;;lsp
        ;;macos             ; MacOS-specific commands
        ;;macos             ; MacOS-specific commands
        magit             ; a git porcelain for Emacs
        magit             ; a git porcelain for Emacs
@@ -91,20 +101,21 @@
        ;;pdf               ; pdf enhancements
        ;;pdf               ; pdf enhancements
        ;;prodigy           ; FIXME managing external services & code builders
        ;;prodigy           ; FIXME managing external services & code builders
        ;;rgb               ; creating color strings
        ;;rgb               ; creating color strings
+       ;;taskrunner        ; taskrunner for all your projects
        ;;terraform         ; infrastructure as code
        ;;terraform         ; infrastructure as code
        ;;tmux              ; an API for interacting with tmux
        ;;tmux              ; an API for interacting with tmux
        ;;upload            ; map local to remote projects via ssh/ftp
        ;;upload            ; map local to remote projects via ssh/ftp
 
 
        :lang
        :lang
        ;;agda              ; types of types of types of types...
        ;;agda              ; types of types of types of types...
-       ;;assembly          ; assembly for fun or debugging
        ;;cc                ; C/C++/Obj-C madness
        ;;cc                ; C/C++/Obj-C madness
        ;;clojure           ; java with a lisp
        ;;clojure           ; java with a lisp
        ;;common-lisp       ; if you've seen one lisp, you've seen them all
        ;;common-lisp       ; if you've seen one lisp, you've seen them all
        ;;coq               ; proofs-as-programs
        ;;coq               ; proofs-as-programs
        ;;crystal           ; ruby at the speed of c
        ;;crystal           ; ruby at the speed of c
        ;;csharp            ; unity, .NET, and mono shenanigans
        ;;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
        ;;elixir            ; erlang done right
        ;;elm               ; care for a cup of TEA?
        ;;elm               ; care for a cup of TEA?
        emacs-lisp        ; drown in parentheses
        emacs-lisp        ; drown in parentheses
@@ -112,10 +123,13 @@
        ;;ess               ; emacs speaks statistics
        ;;ess               ; emacs speaks statistics
        ;;faust             ; dsp, but you get to keep your soul
        ;;faust             ; dsp, but you get to keep your soul
        ;;fsharp           ; ML stands for Microsoft's Language
        ;;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
        ;;(haskell +dante)  ; a language that's lazier than I am
        ;;hy                ; readability of scheme w/ speed of python
        ;;hy                ; readability of scheme w/ speed of python
        ;;idris             ;
        ;;idris             ;
+       ;;json              ; At least it ain't XML
        ;;(java +meghanada) ; the poster child for carpal tunnel syndrome
        ;;(java +meghanada) ; the poster child for carpal tunnel syndrome
        ;;javascript        ; all(hope(abandon(ye(who(enter(here))))))
        ;;javascript        ; all(hope(abandon(ye(who(enter(here))))))
        ;;julia             ; a better, faster MATLAB
        ;;julia             ; a better, faster MATLAB
@@ -130,6 +144,7 @@
        ;;nix               ; I hereby declare "nix geht mehr!"
        ;;nix               ; I hereby declare "nix geht mehr!"
        ;;ocaml             ; an objective camel
        ;;ocaml             ; an objective camel
        (org              ; organize your plain life in plain text
        (org              ; organize your plain life in plain text
+        +brain           ; A chicken brain, aren't you
         +dragndrop       ; drag & drop files/images into org buffers
         +dragndrop       ; drag & drop files/images into org buffers
         ;;+hugo            ; use Emacs for hugo blogging
         ;;+hugo            ; use Emacs for hugo blogging
         +jupyter         ; ipython/jupyter support for babel
         +jupyter         ; ipython/jupyter support for babel
@@ -145,15 +160,17 @@
        ;;racket            ; a DSL for DSLs
        ;;racket            ; a DSL for DSLs
        ;;rest              ; Emacs as a REST client
        ;;rest              ; Emacs as a REST client
        ;;rst               ; ReST in peace
        ;;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()
        ;;rust              ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
        ;;scala             ; java, but good
        ;;scala             ; java, but good
        ;;scheme            ; a fully conniving family of lisps
        ;;scheme            ; a fully conniving family of lisps
        sh                ; she sells {ba,z,fi}sh shells on the C xor
        sh                ; she sells {ba,z,fi}sh shells on the C xor
+       ;;sml
        ;;solidity          ; do you need a blockchain? No.
        ;;solidity          ; do you need a blockchain? No.
        ;;swift             ; who asked for emoji variables?
        ;;swift             ; who asked for emoji variables?
        ;;terra             ; Earth and Moon in alignment for performance.
        ;;terra             ; Earth and Moon in alignment for performance.
        ;;web               ; the tubes
        ;;web               ; the tubes
+       ;;yaml              ; JSON, but readable
 
 
        :email
        :email
        ;;(mu4e +gmail)
        ;;(mu4e +gmail)
@@ -165,8 +182,6 @@
        ;;irc               ; how neckbeards socialize
        ;;irc               ; how neckbeards socialize
        ;;(rss +org)        ; emacs as an RSS reader
        ;;(rss +org)        ; emacs as an RSS reader
        ;;twitter           ; twitter client https://twitter.com/vnought
        ;;twitter           ; twitter client https://twitter.com/vnought
-       (write             ; emacs for writers (fiction, notes, papers, etc.)
-        +write-mode)
 
 
        :config
        :config
        literate
        literate

+ 0 - 3
packages.el

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