doom emacs! + theming

This commit is contained in:
Danilo Reyes 2024-12-17 22:26:10 -06:00
parent 1826efd1ff
commit eaf48232cd
14 changed files with 2083 additions and 53 deletions

View File

@ -15,6 +15,24 @@
stylix = {
enable = true;
image = ./wallpaper.jpeg;
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
};
fonts = {
monospace = {
package = pkgs.nerd-fonts.comic-shanns-mono;
name = "ComicShansMono Nerd Font Mono";
};
sansSerif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans";
};
serif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Serif";
};
};
};
sops = {
defaultSopsFormat = "yaml";

10
dotfiles/doom/bookmarks Normal file
View File

@ -0,0 +1,10 @@
;;;; Emacs Bookmark Format Version 1;;;; -*- coding: utf-8-emacs; mode: lisp-data -*-
;;; This format is meant to be slightly human-readable;
;;; nevertheless, you probably don't want to edit it.
;;; -*- End Of Bookmark File Format Version Stamp -*-
(("org-capture-last-stored"
(filename . "~/Documents/Notes/20240518175854-egypt.org")
(front-context-string)
(rear-context-string . "\n#+title: Egypt\n")
(position . 83))
)

502
dotfiles/doom/config.el Normal file
View File

@ -0,0 +1,502 @@
(use-package
insert-esv
:init
(setq insert-esv-crossway-api-key "bb1872462ecc59624c7bb8ab36c9701ce2027cd1")
(setq insert-esv-include-short-copyright 'false)
(setq insert-esv-include-headings 'true)
(setq insert-esv-include-passage-horizontal-lines 'false)
(setq insert-esv-line-length '500)
:bind ("C-x C-e" . insert-esv-passage))
(setq bookmark-default-file "~/.config/doom/bookmarks")
(map! :leader
(:prefix ("b". "buffer")
:desc "List bookmarks" "L" #'list-bookmarks
:desc "Set bookmark" "m" #'bookmark-set
:desc "Delete bookmark" "M" #'bookmark-set
:desc "Save current bookmarks to bookmark file" "w" #'bookmark-save))
(global-auto-revert-mode 1)
(setq global-auto-revert-non-file-buffers t)
(evil-define-key 'normal ibuffer-mode-map
(kbd "f c") 'ibuffer-filter-by-content
(kbd "f d") 'ibuffer-filter-by-directory
(kbd "f f") 'ibuffer-filter-by-filename
(kbd "f m") 'ibuffer-filter-by-mode
(kbd "f n") 'ibuffer-filter-by-name
(kbd "f x") 'ibuffer-filter-disable
(kbd "g h") 'ibuffer-do-kill-lines
(kbd "g H") 'ibuffer-update)
(setq doom-fallback-buffer "*dashboard*")
(map! :leader
(:prefix ("d" . "dired")
:desc "Open dired" "d" #'dired
:desc "Dired jump to current" "j" #'dired-jump)
(:after dired
(:map dired-mode-map
:desc "Peep-dired image previews" "d p" #'peep-dired
:desc "Dired view file" "d v" #'dired-view-file)))
(evil-define-key 'normal dired-mode-map
(kbd "M-RET") 'dired-display-file
(kbd "h") 'dired-up-directory
(kbd "l") 'dired-open-file ; use dired-find-file instead of dired-open.
(kbd "m") 'dired-mark
(kbd "t") 'dired-toggle-marks
(kbd "u") 'dired-unmark
(kbd "C") 'dired-do-copy
(kbd "D") 'dired-do-delete
(kbd "J") 'dired-goto-file
(kbd "M") 'dired-do-chmod
(kbd "O") 'dired-do-chown
(kbd "P") 'dired-do-print
(kbd "R") 'dired-do-rename
(kbd "T") 'dired-do-touch
(kbd "Y") 'dired-copy-filenamecopy-filename-as-kill ; copies filename to kill ring.
(kbd "Z") 'dired-do-compress
(kbd "+") 'dired-create-directory
(kbd "-") 'dired-do-kill-lines
(kbd "% l") 'dired-downcase
(kbd "% m") 'dired-mark-files-regexp
(kbd "% u") 'dired-upcase
(kbd "* %") 'dired-mark-files-regexp
(kbd "* .") 'dired-mark-extension
(kbd "* /") 'dired-mark-directories
(kbd "; d") 'epa-dired-do-decrypt
(kbd "; e") 'epa-dired-do-encrypt)
;; (kbd "Q") 'quick-preview-at-point) ;; previews with sushi
;; Get file icons in dired
;; (add-hook 'dired-mode-hook 'all-the-icons-dired-mode)
;; With dired-open plugin, you can launch external programs for certain extensions
;; For example, I set all .png files to open in 'sxiv' and all .mp4 files to open in 'mpv'
(setq dired-open-extensions '(("gif" . "eog")
("jpg" . "eog")
("png" . "eog")
("mkv" . "celluloid")
("mp4" . "celluloid")))
(evil-define-key 'normal peep-dired-mode-map
(kbd "j") 'peep-dired-next-file
(kbd "k") 'peep-dired-prev-file)
(add-hook 'peep-dired-hook 'evil-normalize-keymaps)
(setq delete-by-moving-to-trash t
trash-directory "~/.local/share/Trash/files/")
;; (diredp-toggle-find-file-reuse-dir 1)
(setq dired-kill-when-opening-new-dired-buffer 1)
(use-package! base16-stylix-theme)
(require 'base16-stylix-theme)
(setq doom-theme 'base16-stylix)
;; (setq doom-theme 'doom-opera-light)
;; ;; (setq doom-theme 'doom-dark+)
;; (map! :leader
;; :desc "Load new theme" "h t" #'counsel-load-theme)
;; (emms-all)
;; (emms-default-players)
;; (emms-mode-line 1)
;; (emms-playing-time 1)
;; (setq emms-source-file-default-directory "~/Music/"
;; emms-playlist-buffer-name "*Music*"
;; emms-info-asynchronously t
;; emms-source-file-directory-tree-function 'emms-source-file-directory-tree-find)
;; (map! :leader
;; (:prefix ("m p d". "EMMS audio player")
;; :desc "Go to emms playlist" "a" #'emms-playlist-mode-go
;; :desc "Emms pause track" "x" #'emms-pause
;; :desc "Emms stop track" "s" #'emms-stop
;; :desc "Emms play previous track" "p" #'emms-previous
;; :desc "Emms play next track" "n" #'emms-next))
(map! :leader
(:prefix ("e". "evaluate/EWW")
:desc "Evaluate elisp in buffer" "b" #'eval-buffer
:desc "Evaluate defun" "d" #'eval-defun
:desc "Evaluate elisp expression" "e" #'eval-expression
:desc "Evaluate last sexpression" "l" #'eval-last-sexp
:desc "Evaluate elisp in region" "r" #'eval-region))
;; (setq browse-url-browser-function 'eww-browse-url)
(map! :leader
:desc "Search web for text between BEG/END"
"s w" #'eww-search-words
(:prefix ("e" . "evaluate/EWW")
:desc "Eww web browser" "w" #'eww
:desc "Eww reload page" "R" #'eww-reload))
(setq doom-unicode-font "Symbola")
(setq doom-font (font-spec :family "ComicShannsMono Nerd Font Mono" :size 18)
doom-variable-pitch-font (font-spec :family "ComicShannsMono Nerd Font Mono" :size 18)
doom-big-font (font-spec :family "ComicShannsMono Nerd Font Mono" :size 22))
(after! doom-themes
(setq doom-themes-enable-bold t
doom-themes-enable-italic t))
(custom-set-faces!
'(bold :weight ultra-bold)
'(font-lock-comment-face :slant italic)
'(font-lock-keyword-face :slant italic))
(defun func/insert-todays-date (prefix)
(interactive "P")
(let ((format (cond
((not prefix) "%Y-%m-%d")
((equal prefix '(4)) "%A, %B %d, %Y"))))
(insert (format-time-string format))))
(require 'calendar)
(defun func/insert-any-date (date)
"Insert DATE using the current locale."
(interactive (list (calendar-read-date)))
(insert (calendar-date-string date)))
(map! :leader
(:prefix ("i d" . "Insert date")
:desc "Insert any date" "a" #'func/insert-any-date
:desc "Insert todays date" "t" #'func/insert-todays-date))
(defun func/org-roam-capture-task ()
(interactive)
;; Capture the new task, creating the project file if necessary
(org-roam-capture-
:node (org-roam-node-read nil)
:templates '(("p" "project" plain "** TODO %?"
:if-new (file+head+olp "%<%Y%m%d%H%M%S>-${slug}.org"
"#+title: ${title}\n#+category: ${title}\n#+filetags: Project"
("Tasks"))))))
(global-set-key (kbd "C-c n t") #'my/org-roam-capture-task)
(use-package! flycheck
:config
(flycheck-define-checker nix-statix
"A syntax checker for Nix using Statix."
:command ("statix" "check" source)
:error-patterns
((warning line-start (file-name) ":" line ":" column
": " (message) line-end))
:modes (nix-mode))
(add-to-list 'flycheck-checkers 'nix-statix))
;; Populates only the EXPORT_FILE_NAME property in the inserted headline.
(with-eval-after-load 'org-capture
(defun org-hugo-new-subtree-post-capture-template ()
"Returns `org-capture' template string for new Hugo post.
See `org-capture-templates' for more information."
(let* ((title (read-from-minibuffer "Post Title: ")) ;Prompt to enter the post title
(fname (org-hugo-slug title)))
(mapconcat #'identity
`(
,(concat "* TODO " title)
":PROPERTIES:"
,(concat ":EXPORT_FILE_NAME: " (format-time-string "%Y-%m-%d-") fname)
":END:"
"%?\n") ;Place the cursor here finally
"\n"))))
;; org capture templates
(setq org-capture-templates
'(
("h" ;`org-capture' binding + h
"Hugo post"
entry
;; It is assumed that below file is present in `org-directory'
;; and that it has a "Blog Ideas" heading. It can even be a
;; symlink pointing to the actual location of all-posts.org!
(file+olp "/home/jawz/Development/Websites/portfolio/content-org/posts.org" "blog")
(function org-hugo-new-subtree-post-capture-template))
))
;;;(after! org
;;;;; ⧗       ―        ﮸     λ ◁ ▷ ✧ ✦
;;;(appendq! +ligatures-extra-symbols
;;;`(:clock "⧗ "
;;;:circle ""
;;;:code ""
;;;:results "﮸"
;;;:shogi "⛊"
;;;:white_shogi "☖"
;;;:black_shogi "☗"
;;;:two_lines "⚏"
;;;;; :tags "  "
;;;:empty ""
;;;))
;;;(set-ligatures! 'org-mode
;;;;; :merge t
;;;;; :clock ":LOGBOOK:"
;;;:quote "#+begin_quote"
;;;:name "#+CAPTION:"
;;;:quote_end "#+end_quote"
;;;:code "#+begin_src"
;;;:code "#+BEGIN_SRC"
;;;:src_block "#+BEGIN:"
;;;:code "#+end_src"
;;;:code "#+END_SRC"
;;;:results "#+RESULTS:"
;;;:results "#+results:"
;;;;; :src_block_end ":END:"
;;;;; :src_block_end "#+END"
;;;;; :two_lines ":PROPERTIES:"
;;;;; :black_shogi "#+CATEGORY:"
;;;;; :black_shogi "#+category:"
;;;;; :two_lines "#+startup:"
;;;;; :two_lines "#+STARTUP:"
;;;:empty "#+title: "
;;;:empty "#+TITLE: "
;;;;; :shogi "#+NAME:"
;;;;; :shogi "#+name:"
;;;;; :tags "keywords:"
;;;;; :black_shogi "#+roam_tags:"
;;;))
(setq display-line-numbers-type t)
(map! :leader
:desc "Comment or uncomment lines" "TAB TAB" #'comment-line
(:prefix ("t" . "toggle")
:desc "Toggle line numbers" "l" #'doom/toggle-line-numbers
:desc "Toggle line highlight in frame" "h" #'hl-line-mode
:desc "Toggle line highlight globally" "H" #'global-hl-line-mode
:desc "Toggle truncate lines" "t" #'toggle-truncate-lines))
(setq display-line-numbers-type `relative)
(global-visual-line-mode t)
;; CONFIG
(require 'config-general-mode)
(add-to-list 'auto-mode-alist '("\\.conf$" . config-general-mode))
(setq all-the-icons-scale-factor .8) ;; fixes the issue of rightmost characters not fitting.
(set-face-attribute 'mode-line nil :font "Iosevka Nerd Font-15")
(setq doom-modeline-height 30 ;; sets modeline height
doom-modeline-bar-width 5 ;; sets right bar width
doom-modeline-persp-name t ;; adds perspective name to modeline
doom-modeline-persp-icon t) ;; adds folder icon next to persp name
(xterm-mouse-mode 1)
(map! :leader
(:prefix ("=" . "open file")
:desc "Edit agenda file" "a" #'(lambda () (interactive)
(find-file
"~/Documents/Notes/20220819130052-agenda.org"))
:desc "Edit doom config.org" "c" #'(lambda () (interactive)
(find-file
"~/.config/doom/config.org"))
:desc "Edit doom init.el" "i" #'(lambda () (interactive)
(find-file "~/.config/doom/init.el"))
:desc "Edit doom packages.el" "p" #'(lambda () (interactive)
(find-file "~/.config/doom/packages.el"))))
(setq read-process-output-max (* 1024 1024)) ;; 1mb
(setq lsp-idle-delay 0.500)
(setq lsp-log-io nil) ; if set to true can cause a performance hit
;; c# LSP
(after! lsp-mode
(setq lsp-csharp-server-path "/usr/bin/omnisharp"))
(after! org
(setq org-directory "~/Documents/Notes/"
org-agenda-files (directory-files-recursively
"~/Documents/Notes" "\\.org$")
;; org-default-notes-file (expand-file-name "Notes.org" org-directory)
org-id-locations-file "~/Documents/Notes/.orgids"
org-attach-id-dir "~/Documents/Notes/images"
org-ellipsis ""
org-superstar-headline-bullets-list '("" "" "" "" "" "" "")
org-superstar-item-bullet-alist '((?+ . ?+) (?- . ?-))
org-log-done 'time
org-log-into-drawer t
org-hide-emphasis-markers t
org-todo-keywords
'((sequence
"TODO(t)" ; A task that needs doing & is ready to do
"PROJ(p)" ; A project, which usually contains other tasks
"ART(a)" ; Similar to PROJ but focused on drawing
"IDEA(i)" ; Misc tasks, usually to elaborate on writing later
"HOLD(h)" ; This task is paused/on hold because I'm a lazy fuck
"|"
"DONE(d)" ; Task succesfully completed
"CANCELED(c)") ; Task was cancelled
(sequence
"[ ](T)" ; A task that needs doing
"[-](S)" ; A task in progress
"[?](H)" ; A task on hold
"|"
"[X](D)")) ; A task completed
org-todo-keyword-faces
'(("[-]" . +org-todo-active)
("[?]" . +org-todo-onhold)
("HOLD" . +org-todo-onhold)
("ART" . +org-todo-project)
("IDEA" . +org-todo-project)
("PROJ" . +org-todo-project)
("CANCELED" . +org-todo-cancel)))
(require 'org-habit))
(use-package! org-roam-bibtex
:after org-roam
:load-path "~/Documents/Notes/bibtex/")
;; :config
;; (require 'org-ref)) ; optional: if using Org-ref v2 or v3 citation links
(custom-set-faces
'(org-level-1 ((t (:inherit outline-1 :height 1.4))))
'(org-level-2 ((t (:inherit outline-2 :height 1.3))))
'(org-level-3 ((t (:inherit outline-3 :height 1.2))))
'(org-level-4 ((t (:inherit outline-4 :height 1.1))))
'(org-level-5 ((t (:inherit outline-5 :height 1.0))))
'(org-document-title ((t (:inherit outline-1 :height 2.0))))
)
;; (use-package org-alert
;; :ensure t)
;; (setq alert-default-style 'libnotify
;; org-alert-interval 3600)
;; ;; Auto start org-alert when emacs/daemon load
;; (org-alert-enable)
(use-package org-auto-tangle
:defer t
:hook (org-mode . org-auto-tangle-mode))
(map! :leader
:desc "Org babel tangle" "m B" #'org-babel-tangle)
;; (org-babel-do-load-languages
;; 'org-babel-load-languages
;; '((R . t)
;; (emacs-lisp . t)
;; (nix . t)))
(require 'org-inlinetask)
(setq org-inlinetask-min-level 9)
(setq deft-directory "~/Documents/Notes/")
(use-package org-roam
:ensure t
:custom
(org-roam-directory "~/Documents/Notes/")
(org-roam-completion-everywhere t)
(org-roam-dailies-capture-templates
'(("d" "default" entry "* %<%I:%M %p>: %?"
:if-new (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n"))))
(org-roam-capture-templates
'(("d" "default" plain
"%?"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n")
:unnarrowed t)
("l" "programming language" plain
(file "/home/jawz/.config/doom/templates/programming.org")
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+filetags: :programming:language:${title}:\n#+title: ${title}")
:unnarrowed t)
("e" "political events" plain
(file "/home/jawz/.config/doom/templates/events.org")
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+filetags: :politics:conflicts:\n#+title: ${title}")
:unnarrowed t)
("p" "project" plain
"* PROJ ${title}\n%?\n* Tasks"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+category: ${title}\n#+filetags: :project:\n#+title: ${title}")
:unnarrowed t)
))
:bind()
:bind-keymap()
:config
(org-roam-db-autosync-mode))
(setq completion-ignore-case t)
(set-file-template! "~/Documents/Notes/.+\\.org$" 'org-mode :ignore t)
(use-package! websocket
:after org-roam)
(use-package! org-roam-ui
:after org-roam ;; or :after org
;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have
;; a hookable mode anymore, you're advised to pick something yourself
;; if you don't care about startup time, use
;; :hook (after-init . org-roam-ui-mode)
:config
(setq org-roam-ui-sync-theme t
org-roam-ui-follow t
org-roam-ui-update-on-save t
org-roam-ui-open-on-start nil))
(use-package! org-transclusion
:after org
:init
(map!
:map global-map "<f12>" #'org-transclusion-add
:leader
(:prefix ("n r" . "toggle")
:desc "Org Transclussion Add" "a" #'org-transclusion-add
:desc "Org Transclusion Mode" "t" #'org-transclusion-mode)))
(after! undo-tree
(setq undo-tree-auto-save-history nil))
;; (remove-hook 'undo-fu-mode-hook #'global-undo-fu-session-mode)
(setq user-full-name "Danilo Reyes"
user-mail-address "CaptainJawZ@outlook.com")
(custom-set-variables
'(flycheck-flake8-maximum-line-length 88)
'(safe-local-variable-values '((git-commit-major-mode . git-commit-elisp-text-mode))))
(map! :leader
(:prefix ("r" . "registers")
:desc "Copy to register" "c" #'copy-to-register
:desc "Frameset to register" "f" #'frameset-to-register
:desc "Insert contents of register" "i" #'insert-register
:desc "Jump to register" "j" #'jump-to-register
:desc "List registers" "l" #'list-registers
:desc "Number to register" "n" #'number-to-register
:desc "Interactively choose a register" "r" #'counsel-register
:desc "View a register" "v" #'view-register
:desc "Window configuration to register" "w" #'window-configuration-to-register
:desc "Increment register" "+" #'increment-register
:desc "Point to register" "SPC" #'point-to-register))
(defadvice! fixed-flycheck-proselint-parse-errors-a (output checker buffer)
:override #'flycheck-proselint-parse-errors
(delq
nil (mapcar (lambda (err)
(let-alist err
(and (or (not (derived-mode-p 'org-mode))
(save-excursion (goto-char .start)
(not (org-in-src-block-p))))
(flycheck-error-new-at-pos
.start
(pcase .severity
(`"suggestion" 'info)
(`"warning" 'warning)
(`"error" 'error)
(_ 'error))
.message
:id .check
:buffer buffer
:checker checker
:end-pos .end))))
(let-alist (car (flycheck-parse-json output))
.data.errors))))
(defun prefer-horizontal-split ()
(set-variable 'split-height-threshold nil t)
(set-variable 'split-width-threshold 40 t)) ; make this as low as needed
(add-hook 'markdown-mode-hook 'prefer-horizontal-split)
(map! :leader
:desc "Clone indirect buffer other window" "b c" #'clone-indirect-buffer-other-window)
(setq twittering-allow-insecure-server-cert t)
(map! :leader
(:prefix ("w" . "window")
:desc "Winner redo" "<right>" #'winner-redo
:desc "Winner undo" "<left>" #'winner-undo))
(map! :leader
:desc "Zap to char" "z" #'zap-to-char
:desc "Zap up to char" "Z" #'zap-up-to-char)

1041
dotfiles/doom/config.org Executable file

File diff suppressed because it is too large Load Diff

21
dotfiles/doom/custom.el Normal file
View File

@ -0,0 +1,21 @@
(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.
'(flycheck-flake8-maximum-line-length 88)
'(safe-local-variable-values
'((org-hugo-auto-export-on-save . t)
(org-hugo-base-dir . /home/jawz/Development/Websites/portfolio/)
(git-commit-major-mode . git-commit-elisp-text-mode))))
(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.
'(org-document-title ((t (:inherit outline-1 :height 2.0))))
'(org-level-1 ((t (:inherit outline-1 :height 1.4))))
'(org-level-2 ((t (:inherit outline-2 :height 1.3))))
'(org-level-3 ((t (:inherit outline-3 :height 1.2))))
'(org-level-4 ((t (:inherit outline-4 :height 1.1))))
'(org-level-5 ((t (:inherit outline-5 :height 1.0)))))

192
dotfiles/doom/init.el Executable file
View File

@ -0,0 +1,192 @@
;;; 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 ; the ultimate code completion backend
(corfu +orderless) ; complete with cap(f), cape and a flying feather!
;;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
;;(ivy +fuzzy +childframe +icons) ; a search engine for love and life
vertico ; 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 +github) ; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
;;indent-guides ; highlighted indent columns
;;(ligatures +extra +iosevka) ; ligatures and symbols to make your code pretty again
;;minimap ; show a map of the code on the side
modeline ; snazzy, Atom-inspired modeline, plus API
;;nav-flash ; blink cursor line after big motions
;;neotree ; a project drawer, like NERDTree for vim
ophints ; highlight the region an operation acts on
(popup +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 ; 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 ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
eww ; the internet is gross
ibuffer ; interactive buffer management
(undo +tree) ; 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 +hunspell) ; 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 +lsp)
editorconfig ; let someone else argue about tabs vs spaces
;;ein ; tame Jupyter notebooks with emacs
(eval +overlay) ; run code, run (also, repls)
(lookup +dictionary + offline) ; navigate your code and its documentation
(lsp +peek) ; 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
:os
;;(:if (featurep :system 'macos) macos) ; improve compatibility with macOS tty ; improve the terminal Emacs experience
:lang
;;agda ; types of types of types of types...
;;beancount ; mind the GAAP
;;(cc +lsp) ; 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 +lsp +tree-sitter) ; 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 +lsp) ; the language you waited for
;;(go +lsp) ; the hipster dialect
;;(graphql +lsp) ; Give queries a REST
(haskell +lsp +tree-sitter) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on
(json +lsp +tree-sitter) ; At least it ain't XML
;;(java +lsp +tree-sitter) ; the poster child for carpal tunnel syndrome
(javascript +lsp +tree-sitter) ; 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 ; 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 +hugo +pretty +roam2) ; organize your plain life in plain text
;;(php +lsp +tree-sitter) ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;; graphviz ; diagrams for confusing yourself even more
;;purescript ; javascript, but functional
(python +pyright +lsp +tree-sitter) ; 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 +lsp +tree-sitter) ; she sells {ba,z,fi}sh shells on the C xor
;;sml
;;solidity ; do you need a blockchain? No.
;;swift ; who asked for emoji variables?
;;terra ; Earth and Moon in alignment for performance.
;;web ; the tubes
(yaml +lsp +tree-sitter) ; JSON, but readable
;;zig ; C, but simpler
:email
;;(mu4e +org +gmail)
;;notmuch
;;(wanderlust +gmail)
: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))

93
dotfiles/doom/packages.el Executable file
View File

@ -0,0 +1,93 @@
;; -*- 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)
;; 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/raxod502/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 raxod502/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)
;; (package! nixos-options) ;; enable when migrating to nixos
;; (package! quick-preview) ;; preview files with sushi
;; (package! codeium :recipe (:host github :repo "Exafunction/codeium.el"))
(package! config-general-mode)
(package! dired-open)
(package! dired-subtree)
(package! doom-modeline-now-playing)
(package! ini-mode)
(package! insert-esv) ;; bible passages
(package! olivetti) ;; writing mode centering text, looks like word
(package! org-auto-tangle)
(package! org-roam-ui)
(package! org-transclusion)
(package! peep-dired) ;; kind of cool but never could make it work
(package! php-cs-fixer)
(package! systemd)
;; (package! 2048-game)
;; (package! academic-phrases)
;; (package! caddyfile-mode)
;; (package! clippy)
;; (package! crontab-mode) ;; crontab colors
;; (package! evil-tutor) ;; vim tutorial
;; (package! ewal) ;; theme colors based on pywal
;; (package! ewal-doom-themes)
;; (package! ewal-evil-cursors)
;; (package! fish-completion) ;; what does it do???????????????????????????
;; (package! flycheck-aspell)
;; (package! ivy-posframe)
;; (package! mw-thesaurus)
;; (package! org-alert)
;; (package! org-appear) ;; couldn't get it to work
;; (package! org-recur) ;; works but I want to keep org vanilla
;; (package! ox-chameleon
;; :recipe (:host github :repo "tecosaur/ox-chameleon"))
;; (package! renpy)
;; (package! resize-window)
;; (package! tldr)
;; (package! typit) ;; type speed test
;; (package! vimgolf) ;; vim puzzles
;; (package! wc-mode) ;; displays character count of buffer

View File

@ -0,0 +1 @@
%?

View File

@ -0,0 +1,21 @@
%?
* Sources
1.
* Belligerents
1.
* Casualties and losses
* Location
* Causes
* Events
* Major Contention Events
* Outcome
* Important Notes

View File

@ -0,0 +1,13 @@
%?
- Influenced by
- Influenced
- Related tools
* Hello World
* Tips
* Resources
- Documentation
- YouTube channels

126
flake.lock generated
View File

@ -116,6 +116,45 @@
"type": "github"
}
},
"doomemacs": {
"flake": false,
"locked": {
"lastModified": 1733434763,
"narHash": "sha256-sebujw5VvBWMS+wXyjiGF81iyjPM/QQDnw5l7tDJCvk=",
"owner": "doomemacs",
"repo": "doomemacs",
"rev": "ba1dca322f9a07bc2b7bec6a98f2c3c55c0bbd77",
"type": "github"
},
"original": {
"owner": "doomemacs",
"repo": "doomemacs",
"type": "github"
}
},
"emacs-overlay": {
"inputs": {
"nixpkgs": [
"nix-doom-emacs-unstraightened"
],
"nixpkgs-stable": [
"nix-doom-emacs-unstraightened"
]
},
"locked": {
"lastModified": 1734423772,
"narHash": "sha256-AN8gnO871LRm1vvclMqXt+YWS5fJeX5BE2BDuaIQdHs=",
"owner": "nix-community",
"repo": "emacs-overlay",
"rev": "840a2fa3e9d546ecbcc080ee13bf6aa0e8697b10",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "emacs-overlay",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
@ -528,9 +567,7 @@
},
"jawz-scripts": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1734312686,
@ -546,6 +583,27 @@
"url": "ssh://git@gitlab.com/CaptainJawZ/scripts-flake.git"
}
},
"nix-doom-emacs-unstraightened": {
"inputs": {
"doomemacs": "doomemacs",
"emacs-overlay": "emacs-overlay",
"nixpkgs": "nixpkgs_2",
"systems": "systems_2"
},
"locked": {
"lastModified": 1734424909,
"narHash": "sha256-P06anJ94BOMY8wIlOrpZ4+wDG63zDUz8hTWU757dlgM=",
"owner": "marienz",
"repo": "nix-doom-emacs-unstraightened",
"rev": "3923ae495bf08dffd21efef50b04b074a54299b1",
"type": "github"
},
"original": {
"owner": "marienz",
"repo": "nix-doom-emacs-unstraightened",
"type": "github"
}
},
"nix-gaming": {
"inputs": {
"flake-parts": "flake-parts",
@ -570,18 +628,14 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1734119587,
"lastModified": 0,
"narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "3566ab7246670a43abd2ffa913cc62dad9cdf7d5",
"type": "github"
"path": "/nix/store/22r7q7s9552gn1vpjigkbhfgcvhsrz68-source",
"type": "path"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
"id": "nixpkgs",
"type": "indirect"
}
},
"nixpkgs-lib": {
@ -612,6 +666,34 @@
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 0,
"narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=",
"path": "/nix/store/22r7q7s9552gn1vpjigkbhfgcvhsrz68-source",
"type": "path"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1734119587,
"narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "3566ab7246670a43abd2ffa913cc62dad9cdf7d5",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": {
"inputs": {
"flake-parts": "flake-parts_2",
@ -663,8 +745,9 @@
"home-manager": "home-manager",
"hyprland": "hyprland",
"jawz-scripts": "jawz-scripts",
"nix-doom-emacs-unstraightened": "nix-doom-emacs-unstraightened",
"nix-gaming": "nix-gaming",
"nixpkgs": "nixpkgs",
"nixpkgs": "nixpkgs_3",
"nur": "nur",
"sops-nix": "sops-nix",
"stylix": "stylix",
@ -704,7 +787,7 @@
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_2",
"systems": "systems_3",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-tmux": "tinted-tmux"
@ -753,6 +836,21 @@
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tinted-foot": {
"flake": false,
"locked": {

View File

@ -3,6 +3,8 @@
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
ucodenix.url = "github:e-tho/ucodenix";
nix-doom-emacs-unstraightened.url = "github:marienz/nix-doom-emacs-unstraightened";
jawz-scripts.url = "git+ssh://git@gitlab.com/CaptainJawZ/scripts-flake.git";
nur = {
url = "github:nix-community/nur";
inputs.nixpkgs.follows = "nixpkgs";
@ -27,10 +29,7 @@
url = "github:danth/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
jawz-scripts = {
url = "git+ssh://git@gitlab.com/CaptainJawZ/scripts-flake.git";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
@ -42,7 +41,6 @@
inherit system;
config.allowUnfree = true;
};
overlayFile = import ./overlay.nix { inherit pkgs; };
lib = inputs.nixpkgs.lib // inputs.home-manager.lib;
createConfig =
name:
@ -52,7 +50,12 @@
inherit inputs outputs;
};
modules = [
{ nixpkgs.overlays = [ overlayFile ]; }
{
nixpkgs.overlays = [
(import ./overlay.nix { inherit pkgs; })
inputs.nix-doom-emacs-unstraightened.overlays.default
];
}
./hosts/${name}/configuration.nix
inputs.nur.modules.nixos.default
inputs.sops-nix.nixosModules.sops

View File

@ -1,6 +1,10 @@
{ config, ... }:
{
home.stateVersion = "24.11";
stylix.targets = {
emacs.enable = true;
vesktop.enable = true;
};
programs.bash = {
enable = true;
historyFile = "\${XDG_STATE_HOME}/bash/history";

View File

@ -1,4 +1,5 @@
{
inputs,
config,
lib,
pkgs,
@ -24,42 +25,54 @@
};
};
};
users.users.jawz.packages =
builtins.attrValues {
inherit (pkgs.xorg) xwininfo;
inherit (pkgs)
xdotool
xclip
wl-clipboard-rs
;
}
++ builtins.attrValues {
inherit (pkgs)
fd # modern find, faster searches
fzf # fuzzy finder! super cool and useful
ripgrep # modern grep
tree-sitter # code parsing based on symbols and shit, I do not get it
graphviz # graphs
tetex # export pdf
languagetool # proofreader for English
# lsps
yaml-language-server
markdownlint-cli
;
inherit (pkgs.nodePackages)
vscode-json-languageserver
prettier # multi-language linter
;
};
services.emacs = {
enable = true;
package =
let
emacsPackages = (pkgs.emacsPackagesFor pkgs.emacs-gtk).emacsWithPackages;
in
emacsPackages (epkgs: [ epkgs.vterm ]);
package = pkgs.emacsWithDoom {
doomDir = ../../dotfiles/doom;
doomLocalDir = "~/.local/share/nix-doom";
emacs = pkgs.emacs-gtk;
extraPackages =
epkgs:
let
extraPackages = config.home-manager.users.jawz.programs.emacs.extraPackages epkgs;
in
extraPackages
++ [
(epkgs.trivialBuild {
pname = "stylix-theme";
# add config from doom's ui/doom module
src = pkgs.writeText "stylix-theme.el" config.home-manager.users.jawz.programs.emacs.extraConfig;
version = "0.1.0";
packageRequires = extraPackages;
})
];
extraBinPackages = builtins.attrValues {
inherit (pkgs.xorg) xwininfo;
inherit (pkgs)
xdotool
xclip
wl-clipboard-rs
fd # modern find, faster searches
fzf # fuzzy finder! super cool and useful
ripgrep # modern grep
tree-sitter # code parsing based on symbols and shit, I do not get it
graphviz # graphs
tetex # export pdf
languagetool # proofreader for English
# lsps
yaml-language-server
markdownlint-cli
;
inherit (pkgs.nodePackages)
vscode-json-languageserver
prettier # multi-language linter
;
};
};
defaultEditor = true;
# extraPackages = [ pkgs.base16-stylix-theme ];
};
environment.variables.PATH = [ "\${XDG_CONFIG_HOME}/emacs/bin" ];
};