;; NOTE: init.el is now generated from Emacs.org. Please edit that file ;; in Emacs and init.el will be generated automatically! ;; You will most likely need to adjust this font size for your system! ;; Make frame transparency overridable (defvar efs/frame-transparency '(90 . 90)) ;; The default is 800 kilobytes. Measured in bytes. (setq gc-cons-threshold (* 50 1000 1000)) (defun efs/display-startup-time () (message "Emacs loaded in %s with %d garbage collections." (format "%.2f seconds" (float-time (time-subtract after-init-time before-init-time))) gcs-done)) (add-hook 'emacs-startup-hook #'efs/display-startup-time) ;; NOTE: If you want to move everything out of the ~/.emacs.d folder ;; reliably, set `user-emacs-directory` before loading no-littering! ;(setq user-emacs-directory "~/.cache/emacs") (use-package no-littering) (use-package bind-key :ensure t :config (add-to-list 'same-window-buffer-names "*Personal Keybindings*")) ;; no-littering doesn't set this by default so we must place ;; auto save files in the same path as it uses for sessions (setq auto-save-file-name-transforms `((".*" ,(no-littering-expand-var-file-name "auto-save/") t))) (setq inhibit-startup-message t) (scroll-bar-mode -1) ; Disable visible scrollbar (tool-bar-mode -1) ; Disable the toolbar (tooltip-mode -1) ; Disable tooltips (set-fringe-mode 10) ; Give some breathing room (menu-bar-mode -1) ; Disable the menu bar ;; Set up the visible bell (setq visible-bell t) (column-number-mode) (global-display-line-numbers-mode t) ;; Set frame transparency (set-frame-parameter (selected-frame) 'alpha efs/frame-transparency) (add-to-list 'default-frame-alist `(alpha . ,efs/frame-transparency)) (set-frame-parameter (selected-frame) 'fullscreen 'maximized) (add-to-list 'default-frame-alist '(fullscreen . maximized)) ;; Disable line numbers for some modes (dolist (mode '(org-mode-hook term-mode-hook shell-mode-hook treemacs-mode-hook eshell-mode-hook)) (add-hook mode (lambda () (display-line-numbers-mode 0)))) ;; Make ESC quit prompts (global-set-key (kbd "") 'keyboard-escape-quit) (use-package treesit-auto :config (global-treesit-auto-mode)) (use-package prisma-mode) (add-hook 'prisma-mode-hook 'lsp) (use-package lsp-tailwindcss :init (setq lsp-tailwindcss-add-on-mode t)) (use-package general :after evil :config (general-create-definer :keymaps '(normal insert visual emacs) :prefix "SPC" :global-prefix "C-SPC")) (use-package evil :init (setq evil-want-integration t) (setq evil-want-keybinding nil) (setq evil-want-C-u-scroll t) (setq evil-want-C-i-jump nil) :config (evil-mode 1) (define-key evil-insert-state-map (kbd "C-g") 'evil-normal-state) (define-key evil-insert-state-map (kbd "C-h") 'evil-delete-backward-char-and-join) ;; Use visual line motions even outside of visual-line-mode buffers (evil-global-set-key 'motion "j" 'evil-next-visual-line) (evil-global-set-key 'motion "k" 'evil-previous-visual-line) (evil-set-initial-state 'messages-buffer-mode 'normal) (evil-set-initial-state 'dashboard-mode 'normal)) (use-package evil-collection :after evil :config (evil-collection-init)) (use-package command-log-mode :commands command-log-mode) (use-package doom-themes :init (load-theme 'doom-tokyo-night t)) (use-package all-the-icons) (use-package doom-modeline :init (doom-modeline-mode 1) :custom ((doom-modeline-height 15))) (use-package which-key :defer 0 :diminish which-key-mode :config (which-key-mode) (setq which-key-idle-delay 1)) (use-package ivy :diminish :config (ivy-mode 1)) (use-package ivy-rich :after ivy :init (ivy-rich-mode 1)) (use-package counsel :custom (counsel-linux-app-format-function #'counsel-linux-app-format-function-name-only) :config (counsel-mode 1)) (use-package ivy-prescient :after counsel :custom (ivy-prescient-enable-filtering nil) :config ;; Uncomment the following line to have sorting remembered across sessions! ;(prescient-persist-mode 1) (ivy-prescient-mode 1)) (add-hook 'lsp-mode-hook #'smartparens-mode) (use-package helpful :commands (helpful-callable helpful-variable helpful-command helpful-key) :custom (counsel-describe-function-function #'helpful-callable) (counsel-describe-variable-function #'helpful-variable)) (use-package hydra :defer t) (use-package lsp-mode :after which-key :commands (lsp lsp-deferred) :config (lsp-enable-which-key-integration t)) (use-package lsp-ui :hook (lsp-mode . lsp-ui-mode) :custom (lsp-ui-doc-position 'bottom)) (use-package lsp-treemacs :after lsp) (use-package lsp-ivy :after lsp) (use-package typescript-ts-mode :config (setq typescript-indent-level 2)) (use-package company :after lsp-mode :hook (lsp-mode . company-mode) :custom (company-minimum-prefix-length 1) (company-idle-delay 0.0)) (use-package company-box :hook (company-mode . company-box-mode)) (use-package projectile :diminish projectile-mode :config (projectile-mode) :custom ((projectile-completion-system 'ivy)) :init ;; NOTE: Set this to the folder where you keep your Git repos! (when (file-directory-p "~/Projects/Code") (setq projectile-project-search-path '("~/Projects/Code"))) (setq projectile-switch-project-action #'projectile-dired)) (use-package counsel-projectile :after projectile :config (counsel-projectile-mode)) (use-package magit :commands magit-status :custom (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)) ;; NOTE: Make sure to configure a GitHub token before using this package! ;; - https://magit.vc/manual/forge/Token-Creation.html#Token-Creation ;; - https://magit.vc/manual/ghub/Getting-Started.html#Getting-Started (use-package forge :after magit) (use-package rainbow-delimiters :hook (prog-mode . rainbow-delimiters-mode)) (defun efs/configure-eshell () ;; Save command history when commands are entered (add-hook 'eshell-pre-command-hook 'eshell-save-some-history) ;; Truncate buffer for performance (add-to-list 'eshell-output-filter-functions 'eshell-truncate-buffer) ;; Bind some useful keys for evil-mode (evil-define-key '(normal insert visual) eshell-mode-map (kbd "C-r") 'counsel-esh-history) (evil-define-key '(normal insert visual) eshell-mode-map (kbd "") 'eshell-bol) (evil-normalize-keymaps) (setq eshell-history-size 10000 eshell-buffer-maximum-lines 10000 eshell-hist-ignoredups t eshell-scroll-to-bottom-on-input t)) (use-package dired :ensure nil :commands (dired dired-jump) :config (evil-collection-define-key 'normal 'dired-mode-map "h" 'dired-single-up-directory "l" 'dired-single-buffer)) (use-package dired-single :commands (dired dired-jump)) (use-package all-the-icons-dired :hook (dired-mode . all-the-icons-dired-mode)) (use-package dired-open :commands (dired dired-jump) :config ;; Doesn't work as expected! ;;(add-to-list 'dired-open-functions #'dired-open-xdg t) (setq dired-open-extensions '(("png" . "feh") ("mkv" . "mpv")))) ;; Make gc pauses faster by decreasing the threshold. (setq gc-cons-threshold (* 2 1000 1000)) (use-package prisma-mode) (add-hook 'prisma-mode-hook 'lsp) (use-package lsp-tailwindcss :init (setq lsp-tailwindcss-add-on-mode t)) (use-package typescript-ts-mode :hook (typescript-ts-mode . lsp-mode))