14 KiB
14 KiB
Emacs config
Packages
(define-public emacs-parinfer-rust-mode
(package
(name "emacs-parinfer-rust-mode")
(version "0.8.6")
(source
(origin
(method url-fetch)
(uri (string-append
"https://stable.melpa.org/packages/parinfer-rust-mode-" version
".tar"))
(sha256
(base32 "0pg0xrwi6w5xbpm85hbpapj0x12s0npyvfg1x0bvwghmcsn9y4xr"))))
(build-system emacs-build-system)
(home-page "https://github.com/justinbarclay/parinfer-rust-mode")
(synopsis "An interface for the parinfer-rust library")
(propagated-inputs (list parinfer-rust))
(description
"An intuitive editor mode to make paren management fun and easy without
sacrificing power. How it works: Parinfer users the state of the buffer
combined with the current mode (paren, indent, or smart) to either balance an
s-expression's indentation, paren, or to do both. Let's go over some light
examples to get a sense of how parinfer works. I am going to use `|` to
indicate the cursor and `_` to indicate the a space that's been added either by
the user or parinfer. Paren Mode gives you full control of parens, while
Parinfer corrects indentation. For example, if we start off with the cursor
before `(foo` ``` |(foo bar) ``` and the user inserts a space ``` _|(foo bar)
``` then parinfer will maintain, infer, that a space is needed in front of
`bar)` to maintain indentation ``` |(foo _bar) ``` Indent Mode gives you full
control of indentation, while Parinfer corrects or inserts close-parens where
appropriate. Now the cursor is before `4` ``` (foo [1 2 3] |4 5 6) ``` and the
user inserts a space ``` (foo [1 2 3] _|4 5 6) ``` then parinfer will adjust the
`]` and move it down to the follow line to enclose the 4 5 6 ``` (foo [1 2 3 |4
5 6]) ``` Smart Mode is like Indent Mode, but it tries to preserve the structure
too. This roughly translates to it treating everything before the cursor as
indent-mode and every after the cursor as paren-mode. The cursor is before `(+`
``` (let [x (fn [])] |(+ 1 2) x) ``` and the user add several spaces to the sexp
``` (let [x (fn [])] ________|(+ 1 2) x) ``` Smart-Mode will move a ) and a ] to
enclose the addition function call and move the 2 to maintain structure ``` (let
[x (fn [] |(+ 1 _________2))] x) ``` To find out more about how parinfer works
go to: https://shaunlebron.github.io/parinfer/ `parinfer-rust-mode` provides an
interface between the `parinfer-rust` library and Emacs. As such it's primary
role is to capture meta information about the buffer and transfer it to the
parinfer-rust API. As such parinfer-rust-mode requires that your version of
Emacs supports modules.")
(license #f)))
(define emacs-packages (list
emacs-all-the-icons
emacs-all-the-icons-dired
emacs-company
emacs-company-box
emacs-company-quickhelp
emacs-counsel
emacs-crux
emacs-dracula-theme
emacs-geiser
emacs-geiser-guile
emacs-gerbil-mode
emacs-guix
emacs-ivy
emacs-ivy-rich
emacs-kbd
emacs-ligature
emacs-magit
emacs-meow
emacs-org-roam
emacs-org-superstar
emacs-parinfer-rust-mode
;; emacs-polymode
;; emacs-polymode-org
emacs-swiper
emacs-telephone-line
emacs-which-key
emacs-yasnippet))
Config
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(use-package parinfer-rust
:custom ((parinfer-rust-library-directory "/home/skylar/.guix-home/profile/lib/")
(parinfer-rust-library "/home/skylar/.guix-home/profile/lib/libparinfer_rust.so"))
:hook (emacs-lisp-mode scheme-mode lisp-mode geiser-mode))
(use-package ivy
:config (ivy-mode t))
(use-package counsel
:config (counsel-mode t))
(use-package swiper
:bind ("C-x /" . swiper))
(use-package company
:config (global-company-mode t))
(use-package company-quickhelp
:config (company-quickhelp-mode 1))
(use-package mu4e
:config (setq
mu4e-sent-folder "/posteo/Sent"
mu4e-drafts-folder "/posteo/Drafts"
mu4e-trash-folder "/posteo/Trash"
mu4e-get-mail-command "offlineimap"
mu4e-update-interval 3000))
(use-package dracula-theme
:config (load-theme 'dracula :no-confirm))
(use-package org
:hook (org-superstar-mode))
;; (use-package poly-org
;; :config
;; (pm-around-advice #'org-babel-tangle #'polymode-with-current-base-buffer)
;; (pm-around-advice #'org-babel-demarcate-block #'polymode-with-current-base-buffer)
;; :bind (:map poly-org-mode-map
;; ("C-c C-v C-t" . org-babel-tangle)
;; ("C-c C-v t" . org-babel-tangle)
;; ("C-c C-v C-d" . org-babel-demarcate-block)
;; ("C-c C-v d" . org-babel-demarcate-block))
;; :hook ((poly-org-mode . (lambda () (setq-local org-src-fontify-natively t)))
;; (org-mode . poly-org-mode)))
(use-package geiser-guile
:config (add-to-list 'geiser-guile-load-path "~/software/guix"))
(use-package yasnippet
:config (add-to-list 'yas-snippet-dirs "~/software/guix/etc/snippets/yas/"))
(setq user-full-name "Skylar Hill"
user-mail-address "stellarskylark@posteo.net")
(load-file "~/software/guix/etc/copyright.el")
(use-package smtpmail
:config (setq message-send-mail-function 'smtpmail-send-it
smtpmail-stream-type 'ssl
smtpmail-smtp-server "posteo.de"
smtpmail-smtp-service 465))
(use-package ligature
:config
;; Enable the "www" ligature in every possible major mode
(ligature-set-ligatures 't '("www"))
;; Enable traditional ligature support in eww-mode, if the
;; `variable-pitch' face supports it
(ligature-set-ligatures 'eww-mode '("ff" "fi" "ffi"))
;; Enable all Cascadia and Fira Code ligatures in programming modes
(ligature-set-ligatures 'prog-mode
'(;; == === ==== => =| =>>=>=|=>==>> ==< =/=//=// =~
;; =:= =!=
("=" (rx (+ (or ">" "<" "|" "/" "~" ":" "!" "="))))
;; ;; ;;;
(";" (rx (+ ";")))
;; && &&&
("&" (rx (+ "&")))
;; !! !!! !. !: !!. != !== !~
("!" (rx (+ (or "=" "!" "\." ":" "~"))))
;; ?? ??? ?: ?= ?.
("?" (rx (or ":" "=" "\." (+ "?"))))
;; %% %%%
("%" (rx (+ "%")))
;; |> ||> |||> ||||> |] |} || ||| |-> ||-||
;; |->>-||-<<-| |- |== ||=||
;; |==>>==<<==<=>==//==/=!==:===>
("|" (rx (+ (or ">" "<" "|" "/" ":" "!" "}" "\]"
"-" "="))))
;; \\ \\\ \/
("\\" (rx (or "/" (+ "\\"))))
;; ++ +++ ++++ +>
("+" (rx (or ">" (+ "+"))))
;; :: ::: :::: :> :< := :// ::=
(":" (rx (or ">" "<" "=" "//" ":=" (+ ":"))))
;; // /// //// /\ /* /> /===:===!=//===>>==>==/
("/" (rx (+ (or ">" "<" "|" "/" "\\" "\*" ":" "!"
"="))))
;; .. ... .... .= .- .? ..= ..<
("\." (rx (or "=" "-" "\?" "\.=" "\.<" (+ "\."))))
;; -- --- ---- -~ -> ->> -| -|->-->>->--<<-|
("-" (rx (+ (or ">" "<" "|" "~" "-"))))
;; *> */ *) ** *** ****
("*" (rx (or ">" "/" ")" (+ "*"))))
;; www wwww
("w" (rx (+ "w")))
;; <> <!-- <|> <: <~ <~> <~~ <+ <* <$ </ <+> <*>
;; <$> </> <| <|| <||| <|||| <- <-| <-<<-|-> <->>
;; <<-> <= <=> <<==<<==>=|=>==/==//=!==:=>
;; << <<< <<<<
("<" (rx (+ (or "\+" "\*" "\$" "<" ">" ":" "~" "!"
"-" "/" "|" "="))))
;; >: >- >>- >--|-> >>-|-> >= >== >>== >=|=:=>>
;; >> >>> >>>>
(">" (rx (+ (or ">" "<" "|" "/" ":" "=" "-"))))
;; #: #= #! #( #? #[ #{ #_ #_( ## ### #####
("#" (rx (or ":" "=" "!" "(" "\?" "\[" "{" "_(" "_"
(+ "#"))))
;; ~~ ~~~ ~= ~- ~@ ~> ~~>
("~" (rx (or ">" "=" "-" "@" "~>" (+ "~"))))
;; __ ___ ____ _|_ __|____|_
("_" (rx (+ (or "_" "|"))))
;; Fira code: 0xFF 0x12
("0" (rx (and "x" (+ (in "A-F" "a-f" "0-9")))))
;; Fira code:
"Fl" "Tl" "fi" "fj" "fl" "ft"
;; The few not covered by the regexps.
"{|" "[|" "]#" "(*" "}#" "$>" "^="))
;; Enables ligature checks globally in all buffers. You can also do it
;; per mode with `ligature-mode'.
(global-ligature-mode t))
(use-package all-the-icons-dired
:hook (dired-mode . all-the-icons-dired-mode))
(require 'telephone-line)
(defface skylark-accent '((t (:background "#50fa7b" :foreground "#282a36"))) "")
(setq telephone-line-faces
'((skylark-accent . (skylark-accent . skylark-accent))
(accent . (telephone-line-accent-active . telephone-line-accent-inactive))
(nil . (mode-line . mode-line-inactive))))
(setq telephone-line-lhs
'((skylark-accent . (telephone-line-meow-tag-segment))
(accent . (telephone-line-vc-segment
telephone-line-erc-modified-channels-segment
telephone-line-process-segment))
(nil . (telephone-line-minor-mode-segment
telephone-line-buffer-segment))))
(setq telephone-line-rhs
'((nil . (telephone-line-misc-info-segment))
(accent . (telephone-line-major-mode-segment))
(skylark-accent . (telephone-line-airline-position-segment))))
(telephone-line-mode 1)
(setq frame-resize-pixelwise t)
(setq window-resize-pixelwise t)
(setq-default indent-tabs-mode nil)
(add-to-list 'default-frame-alist
'(font . "Fira Code"))
(add-to-list 'default-frame-alist
'(alpha-background . 80))
(require 'meow)
(defun meow-setup ()
(setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty)
(meow-motion-overwrite-define-key
'("j" . meow-next)
'("k" . meow-prev)
'("<escape>" . ignore))
(meow-leader-define-key
;; SPC j/k will run the original command in MOTION state.
'("j" . "H-j")
'("k" . "H-k")
;; Use SPC (0-9) for digit arguments.
'("1" . meow-digit-argument)
'("2" . meow-digit-argument)
'("3" . meow-digit-argument)
'("4" . meow-digit-argument)
'("5" . meow-digit-argument)
'("6" . meow-digit-argument)
'("7" . meow-digit-argument)
'("8" . meow-digit-argument)
'("9" . meow-digit-argument)
'("0" . meow-digit-argument)
'("/" . meow-keypad-describe-key)
'("?" . meow-cheatsheet))
(meow-normal-define-key
'("0" . meow-expand-0)
'("9" . meow-expand-9)
'("8" . meow-expand-8)
'("7" . meow-expand-7)
'("6" . meow-expand-6)
'("5" . meow-expand-5)
'("4" . meow-expand-4)
'("3" . meow-expand-3)
'("2" . meow-expand-2)
'("1" . meow-expand-1)
'("-" . negative-argument)
'(";" . meow-reverse)
'("," . meow-inner-of-thing)
'("." . meow-bounds-of-thing)
'("[" . meow-beginning-of-thing)
'("]" . meow-end-of-thing)
'("a" . meow-append)
'("A" . meow-open-below)
'("b" . meow-back-word)
'("B" . meow-back-symbol)
'("c" . meow-change)
'("d" . meow-delete)
'("D" . meow-backward-delete)
'("e" . meow-next-word)
'("E" . meow-next-symbol)
'("f" . meow-find)
'("g" . meow-cancel-selection)
'("G" . meow-grab)
'("h" . meow-left)
'("H" . meow-left-expand)
'("i" . meow-insert)
'("I" . meow-open-above)
'("j" . meow-next)
'("J" . meow-next-expand)
'("k" . meow-prev)
'("K" . meow-prev-expand)
'("l" . meow-right)
'("L" . meow-right-expand)
'("m" . meow-join)
'("n" . meow-search)
'("o" . meow-block)
'("O" . meow-to-block)
'("p" . meow-yank)
'("q" . meow-quit)
'("Q" . meow-goto-line)
'("r" . meow-replace)
'("R" . meow-swap-grab)
'("s" . meow-kill)
'("t" . meow-till)
'("u" . meow-undo)
'("U" . meow-undo-in-selection)
'("v" . meow-visit)
'("w" . meow-mark-word)
'("W" . meow-mark-symbol)
'("x" . meow-line)
'("X" . meow-goto-line)
'("y" . meow-save)
'("Y" . meow-sync-grab)
'("z" . meow-pop-selection)
'("'" . repeat)
'("<escape>" . ignore)))
(meow-setup)
(meow-global-mode 1)
(customize-set-variable 'meow-use-clipboard t)