#+title: PWL Arch Linux Config #+OPTIONS: toc:3 * Table of Contents :toc: - [[#prerequisites][Prerequisites]] - [[#literate-file-headers][Literate File Headers]] - [[#updatesh][update.sh]] - [[#packagestxt][packages.txt]] - [[#aliassh][alias.sh]] - [[#pathsh][path.sh]] - [[#doom-emacs][Doom Emacs]] - [[#zshrc][.zshrc]] - [[#bashrc][.bashrc]] - [[#package-management][Package Management]] - [[#arch-and-aur-packages][Arch and AUR Packages]] - [[#base-system][Base System]] - [[#arch-linux][Arch Linux]] - [[#networking][Networking]] - [[#man-pages-and-texinfo][Man Pages and Texinfo]] - [[#desktop-environments-and-window-manager][Desktop Environments and Window Manager]] - [[#lightdm][LightDM]] - [[#gnome][GNOME]] - [[#text-editors][Text Editors]] - [[#doom-emacs-1][Doom Emacs]] - [[#vscode][VSCode]] - [[#neovim][Neovim]] - [[#shells][Shells]] - [[#aliases][Aliases]] - [[#zsh][ZSH]] - [[#bash][Bash]] - [[#themeing][Themeing]] - [[#doom-emacs-2][Doom Emacs]] - [[#misc-programs][Misc Programs]] - [[#zathura][Zathura]] * Prerequisites - Completed Arch Linux Installation - partitioning - encryption - main user * Literate File Headers ** update.sh #+begin_src shell :tangle update.sh #!/bin/sh # DO NOT EDIT THIS FILE DIRECTLY # This is a file generated from a literate programing source file # You should make any changes there and regenerate it from Emacs org-mode # using org-babel-tangle (C-c C-v t) #+end_src ** packages.txt contains all Arch and AUR packages #+begin_src shell :tangle pkg-list.txt # DO NOT EDIT THIS FILE DIRECTLY # This is a file generated from a literate programing source file # You should make any changes there and regenerate it from Emacs org-mode # using org-babel-tangle (C-c C-v t) #+end_src ** alias.sh #+begin_src shell :tangle alias.sh #!/bin/sh # DO NOT EDIT THIS FILE DIRECTLY # This is a file generated from a literate programing source file # You should make any changes there and regenerate it from Emacs org-mode # using org-babel-tangle (C-c C-v t) #+end_src ** path.sh contains all modifications to the path variables #+begin_src shell :tangle path.sh #!/bin/sh # DO NOT EDIT THIS FILE DIRECTLY # This is a file generated from a literate programing source file # You should make any changes there and regenerate it from Emacs org-mode # using org-babel-tangle (C-c C-v t) #+end_src ** Doom Emacs We start by simply defining the standard headers used by the three files. These headers come from the initial files generated by =doom install=, and contain either some Emacs-LISP relevant indicators like =lexical-binding=, or instructions about the contents of the file. *** init.el #+html:
init.el #+begin_src emacs-lisp :tangle ~/.config/doom/init.el ;;; init.el -*- lexical-binding: t; -*- ;; DO NOT EDIT THIS FILE DIRECTLY ;; This is a file generated from a literate programing source file ;; You should make any changes there and regenerate it from Emacs org-mode ;; using org-babel-tangle (C-c C-v 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 "Module Index" link where you'll find ;; a comprehensive list of Doom's modules and 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). #+end_src #+html:
*** packages.el #+html:
packages.el #+begin_src emacs-lisp :tangle ~/.config/doom/packages.el ;; -*- no-byte-compile: t; -*- ;;; $DOOMDIR/packages.el ;; DO NOT EDIT THIS FILE DIRECTLY ;; This is a file generated from a literate programing source file ;; You should make any changes there and regenerate it from Emacs org-mode ;; using org-babel-tangle (C-c C-v t) ;; 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) #+end_src #+html:
*** config.el #+html:
config.el #+begin_src emacs-lisp :tangle ~/.config/doom/config.el ;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- ;; DO NOT EDIT THIS FILE DIRECTLY ;; This is a file generated from a literate programing source file ;; You should make any changes there and regenerate it from Emacs org-mode ;; using org-babel-tangle (C-c C-v t) ;; Place your private configuration here! Remember, you do not need to run 'doom ;; sync' after modifying this file! ;; Some functionality uses this to identify you, e.g. GPG configuration, email ;; clients, file templates and snippets. ;; (setq user-full-name "John Doe" ;; user-mail-address "john@doe.com") ;; Doom exposes five (optional) variables for controlling fonts in Doom. Here ;; are the three important ones: ;; ;; + `doom-font' ;; + `doom-variable-pitch-font' ;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for ;; presentations or streaming. ;; ;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd ;; font string. You generally only need these two: ;; (setq doom-font (font-spec :family "monospace" :size 12 :weight 'semi-light) ;; doom-variable-pitch-font (font-spec :family "sans" :size 13)) ;; There are two ways to load a theme. Both assume the theme is installed and ;; available. You can either set `doom-theme' or manually load a theme with the ;; `load-theme' function. This is the default: ;; (setq doom-theme 'doom-one) ;; If you use `org' and don't want your org files in the default location below, ;; change `org-directory'. It must be set before org loads! ;; (setq org-directory "~/org/") ;; 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 t) ;; Here are some additional functions/macros that could help you configure Doom: ;; ;; - `load!' for loading external *.el files relative to this one ;; - `use-package!' for configuring packages ;; - `after!' for running code after a package has loaded ;; - `add-load-path!' for adding directories to the `load-path', relative to ;; this file. Emacs searches the `load-path' when you load packages with ;; `require' or `use-package'. ;; - `map!' for binding new keys ;; ;; To get information about any of these functions/macros, move the cursor over ;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). ;; This will open documentation for it, including demos of how they are used. ;; ;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how ;; they are implemented. #+end_src #+html:
** .zshrc #+begin_src shell :tangle ~/.zshrc # DO NOT EDIT THIS FILE DIRECTLY # This is a file generated from a literate programing source file # You should make any changes there and regenerate it from Emacs org-mode # using org-babel-tangle (C-c C-v t) #+end_src ** .bashrc #+begin_src shell :tangle ~/.bashrc # DO NOT EDIT THIS FILE DIRECTLY # This is a file generated from a literate programing source file # You should make any changes there and regenerate it from Emacs org-mode # using org-babel-tangle (C-c C-v t) #+end_src * Package Management ** Arch and AUR Packages *** Yay **** Prerequisites #+begin_src shell :tangle pkg-list.txt git base-devel #+end_src **** Installation General Package Management is done via [[https://github.com/Jguer/yay][Yay]]. ~update.sh~ will install it if needed. #+begin_src shell :tangle update.sh command_name="yay" if ! command -v "$command_name" &> /dev/null; then echo "Installing $command_name ..." git clone https://aur.archlinux.org/yay.git /tmp/yay cd /tmp/yay makepkg -si fi #+end_src after installation add yay to the packages list to ensure it doesn't delete itself #+begin_src shell :tangle pkg-list.txt yay #+end_src *** Package Installation remove all packages not in ~pkg-list.txt~ #+begin_src shell :tangle update.sh # Get list of installed packages INSTALLED_PACKAGES=$(yay -Qqe) # Read the list of packages to keep from the file KEEP_LIST=$(cat "pkg-list.txt") # Loop through installed packages for PACKAGE in $INSTALLED_PACKAGES; do # Check if the package is not in the keep list if ! echo "$KEEP_LIST" | grep -q "^$PACKAGE$"; then echo "Removing package: $PACKAGE" # Uncomment the following line to actually remove the package yay -Rns --noconfirm "$PACKAGE" fi done #+end_src and install the packages specified in ~pkg-list.txt~ #+begin_src shell :tangle update.sh yay -S --needed `grep -v '^#' pkg-list.txt` #+end_src * Base System ** Arch Linux the following packages are required for basic operation and should never be deleted #+begin_src shell :tangle pkg-list.txt amd-ucode base efibootmgr grub linux-zen linux-lts linux-firmware lvm2 sudo #+end_src ** Networking This config uses the [[https://wiki.archlinux.org/title/NetworkManager][NetworkManager]] #+begin_src shell :tangle pkg-list.txt networkmanager #+end_src after being installed it also needs to be enabled #+begin_src shell :tangle update.sh systemd_service="NetworkManager" if ! systemctl is-enabled --quiet "$systemd_service"; then echo "Enabling $systemd_service" sudo systemctl enable "$systemd_service" sudo systemctl start "$systemd_service" fi #+end_src ** [[https://wiki.archlinux.org/title/Man_page][Man Pages]] and [[https://wiki.archlinux.org/title/GNU#Texinfo][Texinfo]] #+begin_src shell :tangle pkg-list.txt man-db man-pages texinfo #+end_src * Desktop Environments and Window Manager ** [[https://wiki.archlinux.org/title/LightDM][LightDM]] install the required packages #+begin_src shell :tangle pkg-list.txt lightdm lightdm-gtk-greeter #+end_src and enable the systemd service #+begin_src shell :tangle update.sh systemd_service="lightdm" if ! systemctl is-enabled --quiet "$systemd_service"; then echo "Enabling $systemd_service" sudo systemctl enable "$systemd_service" fi #+end_src ** GNOME [[https://wiki.archlinux.org/title/GNOME][GNOME]] is installed as a fallback in case the main Window Manager breaks #+begin_src shell :tangle pkg-list.txt gnome #+end_src *** TODO GNOME programs #+begin_src shell :tangle pkg-list.txt evince gnome-color-manager gnome-keyring gnome-session gnome-settings-daemon gnome-shell gvfs gvfs-goa sushi tecla totem tracker3-miners xdg-desktop-portal-gnome xdg-user-dirs-gtk yay-debug yelp #+end_src * Text Editors ** Doom Emacs *** Installation **** [[https://github.com/doomemacs/doomemacs#prerequisites][Prerequisites]] #+begin_src shell :tangle pkg-list.txt git emacs ripgrep findutils fd #+end_src **** Doom Installation ~update.sh~ will install Doom Emacs if needed #+begin_src shell :tangle update.sh if [ ! -d "/home/paul/.config/doom" ]; then echo "Installing Doom Emacs ..." git clone --depth 1 https://github.com/doomemacs/doomemacs /home/paul/.config/emacs /home/paul/.config/emacs/bin/doom install-devel fi #+end_src **** add to PATH #+begin_src shell :tangle path.sh export PATH=$PATH:~/.config/emacs/bin #+end_src *** Doom Modules #+begin_src emacs-lisp :tangle ~/.config/doom/init.el (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 ;;helm ; the *other* search engine for love and life ;;ido ; the other *other* search engine... ;;ivy ; 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) ; 🙂 hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW ;;hydra ;;indent-guides ; highlighted indent columns ;;ligatures ; 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 ; 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 ;;ibuffer ; 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 +everywhere) ; 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 +lsp) ; 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) ;;gist ; interacting with github gists 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 ;;rgb ; creating color strings ;;taskrunner ; taskrunner for all your projects ;;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 IS-MAC 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 +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 ; all(hope(abandon(ye(who(enter(here)))))) ;;julia ; a better, faster MATLAB ;;kotlin ; a better, slicker Java(Script) (latex +fold +latexmk +lsp) ; 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 ; I hereby declare "nix geht mehr!" ;;ocaml ; an objective camel (org +roam2 +dragndrop +pretty +present) ; organize your plain life in plain text ;;php ; perl's insecure younger brother ;;plantuml ; diagrams for confusing people more ;;purescript ; javascript, but functional (python +conda +lsp +pyright +pyenv +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 ; 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 ; 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 ;;twitter ; twitter client https://twitter.com/vnought :config ;; literate (default +bindings +smartparens)) #+end_src *** General Configuration **** TODO User Information #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (setq user-full-name "Paul Lödige" user-mail-address "paul@gve-loedige.de") #+end_src **** Visual Settings ***** Font #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (setq doom-font (font-spec :family "Ubuntu Mono" :size 16) doom-variable-pitch-font (font-spec :family "Ubuntu" :size 14)) #+end_src ***** Line Numbering having used Neovim for quiet some time I got used to relative line numbering for navigation. Until I get used to the [[https://github.com/Greduan/emacs-theme-gruvbox][evil-snipe]] navigation I would like to keep them. #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (setq display-line-numbers-type 'relative) #+end_src **** TODO Authentication Authentication information will be stored in a encrypted file that is part of my dotfiles #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (setq auth-sources '((:source "~/.authinfo.gpg"))) #+end_src **** Misc ***** Set Start of Week to Monday #+begin_src emacs-lisp :tangle ~/.config/doom/init.el (setq calendar-week-start-day 1) #+end_src *** Multilanguage Spellcheck Enables use of multiple dictionaries. In my case German and English #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (with-eval-after-load "ispell" (setq ispell-program-name "hunspell") (setq ispell-dictionary "en_US,de_DE") (ispell-set-spellchecker-params) (ispell-hunspell-add-multi-dic "en_US,de_DE")) #+end_src *** TODO LaTeX **** Set PDF Viewer #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (setq +latex-viewers '(zathura)) #+end_src **** Add auto-compile hook for TeX mode Because TeX-command-run-all is an interactive command we need a helper function for the hook. This function could also become useful if we ever want to extend the compile command #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (defun custom-tex-compile () (interactive) (TeX-command-run-all nil)) (add-hook 'TeX-mode-hook (lambda () (add-hook 'after-save-hook #'custom-tex-compile nil t))) #+end_src *** Org Mode **** Default Location #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (setq org-directory "~/org/") #+end_src **** Visual ***** Enable Header Numbering #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! org (setq org-startup-numerated t)) #+end_src ***** Image Display as Default [[https://emacs.stackexchange.com/questions/57603/how-to-always-display-inline-images-by-default-existing-solutions-dont-seem-to#comment89772_57607][this stackexchange comment]] states that this has to be done before the [[Add "~/org" to Agenda][adding the ~/org directory to Org Agenda]] #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! org (setq org-startup-with-inline-images t)) #+end_src ***** Enable \LaTeX preview on default #+begin_src emacs-lisp :tangle ~/.config/doom/init.el (after! org (setq org-startup-latex-with-latex-preview t)) #+end_src **** CalDAV Sync [[https://github.com/dengste/org-caldav][org-caldav]] provides a tool for syncing with a CalDAV server (in my case Nextcloud). A lot of the config is also taken from [[https://www.reddit.com/r/orgmode/comments/8rl8ep/comment/e0sb5j0/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button][this]] reddit post. ***** org-caldav installation #+begin_src emacs-lisp :tangle ~/.config/doom/packages.el (package! org-caldav) #+end_src ***** Enable TODOs #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! org-caldav (setq org-icalendar-include-todo 'all org-caldav-sync-todo t)) #+end_src ***** Configure Sync add the calendars to the org-caldav config #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! org-caldav (setq org-caldav-url "https://cloud.ploedige.com/remote.php/dav/calendars/paul-loedige") (setq org-caldav-sync-direction 'org->cal) (setq org-caldav-calendars '((:calendar-id "todo" :files ("~/org/todo.org"))))) #+end_src **** Org Agenda Setup ***** Progress States To get a more nuanced overview of my current TODOs I add more progress states. | | INACTIVE | TODO | BLOCKED | IN_PROGRESS | REVIEW | TESTING | | DONE | DELEGATED | CANCELED | | |------------+----------+------+---------+-------------+--------+---------+---+------+-----------+----------+---| | Access Key | i | t | b | i | r | t | | d | | c | | | Log Type | time | time | note | time | note | note | | time | note | note | | #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! org (setq org-todo-keywords '((sequence "INACTIVE(i!)" "TODO(t!)" "IN_PROGRESS(p!)" "BLOCKED(b@)" "REVIEW(r@)" "TESTING(e@)" "|" "DONE(d!)" "DELEGATED(x@)" "CANCELED(c@)")))) #+end_src Also set the percent states for [[*CalDAV Sync][CalDAV Sync]] #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! org-caldav (setq org-caldav-todo-percent-states '((0 "INACTIVE") (1 "TODO") (2 "IN_PROGRESS") (3 "BLOCKED") (90 "REVIEW") (90 "TESTING") (100 "DONE") (100 "DELEGATED") (100 "CANCELED")))) #+end_src ***** Add "~/org" to Agenda #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! org (setq org-agenda-files (f-files "~/org" (lambda (f) (string= (f-ext f) "org")) 'recursive))) #+end_src **** Org Roam ***** set base directory Both the org files themselves and the database should be located in the same directory to enable syncing via Nextcloud #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! org (setq org-roam-directory (file-truename "~/org/org-roam")) (org-roam-db-autosync-mode)) #+end_src ***** Note Templates This contains all the capture templates I am using. Adding the "#+category: " tag improves the Org Agenda View for tasks captured in Org Roam #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! org-roam (setq org-roam-capture-templates '(("d" "default" plain "%?" :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n#+category: ${title}\n") :unnarrowed t) ("m" "Meeting Templates") ("mm" "Meeting Master Thesis" plain "* Current Progress\n\n* Open Questions\n\n* TODOs\n" :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: Master Thesis Meeting ${title}\n#+category: Master Thesis\n") :unnarrowed t)))) #+end_src ***** Misc ****** Follow Links on RET Because the normal shortcut for `org-open-at-point` is quite cumbersome I want it to just follow links when clicking the RET button #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! org (setq return-follows-link t)) #+end_src **** Org Transclusion ***** Installation #+begin_src emacs-lisp :tangle ~/.config/doom/packages.el (package! org-transclusion) #+end_src **** Bibliography ***** TODO Enabling Zotero Links Following [[https://www.riccardopinosio.com/blog/posts/zotero_notes_article.html#opening-zotero-pdf-from-org-roam][this guide]] we enable using zotero links with the following code #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! org :custom (org-link-set-parameters "zotero" :follow (lambda (zpath) (browse-url (format "zotero:%s" zpath))))) #+end_src ***** Citar Config ****** Setting the Citar Bibliography Following the [[https://github.com/doomemacs/doomemacs/tree/master/modules/tools/biblio][Doom Emacs documentation ]]we set the citar bibliography and notes paths #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! oc (setq citar-bibliography '("~/org/biblio.bib")) (setq citar-notes-paths '("~/org/org-roam/"))) #+end_src ****** Citar Templates Following the [[https://github.com/emacs-citar/citar#configuration][citar package documentation]] we modify the note template to contain the pdf link to Zotero *NOTE:* This requires the a [[https://www.riccardopinosio.com/blog/posts/zotero_notes_article.html#opening-zotero-pdf-from-org-roam][specific Zotero Export Configuration]] #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! oc (setq citar-templates '((main . "${author editor:30%sn} ${date year issued:4} ${title:48}") (suffix . " ${=key= id:15} ${=type=:12} ${tags keywords:*}") (preview . "${author editor:%etal} (${year issued date}) ${title}, ${journal journaltitle publisher container-title collection-title}.\n") (note . "Notes on ${author editor:%etal}, ${title}\npdf: ${file}")))) #+end_src ****** Enable Zotero Link Support In [[https://www.riccardopinosio.com/blog/posts/zotero_notes_article.html#citar][this tutorial]] I found the config for enabling Zotero Link Support through Citar #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! citar (defadvice! riccardo/citar-file-trust-zotero (oldfun &rest r) "Leave Zotero-generated file paths alone, especially zotero://..." :around '(citar-file-open citar-file--find-files-in-dirs) (cl-letf (((symbol-function 'file-exists-p) #'always) ((symbol-function 'expand-file-name) (lambda (first &rest _) first))) (apply oldfun r))) (add-to-list 'citar-file-open-functions '("pdf" . citar-file-open-external))) #+end_src *** Python **** TODO Set Debugger to debugpy as per the [[https://github.com/doomemacs/doomemacs/tree/master/modules/tools/debugger#dap-python][Doom Emacs Documentation]] it is recommended to set the debugger used for python debugging to debugpy #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (after! dap-mode (setq dap-python-debugger 'debugpy)) #+end_src ** VSCode *** Installation #+begin_src shell :tangle pkg-list.txt visual-studio-code-bin #+end_src *** TODO Add-Ons ** [[https://neovim.io/][Neovim]] *** Installation #+begin_src shell :tangle pkg-list.txt neovim #+end_src *** TODO Configuration * Shells ZSH is used as the default shell ** Aliases *** Shutdown and Reboot #+begin_src shell :tangle alias.sh alias sn='shutdown now' alias rb='reboot' #+end_src *** Confirm before overwriting #+begin_src shell :tangle alias.sh alias cp="cp -i" alias mv='mv -i' alias rm='rm -i' #+end_src *** Git Aliases #+begin_src shell :tangle pkg-list.txt git #+end_src #+begin_src shell :tangle alias.sh alias add='git add' alias addup='git add -u' alias addall='git add .' alias branch='git branch' alias checkout='git checkout' alias co='git checkout' alias clone='git clone' alias commit='git commit -m' alias fetch='git fetch' alias pull='git pull origin' alias push='git push origin' alias status='git status' alias diff='git diff' alias remote='git remote' alias ftemplate='git fetch template' alias mtemplate='git merge template/master --allow-unrelated-histories' alias log='git log' #+end_src ** [[https://www.zsh.org/][ZSH]] *** Installation #+begin_src shell :tangle pkg-list.txt zsh which #+end_src *** Set as default shell #+begin_src shell :tangle update.sh chsh-s $(which zsh) #+end_src *** [[https://ohmyz.sh/][Oh-My-Zsh]] **** Installation #+begin_src shell :tangle pkg-list.txt curl #+end_src install if needed #+begin_src shell :tangle update.sh if [ ! -d "/home/paul/.oh-my-zsh" ]; then echo "Installing Oh-My-Zsh..." sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" fi #+end_src **** Basic Configuration #+begin_src shell ~/.zshrc export ZSH="~/.oh-my-zsh" # Uncomment the following line to use case-sensitive completion. CASE_SENSITIVE="false" # Uncomment the following line to use hyphen-insensitive completion. # Case-sensitive completion must be off. _ and - will be interchangeable. HYPHEN_INSENSITIVE="true" # Uncomment the following line to change how often to auto-update (in days). export UPDATE_ZSH_DAYS=3 # Uncomment the following line to enable command auto-correction. ENABLE_CORRECTION="true" # Uncomment the following line to display red dots whilst waiting for completion. # Caution: this setting can cause issues with multiline prompts (zsh 5.7.1 and newer seem to work) # See https://github.com/ohmyzsh/ohmyzsh/issues/5765 COMPLETION_WAITING_DOTS="true" #+end_src **** TODO [[https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins][Plugins]] #+begin_src shell ~/.zshrc # Which plugins would you like to load? # Standard plugins can be found in $ZSH/plugins/ # Custom plugins may be added to $ZSH_CUSTOM/plugins/ # Example format: plugins=(rails git textmate ruby lighthouse) # Add wisely, as too many plugins slow down shell startup. plugins=( git svn themes command-not-found vi-mode extract # # non oh-my-zsh plugins # zsh-autosuggestions # zsh-syntax-highlighting # conda-zsh-completion ) #+end_src *** [[https://github.com/romkatv/powerlevel10k][Powerlevel10k]] install if needed #+begin_src shell :tangle pkg-list.txt git #+end_src #+begin_src shell :tangle update.sh if [ ! -d "/home/paul/.oh-my-zsh/custom/themes/powerlevel10k" ]; then echo "Installing Powerlevel10k..." git clone --depth=1 https://github.com/romkatv/powerlevel10k.git /home/paul/.oh-my-zsh/custom/themes/powerlevel10k fi #+end_src set as zsh theme #+begin_src shell .zshrc ZSH_THEME="powerlevel10k/powerlevel10k" #+end_src *** Configuration **** Source Aliases #+begin_src shell ~/.zshrc source alias.sh #+end_src **** Modify PATH #+begin_src shell ~/.zshrc source path.sh #+end_src **** [[https://github.com/dylanaraps/neofetch][neofetch]] install #+begin_src shell :tangle pkg-list.txt neofetch #+end_src and start #+begin_src shell ~/.zshrc neofetch #+end_src ** [[https://www.gnu.org/software/bash/][Bash]] *** Installation #+begin_src shell :tangle pkg-list.txt bash #+end_src *** Configuration **** Source Aliases #+begin_src shell ~/.bashrc source alias.sh #+end_src **** Modify PATH #+begin_src shell ~/.bashrc source path.sh #+end_src **** [[https://github.com/dylanaraps/neofetch][neofetch]] install #+begin_src shell :tangle pkg-list.txt neofetch #+end_src and start #+begin_src shell ~/.bashrc neofetch #+end_src * Themeing ** Doom Emacs I like the [[https://github.com/Greduan/emacs-theme-gruvbox][Gruvbox Theme by Eduardo Lavaque]]. For this we first need to install the specific package #+begin_src emacs-lisp :tangle ~/.config/doom/packages.el (package! gruvbox-theme) #+end_src and then set it #+begin_src emacs-lisp :tangle ~/.config/doom/config.el (setq doom-theme 'gruvbox-dark-hard) #+end_src * Misc Programs ** Zathura *** Installation #+begin_src shell :tangle pkg-list.txt zathura #+end_src *** enable synctex #+begin_src shell :tangle ~/.config/zathura/zathurarc :mkdirp yes set synctex true #+end_src