aboutsummaryrefslogtreecommitdiff

1. Package Management

(require 'package)
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
                         ("melpa-stable" . "https://stable.melpa.org/packages/")
                         ;;("org" . "https://orgmode.org/elpa/")
                         ("nongnu" . "https://elpa.nongnu.org/nongnu/")
                         ("elpa" . "https://elpa.gnu.org/packages/")))
(package-initialize)
(unless package-archive-contents
  (package-refresh-contents))

(unless (package-installed-p 'use-package)
  (package-install 'use-package))

(require 'use-package)
(setq use-package-always-ensure t)

2. UI

2.1. Font

(set-face-attribute 'default nil :height 120)

2.2. Remove bars

(menu-bar-mode -1)
(scroll-bar-mode -1)
(tool-bar-mode -1)
(tooltip-mode -1) ;; disable tooltips

2.3. Line numbers

(add-hook 'prog-mode-hook #'display-line-numbers-mode)
(setq display-line-numbers-type 'relative)

2.4. Remove startup message

(setq inhibit-startup-message t)

2.5. Set visible bell

(setq visible-bell t)

2.6. Fringes

(set-fringe-mode 10)

2.7. Theme

(use-package doom-themes
  :config
  (load-theme 'doom-solarized-dark t))

2.8. Modeline

2.8.1. Doom modeline

(use-package doom-modeline
  :ensure t
  :init (doom-modeline-mode 1))

2.8.2. Display columns

(column-number-mode)

2.9. Olivetti

(use-package olivetti
  :bind ("C-c f" . olivetti-mode)
  :hook
  (org-mode . olivetti-mode)
  (text-mode . olivetti-mode)
  (prog-mode . olivetti-mode)
  :init
  (setq-default olivetti-body-width 105))

3. Completion

3.1. Ivy

(use-package ivy
  :bind (("C-s" . swiper)
           :map ivy-minibuffer-map
           ("TAB" . ivy-alt-done))
  :config
  (ivy-mode 1))

3.1.1. Ivy-rich

(use-package ivy-rich
  :init
  (ivy-rich-mode 1))

3.2. Counsel

(use-package counsel
  :bind (("M-x" . counsel-M-x)
         ("C-x b" . counsel-ibuffer)
         ("C-x C-f" . counsel-find-file))
  :config
  (setq ivy-initial-inputs-alist nil)) ;; Don't start searches with ^

4. Helpers

4.1. which-key

(use-package which-key
  :init (which-key-mode)
  :config
  (setq which-key-idle-delay 0.3))

5. Org-mode

5.1. Visuals

5.1.1. Block highlighting

These settings ensure that block highlights aren't visible when collapsed.

(custom-set-faces
 '(org-block-begin-line ((t (:inherit default :background nil))))
 '(org-block-end-line ((t (:inherit default :background nil)))))

5.1.2. Indentation

(setq org-startup-indented t)

5.2. Org-babel

(org-babel-do-load-languages
 'org-babel-load-languages
 '((python . t)))

5.3. Org-contrib

(use-package org-contrib
  :config
  (require 'ox-extra)
  (ox-extras-activate '(ignore-headlines)))

6. PDF tools

(use-package pdf-tools
  :config
  (pdf-tools-install))

7. Project Management

7.1. Projectile

(use-package projectile
  :bind-keymap
  ("C-c p" . projectile-command-map)
  :config
  ;; (setq counsel-projectile-switch-project-action #'dired)
  (setq projectile-switch-project-action #'magit-status)
  :init
  (projectile-mode +1))

(use-package counsel-projectile
  :after (projectile counsel)
  :config
  (counsel-projectile-mode))

7.2. Direnv

(use-package direnv
  :config
  (direnv-mode))

7.3. Treemacs

(use-package treemacs
  :bind (("C-c t" . dk/treemacs-toggle)))

(use-package treemacs-projectile
  :after (treemacs projectile)
  :ensure t)

(use-package lsp-treemacs
  :after lsp)

(lsp-treemacs-sync-mode 1)

(defun dk/treemacs-toggle ()
  "Toggle treemacs"
  (interactive)
  (if (treemacs-current-visibility)
      (treemacs)
    (treemacs-add-and-display-current-project-exclusively)))

8. Version Control

8.1. Magit

(use-package magit
  :commands (magit-status magit-get-current-branch)
  :custom
  (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1))

9. Dev

9.1. LSP

(use-package lsp-mode
  :init
  (setq lsp-keymap-prefix "C-c l")
  :hook
  (prog-mode . lsp)
  :config
  (lsp-enable-which-key-integration t)
  (lsp-register-client
   (make-lsp-client
    :new-connection (lsp-stdio-connection "glsl_analyzer")
    :major-modes '(glsl-mode)
    :server-id 'glsl-analyzer)))
  :commands lsp)

9.2. Company Mode

(use-package company
  :after lsp-mode
  :hook (lsp-mode . company-mode)
  :bind
  (:map company-active-map
        ("<tab>" . company-complete-selection))
  (:map lsp-mode-map
        ("<tab>" . company-indent-or-complete-common))
  :custom
  (company-minimum-prefix-lenght 1)
  (company-idle-delay 0.0))

9.3. Commenting

(use-package evil-nerd-commenter
  :bind ("M-/" . evilnc-comment-or-uncomment-lines))

9.4. Programming Languages

9.4.1. C/C++

(setq lsp-clients-clangd-args '("-compile-commands-dir=build"))

9.4.2. Rust

(use-package rust-mode
  :hook
  (rust-mode . (lambda () (setq indent-tabs-mode nil)))
  (rust-mode . prettify-symbols-mode)
  :config
  (setq rust-format-on-save t))

9.4.3. Nix

(use-package nix-mode
  :mode "\\.nix\\'")

9.4.4. WGSL

(use-package wgsl-mode
  :mode "\\.wgsl\\'")

9.4.5. GLSL

(use-package glsl-mode
  :ensure t)

9.5. Tools

9.5.1. Simple-httpd

(use-package simple-httpd
  :ensure t)

10. Misc

10.1. Disable backups

(setq backup-inhibited t)
(setq auto-save-default nil)