rewrite emacs configuration
This commit is contained in:
parent
eba58fc407
commit
faeea539ce
8 changed files with 400 additions and 45 deletions
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
359
config/emacs/init.el
Normal file
359
config/emacs/init.el
Normal file
|
@ -0,0 +1,359 @@
|
||||||
|
;; -*- lexical-binding: t; -*-
|
||||||
|
;; Sako's terrible eMacs config!
|
||||||
|
;; Lots of things missing but its whats needed
|
||||||
|
;; TODO(sako):: Setup mu4e
|
||||||
|
;; TODO(sako):: Setup irc (erc/rcirc)
|
||||||
|
;; TODO(sako):: Setup elfeed
|
||||||
|
;; TODO(sako):: Setup elcord
|
||||||
|
|
||||||
|
|
||||||
|
;; --- Display Options ---
|
||||||
|
(scroll-bar-mode -1)
|
||||||
|
(tool-bar-mode -1)
|
||||||
|
(tooltip-mode -1)
|
||||||
|
(menu-bar-mode -1)
|
||||||
|
(set-fringe-mode 0)
|
||||||
|
(setq visible-bell nil)
|
||||||
|
(setq inhibit-startup-message t)
|
||||||
|
|
||||||
|
(repeat-mode 1)
|
||||||
|
(column-number-mode)
|
||||||
|
|
||||||
|
(setq display-line-numbers 'relative)
|
||||||
|
|
||||||
|
(dolist (mode '(text-mode-hook
|
||||||
|
prog-mode-hook
|
||||||
|
conf-mode-hook))
|
||||||
|
(add-hook mode (lambda () (display-line-numbers-mode 1))))
|
||||||
|
|
||||||
|
(set-face-attribute 'default nil
|
||||||
|
:font "JetBrainsMono NF"
|
||||||
|
:weight 'light
|
||||||
|
:height 120)
|
||||||
|
|
||||||
|
(setq frame-resize-pixelwise t)
|
||||||
|
|
||||||
|
(setq global-auto-revert-non-file-buffers t)
|
||||||
|
|
||||||
|
(global-auto-revert-mode 1)
|
||||||
|
|
||||||
|
(add-to-list 'default-frame-alist '(font . "JetBrainsMono NF"))
|
||||||
|
(set-frame-font "JetBrainsMono NF" nil t)
|
||||||
|
|
||||||
|
(fset 'yes-or-no-p 'y-or-n-p)
|
||||||
|
|
||||||
|
;; --- Extra options ---
|
||||||
|
(setq backup-directory-alist '(("." . "~/.emacs.d/backup"))
|
||||||
|
backup-by-copying t
|
||||||
|
version-control t
|
||||||
|
delete-old-versions t
|
||||||
|
delete-old-versions t
|
||||||
|
kept-new-versions 20
|
||||||
|
kept-old-version 5)
|
||||||
|
|
||||||
|
(setq native-comp-async-report-warnings-errors nil)
|
||||||
|
(add-to-list 'native-comp-eln-load-path (expand-file-name "eln-cache/" user-emacs-directory))
|
||||||
|
|
||||||
|
;; --- Package Setup ---
|
||||||
|
(require `package)
|
||||||
|
|
||||||
|
(setq package-archives `(("mepla" . "https://melpa.org/packages/")
|
||||||
|
("org" . "https://orgmode.org/elpa/")
|
||||||
|
("elpa" . "https://elpa.gnu.org/packages/")))
|
||||||
|
|
||||||
|
(setq use-package-always-ensure t)
|
||||||
|
|
||||||
|
(package-initialize)
|
||||||
|
(unless (package-installed-p 'use-package)
|
||||||
|
(progn
|
||||||
|
(package-refresh-contents)
|
||||||
|
(package-install 'use-package)))
|
||||||
|
|
||||||
|
;; --- Theme ---
|
||||||
|
(use-package cherry-blossom-theme
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(load-theme 'cherry-blossom t))
|
||||||
|
|
||||||
|
;; --- no-littering ---
|
||||||
|
|
||||||
|
(use-package no-littering
|
||||||
|
:config
|
||||||
|
(setq custom-file (if (boundp 'server-socket-dir)
|
||||||
|
(expand-file-name "custom.el" server-socket-dir)
|
||||||
|
(no-littering-expand-etc-file-name "custom.el")))
|
||||||
|
(when (file-exists-p custom-file)
|
||||||
|
(load custom-file t))
|
||||||
|
|
||||||
|
;; Don't litter project folders with backup files
|
||||||
|
(let ((backup-dir (no-littering-expand-var-file-name "backup/")))
|
||||||
|
(make-directory backup-dir t)
|
||||||
|
(setq backup-directory-alist
|
||||||
|
`(("\\`/tmp/" . nil)
|
||||||
|
("\\`/dev/shm/" . nil)
|
||||||
|
("." . ,backup-dir))))
|
||||||
|
|
||||||
|
(setq auto-save-default nil)
|
||||||
|
|
||||||
|
;; Tidy up auto-save files
|
||||||
|
(setq auto-save-default nil)
|
||||||
|
(let ((auto-save-dir (no-littering-expand-var-file-name "auto-save/")))
|
||||||
|
(make-directory auto-save-dir t)
|
||||||
|
(setq auto-save-file-name-transforms
|
||||||
|
`(("\\`/[^/]*:\\([^/]*/\\)*\\([^/]*\\)\\'"
|
||||||
|
,(concat temporary-file-directory "\\2") t)
|
||||||
|
("\\`\\(/tmp\\|/dev/shm\\)\\([^/]*/\\)*\\(.*\\)\\'" "\\3")
|
||||||
|
("." ,auto-save-dir t)))))
|
||||||
|
|
||||||
|
;; 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)))
|
||||||
|
|
||||||
|
;; --- Keybinds ---
|
||||||
|
(global-set-key (kbd "<escape>") 'keyboard-escape-quit)
|
||||||
|
|
||||||
|
;; --- helpful ---
|
||||||
|
(use-package helpful
|
||||||
|
:ensure t
|
||||||
|
:custom
|
||||||
|
(counsel-describe-function-function #'helpful-callable)
|
||||||
|
(counsel-describe-variable-function #'helpful-variable)
|
||||||
|
:bind (([remap describe-function] . helpful-function)
|
||||||
|
([remap describe-symbol] . helpful-symbol)
|
||||||
|
([remap describe-variable] . helpful-variable)
|
||||||
|
([remap describe-command] . helpful-command)
|
||||||
|
([remap describe-key] . helpful-key)))
|
||||||
|
|
||||||
|
;; --- Startup Dashboard ---
|
||||||
|
(use-package enlight
|
||||||
|
:ensure t
|
||||||
|
:custom
|
||||||
|
(enlight-content
|
||||||
|
(concat
|
||||||
|
(propertize "MENU" 'face 'highlight)
|
||||||
|
"\n"
|
||||||
|
(enlight-menu
|
||||||
|
'(("Org Mode"
|
||||||
|
("Org-Agenda (current day)" (org-agenda nil "a") "a"))
|
||||||
|
("Other"
|
||||||
|
("Projects" project-switch-project "p"))))))
|
||||||
|
:config
|
||||||
|
(setopt initial-buffer-choice #'enlight))
|
||||||
|
|
||||||
|
;; --- Completition ---
|
||||||
|
(use-package vertico
|
||||||
|
:ensure t
|
||||||
|
:custom
|
||||||
|
(vertico-cycle t)
|
||||||
|
:init
|
||||||
|
(require 'vertico-directory)
|
||||||
|
(vertico-mode))
|
||||||
|
|
||||||
|
(use-package marginalia
|
||||||
|
:after vertico
|
||||||
|
:ensure t
|
||||||
|
:init
|
||||||
|
(marginalia-mode))
|
||||||
|
|
||||||
|
(use-package consult
|
||||||
|
:after vertico
|
||||||
|
:ensure t
|
||||||
|
:bind (("C-s" . consult-line)
|
||||||
|
("C-M-j" . consult-buffer)
|
||||||
|
("C-x C-b" . consult-buffer)))
|
||||||
|
|
||||||
|
(use-package orderless
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(orderless-define-completion-style orderless+initialism
|
||||||
|
(orderless-matching-styles '(orderless-initialism
|
||||||
|
orderless-literal
|
||||||
|
orderless-regexp)))
|
||||||
|
|
||||||
|
(setq completion-styles '(orderless)
|
||||||
|
completion-category-defaults nil
|
||||||
|
orderless-matching-styles '(orderless-literal orderless-regexp)
|
||||||
|
completion-category-overrides
|
||||||
|
'((file (styles partial-completion)))))
|
||||||
|
|
||||||
|
(use-package corfu
|
||||||
|
:ensure t
|
||||||
|
:bind (:map corfu-map
|
||||||
|
("TAB" . corfu-insert)
|
||||||
|
([tab] . corfu-insert)
|
||||||
|
("RET" . nil))
|
||||||
|
:config
|
||||||
|
(setq corfu-cycle t
|
||||||
|
corfu-quit-at-boundary t
|
||||||
|
corfu-auto t
|
||||||
|
corfu-quit-no-match t
|
||||||
|
corfu-popupinfo-delay '(1.0 . 0.5))
|
||||||
|
(add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter)
|
||||||
|
:init
|
||||||
|
(global-corfu-mode)
|
||||||
|
(corfu-popupinfo-mode))
|
||||||
|
|
||||||
|
(use-package nerd-icons-corfu
|
||||||
|
:ensure t
|
||||||
|
:after corfu)
|
||||||
|
|
||||||
|
|
||||||
|
;; --- Pinentry ---
|
||||||
|
(unless (eq system-type 'windows-nt)
|
||||||
|
(use-package pinentry
|
||||||
|
:config
|
||||||
|
(setq epa-pinentry-mode 'loopback)
|
||||||
|
(pinentry-start)))
|
||||||
|
|
||||||
|
;; --- Passwords ---
|
||||||
|
(use-package password-store
|
||||||
|
:ensure t
|
||||||
|
:bind (("C-c p p" . password-store-copy)
|
||||||
|
("C-c p i" . password-store-insert)
|
||||||
|
("C-c p g" . password-store-generate)))
|
||||||
|
(auth-source-pass-enable)
|
||||||
|
|
||||||
|
;; --- Terminal ---
|
||||||
|
(use-package vterm
|
||||||
|
:ensure t
|
||||||
|
:bind ("<f1>" . vterm)
|
||||||
|
:config
|
||||||
|
(setq vterm-max-scrollback 10000))
|
||||||
|
|
||||||
|
;; --- Parens ---
|
||||||
|
(use-package smartparens
|
||||||
|
:ensure t
|
||||||
|
:hook (prog-mode . smartparens-mode)
|
||||||
|
:config
|
||||||
|
(sp-use-smartparens-bindings))
|
||||||
|
|
||||||
|
(use-package rainbow-delimiters
|
||||||
|
:ensure t
|
||||||
|
:hook (prog-mode . rainbow-delimiters-mode))
|
||||||
|
|
||||||
|
;; --- M-x compile ---
|
||||||
|
(setq compilation-scroll-output t)
|
||||||
|
|
||||||
|
(setq compilation-environment '("TERM=xterm-256color"))
|
||||||
|
|
||||||
|
(defun sk/advice-compilation-filter (f proc string)
|
||||||
|
(funcall f proc (xterm-color-filter string)))
|
||||||
|
|
||||||
|
(advice-add 'compilation-filter :around #'sk/advice-compilation-filter)
|
||||||
|
|
||||||
|
(defun sk/auto-recompile-buffer ()
|
||||||
|
(interactive)
|
||||||
|
(if (member #'recompile after-save-hook)
|
||||||
|
(remove-hook 'after-save-hook #'recompile t)
|
||||||
|
(add-hook 'after-save-hook #'recompile nil t)))
|
||||||
|
|
||||||
|
;; --- project.el ---
|
||||||
|
(setq project-switch-commands '((project-find-file "Find file" "f")
|
||||||
|
(project-find-dir "Find dir" "d")
|
||||||
|
(project-dired "Dired" "D")
|
||||||
|
(consult-ripgrep "ripgrep" "g")
|
||||||
|
(magit-project-status "Magit" "m")))
|
||||||
|
|
||||||
|
;; --- magit ---
|
||||||
|
(use-package magit
|
||||||
|
:ensure t
|
||||||
|
:custom
|
||||||
|
(magit-show-long-lines-warning nil)
|
||||||
|
(magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1))
|
||||||
|
|
||||||
|
;; --- flycheck ---
|
||||||
|
(use-package flycheck
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(global-flycheck-mode +1))
|
||||||
|
|
||||||
|
;; --- direnv ---
|
||||||
|
(when (eq system-type 'gnu/linux)
|
||||||
|
(use-package envrc
|
||||||
|
:ensure t
|
||||||
|
:hook (after-init . envrc-global-mode)))
|
||||||
|
|
||||||
|
;; --- editorconfig ---
|
||||||
|
(use-package editorconfig
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(editorconfig-mode 1))
|
||||||
|
|
||||||
|
;; --- wakatime ---
|
||||||
|
(use-package wakatime-mode
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(global-wakatime-mode))
|
||||||
|
|
||||||
|
;; --- formatting ---
|
||||||
|
(use-package aphelelia
|
||||||
|
:ensure t
|
||||||
|
:hook (prog-mode . aphelia-mode))
|
||||||
|
|
||||||
|
;; --- LSP ---
|
||||||
|
(use-package eglot
|
||||||
|
:ensure t
|
||||||
|
:bind (:map eglot-mode-map
|
||||||
|
("C-c C-a" . eglot-code-actions)
|
||||||
|
("C-c C-r" . eglot-rename))
|
||||||
|
|
||||||
|
:config
|
||||||
|
(setq eglot-autoshutdown t
|
||||||
|
eglot-confirm-server-initiated-edits nil))
|
||||||
|
|
||||||
|
;; --- LSP Booster ---
|
||||||
|
(when (eq system-type 'gnu/linux)
|
||||||
|
(use-package eglot-booster
|
||||||
|
:ensure nil
|
||||||
|
:config (eglot-booster-mode)))
|
||||||
|
|
||||||
|
;; --- Org-Mode ---
|
||||||
|
(use-package org
|
||||||
|
:ensure t
|
||||||
|
:bind (("C-c o a" . org-agenda))
|
||||||
|
:hook (org-mode . org-indent-mode)
|
||||||
|
:config
|
||||||
|
;; replace ... with >
|
||||||
|
(setq org-ellipsis " >")
|
||||||
|
(setq org-startup-with-inline-images t)
|
||||||
|
(setq org-todo-keywords
|
||||||
|
'((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)")
|
||||||
|
(sequence "BACKLOG(b)" "PLAN(p)" "READY(r)" "ACTIVE(a)" "REVIEW(v)" "WAIT(w@/!)" "HOLD(h)" "|" "COMPLETED(c)" "CANCELED(k@)")))
|
||||||
|
|
||||||
|
;; --- Org Agenda ---
|
||||||
|
(setq org-agenda-files
|
||||||
|
'("~/org/tasks.org"
|
||||||
|
"~/org/school.org"
|
||||||
|
"~/org/daily.org"
|
||||||
|
"~/org/irl.org"
|
||||||
|
"~/org/work.org"))
|
||||||
|
|
||||||
|
(setq org-agenda-custom-commands
|
||||||
|
`(("s" "School" tags-todo "+school")))
|
||||||
|
|
||||||
|
;; --- org2pdf ---
|
||||||
|
(setq org-latex-compiler "lualatex")
|
||||||
|
(setq org-preview-latex-default-process 'dvisvgm))
|
||||||
|
|
||||||
|
;; --- Org-Roam ---
|
||||||
|
(use-package org-roam
|
||||||
|
:ensure t
|
||||||
|
:custom
|
||||||
|
(org-roam-directory "~/org/notes")
|
||||||
|
:bind (("C-c n l" . org-roam-buffer-toggle)
|
||||||
|
("C-c n f" . org-roam-node-find)
|
||||||
|
("C-c n i" . org-roam-node-insert))
|
||||||
|
:config
|
||||||
|
(org-roam-setup))
|
||||||
|
|
||||||
|
;; --- Org Extras ---
|
||||||
|
(use-package org-wild-notifier
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(setq alert-default-style 'libnotifiy)
|
||||||
|
(setq org-wild-notifier-alert-time 30)
|
||||||
|
(org-wild-notifier-mode))
|
||||||
|
|
||||||
|
(use-package org-pomodoro
|
||||||
|
:ensure t)
|
|
@ -12,18 +12,18 @@ let
|
||||||
});
|
});
|
||||||
|
|
||||||
myEmacs = pkgs.emacsWithPackagesFromUsePackage {
|
myEmacs = pkgs.emacsWithPackagesFromUsePackage {
|
||||||
config = ../../../../config/emacs/emacs.org;
|
config = ../../../../config/emacs/init.el;
|
||||||
package = cfg.package;
|
package = cfg.package;
|
||||||
alwaysEnsure = true;
|
# alwaysEnsure = true;
|
||||||
alwaysTangle = true;
|
# alwaysTangle = true;
|
||||||
extraEmacsPackages = epkgs: [
|
extraEmacsPackages = epkgs: [
|
||||||
epkgs.use-package
|
epkgs.use-package
|
||||||
epkgs.mu4e
|
# epkgs.mu4e
|
||||||
# TODO make this check if EXWM is enabled or not
|
# TODO make this check if EXWM is enabled or not
|
||||||
epkgs.exwm
|
# epkgs.exwm
|
||||||
# epkgs.sakomodules
|
# epkgs.sakomodules
|
||||||
epkgs.eglot-booster
|
epkgs.eglot-booster
|
||||||
epkgs.app-launcher
|
# epkgs.app-launcher
|
||||||
];
|
];
|
||||||
# add eglot-lsp-booster package
|
# add eglot-lsp-booster package
|
||||||
override = epkgs:
|
override = epkgs:
|
||||||
|
@ -41,23 +41,23 @@ let
|
||||||
hash = "sha256-vF34ZoUUj8RENyH9OeKGSPk34G6KXZhEZozQKEcRNhs=";
|
hash = "sha256-vF34ZoUUj8RENyH9OeKGSPk34G6KXZhEZozQKEcRNhs=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
app-launcher = epkgs.melpaBuild {
|
# app-launcher = epkgs.melpaBuild {
|
||||||
pname = "app-launcher";
|
# pname = "app-launcher";
|
||||||
version = "1.0";
|
# version = "1.0";
|
||||||
|
|
||||||
commit = "d5015e394b0a666a8c7c4d4bdf786266e773b145";
|
# commit = "d5015e394b0a666a8c7c4d4bdf786266e773b145";
|
||||||
|
|
||||||
recipe = pkgs.writeText "recipe" ''
|
# recipe = pkgs.writeText "recipe" ''
|
||||||
(app-launcher :repo "SebastienWae/app-launcher" :fetcher github)
|
# (app-launcher :repo "SebastienWae/app-launcher" :fetcher github)
|
||||||
'';
|
# '';
|
||||||
|
|
||||||
src = pkgs.fetchFromGitHub {
|
# src = pkgs.fetchFromGitHub {
|
||||||
owner = "SebastienWae";
|
# owner = "SebastienWae";
|
||||||
repo = "app-launcher";
|
# repo = "app-launcher";
|
||||||
rev = "d5015e394b0a666a8c7c4d4bdf786266e773b145";
|
# rev = "d5015e394b0a666a8c7c4d4bdf786266e773b145";
|
||||||
hash = "sha256-d0d5rkuxK/zKpSCa1UTdpV7o+RDDsEeab56rI7xUJ1E=";
|
# hash = "sha256-d0d5rkuxK/zKpSCa1UTdpV7o+RDDsEeab56rI7xUJ1E=";
|
||||||
};
|
# };
|
||||||
};
|
# };
|
||||||
};
|
};
|
||||||
# override for modules
|
# override for modules
|
||||||
# override = epkgs: epkgs // {
|
# override = epkgs: epkgs // {
|
||||||
|
@ -104,16 +104,16 @@ in {
|
||||||
# direnv
|
# direnv
|
||||||
direnv
|
direnv
|
||||||
# mu for email
|
# mu for email
|
||||||
mu
|
# mu
|
||||||
# email sync
|
# email sync
|
||||||
offlineimap
|
# offlineimap
|
||||||
(isync.override { withCyrusSaslXoauth2 = true; })
|
# (isync.override { withCyrusSaslXoauth2 = true; })
|
||||||
# oauth
|
# oauth
|
||||||
oama
|
# oama
|
||||||
# protonmail
|
# protonmail
|
||||||
hydroxide
|
# hydroxide
|
||||||
# send mail
|
# send mail
|
||||||
msmtp
|
# msmtp
|
||||||
# org to pdf
|
# org to pdf
|
||||||
tex
|
tex
|
||||||
# lsp
|
# lsp
|
||||||
|
@ -126,16 +126,16 @@ in {
|
||||||
wakatime-cli
|
wakatime-cli
|
||||||
];
|
];
|
||||||
|
|
||||||
systemd.services.hydroxide = {
|
# systemd.services.hydroxide = {
|
||||||
enable = true;
|
# enable = true;
|
||||||
description = "Unofficial Protonmail Bridge";
|
# description = "Unofficial Protonmail Bridge";
|
||||||
serviceConfig = {
|
# serviceConfig = {
|
||||||
User = "sako";
|
# User = "sako";
|
||||||
Type = "simple";
|
# Type = "simple";
|
||||||
};
|
# };
|
||||||
script = "${pkgs.hydroxide}/bin/hydroxide serve";
|
# script = "${pkgs.hydroxide}/bin/hydroxide serve";
|
||||||
wantedBy = [ "multi-user.target" ];
|
# wantedBy = [ "multi-user.target" ];
|
||||||
};
|
# };
|
||||||
|
|
||||||
# services.pantalaimon-headless.instances = {
|
# services.pantalaimon-headless.instances = {
|
||||||
# "wires.cafe" = {
|
# "wires.cafe" = {
|
||||||
|
@ -147,16 +147,12 @@ in {
|
||||||
|
|
||||||
home-manager.users.sako = { lib, ... }: {
|
home-manager.users.sako = { lib, ... }: {
|
||||||
home.file = {
|
home.file = {
|
||||||
".emacs.d/init.el".source = pkgs.runCommand "init.el" { } ''
|
".emacs.d/init.el".source = ../../../../config/emacs/init.el;
|
||||||
cp ${../../../../config/emacs/emacs.org} emacs.org
|
# ".emacs.d/icon.png".source = ../../../../config/emacs/icon.png;
|
||||||
${myEmacs}/bin/emacs -Q --batch ./emacs.org -f org-babel-tangle
|
|
||||||
mv init.el $out
|
|
||||||
'';
|
|
||||||
".emacs.d/icon.png".source = ../../../../config/emacs/icon.png;
|
|
||||||
# ".mbsyncrc".source = ../../../../config/emacs/.mbsyncrc;
|
# ".mbsyncrc".source = ../../../../config/emacs/.mbsyncrc;
|
||||||
".offlineimaprc".source = ../../../../config/emacs/.offlineimaprc;
|
# ".offlineimaprc".source = ../../../../config/emacs/.offlineimaprc;
|
||||||
".offlineimap.py".source = ../../../../config/emacs/.offlineimap.py;
|
# ".offlineimap.py".source = ../../../../config/emacs/.offlineimap.py;
|
||||||
".msmtprc".source = ../../../../config/emacs/.msmtprc;
|
# ".msmtprc".source = ../../../../config/emacs/.msmtprc;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue