summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.bash_profile8
-rw-r--r--.bashrc12
-rw-r--r--.emacs679
-rw-r--r--import.itermkeymap108
4 files changed, 538 insertions, 269 deletions
diff --git a/.bash_profile b/.bash_profile
index c004cb9..7edf4c5 100644
--- a/.bash_profile
+++ b/.bash_profile
@@ -3,9 +3,9 @@ export PATH=${HOME}/.local/bin:${PATH}
export PATH=${HOME}/.idris2/bin:${PATH}
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"
export PATH="/Applications/Racket v7.4/bin:$PATH"
+export PATH="$PATH:/Users/arnaud/.dat/releases/dat-13.13.1-macos-x64"
export GOPATH=${HOME}/go
alias ec="emacsclient -c"
-alias g=git
# from https://stackoverflow.com/questions/18880024/start-ssh-agent-on-login
SSH_ENV="$HOME/.ssh/environment"
@@ -36,3 +36,9 @@ test -e "${HOME}/.iterm2_shell_integration.bash" && source "${HOME}/.iterm2_shel
export PATH="$HOME/.cargo/bin:$PATH"
. ~/.bashrc
+
+# The next line updates PATH for the Google Cloud SDK.
+if [ -f '/Users/arnaud/Downloads/google-cloud-sdk/path.bash.inc' ]; then . '/Users/arnaud/Downloads/google-cloud-sdk/path.bash.inc'; fi
+
+# The next line enables shell command completion for gcloud.
+if [ -f '/Users/arnaud/Downloads/google-cloud-sdk/completion.bash.inc' ]; then . '/Users/arnaud/Downloads/google-cloud-sdk/completion.bash.inc'; fi
diff --git a/.bashrc b/.bashrc
index 86858b0..97a153b 100644
--- a/.bashrc
+++ b/.bashrc
@@ -1,11 +1,11 @@
-source ~/dotfiles/bash-completion.sh
-source ~/dotfiles/git-prompt.sh
+# source ~/dotfiles/bash-completion.sh
+# source ~/dotfiles/git-prompt.sh
-export GIT_PS1_SHOWDIRTYSTATE=1
-export GIT_PS1_SHOWCOLORHINTS=1
-export GIT_PS1_SHOWUNTRACKEDFILES=1
+# export GIT_PS1_SHOWDIRTYSTATE=1
+# export GIT_PS1_SHOWCOLORHINTS=1
+# export GIT_PS1_SHOWUNTRACKEDFILES=1
-export PROMPT_COMMAND=' __git_ps1 "\n[\e[33m\A \e[36m\w\e[m" "\e[33m]\n$ "'
+# export PROMPT_COMMAND=' __git_ps1 "\n[\e[33m\A \e[36m\w\e[m" "\e[33m]\n$ "'
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
diff --git a/.emacs b/.emacs
index 1f7724a..2436dda 100644
--- a/.emacs
+++ b/.emacs
@@ -3,7 +3,7 @@
;; package installation
(require 'package)
(add-to-list 'package-archives
- '("melpa" . "http://melpa.org/packages/"))
+ '("melpa" . "https://melpa.org/packages/"))
(package-initialize)
@@ -14,16 +14,32 @@
(add-hook 'window-setup-hook
(lambda nil
;; font setting
- (set-frame-parameter (selected-frame) 'alpha '(80 80))
- (set-face-background 'hl-line "#ff0")
+ (set-frame-parameter (selected-frame) 'alpha '(100 100))
(set-face-attribute 'default nil
:background "white"
:foreground "black"
- :family "Source Code Pro"
+ :family "Hack"
:height 140)
))
+;; from https://www.emacswiki.org/emacs/iTerm2
+(unless window-system
+ (require 'mouse)
+ (xterm-mouse-mode t)
+ (defun track-mouse (e))
+ (setq mouse-sel-mode t)
+ )
+
+(require 'cl-lib)
+(cl-loop for char from ?a to ?z
+ do (define-key input-decode-map (format "\e[1;P%c" char) (kbd (format "s-%c" char))))
+
+(menu-bar-mode 0)
+(tool-bar-mode 0)
+
+(set-fill-column 132)
+
(global-set-key (kbd "C-x M-a") "α")
(global-set-key (kbd "C-x M-b") "β")
(global-set-key (kbd "C-x M-d") "δ")
@@ -37,15 +53,32 @@
(interactive)
(insert "·")))
+(global-set-key (kbd "C-c C-/") 'comment-or-uncomment-region)
+
(setq fill-column 132)
(global-set-key "\C-cg" 'goto-line)
(global-set-key "\C-c\C-g" 'rgrep)
(setq require-final-newline t)
(add-hook 'before-save-hook 'delete-trailing-whitespace)
(global-hl-line-mode 1)
-
(global-set-key "\C-c\C-o" 'browse-url-at-point)
+;; https://blog.sumtypeofway.com/posts/emacs-config.html
+(use-package doom-themes
+ :config
+ (let ((chosen-theme 'doom-one-light))
+ (doom-themes-visual-bell-config)
+ (doom-themes-org-config)
+ (setq doom-challenger-deep-brighter-comments t
+ doom-challenger-deep-brighter-modeline t)
+ (load-theme chosen-theme)))
+
+(show-paren-mode)
+
+(use-package rainbow-delimiters
+ :ensure t
+ :hook ((prog-mode . rainbow-delimiters-mode)))
+
;; https://github.com/emacsmirror/expand-region
(require 'expand-region)
(global-set-key (kbd "C-=") 'er/expand-region)
@@ -87,6 +120,7 @@
;; to input pinyin accented chars using right option/alt key
(setq mac-right-option-modifier 'none)
+(setq mac-command-modifier 'super)
;; form http://stackoverflow.com/questions/2903426/display-path-of-file-in-status-bar
(require 'uniquify)
@@ -95,6 +129,9 @@
;; Org stuff
(require 'org)
(require 'org-protocol)
+;; to get shortcuts for inserting code blocsk
+(require 'org-tempo)
+
(setq org-directory "~/log")
(setq org-agenda-files '("~/log/"))
@@ -152,14 +189,56 @@
(setq org-time-clocksum-format
'(:hours "%d" :require-hours t :minutes ":%02d" :require-minutes t))
-(menu-bar-mode 0)
-(tool-bar-mode 0)
-
-(global-set-key (kbd "C-c C-/") 'comment-or-uncomment-region)
+(setq org-roam-capture-templates
+ '(("d" "default" plain (function org-roam--capture-get-point)
+ "%?"
+ :file-name "${slug}"
+ :head "#+TITLE: ${title}\n"
+ :unnarrowed t)
+ ("p" "private" plain (function org-roam--capture-get-point)
+ "%?"
+ :file-name "private-${slug}"
+ :head "#+TITLE: ${title}\n"
+ :unnarrowed t)))
+
+(setq org-roam-graph-viewer "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome") ;; will use view-file by default.
+
+(use-package org-roam
+ :hook
+ (after-init . org-roam-mode)
+ :custom
+ (org-roam-directory "~/log/roam")
+ :bind (:map org-roam-mode-map
+ (("C-c n l" . org-roam)
+ ("C-c n f" . org-roam-find-file)
+ ("C-c n g" . org-roam-show-graph)
+ ("C-c n d" . org-roam-dailies-today))
+ :map org-mode-map
+ (("C-c n i" . org-roam-insert))))
+
+(use-package org-roam-server
+ :after org-roam
+ :load-path "~/org-roam-server/"
+ :ensure nil
+ :config
+ (setq org-roam-server-host "127.0.0.1"
+ org-roam-server-port 8080
+ org-roam-server-authenticate nil
+ org-roam-server-export-inline-images t
+ org-roam-server-serve-files nil
+ org-roam-server-served-file-extensions '("pdf" "mp4" "ogv")
+ org-roam-server-network-poll t
+ org-roam-server-network-arrows nil
+ org-roam-server-network-label-truncate t
+ org-roam-server-network-label-truncate-length 60
+ org-roam-server-network-label-wrap-length 20))
+
+(require 'org-roam-protocol)
;; multiple-cursors
;; https://github.com/magnars/multiple-cursors.el
-(require 'multiple-cursors)
+(use-package multiple-cursors
+ :ensure t)
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
@@ -178,6 +257,9 @@
;; use space for indentation, 2 spaces wide
(setq-default indent-tabs-mode nil)
(setq-default tab-width 2)
+;; ensure javascript indentation is 2 spaces
+(setq js-indent-level 2)
+(setq-default js2-basic-offset 2)
;; activate smerge when opening conflict files
(defun sm-try-smerge ()
@@ -197,28 +279,32 @@
(reverse exec-path)
(list (concat (getenv "HOME") "/.local/bin") "/usr/local/bin" ))))
-;; LSP Haskell
-;; (use-package flycheck
-;; :ensure t
-;; :init
-;; (global-flycheck-mode t))
-;; (use-package yasnippet
-;; :ensure t)
-;; (use-package lsp-mode
-;; :ensure t
-;; :hook (haskell-mode . lsp)
-;; :commands lsp)
-;; (use-package lsp-ui
-;; :ensure t
-;; :commands lsp-ui-mode)
-;; (use-package lsp-haskell
-;; :ensure t
-;; :config
-;; (setq lsp-haskell-process-path-hie "ghcide")
-;; (setq lsp-haskell-process-args-hie '())
-;; ;; Comment/uncomment this line to see interactions between lsp client/server.
-;; ;;(setq lsp-log-io t)
-;; )
+;;LSP Haskell
+(use-package flycheck
+ :ensure t
+ :init
+ (global-flycheck-mode t))
+(use-package yasnippet
+ :ensure t)
+(use-package lsp-mode
+ :ensure t
+ :config
+ (setq lsp-auto-guess-root nil)
+ :hook (haskell-mode . lsp)
+ :commands lsp)
+
+(use-package lsp-ui
+ :ensure t
+ :commands lsp-ui-mode)
+(use-package lsp-haskell
+ :ensure t
+ :config
+ (setq lsp-haskell-server-path "haskell-language-server-wrapper")
+ (setq lsp-haskell-server-args ())
+ ;; (setq lsp-haskell-server-path "~/.local/bin/haskell-language-server")
+ ;; Comment/uncomment this line to see interactions between lsp client/server.
+ (setq lsp-log-io t)
+ )
;; optionally
;; (use-package lsp-ui :commands lsp-ui-mode)
@@ -227,33 +313,33 @@
(defun string-join (sl delim)
(mapconcat 'identity sl delim))
-(use-package haskell-mode
- :ensure t
- :init (progn
- (add-hook 'haskell-mode-hook 'interactive-haskell-mode)
- (add-hook 'haskell-mode-hook 'haskell-decl-scan-mode)
- (add-hook 'haskell-mode-hook 'linum-mode))
- :config (progn
- (setq haskell-font-lock-symbols t)
- (setq haskell-process-use-presentation-mode t)
- (setq haskell-ghci-options
- '("-ferror-spans"
- "-fdefer-typed-holes"
- "-fmax-relevant-binds=0"
- "-fno-diagnostics-show-caret"
- ))
- (setq haskell-process-args-stack-ghci
- (list (concat "--ghci-options=" (string-join haskell-ghci-options " "))
- "--no-build"
- "--no-load"))
- (setq haskell-font-lock-symbols-alist
- '(("\\" . "λ")
- ("." "∘" haskell-font-lock-dot-is-not-composition)
- ("forall" . "∀")))
- (setq haskell-interactive-popup-errors nil)
- (setq haskell-indentation-left-offset 2)
- (setq haskell-indentation-layout-offset 2)
- (setq haskell-tags-on-save t)))
+;; (use-package haskell-mode
+;; :ensure t
+;; :init (progn
+;; (add-hook 'haskell-mode-hook 'interactive-haskell-mode)
+;; (add-hook 'haskell-mode-hook 'haskell-decl-scan-mode)
+;; (add-hook 'haskell-mode-hook 'linum-mode))
+;; :config (progn
+;; (setq haskell-font-lock-symbols t)
+;; (setq haskell-process-use-presentation-mode t)
+;; (setq haskell-ghci-options
+;; '("-ferror-spans"
+;; "-fdefer-typed-holes"
+;; "-fmax-relevant-binds=0"
+;; "-fno-diagnostics-show-caret"
+;; ))
+;; (setq haskell-process-args-stack-ghci
+;; (list (concat "--ghci-options=" (string-join haskell-ghci-options " "))
+;; "--no-build"
+;; "--no-load"))
+;; (setq haskell-font-lock-symbols-alist
+;; '(("\\" . "λ")
+;; ("." "∘" haskell-font-lock-dot-is-not-composition)
+;; ("forall" . "∀")))
+;; (setq haskell-interactive-popup-errors nil)
+;; (setq haskell-indentation-left-offset 2)
+;; (setq haskell-indentation-layout-offset 2)
+;; (setq haskell-tags-on-save t)))
;; ormolu formatting
;; https://github.com/vyorkin/ormolu.el
@@ -269,13 +355,14 @@
(defalias 'filter-lines 'keep-lines)
;; Elm
-(setq elm-tags-on-save t)
-(add-hook 'elm-mode-hook #'elm-oracle-setup-completion)
-(setq elm-format-on-save t)
-(setq elm-tags-exclude-elm-stuff nil)
+;; (setq elm-tags-on-save t)
+;; (add-hook 'elm-mode-hook #'elm-oracle-setup-completion)
+;; (setq elm-format-on-save t)
+;; (setq elm-tags-exclude-elm-stuff nil)
;; magit
-(require 'magit)
+(use-package magit
+ :ensure t)
(global-set-key "\C-xg" 'magit-status)
(global-set-key (kbd "C-x M-g") 'magit-dispatch-popup)
@@ -283,106 +370,24 @@
(require 'markdown-mode)
(setq markdown-command "pandoc -s --highlight-style pygments")
-(custom-set-variables
- ;; custom-set-variables was added by Custom.
- ;; If you edit it by hand, you could mess it up, so be careful.
- ;; Your init file should contain only one such instance.
- ;; If there is more than one, they won't work right.
- '(coq-compile-before-require t)
- '(haskell-stylish-on-save nil)
- '(idris-interpreter-flags (quote ("-p" "contrib")))
- '(idris-interpreter-path "idris")
- '(idris-log-events t)
- '(package-selected-packages
- (quote
- (plantuml-mode ormolu proof-general gnuplot-mode graphviz-dot-mode powershell rainbow-delimiters lsp-haskell lsp-ui lsp-mode typo typopunct ess dockerfile-mode org-mu4e mu4e org-mime ag magit expand-region company-go go-autocomplete go-complete go-mode go company-coq helm-core helm helm-ag-r helm-company helm-git helm-google helm-hoogle helm-idris helm-ls-git markdown-mode multiple-cursors magit-gh-pulls intero flx-isearch flx-ido)))
- '(safe-local-variable-values
- (quote
- ((intero-targets "sensei:lib" "sensei:exe:sensei-exe" "sensei:test:sensei-test")
- (intero-targets "minilang:lib" "minilang:exe:mli" "minilang:test:minilang-test")
- (intero-targets "rex-api:lib" "rex-api:exe:rex-server" "rex-api:test:rex-tests")
- (intero-targets "pet-store:lib" "pet-store:exe:driver-petstore" "pet-store:exe:mock-petstore" "pet-store:test:tests" "pet-store-backend:lib" "pet-store-backend:exe:pet-store-server")
- (intero-targets "pet-store-backend:lib" "pet-store-backend:exe:pet-store-server" "pet-store-backend:test:runner")
- (intero-targets "rex-cli:lib" "rex-cli:exe:rex-cli" "rex-cli:test:rex-tests" "rex-contracts:lib" "rex-depgraph:lib" "rex-depgraph:test:rex-depgraph-tests" "rex-feeder:lib" "rex-feeder:test:rex-feeder-tests" "rex-tester:lib" "rex-tester:test:rex-tester-tests")
- (intero-targets "rex-depgraph:lib" "rex-depgraph:exe:rex-callgraph" "rex-depgraph:exe:rex-generator" "rex-depgraph:test:rex-depgraph-tests")
- (intero-targets "tents-and-trees:lib" "tents-and-trees:exe:tents-and-trees-exe" "tents-and-trees:test:tents-and-trees-test")
- (intero-targets "hpaie:lib" "hpaie:exe:assign-keys" "hpaie:exe:gen-ledger" "hpaie:test:hpaie-test")
- (intero-targets "circuit-breaker:lib" "circuit-breaker:exe:circuit-breaker" "circuit-breaker:test:circuit-breaker-test" "log-controller:lib" "log-controller:exe:control" "log-controller:test:log-controller-test" "one-log:lib" "one-log:exe:one-log-exe" "one-log:test:one-log-test" "pet-store:lib" "pet-store:exe:driver-petstore" "pet-store:exe:mock-petstore" "pet-store:test:tests" "pet-store-backend:lib" "pet-store-backend:exe:pet-store-server")
- (time-stamp-active . t)
- (intero-targets "day7:exe:day7" "intcode:lib")
- (intero-targets "day7:exe:day7")
- (intero-targets "survey:lib" "survey:exe:quizz" "survey:test:survey-test")
- (intero-targets "haskell-sqlite:lib" "haskell-sqlite:exe:haskell-sqlite-exe" "haskell-sqlite:test:haskell-sqlite-test")
- (haskell-indentation-where-pre-offset . 4)
- (haskell-indentation-starter-offset . 4)
- (haskell-indentation-left-offset . 4)
- (haskell-indentation-layout-offset . 4)
- (haskell-indent-spaces . 4)
- (intero-targets "deptrack-core:lib" "deptrack-devops:lib" "deptrack-devops-examples:lib" "deptrack-devops-examples:exe:deptrack-devops-example-devbox" "deptrack-devops-recipes:lib")
- (intero-targets "sym-test:lib" "sym-test:exe:test-runner" "sym-test:test:tasty" "txe:lib" "txe:exe:humanize" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "sym-client:lib" "sym-client:test:tasty" "sym-test:lib" "sym-test:exe:test-runner" "sym-test:test:tasty")
- (intero-targets "sym-client:lib" "sym-test:lib" "sym-test:exe:test-runner" "sym-test:test:tasty")
- (intero-targets "sym-client:lib" "sym-core:lib" "sym-test:lib" "sym-test:exe:test-runner" "sym-test:test:tasty")
- (intero-targets "sym-client:lib" "sym-core:lib" "sym-crypto:lib" "sym-test:lib" "sym-test:exe:test-runner" "sym-test:test:tasty")
- (intero-targets "sym-client:lib" "sym-core:lib" "txe:lib")
- (intero-targets "sym-client:lib" "txe:lib")
- (intero-targets "sym-client:lib" "sym-crypto:lib" "sym-http:lib" "sym-logging:lib" "sym-test:lib" "sym-test:exe:test-runner" "sym-test:test:tasty" "sym-util:lib" "txe:lib")
- (intero-targets "sym-logging:lib" "sym-logging:test:tasty" "txe:lib" "txe:exe:humanize" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "sym-test:lib" "sym-test:exe:test-runner" "sym-test:test:tasty")
- (intero-targets "sym-client:lib" "sym-client:exe:contract" "sym-client:test:tasty" "sym-test:lib" "sym-test:exe:test-smartlog" "sym-test:test:tasty" "sym-util:lib" "sym-util:test:tasty" "txe:lib" "txe:exe:humanize" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "sym-client:lib" "sym-client:exe:contract" "sym-client:test:tasty" "sym-test:lib" "sym-test:exe:test-smartlog" "sym-test:test:tasty" "sym-util:lib" "sym-util:test:tasty")
- (intero-targets "sym-client:lib" "sym-client:test:tasty" "txe:lib" "txe:exe:humanize" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "sym-client:lib" "sym-client:test:tasty" "sym-util:lib" "sym-util:test:tasty" "txe:lib" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "sym-client:lib" "sym-client:test:contract" "sym-client:test:tasty" "sym-util:lib" "sym-util:test:tasty")
- (intero-targets "sym-client:lib" "sym-client:test:tasty" "sym-util:lib" "sym-util:test:tasty")
- (intero-targets "sym-util:lib" "sym-util:test:tasty" "txe:lib" "txe:exe:humanize" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "txe:lib" "txe:exe:humanize" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "sym-http:lib" "sym-http:test:tasty")
- (intero-targets "sym-http:lib" "sym-http:test:tasty" "sym-logging:lib" "sym-logging:test:tasty" "sym-util:lib" "sym-util:test:tasty" "txe:lib" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "sym-client:lib" "sym-client:test:tasty" "sym-http:lib" "sym-http:test:tasty" "sym-logging:lib" "sym-logging:test:tasty" "sym-util:lib" "sym-util:test:tasty" "txe:lib" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "sym-client:lib" "sym-client:test:tasty" "sym-test:lib" "sym-test:exe:test-smartlog" "sym-test:test:tasty" "sym-util:lib" "sym-util:test:tasty")
- (intero-targets "sym-client:lib" "sym-client:test:tasty" "sym-test:lib" "sym-test:exe:test-smartlog" "sym-test:test:tasty")
- (intero-targets "sym-logging:lib" "sym-logging:test:tasty" "sym-util:lib" "sym-util:test:tasty")
- (coq-prog-args "-emacs" "-R" "/Users/arnaud/projects/cpdt/src" "Cpdt")
- (coq-prog-args "-emacs" "-R" "src" "Cpdt")
- (intero-targets "sym-cli:lib" "sym-test:lib" "sym-test:exe:test-smartlog" "sym-test:test:tasty" "txe:lib")
- (intero-targets "foo:lib" "foo:exe:foo-cli" "foo:exe:foo-service" "foo:test:tasty")
- (haskell-stylish-on-save)
- (stylish-haskell-on-save)
- (intero-targets "sym-cli:lib" "sym-cli:exe:symbiont" "sym-cli:test:tasty" "sym-http:lib" "sym-http:test:tasty" "sym-logging:lib" "sym-util:lib" "sym-util:test:tasty")
- (intero-targets "sym-cli:lib" "sym-test:lib" "sym-test:exe:test-assembly" "sym-test:test:tasty" "txe:lib")
- (intero-targets "sym-logging:lib" "sym-logging:test:tasty" "sym-util:lib" "sym-util:test:tasty" "txe:lib" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "sym-proto:lib" "sym-proto:test:tasty")
- (intero-targets "sym-util:lib" "sym-util:test:tasty" "txe:lib" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "sym-logging:lib" "sym-logging:test:tasty" "txe:lib" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "txe:lib" "txe:exe:txe" "txe:test:tasty")
- (intero-targets "sym-crypto:lib" "sym-logging:lib" "sym-test:lib" "sym-test:exe:test-assembly" "sym-test:test:tasty" "sym-util:lib" "txe:lib")))))
-(custom-set-faces
- ;; custom-set-faces was added by Custom.
- ;; If you edit it by hand, you could mess it up, so be careful.
- ;; Your init file should contain only one such instance.
- ;; If there is more than one, they won't work right.
- )
-
-
-;; https://github.com/atykhonov/google-translate
-(require 'google-translate)
-(require 'google-translate-default-ui)
-(global-set-key "\C-ct" 'google-translate-at-point)
-(global-set-key "\C-cT" 'google-translate-query-translate)
-
;; Python
;; requires (package-install 'elpy)
;; https://github.com/jorgenschaefer/elpy
+(use-package elpy
+ :ensure t)
(elpy-enable)
;; Idris
;; development mode
-(add-to-list 'load-path (concat (getenv "HOME") "/projects/idris/idris-mode"))
-(require 'idris-mode)
+(use-package prop-menu
+ :ensure t)
+
+(add-to-list 'load-path (concat (getenv "HOME") "/projects/idris/idris2-mode"))
+(require 'idris2-mode)
;; projectile
-(require 'projectile)
+(use-package projectile
+ :ensure t)
(define-key projectile-mode-map (kbd "s-p") 'projectile-command-map)
(define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)
(projectile-mode +1)
@@ -422,27 +427,68 @@
(define-key js-mode-map (kbd "M-.") nil)
(add-hook 'js2-mode-hook (lambda ()
- (add-hook 'xref-backend-functions #'xref-js2-xref-backend nil t)))
+ (add-hook 'xref-backend-functions #'xref-js2-xref-backend nil t)))
-(use-package typescript-mode
- :ensure t)
-(use-package ansi-color
- :ensure t)
(defun colorize-compilation-buffer ()
(ansi-color-apply-on-region compilation-filter-start (point-max)))
(add-hook 'compilation-filter-hook 'colorize-compilation-buffer)
-(use-package web-mode
- :ensure t)
+(use-package tide
+ :ensure t)
+
+(defun setup-tide-mode ()
+ (interactive)
+ (tide-setup)
+ (flycheck-mode +1)
+ (setq flycheck-check-syntax-automatically '(save mode-enabled))
+ (eldoc-mode +1)
+ (tide-hl-identifier-mode +1)
+ ;; company is an optional dependency. You have to
+ ;; install it separately via package-install
+ ;; `M-x package-install [ret] company`
+ (company-mode +1))
+
+;; aligns annotation to the right hand side
+(setq company-tooltip-align-annotations t)
+
+;; formats the buffer before saving
+(add-hook 'before-save-hook 'tide-format-before-save)
+
+(add-hook 'typescript-mode-hook #'setup-tide-mode)
+
+(add-hook 'js2-mode-hook #'setup-tide-mode)
+(add-hook 'js-mode-hook #'setup-tide-mode)
+(add-hook 'js2-mode-hook
+ #'(lambda ()
+ (define-key js2-mode-map "\C-ci" 'js-doc-insert-function-doc)
+ (define-key js2-mode-map "@" 'js-doc-insert-tag)))
+
+;; configure javascript-tide checker to run after your default javascript checker
+(flycheck-add-next-checker 'javascript-eslint 'javascript-tide 'append)
+(require 'web-mode)
+(add-to-list 'auto-mode-alist '("\\.jsx\\'" . web-mode))
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode))
(add-hook 'web-mode-hook
(lambda ()
+ (when (string-equal "jsx" (file-name-extension buffer-file-name))
+ (setup-tide-mode))))
+(add-hook 'web-mode-hook
+ (lambda ()
(when (string-equal "tsx" (file-name-extension buffer-file-name))
(setup-tide-mode))))
-
-;; enable typescript-tslint checker
+;; configure jsx-tide checker to run after your default jsx checker
+(flycheck-add-mode 'javascript-eslint 'web-mode)
(flycheck-add-mode 'typescript-tslint 'web-mode)
+(flycheck-add-next-checker 'javascript-eslint 'jsx-tide 'append)
+
+(use-package tide
+ :ensure t
+ :after (typescript-mode company flycheck)
+ :hook ((typescript-mode . tide-setup)
+ (typescript-mode . tide-hl-identifier-mode)
+ (before-save . tide-format-before-save)))
+
;; supports .editorconfig file in project
(use-package editorconfig
:ensure t
@@ -500,21 +546,21 @@
;; <tab> to navigate to links, <RET> to open them in browser
(add-hook 'mu4e-view-mode-hook
(lambda()
-;; try to emulate some of the eww key-bindings
-(local-set-key (kbd "<RET>") 'mu4e~view-browse-url-from-binding)
-(local-set-key (kbd "<tab>") 'shr-next-link)
-(local-set-key (kbd "<backtab>") 'shr-previous-link)))
+ ;; try to emulate some of the eww key-bindings
+ (local-set-key (kbd "<RET>") 'mu4e~view-browse-url-from-binding)
+ (local-set-key (kbd "<tab>") 'shr-next-link)
+ (local-set-key (kbd "<backtab>") 'shr-previous-link)))
;; from https://www.reddit.com/r/emacs/comments/bfsck6/mu4e_for_dummies/elgoumx
-(add-hook 'mu4e-headers-mode-hook
- (defun my/mu4e-change-headers ()
- (interactive)
- (setq mu4e-headers-fields
- `((:human-date . 25) ;; alternatively, use :date
- (:flags . 6)
- (:from . 22)
- (:thread-subject . ,(- (window-body-width) 70)) ;; alternatively, use :subject
- (:size . 7)))))
+;; (add-hook 'mu4e-headers-mode-hook
+;; (defun my/mu4e-change-headers ()
+;; (interactive)
+;; (setq mu4e-headers-fields
+;; `((:human-date . 25) ;; alternatively, use :date
+;; (:flags . 6)
+;; (:from . 22)
+;; (:thread-subject . ,(- (window-body-width) 70)) ;; alternatively, use :subject
+;; (:size . 7)))))
;; if you use date instead of human-date in the above, use this setting
;; give me ISO(ish) format date-time stamps in the header list
@@ -550,8 +596,9 @@
;; convert org mode to HTML automatically
(setq org-mu4e-convert-to-html t)
-(define-key mu4e-headers-mode-map (kbd "C-c c") 'org-mu4e-store-and-capture)
-(define-key mu4e-view-mode-map (kbd "C-c c") 'org-mu4e-store-and-capture)
+(setq org-mu4e-link-query-in-headers-mode nil)
+(define-key mu4e-headers-mode-map (kbd "C-c c") 'mu4e-org-store-and-capture)
+(define-key mu4e-view-mode-map (kbd "C-c c") 'mu4e-org-store-and-capture)
;;from vxlabs config
;; show full addresses in view message (instead of just names)
@@ -590,18 +637,69 @@
(message-send-mail-function . smtpmail-send-it)
(smtpmail-smtp-user . "abailly@palo-it.com")
(smtpmail-starttls-credentials . (("smtp.gmail.com" 587 nil nil)))
- (smtpmail-auth-credentials . (expand-file-name "~/.authinfo.gpg"))
+ (smtpmail-auth-credentials . (expand-file-name "~/.authinfo.palo.gpg"))
(smtpmail-default-smtp-server . "smtp.gmail.com")
(smtpmail-smtp-server . "smtp.gmail.com")
(smtpmail-smtp-service . 587)
(smtpmail-debug-info . t)
(smtpmail-debug-verbose . t)
(mu4e-maildir-shortcuts . ( ("/palo-it-gmail/INBOX" . ?i)
- ("/palo-it-gmail/[palo-it].Sent Mail" . ?s)
- ("/palo-it-gmail/[palo-it].Bin" . ?t)
- ("/palo-it-gmail/[palo-it].All Mail" . ?a)
- ("/palo-it-gmail/[palo-it].Starred" . ?r)
- ("/palo-it-gmail/[palo-it].drafts" . ?d)
+ ))))
+ (make-mu4e-context
+ :name "Plus" ;;email plus
+ :enter-func (lambda () (mu4e-message "Entering context plus"))
+ :leave-func (lambda () (mu4e-message "Leaving context plus"))
+ :match-func (lambda (msg)
+ (when msg
+ (mu4e-message-contact-field-matches
+ msg '(:from :to :cc :bcc) "arnaud@plusplatform.io")))
+ :vars '((user-mail-address . "arnaud@plusplatform.io")
+ (user-full-name . "Arnaud Bailly")
+ (mu4e-sent-folder . "/plus-gmail/[plus].Sent Mail")
+ (mu4e-drafts-folder . "/plus-gmail/[plus].drafts")
+ (mu4e-trash-folder . "/plus-gmail/[plus].Bin")
+ (mu4e-compose-signature . (concat "Arnaud Bailly\n"
+ "Chief Architect\n"))
+ (mu4e-compose-format-flowed . t)
+ (smtpmail-queue-dir . "~/Maildir/plus-gmail/queue/cur")
+ (message-send-mail-function . smtpmail-send-it)
+ (smtpmail-smtp-user . "arnaud@plusplatform.io")
+ (smtpmail-starttls-credentials . (("smtp.gmail.com" 587 nil nil)))
+ (smtpmail-auth-credentials . (expand-file-name "~/.authinfo.plus.gpg"))
+ (smtpmail-default-smtp-server . "smtp.gmail.com")
+ (smtpmail-smtp-server . "smtp.gmail.com")
+ (smtpmail-smtp-service . 587)
+ (smtpmail-debug-info . t)
+ (smtpmail-debug-verbose . t)
+ (mu4e-maildir-shortcuts . ( ("/plus-gmail/INBOX" . ?l)
+ ))))
+ (make-mu4e-context
+ :name "perso" ;;email perso
+ :enter-func (lambda () (mu4e-message "Entering context perso"))
+ :leave-func (lambda () (mu4e-message "Leaving context perso"))
+ :match-func (lambda (msg)
+ (when msg
+ (mu4e-message-contact-field-matches
+ msg '(:from :to :cc :bcc) "arnaud.oqube@gmail.com")))
+ :vars '((user-mail-address . "arnaud.oqube@gmail.com")
+ (user-full-name . "Arnaud Bailly")
+ (mu4e-sent-folder . "/perso-gmail/[perso].Sent Mail")
+ (mu4e-drafts-folder . "/perso-gmail/[perso].drafts")
+ (mu4e-trash-folder . "/perso-gmail/[perso].Bin")
+ (mu4e-compose-signature . (concat "Arnaud Bailly\n"
+ "[Emacs 25, org-mode 9, mu4e 1.0]\n"))
+ (mu4e-compose-format-flowed . t)
+ (smtpmail-queue-dir . "~/Maildir/perso-gmail/queue/cur")
+ (message-send-mail-function . smtpmail-send-it)
+ (smtpmail-smtp-user . "arnaud.oqube@gmail.com")
+ (smtpmail-starttls-credentials . (("smtp.gmail.com" 587 nil nil)))
+ (smtpmail-auth-credentials . (expand-file-name "~/.authinfo.gpg"))
+ (smtpmail-default-smtp-server . "smtp.gmail.com")
+ (smtpmail-smtp-server . "smtp.gmail.com")
+ (smtpmail-smtp-service . 587)
+ (smtpmail-debug-info . t)
+ (smtpmail-debug-verbose . t)
+ (mu4e-maildir-shortcuts . ( ("/perso-gmail/INBOX" . ?p)
))))
(make-mu4e-context
:name "solina"
@@ -638,87 +736,65 @@
(smtpmail-smtp-service . 587)
(smtpmail-debug-info . t)
(smtpmail-debug-verbose . t)
- (mu4e-maildir-shortcuts . ( ("/solina-gmail/INBOX" . ?i)
- ("/solina-gmail/[solina].Sent Mail" . ?s)
- ("/solina-gmail/[solina].Bin" . ?t)
- ("/solina-gmail/[solina].All Mail" . ?a)
- ("/solina-gmail/[solina].Starred" . ?r)
- ("/solina-gmail/[solina].drafts" . ?d)
+ (mu4e-maildir-shortcuts . ( ("/solina-gmail/INBOX" . ?s)
))))
- ;; (make-mu4e-context
- ;; :name "personal" ;;for acc2-gmail
- ;; :enter-func (lambda () (mu4e-message "Entering context personal"))
- ;; :leave-func (lambda () (mu4e-message "Leaving context personal"))
- ;; :match-func (lambda (msg)
- ;; (when msg
- ;; (mu4e-message-contact-field-matches
- ;; msg '(:from :to :cc :bcc) "acc2@gmail.com")))
- ;; :vars '((user-mail-address . "acc2@gmail.com")
- ;; (user-full-name . "User Account2")
- ;; (mu4e-sent-folder . "/acc2-gmail/[acc2].Sent Mail")
- ;; (mu4e-drafts-folder . "/acc2-gmail/[acc2].drafts")
- ;; (mu4e-trash-folder . "/acc2-gmail/[acc2].Trash")
- ;; (mu4e-compose-signature . (concat "Informal Signature\n" "Emacs is awesome!\n"))
- ;; (mu4e-compose-format-flowed . t)
- ;; (smtpmail-queue-dir . "~/Maildir/acc2-gmail/queue/cur")
- ;; (message-send-mail-function . smtpmail-send-it)
- ;; (smtpmail-smtp-user . "acc2")
- ;; (smtpmail-starttls-credentials . (("smtp.gmail.com" 587 nil nil)))
- ;; (smtpmail-auth-credentials . (expand-file-name "~/.authinfo.gpg"))
- ;; (smtpmail-default-smtp-server . "smtp.gmail.com")
- ;; (smtpmail-smtp-server . "smtp.gmail.com")
- ;; (smtpmail-smtp-service . 587)
- ;; (smtpmail-debug-info . t)
- ;; (smtpmail-debug-verbose . t)
- ;; (mu4e-maildir-shortcuts . ( ("/acc2-gmail/INBOX" . ?i)
- ;; ("/acc2-gmail/[acc2].Sent Mail" . ?s)
- ;; ("/acc2-gmail/[acc2].Trash" . ?t)
- ;; ("/acc2-gmail/[acc2].All Mail" . ?a)
- ;; ("/acc2-gmail/[acc2].Starred" . ?r)
- ;; ("/acc2-gmail/[acc2].drafts" . ?d)
- ;; )
))
-;; gpg
-;; from https://github.com/kensanata/ggg#mac
-(defun gpg-restart-agent ()
- "This kills and restarts the gpg-agent.
+;; mu4e goodies
+;; https://github.com/panjie/mu4e-goodies
+(add-to-list 'load-path (concat (getenv "HOME") "/.emacs.d/mu4e-goodies"))
+(require 'mu4e-goodies)
-To kill gpg-agent, we use killall. If you know that the agent is
-OK, you should just reload the environment file using
-`gpg-reload-agent-info'."
- (interactive)
- (shell-command "killall gpg-agent")
- (shell-command "gpg-agent --daemon --enable-ssh-support --write-env-file")
- ;; read the environment file instead of parsing the output
- (gpg-reload-agent-info))
+(defun my-contact-processor (contact)
+ (cond
+ ((string-match "paysdeloire.fr" contact)
+ (replace-regexp-in-string "paysdeloire.fr" "paysdelaloire.fr" contact))
+ (t contact)))
-(defun gpg-reload-agent-info ()
- "Reload the ~/.gpg-agent-info file."
- (interactive)
- (let ((file (expand-file-name "~/.gpg-agent-info")))
- (when (file-readable-p file)
- (with-temp-buffer
- (insert-file-contents file)
- (goto-char (point-min))
- (while (re-search-forward "\\([A-Z_]+\\)=\\(.*\\)" nil t)
- (setenv (match-string 1) (match-string 2)))))))
-
-(defun gpg-agent-startup ()
- "Initialize the gpg-agent if necessary.
-
-Note that sometimes the gpg-agent can be up and running and still
-be useless, in which case you should restart it using
-`gpg-restart-agent'."
- (gpg-reload-agent-info)
- (let ((pid (getenv "SSH_AGENT_PID")))
- (when (and (fboundp 'list-system-processes)
- (or (not pid)
- (not (member (string-to-number pid)
- (list-system-processes)))))
- (gpg-restart-agent))))
-
-(gpg-agent-startup)
+(setq mu4e-contact-process-function 'my-contact-processor)
+
+;; (start-process-shell-command "test-mu4e" "test-mu4e"
+;; mu4e-get-mail-command)
+;; gpg
+;; from https://github.com/kensanata/ggg#mac
+;; (defun gpg-restart-agent ()
+;; "This kills and restarts the gpg-agent.
+
+;; To kill gpg-agent, we use killall. If you know that the agent is
+;; OK, you should just reload the environment file using
+;; `gpg-reload-agent-info'."
+;; (interactive)
+;; (shell-command "killall gpg-agent")
+;; (shell-command "gpg-agent --daemon --enable-ssh-support --write-env-file")
+;; ;; read the environment file instead of parsing the output
+;; (gpg-reload-agent-info))
+
+;; (defun gpg-reload-agent-info ()
+;; "Reload the ~/.gpg-agent-info file."
+;; (interactive)
+;; (let ((file (expand-file-name "~/.gpg-agent-info")))
+;; (when (file-readable-p file)
+;; (with-temp-buffer
+;; (insert-file-contents file)
+;; (goto-char (point-min))
+;; (while (re-search-forward "\\([A-Z_]+\\)=\\(.*\\)" nil t)
+;; (setenv (match-string 1) (match-string 2)))))))
+
+;; (defun gpg-agent-startup ()
+;; "Initialize the gpg-agent if necessary.
+
+;; Note that sometimes the gpg-agent can be up and running and still
+;; be useless, in which case you should restart it using
+;; `gpg-restart-agent'."
+;; (gpg-reload-agent-info)
+;; (let ((pid (getenv "SSH_AGENT_PID")))
+;; (when (and (fboundp 'list-system-processes)
+;; (or (not pid)
+;; (not (member (string-to-number pid)
+;; (list-system-processes)))))
+;; (gpg-restart-agent))))
+
+;; (gpg-agent-startup)
(require 'go-mode)
@@ -734,6 +810,7 @@ be useless, in which case you should restart it using
(add-to-list 'auto-mode-alist '("\\.sr.*\\'" . powerbuilder-mode))
;; kill all cal-* buffers
+;; inspired by https://www.emacswiki.org/emacs/KillingBuffers#toc3
(defun kill-cal-buffers ()
(interactive)
(mapc (lambda (buffer)
@@ -743,4 +820,82 @@ be useless, in which case you should restart it using
(message "Killed buffer %s" buf))))
(buffer-list)))
-(global-set-key (kbd "C-x C-C") 'kill-cal-buffers)
+(global-set-key (kbd "C-x C-S-C") 'kill-cal-buffers)
+
+;; elegance, from https://github.com/rougier/elegant-emacs
+;; requires installing Roboto Mono and Fira Code fonts
+(save-place-mode 1)
+(load-file "/Users/arnaud/.emacs.d/elegance.el")
+
+;; CRUX
+;; https://github.com/bbatsov/crux
+(recentf-mode 1)
+
+(use-package crux
+ :ensure t
+ :bind (([remap move-beginning-of-line] . crux-move-beginning-of-line)
+ ("C-c o" . crux-open-with)
+ ("C-c f" . crux-recentf-find-file)
+ ("C-c D" . crux-delete-file-and-buffer)
+ ("C-c I" . crux-find-user-init-file)
+ ([(shift return)] . crux-smart-open-line)
+ ("s-r" . crux-recentf-find-file)
+ ("C-<backspace>" . crux-kill-line-backwards)
+ ([remap kill-whole-line] . crux-kill-whole-line)))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; https://www.emacswiki.org/emacs/InsertFileName
+(defun bjm/insert-file-name (filename &optional args)
+ "Insert name of file FILENAME into buffer after point.
+
+ Prefixed with \\[universal-argument], expand the file name to
+ its fully canocalized path. See `expand-file-name'.
+
+ Prefixed with \\[negative-argument], use relative path to file
+ name from current directory, `default-directory'. See
+ `file-relative-name'.
+
+ The default with no prefix is to insert the file name exactly as
+ it appears in the minibuffer prompt."
+ ;; Based on insert-file in Emacs -- ashawley 20080926
+ (interactive "*fInsert file name: \nP")
+ (cond ((eq '- args)
+ (insert (expand-file-name filename)))
+ ((not (null args))
+ (insert filename))
+ (t
+ (insert (file-relative-name filename)))))
+
+;; bind it
+(global-set-key (kbd "C-c b i") 'bjm/insert-file-name)
+
+;; https://blog.sulami.xyz/posts/literate-calc-mode/
+;; couldn't resist trying this
+(use-package literate-calc-mode
+ :ensure t)
+
+(use-package outshine
+ :init (add-hook 'haskell-mode-hook
+ (lambda ()
+ (set (make-local-variable 'outline-regexp)
+ "-- \\*+")
+ (outline-minor-mode)))
+ :ensure t)
+(custom-set-variables
+ ;; custom-set-variables was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(custom-safe-themes
+ '("4bca89c1004e24981c840d3a32755bf859a6910c65b829d9441814000cf6c3d0" "e6ff132edb1bfa0645e2ba032c44ce94a3bd3c15e3929cdf6c049802cf059a2a" "99ea831ca79a916f1bd789de366b639d09811501e8c092c85b2cb7d697777f93" default))
+ '(package-selected-packages
+ '(powershell yaml-mode xref-js2 web-mode use-package tide terraform-mode srv rainbow-delimiters prop-menu projectile plantuml-mode outshine org-roam-server org-mime magit lsp-ui lsp-haskell literate-calc-mode js2-refactor js-doc intero helm graphviz-dot-mode go-mode go gnuplot-mode fsm folding fira-code-mode feature-mode expand-region ess elpy elm-mode elfeed eglot editorconfig dotnet doom-themes dockerfile-mode csharp-mode crux ag adoc-mode))
+ '(safe-local-variable-values
+ '((intero-targets "hpaie:lib" "hpaie:exe:assign-keys" "hpaie:exe:gen-ledger" "hpaie:test:hpaie-test"))))
+(custom-set-faces
+ ;; custom-set-faces was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ )
diff --git a/import.itermkeymap b/import.itermkeymap
new file mode 100644
index 0000000..d358083
--- /dev/null
+++ b/import.itermkeymap
@@ -0,0 +1,108 @@
+{
+ "Key Mappings": {
+ "0x61-0x100000": {
+ "Text": "[1;Pa",
+ "Action": 10
+ },
+ "0x62-0x100000": {
+ "Text": "[1;Pb",
+ "Action": 10
+ },
+ "0x63-0x100000": {
+ "Text": "[1;Pc",
+ "Action": 10
+ },
+ "0x64-0x100000": {
+ "Text": "[1;Pd",
+ "Action": 10
+ },
+ "0x65-0x100000": {
+ "Text": "[1;Pe",
+ "Action": 10
+ },
+ "0x66-0x100000": {
+ "Text": "[1;Pf",
+ "Action": 10
+ },
+ "0x67-0x100000": {
+ "Text": "[1;Pg",
+ "Action": 10
+ },
+ "0x68-0x100000": {
+ "Text": "[1;Ph",
+ "Action": 10
+ },
+ "0x69-0x100000": {
+ "Text": "[1;Pi",
+ "Action": 10
+ },
+ "0x6A-0x100000": {
+ "Text": "[1;Pj",
+ "Action": 10
+ },
+ "0x6B-0x100000": {
+ "Text": "[1;Pk",
+ "Action": 10
+ },
+ "0x6C-0x100000": {
+ "Text": "[1;Pl",
+ "Action": 10
+ },
+ "0x6D-0x100000": {
+ "Text": "[1;Pm",
+ "Action": 10
+ },
+ "0x6E-0x100000": {
+ "Text": "[1;Pn",
+ "Action": 10
+ },
+ "0x6F-0x100000": {
+ "Text": "[1;Po",
+ "Action": 10
+ },
+ "0x70-0x100000": {
+ "Text": "[1;Pp",
+ "Action": 10
+ },
+ "0x71-0x100000": {
+ "Text": "[1;Pq",
+ "Action": 10
+ },
+ "0x72-0x100000": {
+ "Text": "[1;Pr",
+ "Action": 10
+ },
+ "0x73-0x100000": {
+ "Text": "[1;Ps",
+ "Action": 10
+ },
+ "0x74-0x100000": {
+ "Text": "[1;Pt",
+ "Action": 10
+ },
+ "0x75-0x100000": {
+ "Text": "[1;Pu",
+ "Action": 10
+ },
+ "0x76-0x100000": {
+ "Text": "[1;Pv",
+ "Action": 10
+ },
+ "0x77-0x100000": {
+ "Text": "[1;Pw",
+ "Action": 10
+ },
+ "0x78-0x100000": {
+ "Text": "[1;Px",
+ "Action": 10
+ },
+ "0x79-0x100000": {
+ "Text": "[1;Py",
+ "Action": 10
+ },
+ "0x7A-0x100000": {
+ "Text": "[1;Pz",
+ "Action": 10
+ }
+ }
+}