emacs/module.nix: add doomDir

This commit is contained in:
Charlie Root 2024-09-04 22:02:17 +02:00
commit c0e96b9b1e
8 changed files with 521 additions and 172 deletions

View file

@ -0,0 +1,140 @@
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
;; Personal information
(setq user-full-name "Charlie Root")
(setq user-mail-address "charlie@charlieroot.dev")
(setq doom-font (font-spec :family "Iosevka Nerd Font" :size 18)
doom-variable-pitch-font (font-spec :family "Lexend" :size 18))
(setq doom-theme 'catppuccin)
(after! company
(setq company-idle-delay 0)
)
;;; :ui modeline
;; An evil mode indicator is redundant with cursor shape
(setq doom-modeline-modal nil)
;;; :editor evil
;; Focus new window after splitting
(setq evil-split-window-below t
evil-vsplit-window-right t)
;; This determines the style of line numbers in effect. If set to `nil', line
;; numbers are disabled. For relative line numbers, set this to `relative'.
(setq display-line-numbers-type nil)
;;; :lang org
(setq org-directory "~/Nextcloud/org/"
org-roam-directory org-directory
org-roam-db-location (file-name-concat org-directory ".org-roam.db")
org-roam-dailies-directory "journal/"
org-contacts-files (file-name-concat org-directory "contacts.org")
org-archive-location (file-name-concat org-directory ".archive/%s::")
org-agenda-files (list org-directory))
(after! org
(setq org-startup-folded 'show2levels
org-ellipsis " [...] "
org-capture-templates
'(("t" "todo" entry (file+headline "todo.org" "Inbox")
"* [ ] %?\n%i%a"
:prepend t)
("d" "deadline" entry (file+headline "todo.org" "Inbox")
"* [ ] %?\nDEADLINE: <%(org-read-date)>\n\n%i%a"
:prepend t)
("s" "schedule" entry (file+headline "todo.org" "Inbox")
"* [ ] %?\nSCHEDULED: <%(org-read-date)>\n\n%i%a"
:prepend t)
("c" "contact" entry (file+headline "contacts.org" "Contacts")
"%?\n:PROPERTIES:\n:ADDRESS:\n:BIRTHDAY:\n:EMAIL:\n:PHONE:\n:NOTE:\n:END:\n"
:prepend t)
("b" "bookmark" entry (file+headline "bookmarks.org" "Bookmarks")
"%?\n:PROPERTIES:\n:CREATED:%U\n:END:\n\n"
:empty-lines 1)
("l" "ledger" plain (file "ledger/personal.gpg")
"%(+beancount/clone-transaction)"))))
;; (after! org-roam
;; (setq org-roam-capture-templates
;; `(("n" "note" plain
;; ,(format "#+title: ${title}\n%%[%s/template/note.org]" org-roam-directory)
;; :target (file "note/%<%Y%m%d%H%M%S>-${slug}.org")
;; :unnarrowed t)
;; ("r" "thought" plain
;; ,(format "#+title: ${title}\n%%[%s/template/thought.org]" org-roam-directory)
;; :target (file "thought/%<%Y%m%d%H%M%S>-${slug}.org")
;; :unnarrowed t)
;; ("t" "topic" plain
;; ,(format "#+title: ${title}\n%%[%s/template/topic.org]" org-roam-directory)
;; :target (file "topic/%<%Y%m%d%H%M%S>-${slug}.org")
;; :unnarrowed t)
;; ("c" "contact" plain
;; ,(format "#+title: ${title}\n%%[%s/template/contact.org]" org-roam-directory)
;; :target (file "contact/%<%Y%m%d%H%M%S>-${slug}.org")
;; :unnarrowed t)
;; ("p" "project" plain
;; ,(format "#+title: ${title}\n%%[%s/template/project.org]" org-roam-directory)
;; :target (file "project/%<%Y%m%d>-${slug}.org")
;; :unnarrowed t)
;; ("i" "invoice" plain
;; ,(format "#+title: %%<%%Y%%m%%d>-${title}\n%%[%s/template/invoice.org]" org-roam-directory)
;; :target (file "invoice/%<%Y%m%d>-${slug}.org")
;; :unnarrowed t)
;; ("f" "ref" plain
;; ,(format "#+title: ${title}\n%%[%s/template/ref.org]" org-roam-directory)
;; :target (file "ref/%<%Y%m%d%H%M%S>-${slug}.org")
;; :unnarrowed t)
;; ("w" "works" plain
;; ,(format "#+title: ${title}\n%%[%s/template/works.org]" org-roam-directory)
;; :target (file "works/%<%Y%m%d%H%M%S>-${slug}.org")
;; :unnarrowed t)
;; ("s" "secret" plain "#+title: ${title}\n\n"
;; :target (file "secret/%<%Y%m%d%H%M%S>-${slug}.org.gpg")
;; :unnarrowed t))
;; ;; Use human readable dates for dailies titles
;; org-roam-dailies-capture-templates
;; `(("d" "default" plain ""
;; :target (file+head "%<%Y-%m-%d>.org" ,(format "%%[%s/template/journal.org]" org-roam-directory))))))
(after! org-roam
;; Offer completion for #tags and @areas separately from notes.
;; (add-to-list 'org-roam-completion-functions #'org-roam-complete-tag-at-point)
;; Automatically update the slug in the filename when #+title: has changed.
;; (add-hook 'org-roam-find-file-hook #'org-roam-update-slug-on-save-h)
;; Make the backlinks buffer easier to peruse by folding leaves by default.
(add-hook 'org-roam-buffer-postrender-functions #'magit-section-show-level-2)
;; List dailies and zettels separately in the backlinks buffer.
(advice-add #'org-roam-backlinks-section :override #'org-roam-grouped-backlinks-section)
;; Open in focused buffer, despite popups
(advice-add #'org-roam-node-visit :around #'+popup-save-a)
;; Make sure tags in vertico are sorted by insertion order, instead of
;; arbitrarily (due to the use of group_concat in the underlying SQL query).
;; (advice-add #'org-roam-node-list :filter-return #'org-roam-restore-insertion-order-for-tags-a)
;; Add ID, Type, Tags, and Aliases to top of backlinks buffer.
(advice-add #'org-roam-buffer-set-header-line-format :after #'org-roam-add-preamble-a))
;; Fixes since I use fish as my shell
(setq shell-file-name (executable-find "bash"))
(setq-default vterm-shell (executable-find "fish"))
(setq-default explicit-shell-file-name (executable-find "fish"))
;; using the alejandra formatter
(after! nix-mode
(set-formatter! 'alejandra '("alejandra" "--quiet") :modes '(nix-mode)))
(setq-hook! 'nix-mode-hook +format-with-lsp nil)
(after! good-scroll
(good-scroll-mode 1))
(after! wakatime-mode
(global-wakatime-mode))

View file

@ -0,0 +1,13 @@
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(custom-safe-themes
'("dccf4a8f1aaf5f24d2ab63af1aa75fd9d535c83377f8e26380162e888be0c6a9" "014cb63097fc7dbda3edf53eb09802237961cbb4c9e9abd705f23b86511b0a69" "88f7ee5594021c60a4a6a1c275614103de8c1435d6d08cc58882f920e0cec65e" "7e377879cbd60c66b88e51fad480b3ab18d60847f31c435f15f5df18bdb18184" default)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)

View file

@ -0,0 +1,175 @@
;;; init.el -*- lexical-binding: t; -*-
;; This file controls what Doom modules are enabled and what order they load
;; in. Remember to run 'doom sync' after modifying it!
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
;; documentation. There you'll find a link to Doom's Module Index where all
;; of our modules are listed, including what flags they support.
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
;; 'C-c c k' for non-vim users) to view its documentation. This works on
;; flags as well (those symbols that start with a plus).
;;
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;; directory (for easy access to its source code).
(doom! :input
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
;;chinese
;;japanese
;;layout ; auie,ctsrnm is the superior home row
:completion
(company +childframe ) ; the ultimate code completion backend
(vertico +icons) ; the search engine of the future
:ui
;;deft ; notational velocity for Emacs
doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs
doom-quit ; DOOM quit-message prompts when you quit Emacs
;;(emoji +unicode) ; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
;;indent-guides ; highlighted indent columns
(ligatures +iosevka +extra) ; ligatures and symbols to make your code pretty again
modeline ; snazzy, Atom-inspired modeline, plus API
ophints ; highlight the region an operation acts on
(popup +all +defaults) ; tame sudden yet inevitable temporary windows
;;tabs ; a tab bar for Emacs
(treemacs +lsp) ; a project drawer, like neotree but cooler
;;unicode ; extended unicode support for various languages
(vc-gutter +pretty) ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB
(window-select +numbers) ; visually switch windows
workspaces ; tab emulation, persistence & separate workspaces
zen ; distraction-free coding or writing
:editor
(evil +everywhere); come to the dark side, we have cookies
;;file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding
(format +onsave) ; automated prettiness
;;god ; run Emacs commands without modifier keys
;;lispy ; vim for lisp, for people who don't like vim
multiple-cursors ; editing in many places at once
;;objed ; text object editing for the innocent
;;parinfer ; turn lisp into python, sort of
;;rotate-text ; cycle region at point between text candidates
snippets ; my elves. They type so I don't have to
word-wrap ; soft wrapping with language-aware indent
:emacs
(dired +icons) ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
(ibuffer +icons) ; interactive buffer management
undo ; persistent, smarter undo for your inevitable mistakes
vc ; version-control and Emacs, sitting in a tree
:term
eshell ; the elisp shell that works everywhere
;;shell ; simple shell REPL for Emacs
;;term ; basic terminal emulator for Emacs
vterm ; the best terminal emulation in Emacs
:checkers
syntax ; tasing you for every semicolon you forget
;;(spell +flyspell) ; tasing you for misspelling mispelling
grammar ; tasing grammar mistake every you make
:tools
;;ansible
biblio ; Writes a PhD for you (citation needed)
;;collab ; buffers with friends
;;debugger ; FIXME stepping through code, to help you add bugs
direnv
;;docker
editorconfig ; let someone else argue about tabs vs spaces
ein ; tame Jupyter notebooks with emacs
(eval +overlay) ; run code, run (also, repls)
lookup ; navigate your code and its documentation
lsp ; M-x vscode
magit ; a git porcelain for Emacs
make ; run make tasks from Emacs
pass ; password manager for nerds
pdf ; pdf enhancements
;;prodigy ; FIXME managing external services & code builders
;;terraform ; infrastructure as code
;;tmux ; an API for interacting with tmux
tree-sitter ; syntax and parsing, sitting in a tree...
upload ; map local to remote projects via ssh/ftp
:lang
;;agda ; types of types of types of types...
;;beancount ; mind the GAAP
(cc +lsp +tree-sitter) ; C > C++ == 1
;;clojure ; java with a lisp
common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
;;csharp ; unity, .NET, and mono shenanigans
data ; config/data formats
;;(dart +flutter) ; paint ui and not much else
;;dhall
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;factor
;;faust ; dsp, but you get to keep your soul
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;fsharp ; ML stands for Microsoft's Language
;;fstar ; (dependent) types and (monadic) effects and Z3
;;gdscript ; the language you waited for
;;(go +lsp) ; the hipster dialect
;;(graphql +lsp) ; Give queries a REST
;;(haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on
json ; At least it ain't XML
;;(java +lsp) ; the poster child for carpal tunnel syndrome
(javascript +lsp) ; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
latex ; writing papers in Emacs has never been so fun
;;lean ; for folks with too much to prove
;;ledger ; be audit you can be
(lua +lsp) ; one-based indices? one-based indices
markdown ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
(nix +lsp +tree-sitter) ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
(org +contacts +dragndrop +crypt +gnuplot +passwords +pomodoro +present +pretty +roam2) ; organize your plain life in plain text
;;php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;;purescript ; javascript, but functional
;;python ; beautiful is better than ugly
qt ; the 'cutest' gui framework ever
;;racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6
;;rest ; Emacs as a REST client
;;rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
;;(scheme +guile) ; a fully conniving family of lisps
sh ; she sells {ba,z,fi}sh shells on the C xor
;;sml
web ; the tubes
;;yaml ; JSON, but readable
;;zig ; C, but simpler
:email
(mu4e +org)
:app
calendar
emms
everywhere ; *leave* Emacs!? You must be joking
irc ; how neckbeards socialize
(rss +org) ; emacs as an RSS reader
:config
;; literate
(default +bindings +smartparens))

View file

@ -0,0 +1,53 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; use 'M-x doom/reload'.
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;; (package! some-package)
(package! nov)
(package! catppuccin-theme)
(package! good-scroll)
(package! wakatime-mode)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/radian-software/straight.el#the-recipe-format
;; (package! another-package
;; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;; (package! this-package
;; :recipe (:host github :repo "username/repo"
;; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;; (package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;; (package! builtin-package :recipe (:nonrecursive t))
;; (package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see radian-software/straight.el#279)
;; (package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;; (package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;; (unpin! pinned-package)
;; ...or multiple packages
;; (unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;; (unpin! t)

View file

@ -18,84 +18,38 @@
]);
custom-emacs = with pkgswithemacs; ((emacsPackagesFor
(emacs29-pgtk.override {withNativeCompilation = true;}))
(emacs29-pgtk.override {
withNativeCompilation = true;
withTreeSitter = true;
}))
.emacsWithPackages (epkgs:
with epkgs; [
# alert
# all-the-icons
# all-the-icons-dired
# avy
# beacon
# catppuccin-theme
# cask-mode
# company
# crux
# dimmer
# dired-du
# dired-open
# direnv
# dirvish
# doom-modeline
# editorconfig
# emacs-all-the-icons-fonts
# evil
# evil-collection
# evil-commentary
# evil-goggles
# flycheck
# flycheck-relint
# flymake
# form-feed
# general
# hl-todo
# ligature
# lsp-mode
# lsp-treemacs
# lsp-ui
# macrostep
# magit
# markdown-mode
# modus-themes
# move-text
# org-cliplink
org-contacts
# org-pomodoro
# nano-theme
# no-littering
# nov
# paredit
# peep-dired
# projectile
# rainbow-delimiters
# rainbow-mode
# relint
# ripgrep
# smartparens
# string-inflection
# svg-lib
# tldr
# toc-org
# treesit-grammars.with-all-grammars
# treemacs
# treemacs-evil
# treemacs-projectile
# treemacs-magit
# tree-sitter
# undo-tree
# use-package
# vertico
# vertico-posframe
treesit-grammars.with-all-grammars
vterm
# vterm-toggle
# which-key
# whitespace-cleanup-mode
# wakatime-mode
# ws-butler
]));
in {
config = mkIf cfg.enable {
environment.variables.PATH = ["$XDG_CONFIG_HOME/emacs/bin"];
home-manager.users.${username} = {
imports = [inputs.nix-doom-emacs-unstraightened.hmModule];
programs.doom-emacs = {
enable = true;
# doomDir = ./doom;
emacs = custom-emacs;
extraBinPackages = with pkgs; [git python3 pinentry-tty];
extraPackages = epkgs:
with epkgs; [
vterm
treesit-grammars.with-all-grammars
eshell-prompt-extras
esh-autosuggest
fish-completion
esh-help
eshell-syntax-highlighting
pinentry
];
provideEmacs = true;
# experimentalFetchTree = true;
};
home.packages = with pkgs; [
# needed my native-comp
binutils
@ -113,7 +67,7 @@ in {
# (mkIf (config.programs.gnupg.agent.enable)
# pinentry-emacs) # in-emacs gnupg prompts
zstd # for undo-fu-session/undo-tree compression
nodePackages.prettier
# Module dependencies
# :checkers spell
(aspellWithDicts (ds: with ds; [de en en-computers en-science]))
@ -122,18 +76,13 @@ in {
# :tools lookup & :lang org +roam
sqlite
# :lang latex & :lang org (latex previews)
# texlive.combined.scheme-medium
texlive.combined.scheme-medium
# :lang beancount
# beancount
# fava
# :lang nix
age
];
services.emacs = {
enable = true;
package = custom-emacs;
};
};
};
}

View file

@ -1,93 +0,0 @@
{
config,
lib,
pkgs,
inputs,
...
}: let
cfg = config.modules.system.programs.editors.emacs;
inherit (config.modules.other.system) username;
inherit (lib) mkIf;
# Taken from outfoxxed since figuring this out is really annoying.
pkgswithemacs =
pkgs.appendOverlays
(with inputs.emacs-overlay.overlays; [
emacs
package
]);
custom-emacs = with pkgswithemacs; ((emacsPackagesFor
(emacs29-pgtk.override {
withNativeCompilation = true;
withSQLite3 = true;
withTreeSitter = true;
withToolkitScrollBars = false;
toolkit = "no";
}))
.emacsWithPackages (epkgs:
with epkgs; [
treesit-grammars.with-all-grammars
vterm
]));
in {
imports = [inputs.nix-doom-emacs-unstraightened.hmModule];
config = mkIf cfg.enable {
home-manager.users.${username} = {
programs.doom-emacs = {
enable = true;
doomDir = ~/.config/doom;
emacs = custom-emacs;
extraBinPackages = with pkgs; [git python3 pinentry-tty];
extraPackages = epkgs:
with epkgs; [
vterm
treesit-grammars.with-all-grammars
eat
eshell-prompt-extras
esh-autosuggest
fish-completion
esh-help
eshell-syntax-highlighting
pinentry
];
provideEmacs = false;
experimentalFetchTree = true;
};
home.packages = with pkgs; [
# needed my native-comp
binutils
# Emacs itself
custom-emacs
# Doom dependencies
git
ripgrep
gnutls
## Optional dependencies
fd # faster projectile indexing
imagemagick # for image-dired
# (mkIf (config.programs.gnupg.agent.enable)
# pinentry-emacs) # in-emacs gnupg prompts
zstd # for undo-fu-session/undo-tree compression
nodePackages.prettier
# Module dependencies
# :checkers spell
(aspellWithDicts (ds: with ds; [de en en-computers en-science]))
# :tools editorconfig
editorconfig-core-c # per-project style config
# :tools lookup & :lang org +roam
sqlite
# :lang latex & :lang org (latex previews)
texlive.combined.scheme-medium
# :lang beancount
# beancount
# fava
# :lang nix
age
];
};
};
}