;; ; init.el -*- lexical-binding: t; -*-

;;  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).
;;
;;       Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;;       directory (for easy access to its source code).

;; (setq! use-package-compute-statistics t)

(doom! :input
       ;; chinese
       ;; japanese
       ;; layout                    ; auie,ctsrnm is the superior home row

       :completion
       ;;  company                   ; the ultimate code completion backend
       ;;  helm                     ; the *other* search engine for love and life
       ;;  ido                      ; the other *other* search engine...
       ;; ivy                      ; a search engine for love and life
       (corfu +orderless)
       vertico

       :ui
       ;;  deft                     ; notational velocity for Emacs
       doom                         ; what makes DOOM look the way it does
       doom-dashboard               ; a nifty splash screen for Emacs
       ;; doom-quit                 ; DOOM quit-message prompts when you quit Emacs
       ;; (emoji +unicode)             ; 🙂
       ;; fill-column               ; a `fill-column' indicator
       hl-todo                      ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
       ;;  indent-guides            ; highlighted indent columns
       ;; ligatures                 ; ligatures and symbols to make your code pretty again
       ;;  minimap                  ; show a map of the code on the side
       ;; (modeline +light)         ; snazzy, Atom-inspired modeline, plus API
       ;; 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 +all)              ; tame sudden yet inevitable temporary windows
       ;; tabs                      ; a tab bar for Emacs
       ;; 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
       ;; workspaces                ; tab emulation, persistence & separate workspaces
       ;; zen                       ; distraction-free coding or writing

       :editor
       ;; (meow +qwerty +override)  ; yet another modal editor
       ;; (evil +everywhere)        ; come to the dark side, we have cookies
       ;; file-templates               ; auto-snippets for empty files
       ;; fold                         ; (nigh) universal code folding
       (format +lsp)             ; 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
       ;; objed                     ; text object editing for the innocent
       ;; parinfer                     ; turn lisp into python, sort of
       ;; 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 +dirvish +icons)            ; making dired pretty [functional]
       ;; electric                        ; smarter, keyword-based electric-indent
       ;; ibuffer                         ; interactive buffer management
       undo                               ; persistent, smarter undo for your inevitable mistakes
       ;;  vc                             ; version-control and Emacs, sitting in a tree

       :term
       ;; 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
       ;;tree-sitter
       ;; ansible
       ;; debugger                     ; FIXME stepping through code, to help you add bugs
       ;; direnv
       ;; docker
       ;; editorconfig              ; let someone else argue about tabs vs spaces
       ;; ein                       ; tame Jupyter notebooks with emacs
       (eval +overlay)            ; run code, run (also, repls)
       ;; gist                      ; interacting with github gists
       lookup                        ; navigate your code and its documentation
       (lsp +eglot)
       biblio
       magit                        ; a git porcelain for Emacs
       ;; pass                      ; password manager for nerds
       ;; make                      ; run make tasks from Emacs
       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

       :os
       ;;  (:if IS-MAC macos)       ; improve compatibility with macOS
       ;; tty                       ; improve the terminal Emacs experience

       :lang
       ;; agda                      ; types of types of types of types...
       ;; (cc +lsp +tree-sitter)                        ; C/C++/Obj-C madness
       ;; (clojure +lsp +tree-sitter)                   ; 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
       ;; (dart +flutter)           ; paint ui and not much else
       ;; elixir                    ; erlang done right
       ;; elm                       ; care for a cup of TEA?
       emacs-lisp                                  ; drown in parentheses
       ;; erlang                    ; an elegant language for a more civilized age
       ess                       ; emacs speaks statistics
       ;; faust                     ; dsp, but you get to keep your soul
       ;; (fortran +lsp)
       ;; fsharp                    ; ML stands for Microsoft's Language
       ;; fstar                     ; (dependent) types and (monadic) effects and Z3
       ;; gdscript                  ; the language you waited for
       ;; (go +lsp)                 ; the pster dialect
       ;; (haskell +lsp +tree-sitter)  ; a language that's lazier than I am
       ;; hy                        ; readability of scheme w/ speed of python
       ;; idris                     ; a language you can depend on
       ;; 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  +tree-sitter +snail +lsp)                     ; a better, faster MATLAB
       ;; kotlin                    ; a better, slicker Java(Script)
       ;; (latex +cdlatex)                        ; writing papers in Emacs has never been so fun
       ;; lean
       ;; factor
       ;; ledger                    ; an accounting system in Emacs
       ;;  lua                      ; one-based indices? one-based indices
       ;;  markdown                 ; writing docs for people to ignore
       ;; nim                       ; python + lisp at the speed of c
       ;; nix                       ; I hereby declare "nix geht mehr!"
       ;; ocaml                     ; an objective camel
       (org +hugo +crypt)                          ; organize your plain life in plain text
       ;; php                       ; perl's insecure younger brother
       ;; plantuml                  ; diagrams for confusing people more
       ;; purescript                ; javascript, but functional
       (python +poetry)   ; beautiful is better than ugly
       ;; qt                        ; the 'cutest' gui framework ever
       ;; racket                    ; a DSL for DSLs
       ;; raku                      ; the artist formerly known as perl6
       ;; rest                      ; Emacs as a REST client
       ;; rst                       ; ReST in peace
       ;; (ruby +rails)             ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
       ;; (rust +lsp +tree-sitter)     ; 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 +mbsync +org)
       ;; notmuch
       ;; (wanderlust +gmail)

       :app
       calendar
       ;; irc                       ; how neckbeards socialize
       (rss +org)                   ; emacs as an RSS reader
       ;; everywhere

       :config
       ;; literate
       (default +bindings +smartparens))


;;(if (equal (system-name) "pop-os")
;;    (add-to-list 'load-path "~/.config/emacs/.local/straight/repos/benchmark-init-el/")
;;  (add-to-list 'load-path "~/.emacs.d/.local/straight/repos/benchmark-init-el/"))

;;(when init-file-debug
;;  (require 'benchmark-init)
;;  (add-hook 'doom-first-input-hook #'benchmark-init/deactivate))