diff options
-rw-r--r-- | +bindings.el | 44 | ||||
-rw-r--r-- | config.el | 297 | ||||
-rw-r--r-- | init.el | 214 | ||||
-rw-r--r-- | packages.el | 17 | ||||
-rw-r--r-- | snippets/haskell-mode/header | 3 | ||||
-rw-r--r-- | snippets/haskell-mode/module | 8 | ||||
-rw-r--r-- | snippets/haskell-mode/test-module | 5 | ||||
-rw-r--r-- | snippets/org-mode/source-block | 8 | ||||
-rw-r--r-- | splitjoin.el | 2 |
9 files changed, 436 insertions, 162 deletions
diff --git a/+bindings.el b/+bindings.el index 6609c9010c72..bfb40424b3d4 100644 --- a/+bindings.el +++ b/+bindings.el @@ -1,6 +1,6 @@ ;; private/grfn/+bindings.el -*- lexical-binding: t; -*- -(load! utils) +(load! "utils") (require 'f) (defmacro find-file-in! (path &optional project-p) @@ -63,7 +63,7 @@ (forward-sexp) (insert " ")) -(load! splitjoin) +(load! "splitjoin") (defun +hlissner/install-snippets () "Install my snippets from https://github.com/hlissner/emacs-snippets into @@ -89,7 +89,7 @@ private/hlissner/snippets." projectile-require-project-root projectile-cached-buffer-file-name projectile-cached-project-root) - (call-interactively (command-remapping #'projectile-find-file)))) + (call-interactively #'projectile-find-file))) (defun ,(intern (format "+hlissner/browse-%s" name)) () (interactive) (let ((default-directory ,dir)) @@ -346,7 +346,8 @@ private/hlissner/snippets." :desc "Slack IM" :n "i" #'slack-im-select :desc "Slack Channel" :n "c" #'slack-channel-select - :desc "Slack Unreads" :n "u" #'slack-channel-select + :desc "Slack Group" :n "g" #'slack-group-select + :desc "Slack Unreads" :n "u" #'slack-select-unread-rooms ;; applications :desc "APP: elfeed" :n "E" #'=rss @@ -1015,12 +1016,35 @@ private/hlissner/snippets." (get-buffer-process (current-buffer)) "main"))) +(defun grfn/run-sputnik-test-for-file () + (interactive) + (haskell-interactive-mode-)) + (map! (:map haskell-mode-map - :n "K" 'intero-info - :n "g d" 'intero-goto-definition - :n "g SPC" 'intero-repl-load - :n "g \\" 'intero-repl - :n "g y" 'intero-type-at - :n "gET" 'grfn/intero-run-main)) + :n "K" 'lsp-info-under-point + :n "g d" 'lsp-ui-peek-find-definitions + :n "g r" 'lsp-ui-peek-find-references + ;; :n "g SPC" 'intero-repl-load + :n "g \\" '+haskell/repl + ;; :n "g y" 'intero-type-at + ;; :n "g RET" 'grfn/run-sputnik-test-for-file + + (:localleader + :desc "Apply action" :n "a" 'lsp-execute-code-action + :desc "Rename symbol" :n "r" 'lsp-rename)) + + (:after agda2-mode + (:map agda2-mode-map + :n "g SPC" 'agda2-load + :n "g d" 'agda2-goto-definition-keyboard + :n "] g" 'agda2-next-goal + :n "[ g" 'agda2-previous-goal + + (:localleader + :desc "Give" :n "SPC" 'agda2-give + :desc "Refine" :n "r" 'agda2-refine + :desc "Auto" :n "a" 'agda2-auto + :desc "Goal type and context" :n "t" 'agda2-goal-and-context + :desc "Goal type and context and inferred" :n ";" 'agda2-goal-and-context-and-inferred)))) diff --git a/config.el b/config.el index c30b8f2bc238..1646314ab712 100644 --- a/config.el +++ b/config.el @@ -1,14 +1,15 @@ ;;; private/grfn/config.el -*- lexical-binding: t; -*- + (defvar +grfn-dir (file-name-directory load-file-name)) (defvar +grfn-snippets-dir (expand-file-name "snippets/" +grfn-dir)) ;; (when (featurep! :feature evil) - (load! +bindings) - (load! +commands)) + (load! "+bindings") + (load! "+commands")) -(load! +private) +(load! "+private") (require 'dash) @@ -52,11 +53,6 @@ (append (list '+grfn-snippets-dir) (delq 'yas-installed-snippets-dir yas-snippet-dirs)))) -;; completion/helm -(after! helm - ;; Hide header lines in helm. I don't like them - (set-face-attribute 'helm-source-header nil :height 0.1)) - (after! company (setq company-idle-delay 0.2 company-minimum-prefix-length 1)) @@ -96,6 +92,51 @@ ;; Should really figure out which of these is correct, eventually +(setq +solarized-s-base03 "#002b36" + +solarized-s-base02 "#073642" + ;; emphasized content + +solarized-s-base01 "#586e75" + ;; primary content + +solarized-s-base00 "#657b83" + +solarized-s-base0 "#839496" + ;; comments + +solarized-s-base1 "#93a1a1" + ;; background highlight light + +solarized-s-base2 "#eee8d5" + ;; background light + +solarized-s-base3 "#fdf6e3" + + ;; Solarized accented colors + +solarized-yellow "#b58900" + +solarized-orange "#cb4b16" + +solarized-red "#dc322f" + +solarized-magenta "#d33682" + +solarized-violet "#6c71c4" + +solarized-blue "#268bd2" + +solarized-cyan "#2aa198" + +solarized-green "#859900" + + ;; Darker and lighter accented colors + ;; Only use these in exceptional circumstances! + +solarized-yellow-d "#7B6000" + +solarized-yellow-l "#DEB542" + +solarized-orange-d "#8B2C02" + +solarized-orange-l "#F2804F" + +solarized-red-d "#990A1B" + +solarized-red-l "#FF6E64" + +solarized-magenta-d "#93115C" + +solarized-magenta-l "#F771AC" + +solarized-violet-d "#3F4D91" + +solarized-violet-l "#9EA0E5" + +solarized-blue-d "#00629D" + +solarized-blue-l "#69B7F0" + +solarized-cyan-d "#00736F" + +solarized-cyan-l "#69CABF" + +solarized-green-d "#546E00" + +solarized-green-l "#B4C342") + +(set-cursor-color +solarized-s-base02) + (after! doom-theme (set-face-foreground 'font-lock-doc-face +solarized-s-base1) (set-face-foreground 'org-block +solarized-s-base00) @@ -149,7 +190,7 @@ org-tags-column -130 org-ellipsis "⤵" org-capture-templates - '(("t" "Todo" entry + `(("t" "Todo" entry (file+headline +org-default-todo-file "Inbox") "* TODO %?\n%i" :prepend t :kill-buffer t) @@ -157,13 +198,17 @@ (file+headline +org-default-notes-file "Inbox") "* %u %?\n%i" :prepend t :kill-buffer t)) org-deadline-warning-days 1 - org-agenda-skip-scheduled-if-deadline-is-shown 't) + org-agenda-skip-scheduled-if-deadline-is-shown 'todo + org-agenda-custom-commands + '(("p" "Sprint Tasks" tags-todo "sprint") + ("i" "Inbox" tags "inbox"))) (set-face-foreground 'org-block +solarized-s-base00) (add-hook! org-mode (add-hook! evil-normal-state-entry-hook #'org-align-all-tags)) (setf (alist-get 'file org-link-frame-setup) 'find-file-other-window) - (set-face-foreground 'org-block +solarized-s-base00)) + (set-face-foreground 'org-block +solarized-s-base00) + ) (after! magit (setq git-commit-summary-max-length 50) @@ -194,27 +239,31 @@ (let ((m-symbols '(("`mappend`" . "⊕") - ("<>" . "⊕")))) + ("<>" . "⊕") + ("`elem`" . "∈") + ("`notElem`" . "∉")))) (dolist (item m-symbols) (add-to-list 'haskell-font-lock-symbols-alist item))) (setq haskell-font-lock-symbols t) (add-hook! haskell-mode - (intero-mode) - (flycheck-add-next-checker - 'intero - 'haskell-hlint) - (set-fill-column 100)) + ;; (intero-mode) + (lsp-mode) + ;; (flycheck-add-next-checker + ;; 'intero + ;; 'haskell-hlint) + (set-fill-column 80) + (setq evil-shift-width 2)) ;; (load! org-clubhouse) (add-hook! org-mode #'org-clubhouse-mode) -(load! slack-snippets) +(load! "slack-snippets") (after! magit (require 'evil-magit) - (require 'magithub) + ;; (require 'magithub) ) ; (require 'auth-password-store) @@ -244,38 +293,40 @@ ;; https://github.com/alpaker/Fill-Column-Indicator/issues/67#issuecomment-195611974 -(add-hook 'prog-mode-hook #'fci-mode) -(after! fill-column-indicator - (add-hook 'prog-mode-hook #'fci-mode) - (defvar eos/fci-disabled nil) - (make-variable-buffer-local 'eos/fci-disabled) - - ;; Add a hook that disables fci if enabled when the window changes and it - ;; isn't wide enough to display it. - (defun eos/maybe-disable-fci () - (interactive) - ;; Disable FCI if necessary - (when (and fci-mode - (< (window-width) (or fci-rule-column fill-column))) - (fci-mode -1) - (setq-local eos/fci-disabled t)) - ;; Enable FCI if necessary - (when (and eos/fci-disabled - (eq fci-mode nil) - (> (window-width) (or fci-rule-column fill-column))) - (fci-mode 1) - (setq-local eos/fci-disabled nil))) - - (defun eos/add-fci-disabling-hook () - (interactive) - (add-hook 'window-configuration-change-hook - #'eos/maybe-disable-fci)) - - (add-hook 'prog-mode-hook #'eos/add-fci-disabling-hook)) +;; (add-hook 'prog-mode-hook #'fci-mode) +;; (after! fill-column-indicator +;; (add-hook 'prog-mode-hook #'fci-mode) +;; (defvar eos/fci-disabled nil) +;; (make-variable-buffer-local 'eos/fci-disabled) + +;; ;; Add a hook that disables fci if enabled when the window changes and it +;; ;; isn't wide enough to display it. +;; (defun eos/maybe-disable-fci () +;; (interactive) +;; ;; Disable FCI if necessary +;; (when (and fci-mode +;; (< (window-width) (or fci-rule-column fill-column))) +;; (fci-mode -1) +;; (setq-local eos/fci-disabled t)) +;; ;; Enable FCI if necessary +;; (when (and eos/fci-disabled +;; (eq fci-mode nil) +;; (> (window-width) (or fci-rule-column fill-column))) +;; (fci-mode 1) +;; (setq-local eos/fci-disabled nil))) + +;; (defun eos/add-fci-disabling-hook () +;; (interactive) +;; (add-hook 'window-configuration-change-hook +;; #'eos/maybe-disable-fci)) + +;; (add-hook 'prog-mode-hook #'eos/add-fci-disabling-hook)) ;;; Javascript +(require 'smartparens) + (setq js-indent-level 2) (require 'prettier-js) @@ -292,8 +343,32 @@ (flycheck-add-mode 'javascript-eslint 'flow-minor-mode) (flycheck-add-next-checker 'javascript-flow 'javascript-eslint)) + (require 'flow-minor-mode) +(remove-hook 'js2-mode-hook 'tide-setup t) + +(require 'company-flow) +(eval-after-load 'company + (lambda () (add-to-list 'company-backends 'company-flow))) +(defun flow/set-flow-executable () + (interactive) + (let* ((os (pcase system-type + ('darwin "osx") + ('gnu/linux "linux64") + (_ nil))) + (root (locate-dominating-file buffer-file-name "node_modules/flow-bin")) + (executable (car (file-expand-wildcards + (concat root "node_modules/flow-bin/*" os "*/flow"))))) + (setq-local company-flow-executable executable) + ;; These are not necessary for this package, but a good idea if you use + ;; these other packages + (setq-local flow-minor-default-binary executable) + (setq-local flycheck-javascript-flow-executable executable))) + +;; Set this to the mode you use, I use rjsx-mode +(add-hook 'rjsx-mode-hook #'flow/set-flow-executable t) + ;; Auto-format Haskell on save, with a combination of hindent + brittany @@ -352,8 +427,9 @@ (interactive) (magit-commit '("-m" "wip"))) -(magit-define-popup-action 'magit-commit-popup - ?W "WIP" 'magit-commit-wip) +(after! magit + (magit-define-popup-action 'magit-commit-popup + ?W "WIP" 'magit-commit-wip)) ;; (defun grfn/split-window-more-sensibly (&optional window) ;; (let ((window (or window (selected-window)))) @@ -375,35 +451,104 @@ ;; (with-selected-window window ;; (split-window-below)))))))) -;; (def-package! lsp-mode -;; :after (:any haskell-mode) -;; :config -;; (lsp-mode)) - -;; (def-package! lsp-ui -;; :after lsp-mode -;; :config -;; (setq lsp-ui-flycheck-enable t) -;; (setq imenu-auto-rescan t) -;; (set-face-background 'lsp-ui-doc-background +solarized-s-base2) -;; (set-face-background 'lsp-face-highlight-read +solarized-s-base2) -;; (set-face-background 'lsp-face-highlight-orite +solarized-s-base2) -;; :hook -;; (lsp-mode . lsp-ui-mode) -;; (lsp-ui-mode . flycheck-mode)) - -;; (def-package! company-lsp -;; :after (lsp-mode lsp-ui) -;; :config -;; (setq company-backends '(company-lsp)) -;; (setq company-lsp-async t)) - -;; (def-package! lsp-haskell -;; :after (lsp-mode lsp-ui haskell-mode) -;; :hook -;; (haskell-mode . lsp-haskell-enable)) +(def-package! lsp-mode + :after (:any haskell-mode) + :config + (lsp-mode) + (setq lsp-project-whitelist '("^/home/griffin/code/urb/grid/$") + lsp-response-timeout 60) + :hook + (haskell-mode . lsp-mode)) + +(def-package! lsp-ui + :after lsp-mode + :config + (setq lsp-ui-flycheck-enable t) + (setq imenu-auto-rescan t) + (set-face-background 'lsp-ui-doc-background +solarized-s-base2) + (set-face-background 'lsp-face-highlight-read +solarized-s-base2) + (set-face-background 'lsp-face-highlight-write +solarized-s-base2) + :hook + (lsp-mode . lsp-ui-mode) + (lsp-ui-mode . flycheck-mode)) + +(def-package! company-lsp + :after (lsp-mode lsp-ui) + :config + (setq company-backends '(company-lsp)) + (setq company-lsp-async t)) + +(def-package! lsp-haskell + :after (lsp-mode lsp-ui haskell-mode) + :hook + (haskell-mode . lsp-haskell-enable) + :config + (setq lsp-haskell-process-path-hie "/home/griffin/.local/bin/hie-wrapper")) + +(def-package! lsp-imenu + :after (lsp-mode lsp-ui) + :hook + (lsp-after-open . lsp-enable-imenu)) (def-package! evil-magit :after (magit)) (def-package! writeroom-mode) + +(def-package! graphql-mode) + +(require 'whitespace) +(setq whitespace-style '(face lines-tail)) +(global-whitespace-mode t) +(add-hook! 'org-mode-hook (lambda () (whitespace-mode -1))) + +(set-face-foreground 'whitespace-line +solarized-red) +(set-face-attribute 'whitespace-line nil :underline 't) + +;; (set-face-background 'ivy-posframe +solarized-s-base3) +;; (set-face-foreground 'ivy-posframe +solarized-s-base01) + +(let ((base03 "#002b36") + (base02 "#073642") + (base01 "#586e75") + (base00 "#657b83") + (base0 "#839496") + (base1 "#93a1a1") + (base2 "#eee8d5") + (base3 "#fdf6e3") + (yellow "#b58900") + (orange "#cb4b16") + (red "#dc322f") + (magenta "#d33682") + (violet "#6c71c4") + (blue "#268bd2") + (cyan "#2aa198") + (green "#859900")) + (custom-set-faces + `(agda2-highlight-keyword-face ((t (:foreground ,green)))) + `(agda2-highlight-string-face ((t (:foreground ,cyan)))) + `(agda2-highlight-number-face ((t (:foreground ,violet)))) + `(agda2-highlight-symbol-face ((((background ,base3)) (:foreground ,base01)))) + `(agda2-highlight-primitive-type-face ((t (:foreground ,blue)))) + `(agda2-highlight-bound-variable-face ((t nil))) + `(agda2-highlight-inductive-constructor-face ((t (:foreground ,green)))) + `(agda2-highlight-coinductive-constructor-face ((t (:foreground ,yellow)))) + `(agda2-highlight-datatype-face ((t (:foreground ,blue)))) + `(agda2-highlight-field-face ((t (:foreground ,red)))) + `(agda2-highlight-function-face ((t (:foreground ,blue)))) + `(agda2-highlight-module-face ((t (:foreground ,yellow)))) + `(agda2-highlight-postulate-face ((t (:foreground ,blue)))) + `(agda2-highlight-primitive-face ((t (:foreground ,blue)))) + `(agda2-highlight-record-face ((t (:foreground ,blue)))) + `(agda2-highlight-dotted-face ((t nil))) + `(agda2-highlight-operator-face ((t nil))) + `(agda2-highlight-error-face ((t (:foreground ,red :underline t)))) + `(agda2-highlight-unsolved-meta-face ((t (:background ,base2)))) + `(agda2-highlight-unsolved-constraint-face ((t (:background ,base2)))) + `(agda2-highlight-termination-problem-face ((t (:background ,orange :foreground ,base03)))) + `(agda2-highlight-incomplete-pattern-face ((t (:background ,orange :foreground ,base03)))) + `(agda2-highlight-typechecks-face ((t (:background ,cyan :foreground ,base03)))))) + +;; (with-eval-after-load 'intero +;; (setq intero-package-version "0.1.31")) + diff --git a/init.el b/init.el index c07ce23ffe20..2948da3333a3 100644 --- a/init.el +++ b/init.el @@ -1,8 +1,157 @@ ;;; private/grfn/init.el -*- lexical-binding: t; -*- -;; An extra measure to prevent the flash of unstyled mode-line while Emacs is -;; booting up (when Doom is byte-compiled). -(setq-default mode-line-format nil) + +(doom! :feature + ;debugger ; FIXME stepping through code, to help you add bugs + eval ; run code, run (also, repls) + (evil +everywhere); come to the dark side, we have cookies + file-templates ; auto-snippets for empty files + (lookup ; helps you navigate your code and documentation + +devdocs ; ...on devdocs.io online + +docsets) ; ...or in Dash docsets locally + snippets ; my elves. They type so I don't have to + spellcheck ; tasing you for misspelling mispelling + (syntax-checker ; tasing you for every semicolon you forget + +childframe) ; use childframes for error popups (Emacs 26+ only) + workspaces ; tab emulation, persistence & separate workspaces + + :completion + (company ; the ultimate code completion backend + +auto) ; as-you-type code completion + ;(helm ; the *other* search engine for love and life + ; +fuzzy) ; enable fuzzy search backend for helm + ;ido ; the other *other* search engine... + (ivy ; a search engine for love and life + +fuzzy) ; enable fuzzy search backend for ivy + + :ui + doom ; what makes DOOM look the way it does + doom-dashboard ; a nifty splash screen for Emacs + doom-modeline ; a snazzy Atom-inspired mode-line + doom-quit ; DOOM quit-message prompts when you quit Emacs + evil-goggles ; display visual hints when editing in evil + ;fci ; a `fill-column' indicator + hl-todo ; highlight TODO/FIXME/NOTE tags + ;modeline ; snazzy, Atom-inspired modeline, plus API + nav-flash ; blink the current line after jumping + ;neotree ; a project drawer, like NERDTree for vim + ;treemacs ; a project drawer, like neotree but cooler + (popup ; tame sudden yet inevitable temporary windows + +all ; catch all popups that start with an asterix + +defaults) ; default popup rules + pretty-code ; replace bits of code with pretty symbols + ;tabbar ; FIXME an (incomplete) tab bar for Emacs + 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 + + :editor + ;(format +onsave) ; automated prettiness + ;multiple-cursors ; editing in many places at once + ;parinfer ; turn lisp into python, sort of + rotate-text ; cycle region at point between text candidates + + :emacs + dired ; making dired pretty [functional] + ediff ; comparing files in Emacs + electric ; smarter, keyword-based electric-indent + ;eshell ; a consistent, cross-platform shell (WIP) + hideshow ; basic code-folding support + imenu ; an imenu sidebar and searchable code index + ;term ; terminals in Emacs + vc ; version-control and Emacs, sitting in a tree + + :tools + editorconfig ; let someone else argue about tabs vs spaces + ;ein ; tame Jupyter notebooks with emacs + gist ; interacting with github gists + ;macos ; MacOS-specific commands + make ; run make tasks from Emacs + magit ; + password-store ; password manager for nerds + pdf ; pdf enhancements + ;prodigy ; FIXME managing external services & code builders + ;rgb ; creating color strings + ;tmux ; an API for interacting with tmux + ;upload ; map local to remote projects via ssh/ftp + ;wakatime + + :lang + ;assembly ; assembly for fun or debugging + ;(cc +irony +rtags); C/C++/Obj-C madness + clojure ; java with a lisp + ;common-lisp ; if you've seen one lisp, you've seen them all + ;crystal ; ruby at the speed of c + ;csharp ; unity, .NET, and mono shenanigans + data ; config/data formats + erlang ; an elegant language for a more civilized age + elixir ; erlang done right + ;elm ; care for a cup of TEA? + emacs-lisp ; drown in parentheses + ;ess ; emacs speaks statistics + ;go ; the hipster dialect + ;(haskell +intero) ; a language that's lazier than I am + haskell ; a language that's lazier than I am + ;hy ; readability of scheme w/ speed of python + ;(java +meghanada) ; the poster child for carpal tunnel syndrome + javascript ; all(hope(abandon(ye(who(enter(here)))))) + ;julia ; a better, faster MATLAB + latex ; writing papers in Emacs has never been so fun + ;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 ; organize your plain life in plain text + +attach ; custom attachment system + +babel ; running code in org + +capture ; org-capture in and outside of Emacs + +export ; Exporting org to whatever you want + +present) ; Emacs for presentations + ;perl ; write code no one else can comprehend + ;php ; perl's insecure younger brother + ;plantuml ; diagrams for confusing people more + ;purescript ; javascript, but functional + ;python ; beautiful is better than ugly + ;qt ; the 'cutest' gui framework ever + ;racket ; a DSL for DSLs + ;rest ; Emacs as a REST client + ruby ; 1.step do {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} + ;rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;scala ; java, but good + (sh +fish) ; she sells (ba|z)sh shells on the C xor + ;solidity ; do you need a blockchain? No. + ;swift ; who asked for emoji variables? + web ; the tubes + + ;; Applications are complex and opinionated modules that transform Emacs + ;; toward a specific purpose. They may have additional dependencies and + ;; should be loaded late. + :app + ;(email +gmail) ; emacs as an email client + irc ; how neckbeards socialize + ;(rss +org) ; emacs as an RSS reader + ;twitter ; twitter client https://twitter.com/vnought + ;(write ; emacs as a word processor (latex + org + markdown) + ; +wordnut ; wordnet (wn) search + ; +langtool) ; a proofreader (grammar/style check) for Emacs + + :collab + ;floobits ; peer programming for a price + ;impatient-mode ; show off code over HTTP + + :config + ;; For literate config users. This will tangle+compile a config.org + ;; literate config in your `doom-private-dir' whenever it changes. + ;literate + + ;; The default module set reasonable defaults for Emacs. It also provides + ;; a Spacemacs-inspired keybinding scheme, a custom yasnippet library, + ;; and additional ex commands for evil-mode. Use it as a reference for + ;; your own modules. + (default +bindings +snippets +evil-commands)) ;; I've swapped these keys on my keyboard @@ -12,9 +161,6 @@ (setq user-mail-address "root@gws.fyi" user-full-name "Griffin Smith") -(add-hook! doom-big-font-mode - (setq +doom-modeline-height (if doom-big-font-mode 37 29))) - ; (def-package-hook! doom-themes :disable) (after! rust @@ -192,56 +338,6 @@ ;; 'haskell-mode ;; `((,(rx "-- |") . 'haskell-keyword-face))) -;;; * Column Marker -(defun sanityinc/fci-enabled-p () (symbol-value 'fci-mode)) - -(defvar sanityinc/fci-mode-suppressed nil) -(make-variable-buffer-local 'sanityinc/fci-mode-suppressed) - -(defadvice popup-create (before suppress-fci-mode activate) - "Suspend fci-mode while popups are visible" - (let ((fci-enabled (sanityinc/fci-enabled-p))) - (when fci-enabled - (setq sanityinc/fci-mode-suppressed fci-enabled) - (turn-off-fci-mode)))) - -(defadvice popup-delete (after restore-fci-mode activate) - "Restore fci-mode when all popups have closed" - (when (and sanityinc/fci-mode-suppressed - (null popup-instances)) - (setq sanityinc/fci-mode-suppressed nil) - (turn-on-fci-mode))) - - -;; https://github.com/alpaker/Fill-Column-Indicator/issues/67#issuecomment-195611974 -(after! fill-column-indicator - (add-hook 'prog-mode-hook #'fci-mode) - (defvar eos/fci-disabled nil) - (make-variable-buffer-local 'eos/fci-disabled) - - ;; Add a hook that disables fci if enabled when the window changes and it - ;; isn't wide enough to display it. - (defun eos/maybe-disable-fci () - (interactive) - ;; Disable FCI if necessary - (when (and fci-mode - (< (window-width) (or fci-rule-column fill-column))) - (fci-mode -1) - (setq-local eos/fci-disabled t)) - ;; Enable FCI if necessary - (when (and eos/fci-disabled - (eq fci-mode nil) - (> (window-width) (or fci-rule-column fill-column))) - (fci-mode 1) - (setq-local eos/fci-disabled nil))) - - (defun eos/add-fci-disabling-hook () - (interactive) - (add-hook 'window-configuration-change-hook - #'eos/maybe-disable-fci)) - - (add-hook 'prog-mode-hook #'eos/add-fci-disabling-hook)) - -; (require 'haskell-prettify) - -;; (add-hook 'haskell-mode-hook #'haskell-prettify-enable) + +(load-file (let ((coding-system-for-read 'utf-8)) + (shell-command-to-string "agda-mode locate"))) diff --git a/packages.el b/packages.el index 0ef4289c852d..2264afa9c957 100644 --- a/packages.el +++ b/packages.el @@ -1,6 +1,8 @@ ;; -*- no-byte-compile: t; -*- ;;; private/grfn/packages.el +;; (package! 'tide :disable t) + ;; Editor (package! solarized-theme) (package! fill-column-indicator) @@ -17,6 +19,11 @@ (package! writeroom-mode) (package! dash) +;; Presentation +(package! epresent) +(package! org-tree-slide) +(package! ox-reveal) + ;; Slack etc (package! slack) (package! alert) @@ -56,3 +63,13 @@ (package! flycheck-flow) (package! company-flow) (package! prettier-js) + +;; GraphQL +(package! graphql-mode) + +;; Haskell +(package! lsp-mode) +(package! lsp-ui) +(package! lsp-haskell) +(package! company-lsp) +(package! lsp-imenu) diff --git a/snippets/haskell-mode/header b/snippets/haskell-mode/header index 4d665905f6c6..fdd8250d86ca 100644 --- a/snippets/haskell-mode/header +++ b/snippets/haskell-mode/header @@ -2,5 +2,4 @@ # name: header # expand-env: ((yas-indent-line 'fixed)) # -- ----------------------------------------------------------------------- -$2 \ No newline at end of file +--------------------------------------------------------------------------------$2 \ No newline at end of file diff --git a/snippets/haskell-mode/module b/snippets/haskell-mode/module index ce7ebcb21353..4554d33f9ba7 100644 --- a/snippets/haskell-mode/module +++ b/snippets/haskell-mode/module @@ -5,7 +5,7 @@ # expand-env: ((yas-indent-line 'fixed)) # contributor: Luke Hoersten <luke@hoersten.org> # -- ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- -- | -- Module : $1 -- Description : $2 @@ -13,7 +13,7 @@ -- Maturity : ${3:Draft, Usable, Maintained, OR MatureAF} -- -- $4 ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- module ${1:`(if (not buffer-file-name) "Module" (let ((name (file-name-sans-extension (buffer-file-name))) (case-fold-search nil)) @@ -25,8 +25,8 @@ module ${1:`(if (not buffer-file-name) "Module" (file-name-nondirectory name))))`} ( ) where ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- import Prelude ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- $0 diff --git a/snippets/haskell-mode/test-module b/snippets/haskell-mode/test-module index 3183fdc72ab5..82224b36a49e 100644 --- a/snippets/haskell-mode/test-module +++ b/snippets/haskell-mode/test-module @@ -1,6 +1,7 @@ # -*- mode: snippet -*- # name: test-module # key: test +# expand-env: ((yas-indent-line 'fixed)) # -- {-# LANGUAGE ApplicativeDo #-} -------------------------------------------------------------------------------- @@ -13,9 +14,9 @@ module ${1:`(if (not buffer-file-name) "Module" (car (last (split-string name "src"))))) (file-name-nondirectory name))))`} where -------------------------------------------------------------------------------- -import Test.Prelude +import Test.Prelude import qualified Hedgehog.Gen as Gen import qualified Hedgehog.Range as Range -------------------------------------------------------------------------------- -import ${1:$(s-chop-suffix "Test" yas-text)} +import ${1:$(s-chop-suffix "Test" yas-text)} -------------------------------------------------------------------------------- diff --git a/snippets/org-mode/source-block b/snippets/org-mode/source-block deleted file mode 100644 index 3b7694557ecd..000000000000 --- a/snippets/org-mode/source-block +++ /dev/null @@ -1,8 +0,0 @@ -# -*- mode: snippet -*- -# name: source-block -# key: src -# expand-env: ((yas-indent-line 'fixed)) -# -- -#+BEGIN_SRC ${1:elisp} -$2 -#+END_SRC \ No newline at end of file diff --git a/splitjoin.el b/splitjoin.el index 166672816bbe..ea4dcfc39318 100644 --- a/splitjoin.el +++ b/splitjoin.el @@ -1,7 +1,7 @@ ;;; private/grfn/splitjoin.el -*- lexical-binding: t; -*- (require 'dash) -(load! utils) +(load! "utils") ;;; ;;; Vars |