Moves Org and LaTeX config to its own module

This commit is contained in:
willemml 2023-11-08 10:37:31 -08:00
parent 6d25682e9f
commit 5689e42246
Signed by: willemml
GPG key ID: C3DE5DF6198DACBD
5 changed files with 304 additions and 262 deletions

View file

@ -0,0 +1,287 @@
{
pkgs,
lib,
config,
...
}: let
enabled = config.custom.enableOrgTex;
in {
options.custom.enableOrgTex = lib.mkEnableOption "Enable Emacs Org and LaTeX configuration";
config = lib.mkIf enabled (let
aspellPackage = pkgs.aspellWithDicts (d: [d.en d.en-science d.en-computers d.fr]);
texliveset = pkgs.texlive.combine {
inherit
(pkgs.texlive)
scheme-basic
babel
amscls
amsmath
biber
biblatex
biblatex-mla
block
cancel
caption
capt-of
csquotes
enotez
enumitem
etex
etoolbox
fancyhdr
float
fontaxes
graphics
hanging
hyperref
latex
latexindent
latexmk
logreq
metafont
mlacls
newtx
pdflscape
pdfpages
preprint
psnfss
ragged2e
titlesec
tools
translations
ulem
url
wrapfig
xstring
xkeyval
;
};
in {
home.packages = with pkgs; [
texliveset
aspellPackage
gnuplot
plantuml
];
programs.emacs.extraPackages = let
org-auctex = pkgs.emacsPackages.trivialBuild rec {
pname = "org-auctex";
version = "e1271557b9f36ca94cabcbac816748e7d0dc989c";
buildInputs = [pkgs.emacsPackages.auctex];
src = pkgs.fetchFromGitHub {
owner = "karthink";
repo = pname;
rev = version;
sha256 = "sha256-cMAhwybnq5HA1wOaUqDPML3nnh5m1iwEETTPWqPbAvw=";
};
};
in (with pkgs.emacsPackages; [
org-auctex
auctex
cdlatex
citeproc
graphviz-dot-mode
ivy-bibtex
gnuplot
htmlize
org-auctex
org-contrib
org-download
pdf-tools
plantuml-mode
]);
home.file.".emacs.d/org-init.el".text =
/*
elisp
*/
''
(require 'cdlatex)
(require 'citeproc)
(require 'gnuplot)
(require 'gnuplot-context)
(require 'graphviz-dot-mode)
(require 'htmlize)
(require 'ivy-bibtex)
(require 'ob-dot)
(require 'ob-emacs-lisp)
(require 'ob-gnuplot)
(require 'ob-matlab)
(require 'ob-python)
(require 'ob-shell)
(require 'oc)
(require 'oc-basic)
(require 'oc-csl)
(require 'oc-natbib)
(require 'org-auctex)
(require 'org-contrib)
(require 'org-download)
(require 'ox-latex)
(require 'ox-publish)
(require 'pdf-tools)
(require 'plantuml-mode)
(require 'tex)
(autoload 'gnuplot-mode "gnuplot" "Gnuplot major mode" t)
(autoload 'gnuplot-make-buffer "gnuplot" "open a buffer in gnuplot-mode" t)
(setq auto-mode-alist (append '(("\\.gp$" . gnuplot-mode)) auto-mode-alist))
(define-key graphviz-dot-mode-map (kbd "C-c C-y") 'graphviz-dot-indent-graph)
(defvar zotero-bibliography (expand-file-name "zotero.bib" org-directory))
(defvar ivy-bibtex-bibliography (list zotero-bibliography))
(setq reftex-default-bibliography (list zotero-bibliography))
(setq bibtex-completion-pdf-field "file")
(add-hook 'LaTeX-mode-hook 'turn-on-cdlatex)
(add-hook 'LaTeX-mode (lambda ()
(turn-on-reftex)))
(setq TeX-PDF-mode t
TeX-auto-save t
TeX-parse-self t)
(setq org-babel-octave-shell-command "octave -q")
(setq org-babel-python-command "python3.10")
(setq-default python-indent-guess-indent-offset-verbose nil)
(defun my/org-babel-execute:python-session (body params)
"Initiate a python session before executing org babel blocks that use sessions.
BODY is the content of the org-babel block and PARAMS are any parameters specified."
(let ((session-name (cdr (assq :session params))))
(when (not (eq session-name "none"))
(org-babel-python-initiate-session session-name))))
(advice-add #'org-babel-execute:python :before #'my/org-babel-execute:python-session)
(defun my/indent-org-block-automatically ()
"Indent the current org code block."
(interactive)
(when (org-in-src-block-p)
(org-edit-special)
(indent-region (point-min) (point-max))
(org-edit-src-exit)))
(defun my/org-force-open-current-window ()
"Open a link using 'org-open-at-point' in current window."
(interactive)
(let ((org-link-frame-setup
(quote
((vm . vm-visit-folder)
(vm-imap . vm-visit-imap-folder)
(gnus . gnus)
(file . find-file)
(wl . wl)))
))
(org-open-at-point)))
(defun my/follow-org-link (arg)
"Follow a link in orgmode If ARG is given.
Opens in new window otherwise opens in current window."
(interactive "P")
(if arg
(org-open-at-point)
(my/org-force-open-current-window)))
(defun krofna-hack ()
"Toggle latex fragments after exiting closing them."
(when (looking-back (rx "$ "))
(save-excursion
(backward-char 1)
(org-latex-preview))))
(global-set-key (kbd "C-c n a") 'org-agenda)
(setq org-agenda-start-on-weekday nil)
(define-key org-mode-map (kbd "C-c C-o") 'my/follow-org-link)
(define-key org-mode-map (kbd "C-c C-y") 'my/indent-org-block-automatically)
(define-key org-mode-map (kbd "C-c ]") 'org-cite-insert)
(add-hook 'org-babel-after-execute-hook 'org-redisplay-inline-images)
(add-hook 'org-mode-hook 'visual-line-mode)
(add-hook 'org-mode-hook 'org-cdlatex-mode)
(add-hook 'org-mode-hook
(lambda ()
(add-hook 'post-self-insert-hook #'krofna-hack 'append 'local)))
(add-to-list 'org-latex-classes
'("mla"
"\\documentclass{mla}"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
(add-to-list 'org-latex-classes
'("letter"
"\\documentclass{letter}"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")))
(plist-put org-format-latex-options :scale 3)
(setq org-agenda-files (list org-directory (expand-file-name "ubc" org-directory)))
(setq org-agenda-tags-column 0)
(setq org-auto-align-tags nil)
(setq org-fold-catch-invisible-edits 'show-and-error)
(setq org-cite-export-processors '((t basic)))
(setq org-cite-global-bibliography (list zotero-bibliography))
(setq org-confirm-babel-evaluate nil)
(setq org-ellipsis "")
(setq org-export-with-tags nil)
(setq org-hide-emphasis-markers t)
(setq org-highlight-latex-and-related '(latex))
(setq org-html-head-include-default-style nil)
(setq org-html-head-include-scripts nil)
(setq org-html-validation-link nil)
(setq org-image-actual-width 300)
(setq org-insert-heading-respect-content t)
(setq org-latex-pdf-process '("latexmk -pdflatex='pdflatex -interaction nonstopmode' -pdf -bibtex -f %f"))
(setq org-pretty-entities t)
(setq org-preview-latex-default-process 'dvisvgm)
(setq org-special-ctrl-a/e t)
(setq org-src-fontify-natively t)
(setq org-src-preserve-indentation t)
(setq org-src-tab-acts-natively t)
(setq org-src-window-setup 'current-window)
(setq org-tags-column 0)
(setq org-agenda-time-grid
'((daily today require-timed)
(800 1000 1200 1400 1600 1800 2000)
" " ""))
(setq org-exports-dir (expand-file-name "exports" org-directory))
(setq org-publish-project-alist
(list (cons "html"
(list :base-directory org-directory
:base-extension "org"
:htmlized-source t
:recursive t
:publishing-directory org-exports-dir
:publishing-function 'org-html-publish-to-html))
(cons "pdf"
(list :base-directory org-directory
:base-extension "org"
:recursive t
:publishing-directory org-exports-dir
:publishing-function 'org-latex-publish-to-pdf))
(cons "all" '(:components ("html" "pdf")))))
(add-hook 'org-mode-hook 'org-auctex-mode)
(add-hook 'dired-mode-hook 'org-download-enable)
(setq-default org-download-image-dir (expand-file-name "images" org-directory))
(add-hook 'org-mode-hook 'org-modern-mode)
(setq-default pdf-view-display-size 'fit-width)
(defvar pdf-annot-activate-created-annotations t)
(setq plantuml-default-exec-mode 'executable)
'';
});
}

View file

@ -23,4 +23,16 @@ in rec {
MAILDIR = "${config.home.homeDirectory}/Maildir";
};
};
custom.enableOrgTex = lib.mkDefault true;
home.file = {
".config/nixpkgs/config.nix".text = ''
# -*-nix-*-
{
nixpkgs.config.allowUnfreePredicate = (_: true);
allowUnfree = true;
}
'';
};
}

View file

@ -17,53 +17,6 @@
yarn
];
octave-wp = pkgs.octave.withPackages (p: with p; [symbolic]);
texliveset = pkgs.texlive.combine {
inherit
(pkgs.texlive)
scheme-basic
babel
amscls
amsmath
biber
biblatex
biblatex-mla
block
cancel
caption
capt-of
csquotes
enotez
enumitem
etex
etoolbox
fancyhdr
float
fontaxes
graphics
hanging
hyperref
latex
latexindent
latexmk
logreq
metafont
mlacls
newtx
pdflscape
pdfpages
preprint
psnfss
ragged2e
titlesec
tools
translations
ulem
url
wrapfig
xstring
xkeyval
;
};
fenix-rust = pkgs.fenix.combine (with pkgs.fenix; [
latest.toolchain
targets.thumbv7em-none-eabihf.latest.rust-std

View file

@ -3,7 +3,6 @@
pkgs,
...
}: let
aspellPackage = pkgs.aspellWithDicts (d: [d.en d.en-science d.en-computers d.fr]);
emacsPackage =
(pkgs.emacsPackagesFor pkgs.emacs29).emacsWithPackages
(epkgs:
@ -19,19 +18,6 @@
sha256 = "sha256-6aX2S4cUop1rdxweIF5f1qrgNmYd1mtWgT9T1Q1s2h8=";
};
};
org-auctex = epkgs.trivialBuild rec {
pname = "org-auctex";
version = "e1271557b9f36ca94cabcbac816748e7d0dc989c";
buildInputs = [epkgs.auctex];
src = pkgs.fetchFromGitHub {
owner = "karthink";
repo = pname;
rev = version;
sha256 = "sha256-cMAhwybnq5HA1wOaUqDPML3nnh5m1iwEETTPWqPbAvw=";
};
};
lean4-mode = epkgs.trivialBuild rec {
pname = "lean4-mode";
version = "d1c936409ade7d93e67107243cbc0aa55cda7fd5";
@ -52,9 +38,6 @@
in [
all-the-icons
all-the-icons-dired
auctex
cdlatex
citeproc
company-mode
company-sourcekit
counsel
@ -64,11 +47,7 @@
f
flycheck
format-all
gnuplot
graphviz-dot-mode
htmlize
ivy
ivy-bibtex
lean4-mode
lsp-mode
lua-mode
@ -78,12 +57,7 @@
nix-mode
nix-update
org
org-auctex
org-contrib
org-download
org-modern
pdf-tools
plantuml-mode
polymode
poly-org
rustic
@ -95,9 +69,6 @@
yasnippet
])
++ (with pkgs; [
aspellPackage
gnuplot
plantuml
sqlite
]));
in {

View file

@ -60,51 +60,31 @@
(require 'all-the-icons)
(require 'all-the-icons-dired)
(require 'cdlatex)
(require 'citeproc)
(require 'company)
(require 'counsel)
(require 'edit-indirect)
(require 'editorconfig)
(require 'eglot)
(require 'format-all)
(require 'gnuplot)
(require 'gnuplot-context)
(require 'graphviz-dot-mode)
(require 'htmlize)
(require 'ivy)
(require 'ivy-bibtex)
(require 'lean4-mode)
(require 'magit)
(require 'meow)
(require 'nix-mode)
(require 'nix-update)
(require 'ob-dot)
(require 'ob-emacs-lisp)
(require 'ob-gnuplot)
(require 'ob-matlab)
(require 'ob-python)
(require 'ob-shell)
(require 'oc)
(require 'oc-basic)
(require 'oc-csl)
(require 'oc-natbib)
(require 'org)
(require 'org-auctex)
(require 'org-contrib)
(require 'org-download)
(require 'org-modern)
(require 'ox-latex)
(require 'ox-publish)
(require 'pdf-tools)
(require 'plantuml-mode)
(require 'polymode)
(require 'rustic)
(require 'rust-ts-mode)
(require 'swiper)
(require 'tex)
(require 'yasnippet)
(let ((org-config (expand-file-name "~/.emacs.d/org-init.el")))
(when (file-exists-p org-config)
(load-file org-config))
)
(setq org-directory (expand-file-name "~/Documents/org"))
(add-hook 'dired-mode-hook 'all-the-icons-dired-mode)
@ -140,12 +120,6 @@
(add-to-list 'format-all-default-formatters '("Nix" alejandra))
(setq-default format-all-formatters format-all-default-formatters)
(autoload 'gnuplot-mode "gnuplot" "Gnuplot major mode" t)
(autoload 'gnuplot-make-buffer "gnuplot" "open a buffer in gnuplot-mode" t)
(setq auto-mode-alist (append '(("\\.gp$" . gnuplot-mode)) auto-mode-alist))
(define-key graphviz-dot-mode-map (kbd "C-c C-y") 'graphviz-dot-indent-graph)
(global-set-key (kbd "C-c C-r") 'ivy-resume)
(add-hook 'after-init-hook 'ivy-mode)
@ -159,21 +133,6 @@
'((ivy-bibtex . ivy--regex-ignore-order)
(t . ivy--regex-plus)))
(defvar zotero-bibliography (expand-file-name "zotero.bib" org-directory))
(defvar ivy-bibtex-bibliography (list zotero-bibliography))
(setq reftex-default-bibliography (list zotero-bibliography))
(setq bibtex-completion-pdf-field "file")
(add-hook 'LaTeX-mode-hook 'turn-on-cdlatex)
(add-hook 'LaTeX-mode (lambda ()
(turn-on-reftex)))
(setq TeX-PDF-mode t
TeX-auto-save t
TeX-parse-self t)
(defun meow-setup ()
"Initialize meow-edit for colemak."
(setq meow-cheatsheet-layout meow-cheatsheet-layout-colemak)
@ -279,149 +238,9 @@
(add-to-list 'auto-mode-alist '("\\.nix$" . poly-nix-mode))
;; Automatically update hash for nix fetch functions
(define-key nix-mode-map (kbd "C-c C-u") 'nix-update-fetch)
(setq org-babel-octave-shell-command "octave -q")
(setq org-babel-python-command "python3.10")
(setq-default python-indent-guess-indent-offset-verbose nil)
(defun my/org-babel-execute:python-session (body params)
"Initiate a python session before executing org babel blocks that use sessions.
BODY is the content of the org-babel block and PARAMS are any parameters specified."
(let ((session-name (cdr (assq :session params))))
(when (not (eq session-name "none"))
(org-babel-python-initiate-session session-name))))
(advice-add #'org-babel-execute:python :before #'my/org-babel-execute:python-session)
(defun my/indent-org-block-automatically ()
"Indent the current org code block."
(interactive)
(when (org-in-src-block-p)
(org-edit-special)
(indent-region (point-min) (point-max))
(org-edit-src-exit)))
(defun my/org-force-open-current-window ()
"Open a link using 'org-open-at-point' in current window."
(interactive)
(let ((org-link-frame-setup
(quote
((vm . vm-visit-folder)
(vm-imap . vm-visit-imap-folder)
(gnus . gnus)
(file . find-file)
(wl . wl)))
))
(org-open-at-point)))
(defun my/follow-org-link (arg)
"Follow a link in orgmode If ARG is given.
Opens in new window otherwise opens in current window."
(interactive "P")
(if arg
(org-open-at-point)
(my/org-force-open-current-window)))
(defun krofna-hack ()
"Toggle latex fragments after exiting closing them."
(when (looking-back (rx "$ "))
(save-excursion
(backward-char 1)
(org-latex-preview))))
(global-set-key (kbd "C-c n a") 'org-agenda)
(setq org-agenda-start-on-weekday nil)
(define-key org-mode-map (kbd "C-c C-o") 'my/follow-org-link)
(define-key org-mode-map (kbd "C-c C-y") 'my/indent-org-block-automatically)
(define-key org-mode-map (kbd "C-c ]") 'org-cite-insert)
(add-hook 'org-babel-after-execute-hook 'org-redisplay-inline-images)
(add-hook 'org-mode-hook 'visual-line-mode)
(add-hook 'org-mode-hook 'org-cdlatex-mode)
(add-hook 'org-mode-hook
(lambda ()
(add-hook 'post-self-insert-hook #'krofna-hack 'append 'local)))
(add-to-list 'org-latex-classes
'("mla"
"\\documentclass{mla}"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
(add-to-list 'org-latex-classes
'("letter"
"\\documentclass{letter}"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")))
(plist-put org-format-latex-options :scale 3)
(setq org-agenda-files (list org-directory (expand-file-name "ubc" org-directory)))
(setq org-agenda-tags-column 0)
(setq org-auto-align-tags nil)
(setq org-fold-catch-invisible-edits 'show-and-error)
(setq org-cite-export-processors '((t basic)))
(setq org-cite-global-bibliography (list zotero-bibliography))
(setq org-confirm-babel-evaluate nil)
(setq org-ellipsis "")
(setq org-export-with-tags nil)
(setq org-hide-emphasis-markers t)
(setq org-highlight-latex-and-related '(latex))
(setq org-html-head-include-default-style nil)
(setq org-html-head-include-scripts nil)
(setq org-html-validation-link nil)
(setq org-image-actual-width 300)
(setq org-insert-heading-respect-content t)
(setq org-latex-pdf-process '("latexmk -pdflatex='pdflatex -interaction nonstopmode' -pdf -bibtex -f %f"))
(setq org-pretty-entities t)
(setq org-preview-latex-default-process 'dvisvgm)
(setq org-special-ctrl-a/e t)
(setq org-src-fontify-natively t)
(setq org-src-preserve-indentation t)
(setq org-src-tab-acts-natively t)
(setq org-src-window-setup 'current-window)
(setq org-tags-column 0)
(setq org-agenda-time-grid
'((daily today require-timed)
(800 1000 1200 1400 1600 1800 2000)
" ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄"))
(setq org-exports-dir (expand-file-name "exports" org-directory))
(setq org-publish-project-alist
(list (cons "html"
(list :base-directory org-directory
:base-extension "org"
:htmlized-source t
:recursive t
:publishing-directory org-exports-dir
:publishing-function 'org-html-publish-to-html))
(cons "pdf"
(list :base-directory org-directory
:base-extension "org"
:recursive t
:publishing-directory org-exports-dir
:publishing-function 'org-latex-publish-to-pdf))
(cons "all" '(:components ("html" "pdf")))))
(add-hook 'org-mode-hook 'org-auctex-mode)
(add-hook 'dired-mode-hook 'org-download-enable)
(setq-default org-download-image-dir (expand-file-name "images" org-directory))
(add-hook 'org-mode-hook 'org-modern-mode)
(setq-default pdf-view-display-size 'fit-width)
(defvar pdf-annot-activate-created-annotations t)
(setq plantuml-default-exec-mode 'executable)
(define-key eglot-mode-map (kbd "C-c C-y") 'eglot-format-buffer)
(define-key eglot-mode-map (kbd "C-c C-a") 'eglot-code-actions)
(setq eglot-extend-to-xref t)