git.fiddlerwoaroof.com
emacs.d/init.el
4ae7c492
 ;; -*- mode: Emacs-Lisp;tab-width: 8;indent-tabs-mode: nil; -*-
6b10f3e8
 (setq read-process-output-max (* 1024 1024))
d777d465
 (setq gc-cons-threshold 100000000
       load-prefer-newer t
       inhibit-splash-screen t
       inhibit-startup-message t
       native-comp-debug 3)
f0432f05
 
4ae7c492
 (message invocation-name)
 
8d30d2e4
 (require 'package)
 
 (setq package-archives
       '(("gnu" . "http://elpa.gnu.org/packages/")
         ("melpa" . "https://melpa.org/packages/")
         ("melpa-stable" . "http://stable.melpa.org/packages/")
         ("nongnu" . "https://elpa.nongnu.org/nongnu/"))
       package-archive-priorities '(("melpa-stable" . 1)
                                    ("gnu" . 0)
                                    ("melpa" . 3)
                                    ("nongnu" . 2)))
 
 ;; (package-initialize 'no-activate)
 (when (not (package-installed-p 'use-package))
   (package-refresh-contents)
   (package-install 'use-package))
 
c09e128e
 (let ((default-directory  "~/.emacs.d/lisp/"))
   (make-directory default-directory t)
4db36da5
   (add-to-list 'load-path (expand-file-name default-directory))
4ae7c492
   (normal-top-level-add-subdirs-to-load-path)
   (load "utils"))
 
7649077c
 (progn
   (define-key key-translation-map (kbd "M-7") (kbd "∘"))
   (define-key key-translation-map (kbd "M-8") (kbd "•"))
   (define-key key-translation-map (kbd "M-9") (kbd "λ")))
 
fa4ac53c
 (use-package s
   :ensure t)
 
9bb117c4
 (cold-boot)
4b6a354c
 
b253b25b
 (use-package nix-mode
   :ensure t)
7c9eeabd
 
9f436b1a
 (use-package embark
   :ensure t
7f555a76
   :bind (:map global-map (("s-." . embark-act))))
9f436b1a
 
a23499ac
 (use-package htmlize
   :ensure t)
33f3bc08
 
 (use-package keyfreq
   :ensure t
   :diminish
   :config
   (keyfreq-mode 1)
   (keyfreq-autosave-mode 1))
 
 (use-package auto-package-update
   :ensure t)
6b10f3e8
 (use-package general
   :ensure t)
e6a3fb1e
 (use-package flycheck
   :ensure t)
00af5f6f
 (use-package company
b2c22b37
   :ensure t
   :delight
74774e23
   :bind (:map company-active-map
               (("C-c h" . company-quickhelp-manual-begin)
                ("M-." . company-show-location)
                ("\C-d" . company-show-doc-buffer)))
00af5f6f
   :config
74774e23
   (progn (define-key company-active-map (kbd "(") (kbd "RET SPC ("))
00af5f6f
          (define-key company-active-map (kbd "{") (kbd "RET SPC {"))
          (define-key company-active-map (kbd "[") (kbd "RET [")))
 
4c6e757b
   (setq company-backends '((company-clang
                             company-bbdb
                             company-nxml
                             company-css
                             ;;company-xcode
                             company-cmake
                             company-capf
                             ;;company-slime
                             )
                            company-files
                            (company-dabbrev-code
                             company-gtags
                             company-etags
                             company-keywords)
                            company-oddmuse
d4a460b3
                            company-dabbrev)))
00af5f6f
 
 (use-package company-posframe
   :ensure t
b2c22b37
   :delight
00af5f6f
   :after company
   :config
b2302716
   (add-hook 'company-mode-hook (lambda () (company-posframe-mode 1)))
   (setq company-posframe-quickhelp-delay nil))
 
00af5f6f
 
 
4b6a354c
 (use-package jeison
   :ensure t)
 
1d6e87c6
 (use-package scala-mode
   :ensure t)
 
fb2ab354
 
7ef55e57
 
46d0f7f2
 (eval-and-compile
   (defvar *fwoar-git-repos*
     (file-name-as-directory
      (expand-file-name (car (file-expand-wildcards "~/git*_repos"))
                        "~"))))
feb84907
 
46d0f7f2
 (eval-and-compile
   (defun fwoar-git-repo (name ssh-remote http-remote)
     (let ((dir-name (file-name-as-directory (expand-file-name name *fwoar-git-repos*))))
       (unless (file-exists-p dir-name)
         (ecase fwoar-git-mode
           (:ssh (magit-run-git-with-input "clone" ssh-remote dir-name))
           (:http (magit-run-git-with-input "clone" http-remote dir-name))))
       dir-name)))
 
 (defvar *dotfiles-repo*
   (fwoar-git-repo "dotfiles"
                   "git@git.fiddlerwoaroof.com:dotfiles.git"
                   "https://git.fiddlerwoaroof.com/git/dotfiles.git"))
 
 (defun fwoar/setup-load-path ()
   (let* ((new-load-path (cl-adjoin "~/.emacs.d/lisp/configurations/"
                                    load-path
                                    :test 'equal))
          (new-load-path (cl-adjoin (concat *dotfiles-repo*
                                            "emacs.d/lisp/configurations/")
                                    new-load-path
                                    :test 'equal))
          (new-load-path (cl-adjoin (concat *dotfiles-repo*
                                            "emacs.d/packages/")
                                    new-load-path
                                    :test 'equal)))
     (setq load-path new-load-path)))
 
 (fwoar/setup-load-path)
 
e557458c
 (use-package fwoar-pastebin :ensure nil
   :custom
   (fwoar-pastebin-tramp-url (when (file-exists-p "~/.pastebin-name")
8e1d34c2
                               (car (fwoar:read-sexps-in-file "~/.pastebin-name"))))
e557458c
   (fwoar-pastebin-web-url-pattern (when (file-exists-p "~/.pastebin-name")
8e1d34c2
                                     (cadr (fwoar:read-sexps-in-file "~/.pastebin-name")))))
e557458c
 
8639eb74
 (use-package fwoar-yank-buffer
   :init (require 'fwoar-yank-buffer)
   :ensure nil)
 
d3d3923f
 (use-package fwoar-json-navigator
8d30d2e4
   :after json-mode
d3d3923f
   :init (require 'fwoar-json-navigator)
   :ensure nil)
 
46d0f7f2
 (defun fwoar/package-configuration (package)
   (fwoar/setup-load-path)
   (let* ((local-configs)
          (git-configs (concat *dotfiles-repo*
                               "emacs.d/lisp/configurations/"))
          (conf-file (concat (symbol-name package) "-conf.el"))
          (load-path (list* local-configs git-configs load-path)))
     conf-file))
 
 (defun load-package-configuration (package)
   (let ((conf-file (fwoar/package-configuration package)))
     (load conf-file)))
 
9517fbda
 (defmacro define-obsolete-function-alias ( obsolete-name current-name &optional when docstring)
   (declare (doc-string 4) (indent defun))
   `(progn
      (defalias ,obsolete-name ,current-name ,docstring)
      (make-obsolete ,obsolete-name ,current-name ,(or when "unspecified"))))
 
46d0f7f2
 (defun fwoar/load-local-packages ()
   (interactive)
   (mapc 'package-install-file
         (directory-files (format "%s/%s" *dotfiles-repo* "emacs.d/packages/")
6354c192
                          t ".*[.]el$")))
46d0f7f2
 
f6060a70
 (use-package json-mode
   :ensure t)
46d0f7f2
 (unless (package-installed-p 'fwoar-functional-utils)
   (fwoar/load-local-packages))
e1234864
 
7dde1b39
 (defvar fwoar-git-mode :ssh)
4b6a354c
 (when (locate-library "site-lisp")
   (load "site-lisp"))
0f7c083e
 
7ef55e57
 (load-package-configuration 'lsp)
 
0f7c083e
 
 
 (fwoar/zenburn-with-color-variables
   (defface magit-keyword-feature
     `((t :foreground ,zenburn-green :inherit magit-keyword))
     "Face for parts of commit messages inside brackets."
     :group 'magit-faces)
   (defface magit-keyword-chore
     `((t :foreground ,zenburn-blue :inherit magit-keyword))
     "Face for parts of commit messages inside brackets."
     :group 'magit-faces)
53bb7a3c
   (defface magit-keyword-test
     `((t :foreground ,zenburn-blue-1 :inherit magit-keyword))
     "Face for parts of commit messages inside brackets."
     :group 'magit-faces)
   (defface magit-keyword-refactor
     `((t :foreground ,zenburn-green+1 :inherit magit-keyword))
     "Face for parts of commit messages inside brackets."
     :group 'magit-faces)
0f7c083e
   (defface magit-keyword-misc
     `((t :foreground ,zenburn-fg-1 :inherit magit-keyword))
     "Face for parts of commit messages inside brackets."
     :group 'magit-faces)
   (defface magit-keyword-bug
     `((t :foreground ,zenburn-red :inherit magit-keyword))
     "Face for parts of commit messages inside brackets."
     :group 'magit-faces))
 
53bb7a3c
 (defvar fwoar::*magit-log-regexp-faces*
   '((magit-keyword-feature
      "^\\(\\(?:feat\\(?:ure\\)?(\\([^)]+?\\))\\)\\|\\(?:feat\\(ure\\)?\\>\\)\\)")
     (magit-keyword-chore "^\\(\\(?:chore(\\([^)]+?\\))\\)\\|\\(?:chore\\>\\)\\)")
     (magit-keyword-test "^\\(\\(?:test(\\([^)]+?\\))\\)\\|\\(?:test\\>\\)\\)")
     (magit-keyword-refactor "^\\(\\(?:refactor(\\([^)]+?\\))\\)\\|\\(?:refactor\\>\\)\\)")
     (magit-keyword-bug "^\\(\\(?:bug(\\([^)]+?\\))\\)\\|\\(?:bug\\>\\)\\)")
     (magit-keyword-test "^\\(\\(?:test(\\([^)]+?\\))\\)\\|\\(?:test\\>\\)\\)")
     ))
 
0f7c083e
 (defun fwoar/propertize-magit-log (_rev msg)
53bb7a3c
   (cl-loop for (face regexp) in fwoar::*magit-log-regexp-faces*
            do (let ((boundary 0))
                 (while (string-match regexp msg boundary)
                   (setq boundary (match-end 0))
                   (magit--put-face (match-beginning 0) boundary face msg))))
 
0f7c083e
   (let ((boundary 0))
     (while (string-match "^\\([^:\n\t]+\\):"  msg boundary)
       (setq boundary (match-end 0))
       (let ((group (match-string 1 msg)))
         (unless (or (> (length group) 20)
                     (s-starts-with? "feat" group)
                     (s-starts-with? "Merge" group)
                     (s-starts-with? "merge" group)
                     (s-starts-with? "chore" group)
                     (s-starts-with? "bug" group))
           (magit--put-face (match-beginning 0) (1- boundary)
                            'magit-keyword-misc msg))))))
 
 (use-package magit
   :ensure t
   :config
   ;; TODO: figure this out with transients
   ;;(magit-define-popup-action 'magit-dispatch-popup ?j "Browse remote" 'browse-at-remote)
   'magit-dispatch
 
   (advice-add 'magit-log-propertize-keywords :after
               'fwoar/propertize-magit-log))
 
 (use-package browse-at-remote
   :ensure t
fa986682
   :custom
   (browse-at-remote-prefer-symbolic nil)
0f7c083e
 
fa986682
   :config
8cb41deb
   (cl-pushnew '(:host "git.fiddlerwoaroof.com$" :type "gitlist")
fa986682
               browse-at-remote-remote-type-regexps
               :test 'equal)
 
   (defun browse-at-remote--format-region-url-as-gitlist
       (repo-url ref relname start-line end-line)
     (unless (s-ends-with-p ".git" repo-url)
       (setf repo-url (format "%s.git" repo-url)))
     ;; gitlist doesn't support end-line
     (format "%s/blob/%s/%s#L%s" repo-url ref relname start-line))
   )
b52a37b6
 
 
 (use-package aggressive-indent :ensure t)
37e85dec
 (load-package-configuration 'evil)
6b10f3e8
 (load-package-configuration 'helm)
e1234864
 ;; (load-package-configuration 'projectile)
337d53e1
 
be3afe26
 ;; slime depends on fwoar-git-repo
 (load-package-configuration 'slime)
9f436b1a
 (load-package-configuration 'cider)
0f7c083e
 
7b47fba5
 (global-company-mode 1)
 
a39a3475
 
78c923bf
 
09dbeb8c
 (defun fwoar/c-a-p ()
   (interactive)
   (save-excursion
     (cl-destructuring-bind (start . _end) (bounds-of-thing-at-point 'defun)
       (goto-char start)
       (sp-wrap-with-pair "(")
       (insert "comment\n")
       (sp-indent-defun ))))
 
 
33f3bc08
 (comment
  (use-package multifiles
    :config
    (evil-define-key 'visual 'global (kbd "<leader>m") 'mf/mirror-region-in-multifile)))
c09e128e
 
b52a37b6
 (use-package http
   :ensure t)
 (use-package graphql
   :ensure t)
 
fb63c0aa
 (load-package-configuration 'org)
6d1928cb
 
88e3bf49
 (use-package delight
   :ensure t)
 
7665abb0
 (use-package deadgrep
   :ensure t)
 
6d1928cb
 (use-package deft
   :ensure t
ad02aa87
   :after evil
6d1928cb
   :config
8129b22b
   )
6d1928cb
 
4ae7c492
 (use-package emmet-mode
   :ensure t
   :config
9bb117c4
   (define-key evil-insert-state-map (kbd "C-c ,") 'emmet-expand-line))
4ae7c492
 
385192ac
 (use-package lisp-skeletons
   :config
   (add-hook 'skeleton-end-hook 'skeleton-make-markers)
 
   (define-key evil-insert-state-map (kbd "C-c j") 'skeleton-next-position)
   (define-key evil-insert-state-map (kbd "C-c k") 'skeleton-prev-position)
8e1d34c2
   (evil-define-key 'normal 'global (kbd "<leader>g") 'fwoar:helm-generate-lisp-skeleton)
   (evil-define-key 'visual 'global (kbd "<leader>g") 'fwoar:helm-generate-lisp-skeleton))
385192ac
 
78c923bf
 
33f3bc08
 (use-package htmlize
   :ensure t)
4db36da5
 
086e6b59
 (load-package-configuration 'javascript)
fc317ad1
 
827a0b73
 (use-package direnv
   :ensure t
   :config
66289fe0
   (direnv-mode 1)
827a0b73
   (add-hook 'js2-mode-hook 'direnv-mode)
   (add-hook 'typescript-mode-hook 'direnv-mode))
6486b4b0
 
78c923bf
 
9c596577
 (use-package cl-generic
   :ensure t)
 
9dc16eeb
 (defun intercept-print (f)
   (print f)
   f)
 
7da1ef37
 (cl-defgeneric fwoar--find-system ())
 (defun fwoar-find-system ()
   (interactive)
   (fwoar--find-system))
 (evil-define-key 'normal 'global (kbd "<leader>O") 'fwoar-find-system)
 
9c596577
 (cl-defgeneric fwoar--pl-selector ()
448a1ede
   (:method () (slime-selector)))
0a885cea
 
9c596577
 (defun fwoar-pl-selector ()
   (interactive)
   (fwoar--pl-selector))
6b10f3e8
 (evil-define-key 'normal 'global (kbd "<leader>o") 'fwoar-pl-selector)
9c596577
 
78c923bf
 
8f4a76c3
 (use-package imenu
   :config
6b10f3e8
   (evil-define-key 'normal 'global (kbd "<leader>d") 'helm-imenu-in-all-buffers))
8f4a76c3
 
42ddcaf3
 (defun fwoar--read-register-name ()
   (let ((overlay (make-overlay (point) (point)))
         (string "\""))
     (unwind-protect
         (progn
           ;; display " in the buffer while reading register
           (put-text-property 0 1 'face 'minibuffer-prompt string)
           (put-text-property 0 1 'cursor t string)
           (overlay-put overlay 'after-string string)
           (list (or evil-this-register (read-char))))
       (delete-overlay overlay))))
 
d491e468
 
 (use-package cl-format :ensure t)
 
33f3bc08
 (use-package eldoc :delight)
 
d491e468
 (use-package css-eldoc :ensure t)
 
 (use-package csv-mode :ensure t)
 
 (use-package eldoc-eval :ensure t)
 
b2c22b37
 (use-package highlight-parentheses
   :ensure t
   :delight
   :config
6486b4b0
   (global-highlight-parentheses-mode 1))
4db36da5
 
 
 
904d95db
 (defun fwoar/markdown-mode-hook ()
   (setf left-margin-width 10
         right-margin-width 10))
 (use-package markdown-mode
   :ensure t
   :config
   (add-hook 'markdown-mode-hook 'variable-pitch-mode)
   (add-hook 'markdown-mode-hook 'fwoar/markdown-mode-hook))
d491e468
 
 (use-package rainbow-delimiters :ensure t)
 
 (use-package ripgrep :ensure t)
 
 (use-package smartparens :ensure t :ensure t :config
3e7dea74
   (sp-pair "${" "}")
6486b4b0
   (sp-with-modes sp--lisp-modes
     (sp-local-pair "'" nil :actions nil)
     (sp-local-pair "`" nil :actions nil))
d491e468
   (add-hook 'smartparens-enabled-hook 'evil-smartparens-mode))
 
 (use-package web-mode :ensure t)
6486b4b0
 
d491e468
 (use-package yaml-mode :ensure t)
6d1928cb
 
33f3bc08
 (use-package yasnippet
   :ensure t
   :hook (prog-mode . yas-minor-mode)
   :config (yas-reload-all)
   )
 
78c923bf
 
c09e128e
 (use-package editorconfig
   :ensure t
b2c22b37
   :delight (editorconfig-mode " ec")
d491e468
   :config (editorconfig-mode 1))
 
4a94c38c
 (defun fwoar--activate-treemacs ()
   (interactive)
   (if (treemacs-is-treemacs-window-selected?)
       (delete-window)
     (treemacs-select-window)))
c09e128e
 
00af5f6f
 (defun fwoar--no-line-numbers ()
4b6a354c
   (display-line-numbers-mode -1))
538c576b
 
0a885cea
 (use-package treemacs
   :ensure t
   :config
05368492
   (setq treemacs-is-never-other-window t
         treemacs-no-png-images t)
4b6a354c
   (global-set-key (kbd "s-e") 'fwoar--activate-treemacs)
   (global-set-key (kbd "s-1") 'fwoar--activate-treemacs)
00af5f6f
   (add-hook 'treemacs-mode-hook 'fwoar--no-line-numbers)
4b6a354c
   )
0a885cea
 
 (use-package treemacs-evil
   :after treemacs evil
   :ensure t)
 
 (use-package treemacs-icons-dired
   :after treemacs dired
   :ensure t
   :config (treemacs-icons-dired-mode))
 
 (use-package treemacs-magit
   :after treemacs magit
   :ensure t)
cd516d74
 
7665abb0
 (progn ;; emacs-lisp stuff
   (modify-syntax-entry ?- "w" emacs-lisp-mode-syntax-table)
   (modify-syntax-entry ?_ "w" emacs-lisp-mode-syntax-table)
c09e128e
 
7665abb0
   (put 'narrow-to-page 'disabled nil)
   )
568340bd
 
4ae7c492
 ;;)
c09e128e
 
78c923bf
 
568340bd
 (global-set-key (kbd "s-v") 'yank)
 
5862f6da
 (setq custom-file "~/.emacs.d/custom.el")
b7bc1006
 (when (file-exists-p custom-file)
   (load-file custom-file))
4db36da5
 
6b10f3e8
 ;;(setq gc-cons-threshold (* 100 1024))
9efe4b5a
 
568340bd
 (put 'narrow-to-region
      'disabled
      nil)
 
 (global-set-key (kbd "C-x C-b")
                 'ibuffer)
cd516d74
 
b7bc1006
 (defvar url-pattern (when (file-exists-p "~/.pastebin-name")
8e1d34c2
                       (car (fwoar:read-sexps-in-file "~/.pastebin-name"))))
eb65d556
 
 (defun delete-mru-window ()
   (interactive)
   (delete-window
    (get-mru-window nil nil t)))
 
9e977a3a
 (add-to-list 'browse-url-filename-alist
              '("/Users/\\([^/]+\\)/\\(Sites\\|public_html\\)\\(/.*\\)" . "https://localhost/~\\1\\3"))
 
78c923bf
 (progn ;; narrowing
   (define-key global-map "\C-c]" "\C-u1\C-xnp")
9977c7bf
   (define-key global-map "\C-c[" "\C-u-1\C-xnp\M-<"))
78c923bf
 
 
49824555
 (defun fwoar/zenburn-css ()
   (interactive)
   (mapcar (lambda (desc)
538c576b
             (cl-destructuring-bind (name . value) desc
49824555
               (cl-format (current-buffer)
                          "--~a: ~a;~%"
                          (s-replace "+" "-plus-" name)
                          value)))
74337e9b
           fwoar-zenburn-default-colors-alist))
49824555
 
7665abb0
 (defun fwoar/camel-kebab (string)
49824555
   (let ((case-fold-search nil))
     (downcase
      (format "%c%s"
              (elt string 0)
              (or (when (> (length string) 1)
                    (s-replace-regexp "[A-Z]"
                                      "-\\&"
                                      string nil nil nil 1))
                  string)))))
 
 (defun fwoar/cc-camel-kebab (start end)
   (interactive "*r")
   (let ((target (buffer-substring start end)))
     (save-excursion
       (delete-region start end)
7665abb0
       (insert (fwoar/camel-kebab target)))))
49824555
 
3ea8aaa3
 (defun fwoar--find-package-json ()
   (expand-file-name
    (locate-dominating-file default-directory
                            (lambda (n)
                              (directory-files n nil "^package.json$")))))
 
 (defun find-package-json (default-directory)
   (interactive "D")
   (message "pakcage json: %s"(fwoar--find-package-json))
   (find-file (concat (fwoar--find-package-json)
                      "/package.json")))
 
 (cl-defmethod fwoar--find-system (&context (major-mode (derived-mode js-mode)))
   (find-package-json default-directory))
 
5b706a2b
 (comment
  (use-package org-brain :ensure t
    :init
    (setq org-brain-path "~/org-brain/")
37e85dec
 
5b706a2b
    :config
    (eval-after-load 'evil
      '(evil-set-initial-state 'org-brain-visualize-mode 'emacs))
b00b8b8c
 
5b706a2b
    (push '("B" "Brain" plain (function org-brain-goto-end)
            "* %i%?" :empty-lines 1)
          org-capture-templates)
b00b8b8c
 
5b706a2b
    (setq org-id-track-globally t
          org-id-locations-file "~/.emacs.d/.org-id-locations"
          org-brain-visualize-default-choices 'all
          org-brain-title-max-length 0)))
4e69f5ad
 
4c6e757b
 (setq diary-file (expand-file-name "~/diary"))
1d6e87c6
 
 (cl-defmacro fwoar/binding (setter target &body bindings)
   (declare (indent 2))
   (let ((target-sym (gensym)))
     `(let ((,target-sym ,target))
        ,(cons 'progn
               (mapcar (lambda (binding)
                         `(,setter ,target-sym ',(car binding) ,@(cdr binding)))
                       bindings)))))
 
 (defun make-info-window ()
   (setq mode-line-format nil)
45308d2c
   ;;(centaur-tabs-local-mode 1)
1d6e87c6
   (set-window-dedicated-p (selected-window) t)
   (when-let (w (window-in-direction 'above))
     (set-window-parameter w 'no-delete-other-windows t))
   (fwoar/binding set-window-parameter (selected-window)
     (no-other-window t)
     (no-delete-other-windows t))
   ())
e5c62efb
 
c4f32133
 (comment
  (use-package prolog)
  (use-package ediprolog
    :after prolog
    :ensure t
    :config
    (define-key prolog-mode-map (kbd "C-j") 'ediprolog-dwim)))
7138b578
 
1d052cdb
 (progn
   (require 'ansi-color)
   (defun colorize-compilation-buffer ()
     (toggle-read-only)
     (ansi-color-apply-on-region compilation-filter-start (point))
     (toggle-read-only))
   (add-hook 'compilation-filter-hook 'colorize-compilation-buffer))
6b10f3e8
 (put 'list-timers 'disabled nil)
70fd36cd
 
55eb3053
 (defun fwoar/center-defun ()
   (interactive)
   (cl-destructuring-bind (a . b) (bounds-of-thing-at-point 'defun)
     (save-excursion
       (let ((s (progn (goto-char a) (line-number-at-pos)))
             (e (progn (goto-char b) (line-number-at-pos))))
         (evil-scroll-line-to-center (+ s -1 (ceiling (- e s) 2)))))))
 
979ca560
 (use-package which-key-posframe
66289fe0
   :ensure t
   :config
979ca560
   (which-key-mode 1)
   (which-key-posframe-mode 1))
66289fe0
 
4c84787e
 (use-package nix-mode
   :ensure t)
dd399035
 
 (define-derived-mode zsh-mode sh-mode "ZSH" "Mode for zsh scripts"
   (setq-local sh-shell "zsh"))