(use-package treemacs :ensure t :bind ("" . treemacs) :config (progn (use-package treemacs-evil :ensure t :demand t))) ;; which key is a package to show which keys can be pressed (use-package which-key :ensure t :diminish which-key-mode :config (which-key-mode)) (use-package discover-my-major :ensure t :bind ("C-h C-m" . discover-my-major)) (when (boundp 'enable-langtool) (use-package langtool :ensure t)) ;; Amx, an alternative interface for M-x in Emacs ;; https://github.com/DarwinAwardWinner/amx (use-package amx :ensure t :config (amx-mode t)) (use-package eyebrowse :ensure t :init (setq eyebrowse-keymap-prefix (kbd "C-c M-e")) (global-unset-key (kbd "C-c C-w")) (define-key evil-normal-state-map "gt" 'eyebrowse-next-window-config) (define-key evil-normal-state-map "gT" 'eyebrowse-prev-window-config) (define-key evil-normal-state-map "gr" 'eyebrowse-rename-window-config) (define-key evil-normal-state-map "gc" 'eyebrowse-close-window-config) :config (setq eyebrowse-new-workspace t) (setq eyebrowse-switch-back-and-forth t) (setq eyebrowse-wrap-around t) (eyebrowse-setup-opinionated-keys) (eyebrowse-mode 1)) (use-package move-text :ensure t :config (move-text-default-bindings)) (use-package gnu-elpa-keyring-update :ensure t) ;; web-mode for general web development (use-package web-mode :ensure t :mode (("\\.phtml\\'" . web-mode) ("\\.tpl\\'" . web-mode) ("\\.[agj]sp\\'" . web-mode) ("\\.as[cp]x\\'" . web-mode) ("\\.erb\\'" . web-mode) ("\\.mustache\\'" . web-mode) ("\\.djhtml\\'" . web-mode) ("\\.html?\\'" . web-mode)) :config (add-to-list 'auto-mode-alist '("\\.php$" . my/php-setup)) (add-to-list 'auto-mode-alist '("\\.phpi$" . my/php-setup))) ;; add markdown-mode to edit markdown files (use-package markdown-mode :ensure t :commands (markdown-mode gfm-mode) :mode (("README\\.md\\'" . gfm-mode) ("\\.md\\'" . markdown-mode) ("\\.markdown\\'" . markdown-mode)) :init (setq markdown-command "multimarkdown") (setq markdown-enable-wiki-links t markdown-wiki-link-alias-first t markdown-hide-urls t markdown-fontify-code-blocks-natively t markdown-wiki-link-search-type '(project) markdown-link-space-sub-char " ") :config (defun insert-file-name-as-wikilink (filename &optional args) (interactive "*fInsert file name: \nP") (insert (concat "[[" (file-name-sans-extension (file-relative-name filename)) "]]"))) (define-key markdown-mode-map (kbd "C-c i") 'insert-file-name-as-wikilink)) ;; enable powershell-mode (use-package powershell :ensure t :mode (("\\.ps1\\'" . powershell-mode) ("\\.psm1\\'" . powershell-mode))) (when (boundp 'enable-auctex) ;; auctex a greate plugin for latex writing (use-package latex :if (is-linux-p) :ensure auctex :mode ("\\.tex\\'" . latex-mode) :ensure-system-package (pdflatex . texlive-full) :config (setq-default TeX-master nil) (setq TeX-auto-save t) (setq TeX-parse-self t) (setq TeX-electric-math (quote ("\\(" . "\\)"))) (setq LaTeX-electric-left-right-brace t) (setq TeX-view-program-selection (quote (((output-dvi has-no-display-manager) "dvi2tty") ((output-dvi style-pstricks) "dvips and gv") (output-dvi "xdvi") (output-pdf "PDF Tools") (output-html "xdg-open")))))) (use-package yaml-mode :defer t :mode (("\\.yml\\'" . yaml-mode) ("\\.yaml\\'" . yaml-mode)) :interpreter ("yml" . yml-mode) :ensure t) (use-package python-mode :ensure t :defer t :config (setq python-shell-interpreter "python3")) (use-package elpy :ensure t :config (setq elpy-rpc-python-command "python3") (setq elpy-test-runner 'elpy-test-pytest-runner) (setq eldoc-idle-delay 1) (add-hook 'python-mode-hook (lambda () (highlight-indentation-mode -1))) (elpy-enable)) (use-package company :ensure t :bind ("C-" . company-complete) :config (setq company-idle-delay 0) (define-key company-active-map (kbd "TAB") 'company-complete-common-or-cycle) (define-key company-active-map (kbd "") 'company-complete-common-or-cycle) (setq company-dabbrev-downcase nil) (add-hook 'after-init-hook 'global-company-mode) ;; Add yasnippet support for all company backends (defvar company-mode/enable-yas t "Enable yasnippet for all backends.") (defun company-mode/backend-with-yas (backend) (if (or (not company-mode/enable-yas) (and (listp backend) (member 'company-yasnippet backend))) backend (append (if (consp backend) backend (list backend)) '(:with company-yasnippet)))) (setq company-backends (mapcar #'company-mode/backend-with-yas company-backends))) (when (boundp 'enable-auctex) (use-package company-auctex :if (is-linux-p) :ensure t :after auctex :defer t :init (add-hook 'LaTeX-mode-hook 'company-auctex-init))) (use-package company-web :ensure t :after web-mode :commands company-web-html :config (require 'company-web-html) ;; Tide completion support in web-mode with company-mode (defun my-web-mode-hook () "Hook for `web-mode'." (set (make-local-variable 'company-backends) '(company-tide company-web-html company-yasnippet company-files))) (add-hook 'web-mode-hook 'my-web-mode-hook) ;; Enable JavaScript completion between etc. (defadvice company-tide (before web-mode-set-up-ac-sources activate) "Set `tide-mode' based on current language before running company-tide." (if (equal major-mode 'web-mode) (let ((web-mode-cur-language (web-mode-language-at-pos))) (if (or (string= web-mode-cur-language "javascript") (string= web-mode-cur-language "jsx")) (unless tide-mode (tide-mode)) (if tide-mode (tide-mode -1))))))) (use-package company-restclient :ensure t :after (restclient company) :config (add-to-list 'company-backends 'company-restclient)) ;; enable magit a great git porcelain. (use-package magit :ensure t :commands magit-status :bind ("" . magit-status)) ;; change the colours of parenthesis the further out they are (use-package rainbow-delimiters :ensure t :config (add-hook 'prog-mode-hook #'rainbow-delimiters-mode)) (use-package bug-hunter :defer t :ensure t) (use-package flycheck :ensure t) (use-package highlight-indent-guides :ensure t :config (setq highlight-indent-guides-method 'character hightlight-indentation-mode nil highlight-indent-guides-auto-enabled nil) (set-face-background 'highlight-indent-guides-odd-face "darkgray") (set-face-background 'highlight-indent-guides-even-face "gray") (set-face-foreground 'highlight-indent-guides-character-face "gray") (add-hook 'text-mode-hook 'highlight-indent-guides-mode) (add-hook 'prog-mode-hook 'highlight-indent-guides-mode)) (use-package direnv :config (direnv-mode)) (use-package format-all :ensure t :hook ((prog-mode . format-all-ensure-formatter) (yaml-mode . format-all-ensure-formatter) (prog-mode . format-all-mode)) :preface (defun nebucatnetzer/format-code () "format buffer." (interactive) (format-all-buffer)) :config (global-set-key (kbd "C-c C-f") #'nebucatnetzer/format-code) (setq format-all-show-errors 'errors) (setq format-all-default-formatters '(("Assembly" asmfmt) ("ATS" atsfmt) ("Bazel" buildifier) ("BibTeX" emacs-bibtex) ("C" clang-format) ("C#" clang-format) ("C++" clang-format) ("Cabal Config" cabal-fmt) ("Clojure" zprint) ("CMake" cmake-format) ("Crystal" crystal) ("CSS" prettier) ("Cuda" clang-format) ("D" dfmt) ("Dart" dart-format) ("Dhall" dhall) ("Dockerfile" dockfmt) ("Elixir" mix-format) ("Elm" elm-format) ("Emacs Lisp" emacs-lisp) ("Erlang" efmt) ("F#" fantomas) ("Fish" fish-indent) ("Fortran Free Form" fprettify) ("GLSL" clang-format) ("Go" gofmt) ("GraphQL" prettier) ("Haskell" brittany) ("HTML" html-tidy) ("Java" clang-format) ("JavaScript" prettier) ("JSON" prettier) ("JSON5" prettier) ("Jsonnet" jsonnetfmt) ("JSX" prettier) ("Kotlin" ktlint) ("LaTeX" latexindent) ("Less" prettier) ("Literate Haskell" brittany) ("Lua" lua-fmt) ("Markdown" prettier) ("Nix" nixpkgs-fmt) ("Objective-C" clang-format) ("OCaml" ocp-indent) ("Perl" perltidy) ("PHP" prettier) ("Protocol Buffer" clang-format) ("PureScript" purty) ("Python" autopep8) ("R" styler) ("Reason" bsrefmt) ("ReScript" rescript) ("Ruby" rufo) ("Rust" rustfmt) ("Scala" scalafmt) ("SCSS" prettier) ("Shell" shfmt) ("Solidity" prettier) ("SQL" sqlformat) ("Svelte" prettier) ("Swift" swiftformat) ("Terraform" terraform-fmt) ("TOML" prettier) ("TSX" prettier) ("TypeScript" prettier) ("V" v-fmt) ("Verilog" istyle-verilog) ("Vue" prettier) ("XML" html-tidy) ("YAML" prettier) ("Zig" zig) ("_Angular" prettier) ("_Flow" prettier) ("_Gleam" gleam) ("_Ledger" ledger-mode) ("_Nginx" nginxfmt) ("_Snakemake" snakefmt))) ) (when (boundp 'enable-email) (use-package mu4e :if (is-linux-p) :config (require 'smtpmail) ;; use msmtp (setq message-send-mail-function 'message-send-mail-with-sendmail) (setq sendmail-program "msmtp") (require 'mu4e) (require 'org-mu4e) (setq mu4e-completing-read-function (quote ivy-completing-read)) (setq mail-user-agent 'mu4e-user-agent) (setq mu4e-drafts-folder "/personal/Drafts") (setq mu4e-sent-folder "/personal/Sent") (setq mu4e-trash-folder "/personal/Trash") (setq mu4e-refile-folder "/personal/Archive") (setq browse-url-browser-function 'browse-url-generic browse-url-generic-program "firefox") (require 'mu4e-contrib) (setq mu4e-html2text-command 'mu4e-shr2text) (add-to-list 'mu4e-view-actions '("ViewInBrowser" . mu4e-action-view-in-browser) t) (setq mu4e-headers-fields '((:date . 10) ;; alternatively, use :human-date (:flags . 5) (:from . 22) (:subject . nil))) ;; alternatively, use :thread-subject (setq mu4e-get-mail-command "offlineimap -qo" mu4e-update-interval 120 mu4e-headers-auto-update t mu4e-compose-format-flowed t mu4e-index-update-in-background t mu4e-compose-dont-reply-to-self t mu4e-attachment-dir "~/nextcloud/10_documents/01_inbox" mu4e-compose-signature-auto-include nil) (add-hook 'mu4e-view-mode-hook 'visual-line-mode) (setq mu4e-maildir-shortcuts '(("/personal/INBOX" . ?i) ("/personal/Sent" . ?s) ("/personal/Trash" . ?t) ("/personal/Archive" . ?a) ("/personal/Drafts" . ?d))) ;; show images (setq mu4e-show-images t) ;; general emacs mail settings; used when composing e-mail ;; the non-mu4e-* stuff is inherited from emacs/message-mode (setq mu4e-reply-to-address "andreas@zweili.ch") (setq message-kill-buffer-on-exit t) ;; Don't ask for a 'context' upon opening mu4e (setq mu4e-context-policy 'pick-first) ;; Don't ask to quit (setq mu4e-confirm-quit nil) ;; spell check (add-hook 'mu4e-compose-mode-hook (defun my-do-compose-stuff () "My settings for message composition." (setq mu4e-compose-format-flowed t) (use-hard-newlines -1) (electric-indent-local-mode -1) (turn-off-auto-fill) (flyspell-mode))))) ;; disable menu and toolbar (tool-bar-mode -1) (menu-bar-mode -99) (when (boundp 'enable-scroll-bar) (scroll-bar-mode -1)) ; Proper line wrapping (global-visual-line-mode 1) (when (boundp 'disable-fringe) ; Disable fringe because I use visual-line-mode (set-fringe-mode '(0 . 0))) ; Disable splash screen (setq inhibit-splash-screen t) (tooltip-mode -1) (setq tooltip-use-echo-area t) ;; disable or reconfigure prompts (fset 'yes-or-no-p 'y-or-n-p) ;; remap yes or no to y or n (setq confirm-nonexistent-file-or-buffer nil);; just create buffers don't ask (setq ido-create-new-buffer 'always) ;; highlight bad whitespace (use-package whitespace :ensure t :config (setq whitespace-style '(face lines-tail tabs trailing)) (set-face-attribute 'whitespace-line nil :foreground "#af005f") (global-whitespace-mode t)) (when (boundp 'enable-font) (set-face-attribute 'default nil :family "Source Code Pro" :height 120 :weight 'normal :width 'normal)) (when (boundp 'enable-pdf-tools) ;; improve the resolution of doc-view (setq doc-view-resolution 200)) (toggle-frame-maximized) (setq-default mode-line-format '("%e" mode-line-front-space ;; mode-line-mule-info mode-line-client mode-line-modified mode-line-remote mode-line-frame-identification mode-line-buffer-identification " " mode-line-position (vc-mode vc-mode) ;; " " ;; mode-line-modes " " mode-line-misc-info ;; battery-mode-line-string ;; mode-line-end-spaces )) (setq display-line-numbers-type 'visual) (add-hook 'prog-mode-hook (lambda () (when (version<= "26.0.50" emacs-version ) (display-line-numbers-mode)))) (setq inhibit-compacting-font-caches t) (when (boundp 'enable-org-bullets) ;; Enable pretty bullets in org mode (use-package org-superstar :ensure t :config (add-hook 'org-mode-hook (lambda () (org-superstar-mode 1))))) ;; add a package to convert the agenda view to HTML (use-package htmlize :ensure t :after org) (when (is-linux-p) ;;; org-man.el - Support for links to manpages in Org (org-add-link-type "man" 'org-man-open) (add-hook 'org-store-link-functions 'org-man-store-link) (defcustom org-man-command 'man "The Emacs command to be used to display a man page." :group 'org-link :type '(choice (const man) (const woman))) (defun org-man-open (path) "Visit the manpage on PATH. PATH should be a topic that can be thrown at the man command." (funcall org-man-command path)) (defun org-man-store-link () "Store a link to a manpage." (when (memq major-mode '(Man-mode woman-mode)) ;; This is a man page, we do make this link (let* ((page (org-man-get-page-name)) (link (concat "man:" page)) (description (format "Manpage for %s" page))) (org-store-link-props :type "man" :link link :description description)))) (defun org-man-get-page-name () "Extract the page name from the buffer name." ;; This works for both `Man-mode' and `woman-mode'. (if (string-match " \\(\\S-+\\)\\*" (buffer-name)) (match-string 1 (buffer-name)) (error "Cannot create link to this man page"))) (provide 'org-man) ;;; org-man.el ends here (require 'org-man)) (use-package org-ref :ensure t :after org :init (setq org-ref-completion-library 'org-ref-ivy-cite) :config (setq org-ref-default-citation-link "footcite") (setq reftex-default-bibliography '("~/nextcloud/03_documents/org/notes/_resources/references.bib")) (setq org-ref-bibliography-notes "~/nextcloud/03_documents/org/notes/bibliography_notes.org" org-ref-default-bibliography '("~/nextcloud/03_documents/org/notes/_resources/references.bib") org-ref-pdf-directory "~/nextcloud/03_documents/org/notes/_resources/")) (when (boundp 'enable-ox-pandoc) (use-package ox-pandoc :ensure t :after org)) (use-package org :ensure t :pin gnu :config ;; enable org-mode keys (when (or (boundp 'enable-personal-agenda) (boundp 'enable-work-agenda)) (define-key global-map "\C-ca" 'org-agenda)) (global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-cc" 'org-capture) (global-set-key "\C-cb" 'org-iswitchb) ;; evilificate calendar in org-mode (define-key org-read-date-minibuffer-local-map (kbd "M-h") (lambda () (interactive) (org-eval-in-calendar '(calendar-backward-day 1)))) (define-key org-read-date-minibuffer-local-map (kbd "M-l") (lambda () (interactive) (org-eval-in-calendar '(calendar-forward-day 1)))) (define-key org-read-date-minibuffer-local-map (kbd "M-k") (lambda () (interactive) (org-eval-in-calendar '(calendar-backward-week 1)))) (define-key org-read-date-minibuffer-local-map (kbd "M-j") (lambda () (interactive) (org-eval-in-calendar '(calendar-forward-week 1)))) (define-key org-read-date-minibuffer-local-map (kbd "M-H") (lambda () (interactive) (org-eval-in-calendar '(calendar-backward-month 1)))) (define-key org-read-date-minibuffer-local-map (kbd "M-L") (lambda () (interactive) (org-eval-in-calendar '(calendar-forward-month 1)))) (define-key org-read-date-minibuffer-local-map (kbd "M-K") (lambda () (interactive) (org-eval-in-calendar '(calendar-backward-year 1)))) (define-key org-read-date-minibuffer-local-map (kbd "M-J") (lambda () (interactive) (org-eval-in-calendar '(calendar-forward-year 1)))) ;; evil keybindings for the org-agenda (evil-add-hjkl-bindings org-agenda-mode-map 'emacs ;;(kbd "/") 'evil-search-forward (kbd "n") 'evil-search-next (kbd "N") 'evil-search-previous (kbd "C-d") 'evil-scroll-down (kbd "C-u") 'evil-scroll-up (kbd "c") 'org-capture (kbd "C-w C-w") 'other-window) ;; disable line split with M-RET (setq org-M-RET-may-split-line (quote ((default)))) ;; enable the correct intdentation for source code blocks (setq org-edit-src-content-indentation 0) (setq org-src-tab-acts-natively t) (setq org-src-preserve-indentation t) ;; archive files to a monthly file (when (boundp 'enable-personal-agenda) (when (is-linux-p) (setq org-archive-location (concat "~/nextcloud/10_documents/99_archive/2022/projects/" (format-time-string "%Y-%m" (current-time)) "-%s::datetree/")))) (when (boundp 'enable-work-agenda) (when (is-windows-p) (setq org-archive-location (concat "~/nextcloud/03_documents/org/archive/work/" (format-time-string "%Y-%m" (current-time)) "-%s::datetree/")))) ;; enable todo and checkbox depencies (setq org-enforce-todo-dependencies t) (setq org-enforce-todo-checkbox-dependencies t) ;; quick access for todo states (setq org-todo-keywords '((sequence "TODO(t)" "NEXT(n)" "WAITING(w!)" "PROJECT(p)" "|" "DONE(d)") (sequence "|" "CANCELLED(c)"))) (setq org-log-done 'time) (setq org-log-into-drawer t) ;; enable org-indent (setq org-startup-indented t) ;; capture templates (defun my/org-capture-read-file-name () (concat (expand-file-name (read-file-name "PROMPT: " "~/nextcloud/12_tasks/")) ".org")) (when (boundp 'enable-personal-agenda) (when (is-linux-p) (setq org-capture-templates (quote (("t" "Adds a Next entry" entry (file+headline "~/nextcloud/12_tasks/personal.org" "Capture") (file "~/nextcloud/10_documents/99_archive/0000/settings/templates/temp_personal_todo.txt") :empty-lines 1) ("n" "Add note" plain (file my/org-capture-read-file-name) (file "~/nextcloud/10_documents/99_archive/0000/settings/templates/temp_note.txt")) ))))) (when (boundp 'enable-work-agenda) (when (is-windows-p) (setq org-capture-templates (quote (("j" "Journal Entry" entry (file+headline "~/nextcloud/03_documents/org/agenda/work/work.org" "Clock") (file "~/nextcloud/10_documents/99_archive/0000/settings/templates/temp_clock_note.txt") :empty-lines 1) ("c" "Phone call" entry (file+headline "~/nextcloud/03_documents/org/agenda/work/work.org" "Clock") "* %U PHONE %?" :clock-in t :clock-resume t) ("t" "Adds a Next entry" entry (file+headline "~/nextcloud/03_documents/org/agenda/work/work.org" "Capture") (file "~/nextcloud/10_documents/99_archive/0000/settings/templates/temp_work_todo.txt") :clock-in t :clock-resume t) ("p" "Small Project" entry (file+headline "~/nextcloud/03_documents/org/agenda/work/work.org" "Capture") (file "~/nextcloud/10_documents/99_archive/0000/settings/templates/temp_work_small_project.txt")) ("m" "Meeting" entry (file+headline "~/nextcloud/03_documents/org/agenda/work/work.org" "Capture") "* %U MEETING: with %?\n" :clock-in t :clock-resume t :empty-lines 1) ("n" "Add note" plain (file my/org-capture-read-file-name) (file "~/nextcloud/10_documents/99_archive/0000/settings/templates/temp_note.txt")) ))))) ;; org-columns format (setq org-columns-default-format "%40ITEM(Task) %8Effort(Estimated Effort){:} %8CLOCKSUM %10TAGS") ;; available effort times (setq org-global-properties (quote (("Effort_ALL" . "0 0:10 0:30 1:00 2:00 3:00 4:00 5:00 6:00 7:00")))) ;; org-refile options (setq org-refile-allow-creating-parent-nodes (quote confirm)) (setq org-refile-use-outline-path 'file org-outline-path-complete-in-steps nil) (defun nebucatnetzer-org-files-list () (delq nil (mapcar (lambda (buffer) (buffer-file-name buffer)) (org-buffer-list 'files t)))) (setq org-refile-targets '((nebucatnetzer-org-files-list :maxlevel . 6))) (setq org-src-fontify-natively t) (setq org-highlight-latex-and-related '(latex)) (setq org-image-actual-width (quote (500))) (setq org-startup-with-inline-images t) (setq org-id-link-to-org-use-id 'create-if-interactive-and-no-custom-id org-clone-delete-id t) (setq org-blank-before-new-entry (quote ((heading . t) (plain-list-item . auto)))) (setq org-footnote-section "Resources") (setq org-attach-directory "~/nextcloud/10_documents/99_archive/2022/resources/") (setq org-todo-keyword-faces `(("WAITING" :foreground "#0087ff" :weight bold) ("TODO" :foreground "#d75f00" :weight bold) ("PROJECT" :foreground "#626262" :weight bold) ("NEXT" :foreground "#d70000" :weight bold))) (set-face-attribute 'org-agenda-structure nil :inherit 'default :height 1.00) (set-face-attribute 'org-agenda-date-weekend nil :height 1.00 :weight 'medium) (set-face-attribute 'org-agenda-calendar-event nil :weight 'medium) (set-face-attribute 'org-agenda-date nil :inherit 'default :height 1.00 :weight 'bold) (set-face-attribute 'org-agenda-date-today nil :slant 'normal :weight 'bold :height 1.00) (set-face-attribute 'org-done nil :foreground "#5f8700" :weight 'bold) (set-face-attribute 'org-link nil :foreground "#0087ff" :underline t) (set-face-attribute 'org-scheduled nil :foreground "#5f8700" :slant 'italic :weight 'normal) (set-face-attribute 'org-scheduled-previously nil :foreground "#d70000" :weight 'normal) (set-face-attribute 'org-scheduled-today nil :foreground "#5f8700" :slant 'italic :weight 'normal) (set-face-attribute 'org-todo nil :background "nil" :foreground "#d70000" :weight 'bold) (set-face-attribute 'org-upcoming-deadline nil :foreground "#d70000" :weight 'normal) (set-face-attribute 'org-warning nil :foreground "#d70000" :weight 'normal) (setq org-startup-shrink-all-tables t) ;; org-export formats ;;(setq org-export-backends (quote (beamer html latex md odt reveal))) (setq org-html-html5-fancy t org-html-doctype "html5") ;; disable the Todo keywords in the export (setq org-export-with-todo-keywords nil) ;; disable the tags in the export (setq org-export-with-tags nil) (setq org-latex-caption-above nil) (setq org-export-with-sub-superscripts nil) (setq org-export-with-smart-quotes t) (setq org-export-headline-levels 5) ;; options for beamer exports (setq org-beamer-frame-level 2) (setq org-beamer-outline-frame-options "") (setq org-beamer-outline-frame-title "Inhalt") (setq org-beamer-theme "metropolis") ;; options for latex exports (setq org-latex-classes (quote (("beamer" "\\documentclass{beamer}" ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}")) ("article" "\\documentclass{article}" ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}") ("\\paragraph{%s}" . "\\paragraph*{%s}") ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) ("report" "\\documentclass[11pt]{report}" ("\\part{%s}" . "\\part*{%s}") ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}")) ("book" "\\documentclass[11pt]{book}" ("\\part{%s}" . "\\part*{%s}") ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))))) (setq org-latex-default-packages-alist nil) (setq org-latex-listings 'listings) (setq org-latex-title-command "\\maketitle\\newpage") (setq org-latex-toc-command "\\tableofcontents \\newpage ") ;; Set the agenda separator to a space character. (setq org-agenda-block-separator " ") ;; a function to call the custom agenda view. (defun az/custom-agenda (&optional arg) (interactive "P") (org-agenda arg "A")) (global-set-key [f9] 'az/custom-agenda) ;; hide done tasks in the agenda (setq org-agenda-skip-deadline-if-done t) (setq org-agenda-skip-scheduled-if-done t) (setq org-agenda-skip-timestamp-if-done t) ;; Custom agenda command to list the stuck projects in the normal ;; agenda view. (setq org-stuck-projects '("/PROJECT" ("NEXT") nil "")) (setq org-agenda-custom-commands (quote (("A" "Custom Agenda" ((agenda "" nil) (stuck "" ((org-agenda-overriding-header "Stuck Projects") (org-agenda-sorting-strategy '(category-up)))) (tags-todo "TODO=\"PROJECT\" " ((org-agenda-overriding-header "Projects") (org-agenda-sorting-strategy '(category-up)))) nil)) ;; Show all headings with the corresponding TODO state ("N" occur-tree "NEXT") ("O" occur-tree "TODO") ("W" occur-tree "WAITING")))) ;; don't show the warnings for deadlines if the item is scheduled (setq org-agenda-skip-deadline-prewarning-if-scheduled t) ;; start the agenda on the current day and show the next 13 days (setq org-agenda-span 14 org-agenda-start-on-weekday nil) (setq org-agenda-tags-column -80) (setq org-agenda-show-future-repeats (quote next)) (setq org-agenda-sorting-strategy (quote ((agenda todo-state-up priority-down category-up)))) ;; dimm open tasks (setq org-agenda-dim-blocked-tasks t) ;; automatically refresh the agenda after adding a task (add-hook 'org-capture-after-finalize-hook 'nebucatnetzer:org-agenda-redo) (defun nebucatnetzer:org-agenda-redo () (interactive) (when (get-buffer "*Org Agenda*") (with-current-buffer "*Org Agenda*" (org-agenda-redo t) (message "[org agenda] refreshed!")))) (setq org-clock-out-remove-zero-time-clocks t) (when (boundp 'enable-clocking) (defun start-heading-clock (id file) "Start clock programmatically for heading with ID in FILE." (require 'org-id) (if-let (marker (org-id-find-id-in-file id file t)) (save-current-buffer (save-excursion (set-buffer (marker-buffer marker)) (goto-char (marker-position marker)) (org-clock-in))) (warn "Clock not started (Could not find ID '%s' in file '%s')" id file))) (defun start-main-clock () "This functions always clocks in to the * Clock heading" (interactive) (start-heading-clock "e9f71012-4370-4dd2-af8e-9ae14d86508a" "~/nextcloud/03_documents/org/agenda/work/work.org")) (global-set-key (kbd "") 'start-main-clock)) (org-clock-persistence-insinuate) (setq org-clock-out-when-done t) (setq org-clock-persist t) ;; Do not prompt to resume an active clock (setq org-clock-persist-query-resume nil) (global-set-key (kbd "") 'org-clock-in) (global-set-key (kbd "") 'org-clock-out) (global-set-key (kbd "C-x C-d") 'org-clock-mark-default-task) (setq org-duration-format (quote (("h") (special . 2)))) (setq org-agenda-clockreport-parameter-plist (quote (:link t :maxlevel 4 :tcolumns 3))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; add image from conference phone upload ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; use case is taking a photo of a slide in a conference and uploading ;; it to google drive or dropbox or whatever to get it on your ;; computer. You then want to embed it in an org-mode document by ;; moving it to the same folder and renaming according to the current ;; section of the org file, avoiding name clashes ;; required libraries (require 'dash) (require 'swiper) (require 's) (load-library "find-lisp") (when (boundp 'enable-personal-agenda) (when (is-linux-p) (setq org-agenda-files (find-lisp-find-files "~/nextcloud/12_tasks" "\.org$")))) (when (boundp 'enable-work-agenda) (when (is-windows-p) (setq org-agenda-files (find-lisp-find-files "~/nextcloud/03_documents/org/agenda/work" "\.org$")))) (defun org-update-cookies-after-save() (interactive) (let ((current-prefix-arg '(4))) (org-update-statistics-cookies "ALL"))) (add-hook 'org-mode-hook (lambda () (add-hook 'before-save-hook 'org-update-cookies-after-save nil 'make-it-local))) (defun org-summary-todo (n-done n-not-done) "Switch entry to DONE when all subentries are done, to TODO otherwise." (let (org-log-done org-log-states) ; turn off logging (org-todo (if (= n-not-done 0) "DONE" "TODO")))) (add-hook 'org-after-todo-statistics-hook 'org-summary-todo)) ;; keymap for my personal.org file (when (boundp 'enable-personal-agenda) (when (is-linux-p) (global-set-key (kbd "C-c p") (lambda () (interactive) (find-file "~/nextcloud/12_tasks/personal.org"))))) (when (boundp 'enable-work-agenda) (when (is-windows-p) (global-set-key (kbd "C-c p") (lambda () (interactive) (find-file "~/nextcloud/03_documents/org/agenda/work/work.org"))))) ;; My details (setq user-full-name "Andreas Zweili") (setq user-mail-address "andreas@zweili.ch") ;; a function to toggle the splits (defun toggle-window-split () (interactive) (if (= (count-windows) 2) (let* ((this-win-buffer (window-buffer)) (next-win-buffer (window-buffer (next-window))) (this-win-edges (window-edges (selected-window))) (next-win-edges (window-edges (next-window))) (this-win-2nd (not (and (<= (car this-win-edges) (car next-win-edges)) (<= (cadr this-win-edges) (cadr next-win-edges))))) (splitter (if (= (car this-win-edges) (car (window-edges (next-window)))) 'split-window-horizontally 'split-window-vertically))) (delete-other-windows) (let ((first-win (selected-window))) (funcall splitter) (if this-win-2nd (other-window 1)) (set-window-buffer (selected-window) this-win-buffer) (set-window-buffer (next-window) next-win-buffer) (select-window first-win) (if this-win-2nd (other-window 1)))))) (define-key ctl-x-map "4" 'toggle-window-split) (defun nebucatnetzer:split-window-below-and-move-cursor () (interactive) (split-window-below) (other-window 1)) (defun nebucatnetzer:split-window-right-and-move-cursor () (interactive) (split-window-right) (other-window 1)) (global-set-key (kbd "C-x 2") 'nebucatnetzer:split-window-below-and-move-cursor) (global-set-key (kbd "C-x 3") 'nebucatnetzer:split-window-right-and-move-cursor) ;; Spaces instead of TABs (setq-default indent-tabs-mode nil) (setq-default tab-width 4) (setq indent-line-function 'insert-tab) ;; keymap for buffer switching (global-set-key (kbd "C-x C-b") 'ibuffer) (global-set-key (kbd "C-x b") 'ivy-switch-buffer) ;; kill THIS buffer (global-set-key (kbd "C-x C-k") 'kill-this-buffer) ;; copy the complete buffer to the clipboard (defun copy-all () "Copy entire buffer to clipboard" (interactive) (clipboard-kill-ring-save (point-min) (point-max))) (global-set-key (kbd "C-S-c") 'copy-all) ;; keybinding for new frame (global-set-key (kbd "C-x N") 'make-frame) ;; switch to frame (global-set-key (kbd "C-x O") 'other-frame) ;; kill frame (global-set-key (kbd "C-x K") 'delete-frame) ;; enable hippie expand on M-Space (global-set-key "\M- " 'hippie-expand) (defun switch-to-minibuffer () "Switch to minibuffer window." (interactive) (if (active-minibuffer-window) (select-window (active-minibuffer-window)) (error "Minibuffer is not active"))) (bind-key "M-m" 'switch-to-minibuffer) ;; file encodings (prefer-coding-system 'utf-8-unix) (setq backup-directory-alist `((".*" . ,temporary-file-directory))) (setq auto-save-file-name-transforms `((".*" ,temporary-file-directory t))) ;; hide temporary buffers (add-hook 'ibuffer-mode-hook (lambda () (ibuffer-filter-by-name "^[^*]"))) (setq ibuffer-saved-filter-groups (quote (("default" ("Org" ;; all org-related buffers (mode . org-mode)) ("Programming" ;; prog stuff not already in MyProjectX (or (mode . python-mode) (mode . web-mode) (mode . php-mode) (mode . csharp-mode) (mode . javascript-mode) (mode . sql-mode) (mode . powershell-mode) (mode . nix-mode) (mode . yaml-mode) (mode . emacs-lisp-mode))) ;; etc ("Dired" (mode . dired-mode)))))) (add-hook 'ibuffer-mode-hook (lambda () (ibuffer-switch-to-saved-filter-groups "default"))) ;; initial buffers should use text-mode (setq-default major-mode 'text-mode) ; Calender should start on Monday (setq calendar-week-start-day 1) ;; ispell settings (setenv "DICTIONARY" "en_US") (setq ispell-program-name "hunspell") (setq ispell-local-dictionary "en_US") (setq ispell-local-dictionary-alist '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US") nil utf-8) ("de_CH" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "de_CH") nil utf-8))) ;; insert only one space after a period (setq sentence-end-double-space nil) ; Matches parentheses and such in every mode (show-paren-mode 1) ;; pair parentheses (electric-pair-mode 1) (add-hook 'text-mode-hook 'turn-on-auto-fill) (setq ad-redefinition-action 'accept) (add-hook 'before-save-hook 'whitespace-cleanup) (global-auto-revert-mode t) (setq-default fill-column 79) (setq column-number-mode 1) (when (boundp 'enable-emojis) (when (is-linux-p) (set-fontset-font t nil "Symbola" nil 'prepend))) (defun kill-other-buffers () "Kill all other buffers." (interactive) (mapc 'kill-buffer (delq (current-buffer) (buffer-list)))) (defun insert-date () "Insert the current date." (interactive) (let ((format "%d.%m.%Y") (system-time-locale "de_CH")) (insert (format-time-string format)))) (defun insert-iso-date () "Insert the current date in the ISO format." (interactive) (let ((format "%Y-%m-%d") (system-time-locale "de_CH")) (insert (format-time-string format)))) (defun insert-full-date () "Insert the current date, write out the day and month name." (interactive) (let ((format "%A, %d. %B %Y") (system-time-locale "de_CH")) (insert (format-time-string format)))) (defun buffer-too-big-p () (or (> (buffer-size) (* 5000 64)) (> (line-number-at-pos (point-max)) 5000))) (defun generic-setup () ;; turn off `linum-mode' when there are more than 5000 lines (if (buffer-too-big-p) (display-line-numbers-mode -1))) (add-hook 'prog-mode-hook 'generic-setup) (add-hook 'text-mode-hook 'generic-setup) (setq history-delete-duplicates t) (xterm-mouse-mode 1) (add-hook 'text-mode-hook (lambda () (electric-indent-local-mode -1))) (add-hook 'eshell-mode-hook (lambda () (setq pcomplete-cycle-completions nil))) (setq tramp-default-method "ssh") (when (boundp 'enable-auctex) (defun LaTeX-collapse-table () (interactive) (save-excursion (LaTeX-mark-environment) (while (re-search-forward "[[:space:]]+\\(&\\|\\\\\\\\\\)" (region-end) t) (replace-match " \\1")))) (defun LaTeX-align-environment (arg) (interactive "P") (if arg (LaTeX-collapse-table) (save-excursion (LaTeX-mark-environment) (align (region-beginning) (region-end)))))) (when (boundp 'enable-auctex) (defcustom LaTeX-inhibited-auto-fill-environments '("tabular" "tikzpicture") "For which LaTeX environments not to run auto-fill.") (defun LaTeX-limited-auto-fill () (let ((environment (LaTeX-current-environment))) (when (not (member environment LaTeX-inhibited-auto-fill-environments)) (do-auto-fill))))) (when (boundp 'enable-auctex) (global-set-key (kbd "C-c f") 'LaTeX-align-environment) (setq auto-fill-function 'LaTeX-limited-auto-fill)) (put 'dired-find-alternate-file 'disabled nil) (setq-default dired-listing-switches "-alh") ;; keymap for dired (global-set-key (kbd "C-c d") 'dired-jump) (bind-keys :map dired-mode-map ("q" . az-kill-dired-buffers)) ;;a function to kill all dired buffers (defun az-kill-dired-buffers () (interactive) (mapc (lambda (buffer) (when (eq 'dired-mode (buffer-local-value 'major-mode buffer)) (kill-buffer buffer))) (buffer-list))) (use-package dired-hide-dotfiles :ensure t :init (defun my-dired-mode-hook () "My `dired' mode hook." ;; To hide dot-files by default (dired-hide-dotfiles-mode) ;; To toggle hiding (add-hook 'dired-mode-hook #'my-dired-mode-hook)) :bind (:map dired-mode-map ("." . dired-hide-dotfiles-mode)))