From c3cd49a38c58fcbdbd9264732f51e35386416c41 Mon Sep 17 00:00:00 2001 From: materus Date: Sun, 18 May 2025 08:49:34 +0200 Subject: [PATCH] Update --- README.org | 5 +- config/emacs/EMACS-CONFIG.org | 1154 ++++++++++++++++++++ config/emacs/early-init.el | 87 ++ config/emacs/init.el | 666 +++++++++++ dotfiles/emacs/early-init.el | 86 -- dotfiles/emacs/etc/materus/emacs-config.el | 768 ------------- dotfiles/emacs/init.el | 22 - flake.lock | 1050 ++++++++++++++++++ flake.nix | 47 +- org-conf/nix-flake.org => flake.org | 73 +- nix/common.nix | 211 ++++ nix/default.nix | 30 + nix/hosts/materusPC.nix | 262 +++++ nix/subflake/flake.nix | 10 +- org-conf/emacs-config.org | 1008 ----------------- private/check-encryption | Bin 0 -> 31 bytes 16 files changed, 3514 insertions(+), 1965 deletions(-) create mode 100644 config/emacs/EMACS-CONFIG.org create mode 100644 config/emacs/early-init.el create mode 100644 config/emacs/init.el delete mode 100644 dotfiles/emacs/early-init.el delete mode 100644 dotfiles/emacs/etc/materus/emacs-config.el delete mode 100644 dotfiles/emacs/init.el create mode 100644 flake.lock rename org-conf/nix-flake.org => flake.org (74%) create mode 100644 nix/common.nix create mode 100644 nix/default.nix create mode 100644 nix/hosts/materusPC.nix delete mode 100644 org-conf/emacs-config.org create mode 100644 private/check-encryption diff --git a/README.org b/README.org index 2bc89c2..df531a9 100644 --- a/README.org +++ b/README.org @@ -1,10 +1,9 @@ -#+TITLE: Lemon +#+TITLE: Materus Komplete Konfig #+DESCRIPTION: NixOS config and dotfiles #+AUTHOR: Mateusz "materus" Słodkowicz #+OPTIONS: \n:t #+LANGUAGE: en -Lemon is mine collection of NixOS config, dotfiles and some scripts. -Most of my config is tangled from Emacs Org files located [[./org-conf/][there]]. +This is collection of all mine systems config. NixOS, dotfiles, VFIO etc. Part of it is encrypted with [[https://github.com/AGWA/git-crypt][git-crypt]]. diff --git a/config/emacs/EMACS-CONFIG.org b/config/emacs/EMACS-CONFIG.org new file mode 100644 index 0000000..0db3f2b --- /dev/null +++ b/config/emacs/EMACS-CONFIG.org @@ -0,0 +1,1154 @@ +#+TITLE: Materus Emacs Cfg +#+AUTHOR: materus +#+DESCRIPTION: materus emacs configuration +#+STARTUP: overview +#+PROPERTY: header-args :tangle no :noweb yes +#+OPTIONS: \n:t +#+auto_tangle: t + +* Table of Contents :noexport:TOC_3: +- [[#early-init][Early Init]] +- [[#init-core][Init Core]] + - [[#prepare][Prepare]] + - [[#elpaca][Elpaca]] + - [[#functions][Functions]] + - [[#custom-file][Custom File]] + - [[#font--text][Font & Text]] + - [[#frame][Frame]] + - [[#mouse][Mouse]] +- [[#packages--settings][Packages & Settings]] + - [[#visual][Visual]] + - [[#theme][Theme]] + - [[#rainbow-mode][Rainbow mode]] + - [[#delimiters][Delimiters]] + - [[#modeline][Modeline]] + - [[#dashboard][Dashboard]] + - [[#highlight-indent-guides][Highlight Indent Guides]] + - [[#outli][Outli]] + - [[#visual-replace][Visual Replace]] + - [[#folding][Folding]] + - [[#terminal][Terminal]] + - [[#eat][Eat]] + - [[#vterm][Vterm]] + - [[#navigation-and-completion][Navigation and Completion]] + - [[#minibuffer-orderless-vertico-marginalia-consult][minibuffer (orderless, vertico, marginalia, consult)]] + - [[#code-completion-cape-corfu][Code completion (Cape, corfu)]] + - [[#dirvish][Dirvish]] + - [[#treemacs][Treemacs]] + - [[#programming][Programming]] + - [[#general][General]] + - [[#snippets][Snippets]] + - [[#cc][C/C++]] + - [[#java][Java]] + - [[#python][Python]] + - [[#nix][Nix]] + - [[#lisp--scheme][Lisp / Scheme]] + - [[#shell][Shell]] + - [[#version-control][Version Control]] + - [[#diff-highlight][Diff Highlight]] + - [[#magit][Magit]] + - [[#git-timemachine][Git Timemachine]] + - [[#notes--organization][Notes & Organization]] + - [[#org-mode][Org Mode]] + - [[#other--misc][Other & Misc]] + - [[#undo-tree][Undo-tree]] + - [[#which-key][which-key]] + - [[#projectile][projectile]] + - [[#perspective][Perspective]] + - [[#elcord][Elcord]] + - [[#drag-stuff][drag-stuff]] + - [[#popper][popper]] + - [[#visual-fill-column][visual-fill-column]] + - [[#so-long][so-long]] + - [[#vlf][vlf]] + - [[#crux][crux]] + - [[#no-littering][No Littering]] + - [[#libraries][Libraries]] + - [[#nerd-icons][Nerd Icons]] + - [[#svg-lib][SVG Lib]] + - [[#transient][Transient]] +- [[#keybindings][Keybindings]] +- [[#final-code][Final Code]] +- [[#links][Links]] +- [[#tests][Tests]] +- [[#archive][Archive]] + - [[#navigation-and-completion-1][Navigation and completion]] + - [[#helm][HELM]] + - [[#comapny][Comapny]] + +* Early Init +#+begin_src emacs-lisp :tangle (expand-file-name "early-init.el" user-emacs-directory) :noweb-ref early-init + ;;; -*- lexical-binding: t; -*- + + ;;; VARIABLES + + + (setenv "LSP_USE_PLISTS" "true") ; Make lsp-mode use plists + + (setq c-default-style nil) ; Clear default styles for languages, will set them up later + (setq default-input-method nil) ; Disable default input method, I'm not using them anyway so far + + (setq initial-major-mode 'emacs-lisp-mode) + + (setq auto-save-default nil) ; TODO: configure auto saves, disable for now + (setq backup-directory-alist + `((".*" . ,(concat user-emacs-directory "var/backups/")))) ; Set backup location + (setq auto-save-file-name-transforms + `((".*" ,(concat user-emacs-directory "var/recovery/") t))) ; Set auto-save location + (setq auto-save-list-file-prefix (concat user-emacs-directory "var/auto-save/sessions/")) ; Set auto-save-list location + (setq load-prefer-newer t) ; Prefer newer files to load + + + (setq package-enable-at-startup nil) + (setq package-quickstart nil) ; Disable package quickstart + + (setq inhibit-startup-screen t) + + (setq inhibit-compacting-font-caches t) ; Don't compact fonts + + (set-language-environment "UTF-8") ; Use UTF-8 + (setq-default buffer-file-coding-system 'utf-8-unix) + + (setq custom-file (concat user-emacs-directory "etc/custom.el")) ; Set custom file location, don't want clutter in main directory + (setq custom-theme-directory + (concat user-emacs-directory "/etc/materus/themes" )) ; Set custom themes location + + (setq ring-bell-function 'ignore) ; Disable bell + + + (defvar materus/emacs-gc-cons-threshold (* 64 1024 1024) + "The value of `gc-cons-threshold' after Emacs startup.") ; Define after init garbage collector threshold + + + ;;; GARBAGE COLLECTOR + (setq gc-cons-threshold most-positive-fixnum) ; Set `gc-cons-threshold' so it won't collectect during initialization + + (add-hook 'emacs-startup-hook + (lambda () + (setq gc-cons-threshold materus/emacs-gc-cons-threshold))) ; Set `gc-cons-threshold' to desired value after startup + + + + + ;;; FRAMES + + (setq frame-inhibit-implied-resize t) + (setq frame-resize-pixelwise t) + (setq window-resize-pixelwise t) ; Allow pixelwise resizing of window and frame + + (unless (daemonp) + (add-to-list 'initial-frame-alist '(fullscreen . maximized))) ; Start first frame maximized if not running as daemon, daemon frame are set up later in config + (setq default-frame-alist ; Set default size for frames + '((width . 130) + (height . 40))) + + (advice-add #'tty-run-terminal-initialization :override #'ignore) + (add-hook 'window-setup-hook + (lambda () + (unless (display-graphic-p) + (advice-remove #'tty-run-terminal-initialization #'ignore) + (tty-run-terminal-initialization (selected-frame) nil t) + ))) + + + ;;; NATIVE COMPILATION + + (setq native-comp-async-report-warnings-errors nil) ; Silence warnings + (setq native-comp-speed 2) ; Set native-comp speed + + (setq native-comp-jit-compilation t + native-comp-deferred-compilation t + package-native-compile t) + + + ;; Setting up native-comp cache location + +(when (boundp 'native-comp-eln-load-path) + (startup-redirect-eln-cache (expand-file-name "var/eln-cache/" user-emacs-directory))) +#+end_src + +* Init Core +:PROPERTIES: +:header-args: :tangle no +:END: +** Prepare +#+begin_src emacs-lisp :noweb-ref init +;; Prepare + (require 'materus-nix nil t) + (require 'elec-pair) + (when (not emacs-build-time) + (print "WARN: emacs-build-time not set up, using current time") + (setq emacs-build-time (decode-time (current-time)))) + (add-to-list 'load-path (concat user-emacs-directory "etc/pkgs/")) ; Extra load path for packages + (defvar materus/nixos-config (getenv "MATERUS_CONFIG_DIR")) + (setq read-process-output-max (* 1024 1024 3)) + +#+END_src +** Elpaca +#+begin_src emacs-lisp :noweb-ref init-elpaca + ;; Elpaca Init + (defvar elpaca-installer-version 0.11) + (defvar elpaca-directory (expand-file-name "var/elpaca/" user-emacs-directory)) + (defvar elpaca-builds-directory (expand-file-name (concat "builds/" emacs-version "/") elpaca-directory)) + (defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory)) + (defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git" + :ref nil :depth 1 :inherit ignore + :files (:defaults "elpaca-test.el" (:exclude "extensions")) + :build (:not elpaca--activate-package))) + (let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory)) + (build (expand-file-name "elpaca/" elpaca-builds-directory)) + (order (cdr elpaca-order)) + (default-directory repo)) + (add-to-list 'load-path (if (file-exists-p build) build repo)) + (unless (file-exists-p repo) + (make-directory repo t) + (when (<= emacs-major-version 28) (require 'subr-x)) + (condition-case-unless-debug err + (if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*")) + ((zerop (apply #'call-process `("git" nil ,buffer t "clone" + ,@(when-let* ((depth (plist-get order :depth))) + (list (format "--depth=%d" depth) "--no-single-branch")) + ,(plist-get order :repo) ,repo)))) + ((zerop (call-process "git" nil buffer t "checkout" + (or (plist-get order :ref) "--")))) + (emacs (concat invocation-directory invocation-name)) + ((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch" + "--eval" "(byte-recompile-directory \".\" 0 'force)"))) + ((require 'elpaca)) + ((elpaca-generate-autoloads "elpaca" repo))) + (progn (message "%s" (buffer-string)) (kill-buffer buffer)) + (error "%s" (with-current-buffer buffer (buffer-string)))) + ((error) (warn "%s" err) (delete-directory repo 'recursive)))) + (unless (require 'elpaca-autoloads nil t) + (require 'elpaca) + (elpaca-generate-autoloads "elpaca" repo) + (let ((load-source-file-function nil)) (load "./elpaca-autoloads")))) + (add-hook 'after-init-hook #'elpaca-process-queues) + (elpaca `(,@elpaca-order)) + + (elpaca elpaca-use-package + (elpaca-use-package-mode) + (setq elpaca-use-package-by-default t)) + +#+END_src +** Functions +#+begin_src emacs-lisp :noweb-ref init-functions + ;; Use package preffering built-in / nix packages + (defmacro materus/use-package (package &rest body) + (if (locate-library (symbol-name `,package)) + `(progn + (cl-pushnew (quote ,package) elpaca-ignored-dependencies) + (use-package ,package :ensure nil ,@body)) + `(use-package ,package ,@body))) + + (defun materus/--outli-modes () + "Check if supported mode" + (or (eq major-mode 'nix-mode) + (eq major-mode 'nix-ts-mode) + (eq major-mode 'c-mode) + (eq major-mode 'c-ts-mode) + (eq major-mode 'c++-mode) + (eq major-mode 'c++-ts-mode))) + + (defun materus/--fix-outli-formatting (FORMATTER STATUS) + "Remove whitespaces before outli headers" + (when (and (materus/--outli-modes) + (eq STATUS :reformatted)) + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (while (re-search-forward (concat "^[ ]+\\(" comment-start "\\*+ +[^ ].*\\)[ ]*") nil t) + (replace-match "\\1")))))) + + (defun materus/--electric-indent-ignore-outli (char) + "Don't indent outli headers" + (when (materus/--outli-modes) + (save-excursion + (backward-char) + (beginning-of-line) + (if (not (looking-at-p (concat "^\\(" comment-start "\\*+ +[^ ].*\\)[ ]*"))) nil 'no-indent)))) +#+END_src + +** Custom File +#+begin_src emacs-lisp :noweb-ref init-custom-file + ;; Custom File + (add-hook 'elpaca-after-init-hook (lambda () (load custom-file 'noerror))) +#+end_src + +** Font & Text +#+begin_src emacs-lisp :noweb-ref init-extra + ;; Font & Text init + (when (display-graphic-p) + (set-frame-font "Hack Nerd Font" nil t)) + (setq-default cursor-type '(bar . 2)) + (setq truncate-string-ellipsis "…") + + + (setq text-mode-ispell-word-completion nil) ; Disable ispell + (global-completion-preview-mode 1) + (electric-pair-mode 1) + (electric-indent-mode -1) +#+end_src + +** Frame +#+begin_src emacs-lisp :noweb-ref init-extra + ;; Frame Init + (when (daemonp) + (add-hook 'after-make-frame-functions + (lambda (frame) (when (= (length (frame-list)) 2) + (set-frame-parameter frame 'fullscreen 'maximized)) + (select-frame-set-input-focus frame) ))) + (global-tab-line-mode 1) + (setq tab-line-close-tab-function 'kill-buffer) + + (setq window-divider-default-bottom-width 1) + (setq window-divider-default-right-width 1) + (window-divider-mode 1) + (tool-bar-mode -1) + (setq-default display-line-numbers-width 3) + (setq-default display-line-numbers-widen t) + + (defun startup-screen-advice (orig-fun &rest args) + (when (= (seq-count #'buffer-file-name (buffer-list)) 0) + (apply orig-fun args))) + (advice-add 'display-startup-screen :around #'startup-screen-advice) ; Hide startup screen if started with file +#+end_src +** Mouse +Setting up mouse +#+begin_src emacs-lisp :noweb-ref init-extra + ;; Mouse Init + (context-menu-mode 1) + (setq mouse-wheel-follow-mouse 't) + (setq scroll-step 1) + (setq mouse-drag-and-drop-region t) + (xterm-mouse-mode 1) + (pixel-scroll-precision-mode 1) + (setq-default pixel-scroll-precision-large-scroll-height 10.0) +#+end_src +* Packages & Settings +:PROPERTIES: +:header-args: :tangle no :noweb-ref packages +:END: +** Visual +*** Theme +#+begin_src emacs-lisp + (use-package dracula-theme :config + (if (daemonp) + (add-hook 'after-make-frame-functions + (lambda (frame) + (with-selected-frame frame (load-theme 'dracula t)))) + (load-theme 'dracula t))) + +#+end_src +*** Rainbow mode +#+begin_src emacs-lisp + (use-package rainbow-mode + :hook + ((org-mode . rainbow-mode) + (prog-mode . rainbow-mode))) +#+end_src +*** Delimiters +#+begin_src emacs-lisp + (use-package rainbow-delimiters + :hook + (prog-mode . rainbow-delimiters-mode) + :config + (set-face-attribute 'rainbow-delimiters-depth-1-face nil :foreground "#FFFFFF") + (set-face-attribute 'rainbow-delimiters-depth-2-face nil :foreground "#FFFF00") + (set-face-attribute 'rainbow-delimiters-depth-5-face nil :foreground "#6A5ACD") + (set-face-attribute 'rainbow-delimiters-unmatched-face nil :foreground "#FF0000")) + +#+end_src +*** Modeline +#+begin_src emacs-lisp + (use-package doom-modeline + :init (setq doom-modeline-support-imenu t) + :hook (elpaca-after-init . doom-modeline-mode) + :config + (setq doom-modeline-icon t) + (setq doom-modeline-project-detection 'auto) + (setq doom-modeline-height 20) + (setq doom-modeline-enable-word-count t) + (setq doom-modeline-minor-modes t) + (setq display-time-24hr-format t) + (display-time-mode 1) + (column-number-mode 1) + (line-number-mode 1)) + + (use-package minions + :hook (elpaca-after-init . minions-mode)) +#+end_src +*** Dashboard +#+begin_src emacs-lisp + (use-package dashboard + :after (nerd-icons projectile) + :config + (setq dashboard-center-content t) + (setq dashboard-display-icons-p t) + (setq dashboard-icon-type 'nerd-icons) + (setq dashboard-projects-backend 'projectile) + (setq dashboard-items '((recents . 5) + (bookmarks . 5) + (projects . 5) + (agenda . 5) + (registers . 5))) + (when (or (daemonp) (< (length command-line-args) 2)) + (add-hook 'elpaca-after-init-hook #'dashboard-insert-startupify-lists) + (add-hook 'elpaca-after-init-hook #'dashboard-initialize) + (dashboard-setup-startup-hook))) + (when (daemonp) + (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*")))) ; Show dashboard when emacs is running as daemon) + #+end_src +#+begin_src emacs-lisp :tangle no :noweb-ref keybindings + ;; Dashboard + (define-key dashboard-mode-map (kbd "C-r") #'dashboard-refresh-buffer) +#+end_src +*** Highlight Indent Guides +[[https://github.com/DarthFennec/highlight-indent-guides][highlight-indent-guides]] +#+begin_src emacs-lisp + (use-package highlight-indent-guides + :hook ((prog-mode . highlight-indent-guides-mode))) +#+end_src +*** Outli +#+begin_src emacs-lisp + (use-package outli + :ensure (:host github :repo "jdtsmith/outli") + :hook ((prog-mode . outli-mode))) +#+end_src +*** Visual Replace +#+begin_src emacs-lisp + (use-package visual-replace + :defer t + :bind (("C-r" . visual-replace) + :map isearch-mode-map + ("C-r" . visual-replace-from-isearch))) +#+end_src +*** Folding +Treesit-fold +#+begin_src emacs-lisp + (use-package treesit-fold) +#+end_src +Hideshowvis +#+begin_src emacs-lisp + (use-package hideshowvis) +#+end_src +** Terminal +*** Eat +#+begin_src emacs-lisp + (use-package eat) + +#+end_src +#+begin_src emacs-lisp :tangle no :noweb-ref keybindings + ;; Eat + (defvar cua--eat-semi-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT semi-char mode CUA keymap") + (defvar cua--eat-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT char mode CUA keymap") + + + (define-key cua--eat-semi-char-keymap (kbd "C-v") #'eat-yank) + (define-key cua--eat-char-keymap (kbd "C-S-v") #'eat-yank) + (define-key cua--eat-semi-char-keymap (kbd "C-c") #'copy-region-as-kill) + (define-key cua--eat-char-keymap (kbd "C-S-c") #'copy-region-as-kill) + (define-key eat-mode-map (kbd "C-") #'eat-self-input) + (define-key eat-mode-map (kbd "C-") #'eat-self-input) + + + (defun cua--eat-semi-char-override-keymap () + (setq-local cua--keymap-alist (copy-tree cua--keymap-alist)) + (setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-semi-char-keymap)) + (defun cua--eat-char-override-keymap () + (setq-local cua--keymap-alist (copy-tree cua--keymap-alist)) + (setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-char-keymap)) + + (advice-add 'eat-semi-char-mode :after #'cua--eat-semi-char-override-keymap) + (advice-add 'eat-char-mode :after #'cua--eat-char-override-keymap) + (add-hook 'eat-char-mode-hook #'cua--eat-char-override-keymap) + +#+end_src +*** Vterm +#+begin_src emacs-lisp +(materus/use-package vterm) +#+end_src +** Navigation and Completion +*** minibuffer (orderless, vertico, marginalia, consult) +#+begin_src emacs-lisp + (use-package orderless + :init + ;; Tune the global completion style settings to your liking! + ;; This affects the minibuffer and non-lsp completion at point. + (setq completion-styles '(basic partial-completion orderless) + completion-category-defaults nil + completion-category-overrides nil)) + (use-package consult) + (use-package marginalia) + (use-package embark) + (use-package embark-consult + :after (embark consult)) + + (use-package vertico + :ensure t + :after (consult marginalia embark) + :config + (setq completion-in-region-function + (lambda (&rest args) + (apply (if vertico-mode + #'consult-completion-in-region + #'completion--in-region) + args))) + (vertico-mode 1) + (marginalia-mode 1)) + (use-package vertico-mouse + :config + (vertico-mouse-mode 1) + :ensure nil + :after (vertico)) +#+end_src + +*** Code completion (Cape, corfu) +#+begin_src emacs-lisp + (use-package cape) + + (use-package corfu + :ensure t + :after (lsp-mode cape) + ;; Optional customizations + :custom + (corfu-cycle nil) ;; Enable cycling for `corfu-next/previous' + (corfu-auto t) ;; Enable auto completion + (global-corfu-minibuffer nil) + ;; (corfu-quit-at-boundary nil) ;; Never quit at completion boundary + ;; (corfu-quit-no-match nil) ;; Never quit, even if there is no match + (corfu-preview-current nil) ;; Disable current candidate preview + ;; (corfu-preselect 'prompt) ;; Preselect the prompt + ;; (corfu-on-exact-match nil) ;; Configure handling of exact matches + + ;; Enable Corfu only for certain modes. See also `global-corfu-modes'. + ;; :hook ((prog-mode . corfu-mode) + ;; (shell-mode . corfu-mode) + ;; (eshell-mode . corfu-mode)) + + ;; Recommended: Enable Corfu globally. This is recommended since Dabbrev can + ;; be used globally (M-/). See also the customization variable + ;; `global-corfu-modes' to exclude certain modes. + :init + (global-corfu-mode 1) + (corfu-popupinfo-mode 1) + (corfu-history-mode 1) + + (defun materus/orderless-dispatch-flex-first (_pattern index _total) + (and (eq index 0) 'orderless-flex)) + + (defun materus/lsp-mode-setup-completion () + (setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults)) + '(orderless)) + ;; Optionally configure the first word as flex filtered. + (add-hook 'orderless-style-dispatchers #'materus/orderless-dispatch-flex-first nil 'local) + ;; Optionally configure the cape-capf-buster. + (setq-local completion-at-point-functions (list (cape-capf-buster #'lsp-completion-at-point)))) + + :hook + (lsp-completion-mode . materus/lsp-mode-setup-completion)) + + + + (use-package corfu-terminal + :after (corfu) + :config + (when (or (daemonp) (not (display-graphic-p))) + (corfu-terminal-mode))) + + (use-package corfu-mouse + :after (corfu) + :ensure (:type git :repo "https://codeberg.org/materus/emacs-corfu-mouse.git") + :config + (corfu-mouse-mode) + (keymap-set corfu--mouse-ignore-map "" 'ignore) + (keymap-set corfu-map "" 'ignore)) + + (use-package kind-icon + :after (corfu) + :config + (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)) + + + + #+end_src +*** Dirvish +#+begin_src emacs-lisp + (use-package dirvish + :after (nerd-icons) + :config + (setq dired-mouse-drag-files t) + (dirvish-override-dired-mode 1) + (setq dirvish-attributes + '(vc-state + subtree-state + nerd-icons + collapse + git-msg + file-time + file-size))) + +#+end_src +*** Treemacs +#+begin_src emacs-lisp + (use-package treemacs) + (use-package treemacs-projectile + :after (projectile treemacs)) + (use-package treemacs-nerd-icons + :after (nerd-icons treemacs)) + (use-package treemacs-perspective + :after (treemacs)) + (use-package treemacs-mouse-interface + :after (treemacs) + :ensure nil) +#+end_src +#+begin_src emacs-lisp :tangle no :noweb-ref keybindings + ;; Treemacs + (define-key global-map (kbd "C-H-t") 'treemacs) +#+end_src +** Programming +*** General +**** Settings +#+begin_src emacs-lisp :noweb-ref init-extra + (add-to-list 'c-default-style '(awk-mode . "awk")) + (add-to-list 'c-default-style '(other . "bsd")) + + (setq-default tab-width 4) + (setq-default indent-tabs-mode nil) + (setq-default c-basic-offset 4) + (setq-default c-indent-level 4) + + (setq-default c-ts-mode-indent-offset 4) + (setq-default c-ts-mode-indent-style 'bsd) + + (setq-default c-hungry-delete-key t) + + + + (add-hook 'prog-mode-hook 'display-line-numbers-mode) + (add-hook 'prog-mode-hook 'electric-indent-local-mode) + (add-hook 'electric-indent-functions 'materus/--electric-indent-ignore-outli) +#+end_src +**** LSP +#+begin_src emacs-lisp + (use-package lsp-ui + :after (lsp-mode)) + (use-package lsp-mode + ;; :custom + ;; (lsp-completion-provider :none) ;; we use Corfu! + :config + (setq lsp-keep-workspace-alive nil) + (setq lsp-enable-on-type-formatting nil) + + (defun lsp-booster--advice-json-parse (old-fn &rest args) + "Try to parse bytecode instead of json." + (or + (when (equal (following-char) ?#) + (let ((bytecode (read (current-buffer)))) + (when (byte-code-function-p bytecode) + (funcall bytecode)))) + (apply old-fn args))) + (advice-add (if (progn (require 'json) + (fboundp 'json-parse-buffer)) + 'json-parse-buffer + 'json-read) + :around + #'lsp-booster--advice-json-parse) + + (defun lsp-booster--advice-final-command (old-fn cmd &optional test?) + "Prepend emacs-lsp-booster command to lsp CMD." + (let ((orig-result (funcall old-fn cmd test?))) + (if (and (not test?) ; for check lsp-server-present? + (not (file-remote-p default-directory)) ; see lsp-resolve-final-command, it would add extra shell wrapper + lsp-use-plists + (not (functionp 'json-rpc-connection)) ; native json-rpc + (executable-find "emacs-lsp-booster")) + (progn + (when-let* ((command-from-exec-path (executable-find (car orig-result)))) ; resolve command from exec-path (in case not found in $PATH) + (setcar orig-result command-from-exec-path)) + (message "Using emacs-lsp-booster for %s!" orig-result) + (cons "emacs-lsp-booster" orig-result)) + orig-result))) + (advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command)) + (use-package lsp-treemacs + :after (lsp-mode treemacs) + :config + (lsp-treemacs-sync-mode 1)) + + +#+end_src +**** Debug +#+begin_src emacs-lisp + (use-package dap-mode + :after (lsp-mode) + :config + (require 'dap-lldb) + (require 'dap-gdb-lldb) + (require 'dap-cpptools) + (setq dap-gdb-lldb-extension-version "0.27.0") + (dap-auto-configure-mode 1)) + +#+end_src +**** Formatting +#+begin_src emacs-lisp + (use-package format-all + :hook ((prog-mode . format-all-mode)) + :config + (defun format-all--buffer-from-hook () nil) ; I don't want formatting on save + (add-hook 'format-all-after-format-functions 'materus/--fix-outli-formatting) + (setq-default format-all-formatters + '(("Nix" (nixfmt)) + ("C++" (clang-format "--fallback-style=microsoft")) + ("C" (clang-format "--fallback-style=microsoft"))))) +#+end_src +*** Snippets +#+begin_src emacs-lisp + (use-package yasnippet + :config + (yas-global-mode 1)) +#+end_src + +*** C/C++ +#+begin_src emacs-lisp + (use-package lsp-clangd + :ensure nil + :after (lsp-mode) + :config + (setq lsp-clients-clangd-args '("--fallback-style=microsoft")) + + (add-hook 'c-mode-hook 'lsp-deferred) + (add-hook 'c-mode-hook 'display-line-numbers-mode) + (add-hook 'c-ts-mode-hook 'lsp-deferred) + (add-hook 'c-ts-mode-hook 'display-line-numbers-mode) + + (add-hook 'c++-mode-hook 'lsp-deferred) + (add-hook 'c++-mode-hook 'display-line-numbers-mode) + (add-hook 'c++-ts-mode-hook 'lsp-deferred) + (add-hook 'c++-ts-mode-hook 'display-line-numbers-mode) + (when (treesit-language-available-p 'c) (push '(c-mode . c-ts-mode) major-mode-remap-alist)) + (when (treesit-language-available-p 'cpp) (push '(c++-mode . c++-ts-mode) major-mode-remap-alist)) + + (add-to-list 'c-default-style '(c-mode . "bsd")) + (add-to-list 'c-default-style '(c++-mode . "bsd")) + (add-to-list 'c-default-style '(c-ts-mode . "bsd")) + (add-to-list 'c-default-style '(c++-ts-mode . "bsd"))) + +#+end_src +*** Java +#+begin_src emacs-lisp + (use-package lsp-java + :after (lsp-mode) + :config + (setq lsp-java-vmargs '("-XX:+UseParallelGC" "-XX:GCTimeRatio=4" "-XX:AdaptiveSizePolicyWeight=90" "-Dsun.zip.disableMemoryMapping=true" "-Xmx4G" "-Xms512m")) + ;;(add-hook 'java-mode-hook (lambda () (when (getenv "JDTLS_PATH") (setq lsp-java-server-install-dir (getenv "JDTLS_PATH"))))) + (add-hook 'java-mode-hook 'lsp-deferred) + (add-hook 'java-mode-hook 'display-line-numbers-mode) + + ;;(add-hook 'java-ts-mode-hook (lambda () (when (getenv "JDTLS_PATH") (setq lsp-java-server-install-dir (getenv "JDTLS_PATH"))))) + (add-hook 'java-ts-mode-hook 'lsp-deferred) + (add-hook 'java-ts-mode-hook 'display-line-numbers-mode) + + (when (treesit-language-available-p 'java) (push '(java-mode . java-ts-mode) major-mode-remap-alist)) + + (add-to-list 'c-default-style '(java-mode . "java")) + (add-to-list 'c-default-style '(java-ts-mode . "java"))) +#+end_src +*** Python +#+begin_src emacs-lisp + (use-package lsp-pyright + :after (lsp-mode) + :if (executable-find "python") + :config + (setq lsp-pyright-langserver-command "pyright") + (add-hook 'python-mode-hook 'lsp-deferred) + (add-hook 'python-ts-mode-hook 'lsp-deferred) + (when (treesit-language-available-p 'python) (push '(python-mode . python-ts-mode) major-mode-remap-alist))) +#+end_src +*** Nix +#+begin_src emacs-lisp + (use-package nix-mode) + (use-package nix-ts-mode) + (use-package lsp-nix + :after (lsp-mode nix-mode nix-ts-mode format-all orglink) + :ensure nil + :config + (add-to-list 'lsp-disabled-clients '(nix-mode . nix-nil)) + (setq lsp-nix-nixd-server-path "nixd") + (when (executable-find "nixfmt") + (setq lsp-nix-nixd-formatting-command [ "nixfmt" ])) + + (unless lsp-nix-nixd-nixos-options-expr + (setq lsp-nix-nixd-nixos-options-expr (concat "(builtins.getFlake \"/etc/nixos\").nixosConfigurations." (system-name) ".options"))) + (unless lsp-nix-nixd-nixpkgs-expr + (setq lsp-nix-nixd-nixpkgs-expr (concat "(builtins.getFlake \"/etc/nixos\").nixosConfigurations." (system-name) ".pkgs"))) + (add-hook 'nix-mode-hook 'lsp-deferred) + (add-hook 'nix-mode-hook 'display-line-numbers-mode) + (add-hook 'nix-mode-hook 'orglink-mode) + + (add-hook 'nix-ts-mode-hook 'lsp-deferred) + (add-hook 'nix-ts-mode-hook 'display-line-numbers-mode) + (add-hook 'nix-ts-mode-hook 'orglink-mode) + + (when (treesit-language-available-p 'nix) (push '(nix-mode . nix-ts-mode) major-mode-remap-alist))) +#+end_src +*** Lisp / Scheme +#+begin_src emacs-lisp +(use-package paredit) +#+end_src +**** Emacs Lisp +#+begin_src emacs-lisp + +#+end_src +**** Common Lisp +#+begin_src emacs-lisp + (use-package slime + :if (executable-find "sbcl") + :config + (setq inferior-lisp-program "sbcl")) +#+end_src +*** Shell +**** Bash +[[https://github.com/szermatt/emacs-bash-completion][Bash-completion]] +#+begin_src emacs-lisp + (use-package bash-completion) +#+end_src + +** Version Control +*** Diff Highlight +[[https://github.com/dgutov/diff-hl][diff-hl]] +#+begin_src emacs-lisp + (use-package diff-hl + :config + (setq diff-hl-side 'right) + (global-diff-hl-mode 1) + (diff-hl-margin-mode 1) + (diff-hl-flydiff-mode 1) + (global-diff-hl-show-hunk-mouse-mode 1)) +#+end_src +*** Magit +[[https://magit.vc][Magit]] +#+begin_src emacs-lisp + + (use-package magit + :after (transient)) + +#+end_src +*** Git Timemachine +#+begin_src emacs-lisp +(use-package git-timemachine + :defer t) +#+end_src +** Notes & Organization +*** Org Mode +#+begin_src emacs-lisp + (use-package org + :mode (("\\.org$" . org-mode)) + :hook + ((org-mode . org-indent-mode) + (org-mode . display-line-numbers-mode) + ) + :config + (require 'org-mouse) + (require 'org-tempo) + (setq org-src-window-setup 'current-window) + (setq org-latex-pdf-process '("latexmk -xelatex -quiet -shell-escape -f -output-directory=%o %f")) + (org-babel-do-load-languages + 'org-babel-load-languages + '((latex . t) + (emacs-lisp . t) + (shell . t) + (css . t) + (C . t) + (calc . t) + (awk . t) + (sql . t) + (sqlite . t))) + (add-hook 'org-mode-hook (lambda () + (setq-local + electric-pair-inhibit-predicate + `(lambda (c) + (if + (char-equal c ?<) t (,electric-pair-inhibit-predicate c))))))) +#+end_src + +#+begin_src emacs-lisp + (use-package org-modern + :after (org) + :hook + (org-indent-mode . org-modern-mode) + (org-agenda-finalize . org-modern-agenda) + :config + (setq org-modern-block-name '("▼ " . "▲ "))) +#+end_src + +#+begin_src emacs-lisp + (use-package org-auto-tangle + :after (org) + :hook (org-mode . org-auto-tangle-mode) + ) +#+end_src + +#+begin_src emacs-lisp + (use-package toc-org + :after (org) + :hook + ((org-mode . toc-org-mode ) + (markdown-mode . toc-org-mode))) +#+end_src + +#+begin_src emacs-lisp + (use-package org-transclusion + :after (org)) +#+end_src + +#+begin_src emacs-lisp + (use-package org-roam + :after (org)) + +#+end_src + +#+begin_src emacs-lisp + (use-package orglink + :after (org)) + +#+end_src + +** Other & Misc +*** Undo-tree +#+begin_src emacs-lisp + (use-package undo-tree + :config + (global-undo-tree-mode 1) + (defvar materus/undo-tree-dir (concat user-emacs-directory "var/undo-tree/")) + (unless (file-exists-p materus/undo-tree-dir) + (make-directory materus/undo-tree-dir t)) + (setq undo-tree-visualizer-diff t) + (setq undo-tree-history-directory-alist `(("." . ,materus/undo-tree-dir ))) + (setq undo-tree-visualizer-timestamps t)) + +#+end_src + +*** which-key +#+begin_src emacs-lisp + (use-package which-key + :config + (which-key-mode 1)) +#+end_src + +*** projectile +#+begin_src emacs-lisp + (use-package projectile + :config (projectile-mode 1)) +#+end_src +*** Perspective +#+begin_src emacs-lisp + (use-package perspective + :config + (setq persp-mode-prefix-key (kbd "C-c M-p")) + (setq persp-modestring-short t) + (persp-mode 1) + ) +#+end_src +*** Elcord +#+begin_src emacs-lisp + (defun materus/elcord-toggle (&optional _frame) + "Toggle elcord based on visible frames" + (if (> (length (frame-list)) 1) + (elcord-mode 1) + (elcord-mode -1)) + ) + (use-package elcord + :config + (unless (daemonp) (elcord-mode 1)) + (add-hook 'after-delete-frame-functions 'materus/elcord-toggle) + (add-hook 'server-after-make-frame-hook 'materus/elcord-toggle)) +#+end_src + +*** drag-stuff +#+begin_src emacs-lisp + (use-package drag-stuff) +#+end_src +*** popper +#+begin_src emacs-lisp + (use-package popper) +#+end_src + +*** visual-fill-column +#+begin_src emacs-lisp + (use-package visual-fill-column) +#+end_src +*** so-long +#+begin_src emacs-lisp + (use-package so-long + :defer t) +#+end_src +*** vlf +#+begin_src emacs-lisp + (use-package vlf + :defer t) +#+end_src + +*** crux +#+begin_src emacs-lisp +(use-package crux) + +#+end_src +*** No Littering +#+begin_src emacs-lisp :noweb-ref package-no-littering + (use-package no-littering + :ensure (:wait t) + :config + (require 'recentf) + (setq package-quickstart-file + (concat user-emacs-directory "var/quickstart/package-quickstart-" emacs-version ".el" )) + (add-to-list 'recentf-exclude + (recentf-expand-file-name no-littering-var-directory)) + (add-to-list 'recentf-exclude + (recentf-expand-file-name no-littering-etc-directory))) + +#+END_src +** Libraries +*** Nerd Icons +#+begin_src emacs-lisp + (use-package nerd-icons) +#+end_src +*** SVG Lib +#+begin_src emacs-lisp + (use-package svg-lib) +#+end_src +*** Transient +#+begin_src emacs-lisp + (use-package transient) +#+end_src +* Keybindings +#+begin_src emacs-lisp :noweb-ref keys + ;; Keybindings + (defun materus/keybind-set () + (require 'cua-base) + + ;; CUA-like global + (define-key global-map (kbd "C-s") 'save-buffer) + (define-key global-map (kbd "C-a") 'mark-whole-buffer) + (define-key global-map (kbd "C-f") 'isearch-forward) + (define-key global-map (kbd "C-S-f") 'isearch-backward) + (define-key isearch-mode-map (kbd "C-f") 'isearch-repeat-forward) + (define-key isearch-mode-map (kbd "C-S-f") 'isearch-repeat-backward) + + ;; CUA + (define-key cua--cua-keys-keymap (kbd "C-z") 'undo-tree-undo) + (define-key cua--cua-keys-keymap (kbd "C-y") 'undo-tree-redo) + (define-key cua-global-keymap (kbd "C-SPC") 'completion-at-point) + (define-key cua-global-keymap (kbd "C-M-SPC") 'cua-set-mark) + (cua-mode 1) + ;; TAB + (define-key global-map (kbd "C-") #'indent-rigidly-left) + (define-key global-map (kbd "C-") #'indent-rigidly-right) + + ;; Hyper + (define-key key-translation-map (kbd "") 'event-apply-hyper-modifier ) + (define-key key-translation-map (kbd "") 'event-apply-hyper-modifier ) + (define-key key-translation-map (kbd "∇") 'event-apply-hyper-modifier ) + + + ;; Unbind + (define-key isearch-mode-map (kbd "C-s") nil) + (define-key isearch-mode-map (kbd "C-r") nil) + + + <>) + + + (add-hook 'elpaca-after-init-hook #'materus/keybind-set ) +#+end_src + +* Final Code +#+begin_src emacs-lisp :tangle (expand-file-name "init.el" user-emacs-directory) :noweb-ref final + ;;; -*- lexical-binding: t; -*- + <> + <> + <> + <> + <> + <> + <> + <> +#+end_src +Make copy in this repository +#+begin_src emacs-lisp :tangle (if (not (string= default-directory user-emacs-directory)) "./early-init.el" "no") + <> +#+end_src +#+begin_src emacs-lisp :tangle (if (not (string= default-directory user-emacs-directory)) "./init.el" "no") + <> +#+end_src +* Links +[[https://github.com/emacs-tw/awesome-emacs][awesome-emacs]] - Nice list of Emacs Packages +[[https://codeberg.org/ashton314/emacs-bedrock][Emacs Bedrock]] - Initial Config to base on +[[https://github.com/benide/emacs-config][benide Config]] - Took use-package macro for NixOS from there +[[https://gitlab.com/dwt1/dotfiles/-/blob/master/.config/emacs/config.org][DT's Config]] - Some inspiration +* Tests +:PROPERTIES: +:header-args: :tangle no +:END: +#+begin_src emacs-lisp :tangle no + + + + + (let* ((current-pos (point)) + (start (re-search-backward "^[ \t]*\\(#\\|//\\|;;\\)-NARROW_START[ \t]+\\[\\(.*\\)\\]" nil t)) + (match (match-string-no-properties 2)) + (end (re-search-forward (concat "^[ \t]*\\(#\\|//\\|;;\\)-NARROW_END[ \t]+\\[\\" (regexp-quote match) "\\]") nil t))) + (if (buffer-narrowed-p) + (progn (widen) (goto-char current-pos)) + (progn + (if start + (if end + (if ( >= end current-pos) (narrow-to-region start end) + (message "Not between narrow tags")) + (message "Not between narrow tags")) + (message "Not between narrow tags")) + (goto-char current-pos)))) +#+end_src +* Archive +:PROPERTIES: +:header-args: :tangle no +:END: +** Navigation and completion +*** HELM +#+begin_src emacs-lisp + (use-package helm + :config + (setq helm-x-icons-provider 'nerd-icons) + (setq helm-move-to-line-cycle-in-source nil) + (helm-mode 1) + ) + (use-package helm-projectile + :after (helm projectile)) + (use-package helm-ag + :after (helm)) + (use-package helm-rg + :after (helm)) + (use-package helm-ls-git + :after (helm)) +#+end_src +#+begin_src emacs-lisp :tangle no + ;; Helm + (global-set-key (kbd "M-x") 'helm-M-x) + (global-set-key (kbd "C-x r b") #'helm-filtered-bookmarks) + (global-set-key (kbd "C-x C-f") #'helm-find-files) + (global-set-key (kbd "C-x b") #'helm-mini) + + (define-key helm-map (kbd "") #'right-char) + (define-key helm-map (kbd "") #'left-char) +#+end_src +*** Comapny +#+begin_src emacs-lisp + (use-package company + :hook + ((prog-mode . company-mode))) + (use-package slime-company + :if (executable-find "sbcl") + :after (company slime)) + +#+end_src diff --git a/config/emacs/early-init.el b/config/emacs/early-init.el new file mode 100644 index 0000000..35d0ae4 --- /dev/null +++ b/config/emacs/early-init.el @@ -0,0 +1,87 @@ +;;; -*- lexical-binding: t; -*- + + ;;; VARIABLES + + + (setenv "LSP_USE_PLISTS" "true") ; Make lsp-mode use plists + + (setq c-default-style nil) ; Clear default styles for languages, will set them up later + (setq default-input-method nil) ; Disable default input method, I'm not using them anyway so far + + (setq initial-major-mode 'emacs-lisp-mode) + + (setq auto-save-default nil) ; TODO: configure auto saves, disable for now + (setq backup-directory-alist + `((".*" . ,(concat user-emacs-directory "var/backups/")))) ; Set backup location + (setq auto-save-file-name-transforms + `((".*" ,(concat user-emacs-directory "var/recovery/") t))) ; Set auto-save location + (setq auto-save-list-file-prefix (concat user-emacs-directory "var/auto-save/sessions/")) ; Set auto-save-list location + (setq load-prefer-newer t) ; Prefer newer files to load + + + (setq package-enable-at-startup nil) + (setq package-quickstart nil) ; Disable package quickstart + + (setq inhibit-startup-screen t) + + (setq inhibit-compacting-font-caches t) ; Don't compact fonts + + (set-language-environment "UTF-8") ; Use UTF-8 + (setq-default buffer-file-coding-system 'utf-8-unix) + + (setq custom-file (concat user-emacs-directory "etc/custom.el")) ; Set custom file location, don't want clutter in main directory + (setq custom-theme-directory + (concat user-emacs-directory "/etc/materus/themes" )) ; Set custom themes location + + (setq ring-bell-function 'ignore) ; Disable bell + + + (defvar materus/emacs-gc-cons-threshold (* 64 1024 1024) + "The value of `gc-cons-threshold' after Emacs startup.") ; Define after init garbage collector threshold + + + ;;; GARBAGE COLLECTOR + (setq gc-cons-threshold most-positive-fixnum) ; Set `gc-cons-threshold' so it won't collectect during initialization + + (add-hook 'emacs-startup-hook + (lambda () + (setq gc-cons-threshold materus/emacs-gc-cons-threshold))) ; Set `gc-cons-threshold' to desired value after startup + + + + + ;;; FRAMES + + (setq frame-inhibit-implied-resize t) + (setq frame-resize-pixelwise t) + (setq window-resize-pixelwise t) ; Allow pixelwise resizing of window and frame + + (unless (daemonp) + (add-to-list 'initial-frame-alist '(fullscreen . maximized))) ; Start first frame maximized if not running as daemon, daemon frame are set up later in config + (setq default-frame-alist ; Set default size for frames + '((width . 130) + (height . 40))) + + (advice-add #'tty-run-terminal-initialization :override #'ignore) + (add-hook 'window-setup-hook + (lambda () + (unless (display-graphic-p) + (advice-remove #'tty-run-terminal-initialization #'ignore) + (tty-run-terminal-initialization (selected-frame) nil t) + ))) + + + ;;; NATIVE COMPILATION + + (setq native-comp-async-report-warnings-errors nil) ; Silence warnings + (setq native-comp-speed 2) ; Set native-comp speed + + (setq native-comp-jit-compilation t + native-comp-deferred-compilation t + package-native-compile t) + + + ;; Setting up native-comp cache location + +(when (boundp 'native-comp-eln-load-path) + (startup-redirect-eln-cache (expand-file-name "var/eln-cache/" user-emacs-directory))) diff --git a/config/emacs/init.el b/config/emacs/init.el new file mode 100644 index 0000000..eea1981 --- /dev/null +++ b/config/emacs/init.el @@ -0,0 +1,666 @@ +;;; -*- lexical-binding: t; -*- +;; Prepare + (require 'materus-nix nil t) + (require 'elec-pair) + (when (not emacs-build-time) + (print "WARN: emacs-build-time not set up, using current time") + (setq emacs-build-time (decode-time (current-time)))) + (add-to-list 'load-path (concat user-emacs-directory "etc/pkgs/")) ; Extra load path for packages + (defvar materus/nixos-config (getenv "MATERUS_CONFIG_DIR")) + (setq read-process-output-max (* 1024 1024 3)) + +;; Elpaca Init +(defvar elpaca-installer-version 0.11) +(defvar elpaca-directory (expand-file-name "var/elpaca/" user-emacs-directory)) +(defvar elpaca-builds-directory (expand-file-name (concat "builds/" emacs-version "/") elpaca-directory)) +(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory)) +(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git" + :ref nil :depth 1 :inherit ignore + :files (:defaults "elpaca-test.el" (:exclude "extensions")) + :build (:not elpaca--activate-package))) +(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory)) + (build (expand-file-name "elpaca/" elpaca-builds-directory)) + (order (cdr elpaca-order)) + (default-directory repo)) + (add-to-list 'load-path (if (file-exists-p build) build repo)) + (unless (file-exists-p repo) + (make-directory repo t) + (when (<= emacs-major-version 28) (require 'subr-x)) + (condition-case-unless-debug err + (if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*")) + ((zerop (apply #'call-process `("git" nil ,buffer t "clone" + ,@(when-let* ((depth (plist-get order :depth))) + (list (format "--depth=%d" depth) "--no-single-branch")) + ,(plist-get order :repo) ,repo)))) + ((zerop (call-process "git" nil buffer t "checkout" + (or (plist-get order :ref) "--")))) + (emacs (concat invocation-directory invocation-name)) + ((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch" + "--eval" "(byte-recompile-directory \".\" 0 'force)"))) + ((require 'elpaca)) + ((elpaca-generate-autoloads "elpaca" repo))) + (progn (message "%s" (buffer-string)) (kill-buffer buffer)) + (error "%s" (with-current-buffer buffer (buffer-string)))) + ((error) (warn "%s" err) (delete-directory repo 'recursive)))) + (unless (require 'elpaca-autoloads nil t) + (require 'elpaca) + (elpaca-generate-autoloads "elpaca" repo) + (let ((load-source-file-function nil)) (load "./elpaca-autoloads")))) +(add-hook 'after-init-hook #'elpaca-process-queues) +(elpaca `(,@elpaca-order)) + +(elpaca elpaca-use-package + (elpaca-use-package-mode) + (setq elpaca-use-package-by-default t)) + +;; Use package preffering built-in / nix packages +(defmacro materus/use-package (package &rest body) + (if (locate-library (symbol-name `,package)) + `(progn + (cl-pushnew (quote ,package) elpaca-ignored-dependencies) + (use-package ,package :ensure nil ,@body)) + `(use-package ,package ,@body))) + +(defun materus/--outli-modes () + "Check if supported mode" + (or (eq major-mode 'nix-mode) + (eq major-mode 'nix-ts-mode) + (eq major-mode 'c-mode) + (eq major-mode 'c-ts-mode) + (eq major-mode 'c++-mode) + (eq major-mode 'c++-ts-mode))) + +(defun materus/--fix-outli-formatting (FORMATTER STATUS) + "Remove whitespaces before outli headers" + (when (and (materus/--outli-modes) + (eq STATUS :reformatted)) + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (while (re-search-forward (concat "^[ ]+\\(" comment-start "\\*+ +[^ ].*\\)[ ]*") nil t) + (replace-match "\\1")))))) + +(defun materus/--electric-indent-ignore-outli (char) + "Don't indent outli headers" + (when (materus/--outli-modes) + (save-excursion + (backward-char) + (beginning-of-line) + (if (not (looking-at-p (concat "^\\(" comment-start "\\*+ +[^ ].*\\)[ ]*"))) nil 'no-indent)))) +(use-package no-littering + :ensure (:wait t) + :config + (require 'recentf) + (setq package-quickstart-file + (concat user-emacs-directory "var/quickstart/package-quickstart-" emacs-version ".el" )) + (add-to-list 'recentf-exclude + (recentf-expand-file-name no-littering-var-directory)) + (add-to-list 'recentf-exclude + (recentf-expand-file-name no-littering-etc-directory))) + +;; Font & Text init +(when (display-graphic-p) + (set-frame-font "Hack Nerd Font" nil t)) +(setq-default cursor-type '(bar . 2)) +(setq truncate-string-ellipsis "…") + + +(setq text-mode-ispell-word-completion nil) ; Disable ispell +(global-completion-preview-mode 1) +(electric-pair-mode 1) +(electric-indent-mode -1) +;; Frame Init +(when (daemonp) + (add-hook 'after-make-frame-functions + (lambda (frame) (when (= (length (frame-list)) 2) + (set-frame-parameter frame 'fullscreen 'maximized)) + (select-frame-set-input-focus frame) ))) +(global-tab-line-mode 1) +(setq tab-line-close-tab-function 'kill-buffer) + +(setq window-divider-default-bottom-width 1) +(setq window-divider-default-right-width 1) +(window-divider-mode 1) +(tool-bar-mode -1) +(setq-default display-line-numbers-width 3) +(setq-default display-line-numbers-widen t) + + (defun startup-screen-advice (orig-fun &rest args) + (when (= (seq-count #'buffer-file-name (buffer-list)) 0) + (apply orig-fun args))) +(advice-add 'display-startup-screen :around #'startup-screen-advice) ; Hide startup screen if started with file +;; Mouse Init +(context-menu-mode 1) +(setq mouse-wheel-follow-mouse 't) +(setq scroll-step 1) +(setq mouse-drag-and-drop-region t) +(xterm-mouse-mode 1) +(pixel-scroll-precision-mode 1) +(setq-default pixel-scroll-precision-large-scroll-height 10.0) +(add-to-list 'c-default-style '(awk-mode . "awk")) +(add-to-list 'c-default-style '(other . "bsd")) + +(setq-default tab-width 4) +(setq-default indent-tabs-mode nil) +(setq-default c-basic-offset 4) +(setq-default c-indent-level 4) + +(setq-default c-ts-mode-indent-offset 4) +(setq-default c-ts-mode-indent-style 'bsd) + +(setq-default c-hungry-delete-key t) + + + +(add-hook 'prog-mode-hook 'display-line-numbers-mode) +(add-hook 'prog-mode-hook 'electric-indent-local-mode) +(add-hook 'electric-indent-functions 'materus/--electric-indent-ignore-outli) +(use-package dracula-theme :config + (if (daemonp) + (add-hook 'after-make-frame-functions + (lambda (frame) + (with-selected-frame frame (load-theme 'dracula t)))) + (load-theme 'dracula t))) + +(use-package rainbow-mode + :hook + ((org-mode . rainbow-mode) + (prog-mode . rainbow-mode))) +(use-package rainbow-delimiters + :hook + (prog-mode . rainbow-delimiters-mode) + :config + (set-face-attribute 'rainbow-delimiters-depth-1-face nil :foreground "#FFFFFF") + (set-face-attribute 'rainbow-delimiters-depth-2-face nil :foreground "#FFFF00") + (set-face-attribute 'rainbow-delimiters-depth-5-face nil :foreground "#6A5ACD") + (set-face-attribute 'rainbow-delimiters-unmatched-face nil :foreground "#FF0000")) + +(use-package doom-modeline + :init (setq doom-modeline-support-imenu t) + :hook (elpaca-after-init . doom-modeline-mode) + :config + (setq doom-modeline-icon t) + (setq doom-modeline-project-detection 'auto) + (setq doom-modeline-height 20) + (setq doom-modeline-enable-word-count t) + (setq doom-modeline-minor-modes t) + (setq display-time-24hr-format t) + (display-time-mode 1) + (column-number-mode 1) + (line-number-mode 1)) + +(use-package minions + :hook (elpaca-after-init . minions-mode)) +(use-package dashboard + :after (nerd-icons projectile) + :config + (setq dashboard-center-content t) + (setq dashboard-display-icons-p t) + (setq dashboard-icon-type 'nerd-icons) + (setq dashboard-projects-backend 'projectile) + (setq dashboard-items '((recents . 5) + (bookmarks . 5) + (projects . 5) + (agenda . 5) + (registers . 5))) + (when (or (daemonp) (< (length command-line-args) 2)) + (add-hook 'elpaca-after-init-hook #'dashboard-insert-startupify-lists) + (add-hook 'elpaca-after-init-hook #'dashboard-initialize) + (dashboard-setup-startup-hook))) +(when (daemonp) + (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*")))) ; Show dashboard when emacs is running as daemon) +(use-package highlight-indent-guides + :hook ((prog-mode . highlight-indent-guides-mode))) +(use-package outli + :ensure (:host github :repo "jdtsmith/outli") + :hook ((prog-mode . outli-mode))) +(use-package visual-replace + :defer t + :bind (("C-r" . visual-replace) + :map isearch-mode-map + ("C-r" . visual-replace-from-isearch))) +(use-package treesit-fold) +(use-package hideshowvis) +(use-package eat) + +(materus/use-package vterm) +(use-package orderless + :init + ;; Tune the global completion style settings to your liking! + ;; This affects the minibuffer and non-lsp completion at point. + (setq completion-styles '(basic partial-completion orderless) + completion-category-defaults nil + completion-category-overrides nil)) +(use-package consult) +(use-package marginalia) +(use-package embark) +(use-package embark-consult + :after (embark consult)) + +(use-package vertico + :ensure t + :after (consult marginalia embark) + :config + (setq completion-in-region-function + (lambda (&rest args) + (apply (if vertico-mode + #'consult-completion-in-region + #'completion--in-region) + args))) + (vertico-mode 1) + (marginalia-mode 1)) +(use-package vertico-mouse + :config + (vertico-mouse-mode 1) + :ensure nil + :after (vertico)) +(use-package cape) + +(use-package corfu + :ensure t + :after (lsp-mode cape) + ;; Optional customizations + :custom + (corfu-cycle nil) ;; Enable cycling for `corfu-next/previous' + (corfu-auto t) ;; Enable auto completion + (global-corfu-minibuffer nil) + ;; (corfu-quit-at-boundary nil) ;; Never quit at completion boundary + ;; (corfu-quit-no-match nil) ;; Never quit, even if there is no match + (corfu-preview-current nil) ;; Disable current candidate preview + ;; (corfu-preselect 'prompt) ;; Preselect the prompt + ;; (corfu-on-exact-match nil) ;; Configure handling of exact matches + + ;; Enable Corfu only for certain modes. See also `global-corfu-modes'. + ;; :hook ((prog-mode . corfu-mode) + ;; (shell-mode . corfu-mode) + ;; (eshell-mode . corfu-mode)) + + ;; Recommended: Enable Corfu globally. This is recommended since Dabbrev can + ;; be used globally (M-/). See also the customization variable + ;; `global-corfu-modes' to exclude certain modes. + :init + (global-corfu-mode 1) + (corfu-popupinfo-mode 1) + (corfu-history-mode 1) + + (defun materus/orderless-dispatch-flex-first (_pattern index _total) + (and (eq index 0) 'orderless-flex)) + + (defun materus/lsp-mode-setup-completion () + (setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults)) + '(orderless)) + ;; Optionally configure the first word as flex filtered. + (add-hook 'orderless-style-dispatchers #'materus/orderless-dispatch-flex-first nil 'local) + ;; Optionally configure the cape-capf-buster. + (setq-local completion-at-point-functions (list (cape-capf-buster #'lsp-completion-at-point)))) + + :hook + (lsp-completion-mode . materus/lsp-mode-setup-completion)) + + + +(use-package corfu-terminal + :after (corfu) + :config + (when (or (daemonp) (not (display-graphic-p))) + (corfu-terminal-mode))) + +(use-package corfu-mouse + :after (corfu) + :ensure (:type git :repo "https://codeberg.org/materus/emacs-corfu-mouse.git") + :config + (corfu-mouse-mode) + (keymap-set corfu--mouse-ignore-map "" 'ignore) + (keymap-set corfu-map "" 'ignore)) + +(use-package kind-icon + :after (corfu) + :config + (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)) + + + +(use-package dirvish + :after (nerd-icons) + :config + (setq dired-mouse-drag-files t) + (dirvish-override-dired-mode 1) + (setq dirvish-attributes + '(vc-state + subtree-state + nerd-icons + collapse + git-msg + file-time + file-size))) + +(use-package treemacs) +(use-package treemacs-projectile + :after (projectile treemacs)) +(use-package treemacs-nerd-icons + :after (nerd-icons treemacs)) +(use-package treemacs-perspective + :after (treemacs)) +(use-package treemacs-mouse-interface + :after (treemacs) + :ensure nil) +(use-package lsp-ui + :after (lsp-mode)) +(use-package lsp-mode + ;; :custom + ;; (lsp-completion-provider :none) ;; we use Corfu! + :config + (setq lsp-keep-workspace-alive nil) + (setq lsp-enable-on-type-formatting nil) + + (defun lsp-booster--advice-json-parse (old-fn &rest args) + "Try to parse bytecode instead of json." + (or + (when (equal (following-char) ?#) + (let ((bytecode (read (current-buffer)))) + (when (byte-code-function-p bytecode) + (funcall bytecode)))) + (apply old-fn args))) + (advice-add (if (progn (require 'json) + (fboundp 'json-parse-buffer)) + 'json-parse-buffer + 'json-read) + :around + #'lsp-booster--advice-json-parse) + + (defun lsp-booster--advice-final-command (old-fn cmd &optional test?) + "Prepend emacs-lsp-booster command to lsp CMD." + (let ((orig-result (funcall old-fn cmd test?))) + (if (and (not test?) ; for check lsp-server-present? + (not (file-remote-p default-directory)) ; see lsp-resolve-final-command, it would add extra shell wrapper + lsp-use-plists + (not (functionp 'json-rpc-connection)) ; native json-rpc + (executable-find "emacs-lsp-booster")) + (progn + (when-let* ((command-from-exec-path (executable-find (car orig-result)))) ; resolve command from exec-path (in case not found in $PATH) + (setcar orig-result command-from-exec-path)) + (message "Using emacs-lsp-booster for %s!" orig-result) + (cons "emacs-lsp-booster" orig-result)) + orig-result))) + (advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command)) +(use-package lsp-treemacs + :after (lsp-mode treemacs) + :config + (lsp-treemacs-sync-mode 1)) + + +(use-package dap-mode + :after (lsp-mode) + :config + (require 'dap-lldb) + (require 'dap-gdb-lldb) + (require 'dap-cpptools) + (setq dap-gdb-lldb-extension-version "0.27.0") + (dap-auto-configure-mode 1)) + +(use-package format-all + :hook ((prog-mode . format-all-mode)) + :config + (defun format-all--buffer-from-hook () nil) ; I don't want formatting on save + (add-hook 'format-all-after-format-functions 'materus/--fix-outli-formatting) + (setq-default format-all-formatters + '(("Nix" (nixfmt)) + ("C++" (clang-format "--fallback-style=microsoft")) + ("C" (clang-format "--fallback-style=microsoft"))))) +(use-package yasnippet + :config + (yas-global-mode 1)) +(use-package lsp-clangd + :ensure nil + :after (lsp-mode) + :config + (setq lsp-clients-clangd-args '("--fallback-style=microsoft")) + + (add-hook 'c-mode-hook 'lsp-deferred) + (add-hook 'c-mode-hook 'display-line-numbers-mode) + (add-hook 'c-ts-mode-hook 'lsp-deferred) + (add-hook 'c-ts-mode-hook 'display-line-numbers-mode) + + (add-hook 'c++-mode-hook 'lsp-deferred) + (add-hook 'c++-mode-hook 'display-line-numbers-mode) + (add-hook 'c++-ts-mode-hook 'lsp-deferred) + (add-hook 'c++-ts-mode-hook 'display-line-numbers-mode) + (when (treesit-language-available-p 'c) (push '(c-mode . c-ts-mode) major-mode-remap-alist)) + (when (treesit-language-available-p 'cpp) (push '(c++-mode . c++-ts-mode) major-mode-remap-alist)) + + (add-to-list 'c-default-style '(c-mode . "bsd")) + (add-to-list 'c-default-style '(c++-mode . "bsd")) + (add-to-list 'c-default-style '(c-ts-mode . "bsd")) + (add-to-list 'c-default-style '(c++-ts-mode . "bsd"))) + +(use-package lsp-java + :after (lsp-mode) + :config + (setq lsp-java-vmargs '("-XX:+UseParallelGC" "-XX:GCTimeRatio=4" "-XX:AdaptiveSizePolicyWeight=90" "-Dsun.zip.disableMemoryMapping=true" "-Xmx4G" "-Xms512m")) + ;;(add-hook 'java-mode-hook (lambda () (when (getenv "JDTLS_PATH") (setq lsp-java-server-install-dir (getenv "JDTLS_PATH"))))) + (add-hook 'java-mode-hook 'lsp-deferred) + (add-hook 'java-mode-hook 'display-line-numbers-mode) + + ;;(add-hook 'java-ts-mode-hook (lambda () (when (getenv "JDTLS_PATH") (setq lsp-java-server-install-dir (getenv "JDTLS_PATH"))))) + (add-hook 'java-ts-mode-hook 'lsp-deferred) + (add-hook 'java-ts-mode-hook 'display-line-numbers-mode) + + (when (treesit-language-available-p 'java) (push '(java-mode . java-ts-mode) major-mode-remap-alist)) + + (add-to-list 'c-default-style '(java-mode . "java")) + (add-to-list 'c-default-style '(java-ts-mode . "java"))) +(use-package lsp-pyright + :after (lsp-mode) + :if (executable-find "python") + :config + (setq lsp-pyright-langserver-command "pyright") + (add-hook 'python-mode-hook 'lsp-deferred) + (add-hook 'python-ts-mode-hook 'lsp-deferred) + (when (treesit-language-available-p 'python) (push '(python-mode . python-ts-mode) major-mode-remap-alist))) +(use-package nix-mode) +(use-package nix-ts-mode) +(use-package lsp-nix + :after (lsp-mode nix-mode nix-ts-mode format-all orglink) + :ensure nil + :config + (add-to-list 'lsp-disabled-clients '(nix-mode . nix-nil)) + (setq lsp-nix-nixd-server-path "nixd") + (when (executable-find "nixfmt") + (setq lsp-nix-nixd-formatting-command [ "nixfmt" ])) + + (unless lsp-nix-nixd-nixos-options-expr + (setq lsp-nix-nixd-nixos-options-expr (concat "(builtins.getFlake \"/etc/nixos\").nixosConfigurations." (system-name) ".options"))) + (unless lsp-nix-nixd-nixpkgs-expr + (setq lsp-nix-nixd-nixpkgs-expr (concat "(builtins.getFlake \"/etc/nixos\").nixosConfigurations." (system-name) ".pkgs"))) + (add-hook 'nix-mode-hook 'lsp-deferred) + (add-hook 'nix-mode-hook 'display-line-numbers-mode) + (add-hook 'nix-mode-hook 'orglink-mode) + + (add-hook 'nix-ts-mode-hook 'lsp-deferred) + (add-hook 'nix-ts-mode-hook 'display-line-numbers-mode) + (add-hook 'nix-ts-mode-hook 'orglink-mode) + + (when (treesit-language-available-p 'nix) (push '(nix-mode . nix-ts-mode) major-mode-remap-alist))) +(use-package paredit) + +(use-package slime + :if (executable-find "sbcl") + :config + (setq inferior-lisp-program "sbcl")) +(use-package bash-completion) +(use-package diff-hl + :config + (setq diff-hl-side 'right) + (global-diff-hl-mode 1) + (diff-hl-margin-mode 1) + (diff-hl-flydiff-mode 1) + (global-diff-hl-show-hunk-mouse-mode 1)) + +(use-package magit + :after (transient)) + +(use-package git-timemachine + :defer t) +(use-package org + :mode (("\\.org$" . org-mode)) + :hook + ((org-mode . org-indent-mode) + (org-mode . display-line-numbers-mode) + ) + :config + (require 'org-mouse) + (require 'org-tempo) + (setq org-src-window-setup 'current-window) + (setq org-latex-pdf-process '("latexmk -xelatex -quiet -shell-escape -f -output-directory=%o %f")) + (org-babel-do-load-languages + 'org-babel-load-languages + '((latex . t) + (emacs-lisp . t) + (shell . t) + (css . t) + (C . t) + (calc . t) + (awk . t) + (sql . t) + (sqlite . t))) + (add-hook 'org-mode-hook (lambda () + (setq-local + electric-pair-inhibit-predicate + `(lambda (c) + (if + (char-equal c ?<) t (,electric-pair-inhibit-predicate c))))))) +(use-package org-modern + :after (org) + :hook + (org-indent-mode . org-modern-mode) + (org-agenda-finalize . org-modern-agenda) + :config + (setq org-modern-block-name '("▼ " . "▲ "))) +(use-package org-auto-tangle + :after (org) + :hook (org-mode . org-auto-tangle-mode) + ) +(use-package toc-org + :after (org) + :hook + ((org-mode . toc-org-mode ) + (markdown-mode . toc-org-mode))) +(use-package org-transclusion + :after (org)) +(use-package org-roam + :after (org)) + +(use-package orglink + :after (org)) + +(use-package undo-tree + :config + (global-undo-tree-mode 1) + (defvar materus/undo-tree-dir (concat user-emacs-directory "var/undo-tree/")) + (unless (file-exists-p materus/undo-tree-dir) + (make-directory materus/undo-tree-dir t)) + (setq undo-tree-visualizer-diff t) + (setq undo-tree-history-directory-alist `(("." . ,materus/undo-tree-dir ))) + (setq undo-tree-visualizer-timestamps t)) + +(use-package which-key + :config + (which-key-mode 1)) +(use-package projectile + :config (projectile-mode 1)) +(use-package perspective + :config + (setq persp-mode-prefix-key (kbd "C-c M-p")) + (setq persp-modestring-short t) + (persp-mode 1) + ) +(defun materus/elcord-toggle (&optional _frame) + "Toggle elcord based on visible frames" + (if (> (length (frame-list)) 1) + (elcord-mode 1) + (elcord-mode -1)) + ) +(use-package elcord + :config + (unless (daemonp) (elcord-mode 1)) + (add-hook 'after-delete-frame-functions 'materus/elcord-toggle) + (add-hook 'server-after-make-frame-hook 'materus/elcord-toggle)) +(use-package drag-stuff) +(use-package popper) +(use-package visual-fill-column) +(use-package so-long + :defer t) +(use-package vlf + :defer t) +(use-package crux) + +(use-package nerd-icons) +(use-package svg-lib) +(use-package transient) +;; Keybindings +(defun materus/keybind-set () + (require 'cua-base) + + ;; CUA-like global + (define-key global-map (kbd "C-s") 'save-buffer) + (define-key global-map (kbd "C-a") 'mark-whole-buffer) + (define-key global-map (kbd "C-f") 'isearch-forward) + (define-key global-map (kbd "C-S-f") 'isearch-backward) + (define-key isearch-mode-map (kbd "C-f") 'isearch-repeat-forward) + (define-key isearch-mode-map (kbd "C-S-f") 'isearch-repeat-backward) + + ;; CUA + (define-key cua--cua-keys-keymap (kbd "C-z") 'undo-tree-undo) + (define-key cua--cua-keys-keymap (kbd "C-y") 'undo-tree-redo) + (define-key cua-global-keymap (kbd "C-SPC") 'completion-at-point) + (define-key cua-global-keymap (kbd "C-M-SPC") 'cua-set-mark) + (cua-mode 1) + ;; TAB + (define-key global-map (kbd "C-") #'indent-rigidly-left) + (define-key global-map (kbd "C-") #'indent-rigidly-right) + + ;; Hyper + (define-key key-translation-map (kbd "") 'event-apply-hyper-modifier ) + (define-key key-translation-map (kbd "") 'event-apply-hyper-modifier ) + (define-key key-translation-map (kbd "∇") 'event-apply-hyper-modifier ) + + + ;; Unbind + (define-key isearch-mode-map (kbd "C-s") nil) + (define-key isearch-mode-map (kbd "C-r") nil) + + + ;; Dashboard + (define-key dashboard-mode-map (kbd "C-r") #'dashboard-refresh-buffer) + ;; Eat + (defvar cua--eat-semi-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT semi-char mode CUA keymap") + (defvar cua--eat-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT char mode CUA keymap") + + + (define-key cua--eat-semi-char-keymap (kbd "C-v") #'eat-yank) + (define-key cua--eat-char-keymap (kbd "C-S-v") #'eat-yank) + (define-key cua--eat-semi-char-keymap (kbd "C-c") #'copy-region-as-kill) + (define-key cua--eat-char-keymap (kbd "C-S-c") #'copy-region-as-kill) + (define-key eat-mode-map (kbd "C-") #'eat-self-input) + (define-key eat-mode-map (kbd "C-") #'eat-self-input) + + + (defun cua--eat-semi-char-override-keymap () + (setq-local cua--keymap-alist (copy-tree cua--keymap-alist)) + (setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-semi-char-keymap)) + (defun cua--eat-char-override-keymap () + (setq-local cua--keymap-alist (copy-tree cua--keymap-alist)) + (setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-char-keymap)) + + (advice-add 'eat-semi-char-mode :after #'cua--eat-semi-char-override-keymap) + (advice-add 'eat-char-mode :after #'cua--eat-char-override-keymap) + (add-hook 'eat-char-mode-hook #'cua--eat-char-override-keymap) + + ;; Treemacs + (define-key global-map (kbd "C-H-t") 'treemacs)) + + +(add-hook 'elpaca-after-init-hook #'materus/keybind-set ) +;; Custom File +(add-hook 'elpaca-after-init-hook (lambda () (load custom-file 'noerror))) diff --git a/dotfiles/emacs/early-init.el b/dotfiles/emacs/early-init.el deleted file mode 100644 index a875000..0000000 --- a/dotfiles/emacs/early-init.el +++ /dev/null @@ -1,86 +0,0 @@ -;;; -*- lexical-binding: t; -*- - -;; [[file:../../org-conf/emacs-config.org::*Early Init Variables][Early Init Variables:1]] -(defvar materus/init-early t - "Is emacs using materus early init") ; Var to ensure early-init loaded, not used anymore but keeping it anyway -(setq materus/init-early t) ; Probably useless - -(setenv "LSP_USE_PLISTS" "true") ; Make lsp-mode use plists -;; -(setq c-default-style nil) ; Clear default styles for languages, will set them up later -(setq default-input-method nil) ; Disable default input method, I'm not using them anyway so far -(setq initial-major-mode 'fundamental-mode) ; Use fundamental mode in scratch buffer, speed up loading, not really important when emacs used as daemon -(setq auto-save-default nil) ; TODO: configure auto saves, disable for now -(setq backup-directory-alist - `((".*" . ,(concat user-emacs-directory "var/backups/")))) ; Set backup location -(setq auto-save-file-name-transforms - `((".*" ,(concat user-emacs-directory "var/recovery/") t))) ; Set auto-save location -(setq auto-save-list-file-prefix (concat user-emacs-directory "var/auto-save/sessions/")) ; Set auto-save-list location -(setq load-prefer-newer t) ; Prefer newer files to load - -;; Packages -(setq package-enable-at-startup t) ; Ensure packages are enable since I'm either using built in package manager or nix -(setq package-quickstart nil) ; Disable package quickstart, it's annoying if forget to update it and doesn't speed up much -;; - -(setq inhibit-compacting-font-caches t) ; Don't compact fonts - -(set-language-environment "UTF-8") ; Use UTF-8 - -(setq custom-file (concat user-emacs-directory "etc/custom.el")) ; Set custom file location, don't want clutter in main directory -(setq custom-theme-directory - (concat user-emacs-directory "/etc/materus/themes" )) ; Set custom themes location - -(setq ring-bell-function 'ignore) ; Disable bell - - -(defvar materus-emacs-gc-cons-threshold (* 64 1024 1024) - "The value of `gc-cons-threshold' after Emacs startup.") ; Define after init garbage collector threshold -;; Early Init Variables:1 ends here - -;; [[file:../../org-conf/emacs-config.org::*Garbage Collector][Garbage Collector:1]] -(setq gc-cons-threshold most-positive-fixnum) ; Set `gc-cons-threshold' so it won't collectect during initialization - -(add-hook 'emacs-startup-hook - (lambda () - (setq gc-cons-threshold materus-emacs-gc-cons-threshold))) ; Set `gc-cons-threshold' to desired value after startup -;; Garbage Collector:1 ends here - -;; [[file:../../org-conf/emacs-config.org::*Early Frame Settings][Early Frame Settings:1]] -(setq frame-inhibit-implied-resize t) -(setq frame-resize-pixelwise t) -(setq window-resize-pixelwise t) ; Allow pixelwise resizing of window and frame - -(unless (daemonp) - (add-to-list 'initial-frame-alist '(fullscreen . maximized))) ; Start first frame maximized if not running as daemon, daemon frame are set up later in config -(setq default-frame-alist ; Set default size for frames - '((width . 130) - (height . 40))) - -(advice-add #'tty-run-terminal-initialization :override #'ignore) -(add-hook 'window-setup-hook - (lambda () - (unless (display-graphic-p) - (advice-remove #'tty-run-terminal-initialization #'ignore) - (tty-run-terminal-initialization (selected-frame) nil t) - ))) -;; Early Frame Settings:1 ends here - -;; [[file:../../org-conf/emacs-config.org::*Native compilation][Native compilation:1]] -(setq native-comp-async-report-warnings-errors nil) ; Silence warnings -(setq native-comp-speed 3) ; Set native-comp speed - -(setq native-comp-jit-compilation t - ;;native-comp-deferred-compilation t - package-native-compile t) - - -;; Setting up native-comp cache location - -(when (and (fboundp 'startup-redirect-eln-cache) - (fboundp 'native-comp-available-p) - (native-comp-available-p)) - (startup-redirect-eln-cache - (convert-standard-filename - (concat user-emacs-directory "var/eln-cache/")))) -;; Native compilation:1 ends here diff --git a/dotfiles/emacs/etc/materus/emacs-config.el b/dotfiles/emacs/etc/materus/emacs-config.el deleted file mode 100644 index b653961..0000000 --- a/dotfiles/emacs/etc/materus/emacs-config.el +++ /dev/null @@ -1,768 +0,0 @@ -;;; -*- lexical-binding: t; -*- - -;; [[file:../../../../org-conf/emacs-config.org::*Compile Time][Compile Time:2]] -(eval-when-compile - (defvar doom-modeline-support-imenu nil) - (defvar display-time-24hr-format nil) - (defvar lsp-nix-nixd-formatting-command nil) - (defvar cua--cua-keys-keymap nil) - (declare-function lsp-stdio-connection "lsp-mode" (COMMAND &optional TEST-COMMAND)) - (declare-function make-lsp-client "lsp-mode") - (declare-function lsp-register-client "lsp-mode" ( CLIENT )) - ) -;; Compile Time:2 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Init package manager config][Init package manager config:1]] - -;; Init package manager config:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Packages list & function][Packages list & function:1]] -(defvar materus/packages - '( - use-package - elcord - dashboard - magit - git-timemachine - avy - vterm - direnv - projectile - clipetty - which-key - iedit - hideshowvis - evil - perspective - treemacs-evil - treemacs - treemacs-nerd-icons - treemacs-perspective - treemacs-icons-dired - treemacs-magit - treemacs-projectile - tree-edit - nerd-icons - nerd-icons-completion - minions - rainbow-delimiters - rainbow-mode - cmake-mode - lsp-mode - lsp-java - lsp-jedi - lsp-haskell - lsp-ui - lsp-treemacs - flycheck - gradle-mode - groovy-mode - kotlin-mode - dap-mode - d-mode - lua-mode - multiple-cursors - org - org-contrib - org-ql - org-rainbow-tags - org-roam - org-roam-ui - org-review - org-present - org-superstar - org-auto-tangle - visual-fill-column - csharp-mode - markdown-mode - json-mode - nix-mode - nixfmt - no-littering - right-click-context - dracula-theme - doom-themes - doom-modeline - popper - undo-tree - bash-completion - eldoc-box - yasnippet - async - request - nix-ts-mode - markdown-ts-mode - llvm-ts-mode - treesit-fold - treesit-auto - tree-sitter-langs - eat - vlf - edit-indirect - zones - sudo-edit - toc-org - empv - volatile-highlights - highlight - elfeed - elfeed-goodies - drag-stuff - dirvish - rg - shfmt - ;; Completions & Minibuffer - corfu - company - company-quickhelp - cape - embark - embark-consult - orderless - vertico - marginalia - ) - "A list of packages to ensure are installed at launch.") - -(defun materus/packages-installed-p () - (cl-loop for p in materus/packages - when (not (package-installed-p p)) do (cl-return nil) - finally (cl-return t))) - -(defun materus/install-packages () - (unless (materus/packages-installed-p) - (package-refresh-contents) - (dolist (p materus/packages) - (when (not (package-installed-p p)) - (package-install p))))) -(unless materus/use-nix-packages - (materus/install-packages)) -;; Packages list & function:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*No Littering][No Littering:1]] -(require 'recentf) -(use-package no-littering - :config - (setq package-quickstart-file - (concat user-emacs-directory "var/quickstart/package-quickstart-" emacs-version ".el" )) - (add-to-list 'recentf-exclude - (recentf-expand-file-name no-littering-var-directory)) - (add-to-list 'recentf-exclude - (recentf-expand-file-name no-littering-etc-directory))) -;; No Littering:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Mouse][Mouse:1]] -(context-menu-mode 1) -(setq mouse-wheel-follow-mouse 't) -(setq scroll-step 1) -(setq mouse-drag-and-drop-region t) -(xterm-mouse-mode 1) -(pixel-scroll-precision-mode 1) -(setq-default pixel-scroll-precision-large-scroll-height 10.0) -;; Mouse:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Misc][Misc:1]] -(when (daemonp) - (add-hook 'after-make-frame-functions - (lambda (frame) (when (= (length (frame-list)) 2) - (set-frame-parameter frame 'fullscreen 'maximized)) - (select-frame-set-input-focus frame) ))) - - -(when (display-graphic-p) - (set-frame-font "Hack Nerd Font" nil t) - ) - -(setq-default display-line-numbers-width 3) -(setq-default display-line-numbers-widen t) -(setq truncate-string-ellipsis "…") - -(global-tab-line-mode 1) - -(tool-bar-mode -1) -(setq window-divider-default-bottom-width 1) -(setq window-divider-default-right-width 1) -(window-divider-mode 1) - -(setq-default cursor-type '(bar . 2)) -;; Rainbow mode -(use-package rainbow-mode - :hook - ((org-mode . rainbow-mode) - (prog-mode . rainbow-mode))) - -;; Delimiters -(use-package rainbow-delimiters :hook - (prog-mode . rainbow-delimiters-mode) - :config - (set-face-attribute 'rainbow-delimiters-depth-1-face nil :foreground "#FFFFFF") - (set-face-attribute 'rainbow-delimiters-depth-2-face nil :foreground "#FFFF00") - (set-face-attribute 'rainbow-delimiters-depth-5-face nil :foreground "#6A5ACD") - (set-face-attribute 'rainbow-delimiters-unmatched-face nil :foreground "#FF0000")) -;; Nerd Icons -(use-package nerd-icons) -(use-package nerd-icons-completion - :after (marginalia) - :config - (nerd-icons-completion-mode 1) - (add-hook 'marginalia-mode-hook #'nerd-icons-completion-marginalia-setup)) - -;; Theme -(use-package dracula-theme :config - (if (daemonp) - (add-hook 'after-make-frame-functions - (lambda (frame) - (with-selected-frame frame (load-theme 'dracula t)))) - (load-theme 'dracula t))) - -(defun startup-screen-advice (orig-fun &rest args) - (when (= (seq-count #'buffer-file-name (buffer-list)) 0) - (apply orig-fun args))) -(advice-add 'display-startup-screen :around #'startup-screen-advice) ; Hide startup screen if started with file -;; Misc:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Dashboard][Dashboard:1]] -(use-package dashboard - :after (nerd-icons projectile) - :config - (setq dashboard-center-content t) - (setq dashboard-display-icons-p t) - (setq dashboard-icon-type 'nerd-icons) - (setq dashboard-projects-backend 'projectile) - (setq dashboard-items '((recents . 5) - (bookmarks . 5) - (projects . 5) - (agenda . 5) - (registers . 5))) - (dashboard-setup-startup-hook) - (when (daemonp) - (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*"))) ; Show dashboard when emacs is running as daemon - ) - ) -;; Dashboard:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Modeline][Modeline:1]] -(use-package doom-modeline - :init (setq doom-modeline-support-imenu t) - :hook (after-init . doom-modeline-mode) - :config - (setq doom-modeline-icon t) - (setq doom-modeline-project-detection 'auto) - (setq doom-modeline-height 20) - (setq doom-modeline-enable-word-count t) - (setq doom-modeline-minor-modes t) - (setq display-time-24hr-format t) - (display-time-mode 1) - (column-number-mode 1) - (line-number-mode 1)) - -(use-package minions - :hook (after-init . minions-mode)) -;; Modeline:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Diff-hl][Diff-hl:1]] -(use-package diff-hl - :config - (setq diff-hl-side 'right) - (global-diff-hl-mode 1) - (diff-hl-margin-mode 1) - (diff-hl-flydiff-mode 1) - (global-diff-hl-show-hunk-mouse-mode 1)) -;; Diff-hl:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Org-mode][Org-mode:1]] -(use-package org - :mode (("\\.org$" . org-mode)) - :hook - ((org-mode . org-indent-mode) - (org-mode . display-line-numbers-mode) - ) - :config - (require 'org-mouse) - (require 'org-tempo) - (setq org-src-window-setup 'current-window) - (add-hook 'org-mode-hook (lambda () - (setq-local - electric-pair-inhibit-predicate - `(lambda (c) - (if - (char-equal c ?<) t (,electric-pair-inhibit-predicate c))))))) - -(use-package org-modern - :after (org) - :hook - (org-indent-mode . org-modern-mode) - (org-agenda-finalize . org-modern-agenda) - :config - (setq org-modern-block-name '("▼ " . "▲ "))) -(use-package org-auto-tangle - :after (org) - :hook (org-mode . org-auto-tangle-mode) - ) -(use-package toc-org - :after (org) - :hook - ((org-mode . toc-org-mode ) - (markdown-mode . toc-org-mode))) -(setq org-latex-pdf-process '("latexmk -xelatex -quiet -shell-escape -f -output-directory=%o %f")) -(org-babel-do-load-languages - 'org-babel-load-languages - '((latex . t) - (emacs-lisp . t) - (shell . t) - (css . t) - (C . t) - (calc . t) - (awk . t) - (sql . t) - (sqlite . t))) -;; Org-mode:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Style][Style:1]] -(use-package orderless - :init - ;; Tune the global completion style settings to your liking! - ;; This affects the minibuffer and non-lsp completion at point. - (setq completion-styles '(basic partial-completion orderless) - completion-category-defaults nil - completion-category-overrides nil)) -;; Style:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Minibuffer][Minibuffer:1]] -(use-package consult) -(use-package marginalia) - -(use-package which-key - :config - (which-key-mode 1)) - -(use-package vertico - :after (consult marginalia) - :config - (setq completion-in-region-function - (lambda (&rest args) - (apply (if vertico-mode - #'consult-completion-in-region - #'completion--in-region) - args))) - (vertico-mode 1) - (marginalia-mode 1)) -(use-package vertico-mouse - :config - (vertico-mouse-mode 1)) -;; Minibuffer:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Code completion][Code completion:1]] -(use-package cape) - -(use-package corfu - ;; Optional customizations - :custom - (corfu-cycle nil) ;; Enable cycling for `corfu-next/previous' - (corfu-auto t) ;; Enable auto completion - (global-corfu-minibuffer nil) - ;; (corfu-quit-at-boundary nil) ;; Never quit at completion boundary - ;; (corfu-quit-no-match nil) ;; Never quit, even if there is no match - (corfu-preview-current nil) ;; Disable current candidate preview - ;; (corfu-preselect 'prompt) ;; Preselect the prompt - ;; (corfu-on-exact-match nil) ;; Configure handling of exact matches - - ;; Enable Corfu only for certain modes. See also `global-corfu-modes'. - ;; :hook ((prog-mode . corfu-mode) - ;; (shell-mode . corfu-mode) - ;; (eshell-mode . corfu-mode)) - - ;; Recommended: Enable Corfu globally. This is recommended since Dabbrev can - ;; be used globally (M-/). See also the customization variable - ;; `global-corfu-modes' to exclude certain modes. - :init - (global-corfu-mode 1) - (corfu-popupinfo-mode 1) - (corfu-history-mode 1)) - - -(use-package corfu-terminal - :after (corfu) - :config - (when (or (daemonp) (not (display-graphic-p))) - (corfu-terminal-mode))) - -(use-package corfu-mouse - :after (corfu) - :config - (corfu-mouse-mode) - (keymap-set corfu--mouse-ignore-map "" 'ignore) - (keymap-set corfu-map "" 'ignore)) - -(use-package kind-icon - :config - (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)) - -(global-completion-preview-mode 1) -;; Code completion:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Eat][Eat:1]] -(use-package eat) -(defvar cua--eat-semi-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT semi-char mode CUA keymap") -(defvar cua--eat-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT char mode CUA keymap") -;; Eat:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Defaults][Defaults:1]] -(setq-default buffer-file-coding-system 'utf-8-unix) -(setq text-mode-ispell-word-completion nil) ; Disable ispell -;; Defaults:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Elcord][Elcord:1]] -(defun materus/elcord-toggle (&optional _frame) - "Toggle elcord based on visible frames" - (if (> (length (frame-list)) 1) - (elcord-mode 1) - (elcord-mode -1)) - ) -(use-package elcord - :config - (unless (daemonp) (elcord-mode 1)) - (add-hook 'after-delete-frame-functions 'materus/elcord-toggle) - (add-hook 'server-after-make-frame-hook 'materus/elcord-toggle)) -;; Elcord:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Undo-Tree][Undo-Tree:1]] -(use-package undo-tree -:config -(global-undo-tree-mode 1) -(defvar materus/undo-tree-dir (concat user-emacs-directory "var/undo-tree/")) -(unless (file-exists-p materus/undo-tree-dir) - (make-directory materus/undo-tree-dir t)) -(setq undo-tree-visualizer-diff t) -(setq undo-tree-history-directory-alist `(("." . ,materus/undo-tree-dir ))) -(setq undo-tree-visualizer-timestamps t) -) -;; Undo-Tree:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Projectile][Projectile:1]] -(use-package projectile - :config (projectile-mode 1)) -;; Projectile:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Treemacs][Treemacs:1]] -(use-package treemacs) -(use-package treemacs-projectile - :after (projectile treemacs)) -(use-package treemacs-nerd-icons - :after (nerd-icons treemacs)) -(use-package treemacs-perspective - :after (treemacs)) -(use-package treemacs-mouse-interface - :after (treemacs)) -;; Treemacs:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Magit][Magit:1]] -(use-package magit) -;; Magit:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Dirvish / Dired][Dirvish / Dired:1]] -(setq dired-mouse-drag-files t) -(use-package dirvish - :config - (dirvish-override-dired-mode 1) - (setq dirvish-attributes - '(vc-state - subtree-state - nerd-icons - collapse - git-msg - file-time - file-size))) -;; Dirvish / Dired:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Perspective][Perspective:1]] -(require 'perspective) -(setq persp-mode-prefix-key (kbd "C-c M-p")) -(setq persp-modestring-short t) -(persp-mode 1) -;; Perspective:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*LSP][LSP:1]] -(use-package lsp-mode - :custom - (lsp-completion-provider :none) ;; we use Corfu! - :config - (setq lsp-keep-workspace-alive nil) - (require 'lsp-ui) - :init - (defun materus/orderless-dispatch-flex-first (_pattern index _total) - (and (eq index 0) 'orderless-flex)) - - (defun materus/lsp-mode-setup-completion () - (setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults)) - '(orderless)) - ;; Optionally configure the first word as flex filtered. - (add-hook 'orderless-style-dispatchers #'materus/orderless-dispatch-flex-first nil 'local) - ;; Optionally configure the cape-capf-buster. - (setq-local completion-at-point-functions (list (cape-capf-buster #'lsp-completion-at-point)))) - - :hook - (lsp-completion-mode . materus/lsp-mode-setup-completion)) - - - - - (setq read-process-output-max (* 1024 1024 3)) - - (defun lsp-booster--advice-json-parse (old-fn &rest args) - "Try to parse bytecode instead of json." - (or - (when (equal (following-char) ?#) - (let ((bytecode (read (current-buffer)))) - (when (byte-code-function-p bytecode) - (funcall bytecode)))) - (apply old-fn args))) - (advice-add (if (progn (require 'json) - (fboundp 'json-parse-buffer)) - 'json-parse-buffer - 'json-read) - :around - #'lsp-booster--advice-json-parse) - - (defun lsp-booster--advice-final-command (old-fn cmd &optional test?) - "Prepend emacs-lsp-booster command to lsp CMD." - (let ((orig-result (funcall old-fn cmd test?))) - (if (and (not test?) ; for check lsp-server-present? - (not (file-remote-p default-directory)) ; see lsp-resolve-final-command, it would add extra shell wrapper - lsp-use-plists - (not (functionp 'json-rpc-connection)) ; native json-rpc - (executable-find "emacs-lsp-booster")) - (progn - (when-let* ((command-from-exec-path (executable-find (car orig-result)))) ; resolve command from exec-path (in case not found in $PATH) - (setcar orig-result command-from-exec-path)) - (message "Using emacs-lsp-booster for %s!" orig-result) - (cons "emacs-lsp-booster" orig-result)) - orig-result))) - (advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command) -;; LSP:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*DAP][DAP:1]] -(use-package dap-mode - :config - (require 'dap-lldb) - (require 'dap-gdb-lldb) - (require 'dap-cpptools) - (setq dap-gdb-lldb-extension-version "0.27.0") - (dap-auto-configure-mode 1) - ) -;; DAP:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Nix][Nix:1]] -(use-package nix-mode) -(use-package nix-ts-mode) -(use-package nixfmt) -(use-package lsp-nix) -(with-eval-after-load 'lsp-mode - (add-to-list 'lsp-disabled-clients '(nix-mode . nix-nil)) - (setq lsp-nix-nixd-server-path "nixd" - lsp-nix-nixd-formatting-command [ "nixfmt" ] - lsp-nix-nixd-nixpkgs-expr "import { }")) - -(setq lsp-nix-nixd-formatting-command "nixfmt") -(add-hook 'nix-mode-hook 'lsp-deferred) -(add-hook 'nix-mode-hook 'display-line-numbers-mode) - -(add-hook 'nix-ts-mode-hook 'lsp-deferred) -(add-hook 'nix-ts-mode-hook 'display-line-numbers-mode) - -(when (treesit-language-available-p 'nix) (push '(nix-mode . nix-ts-mode) major-mode-remap-alist)) -;; Nix:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Emacs Lisp][Emacs Lisp:1]] -(add-hook 'emacs-lisp-mode-hook 'display-line-numbers-mode) -;; Emacs Lisp:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*C/C++][C/C++:1]] -(use-package lsp-clangd) -(setq lsp-clients-clangd-args '("--fallback-style=microsoft")) - -(add-hook 'c-mode-hook 'lsp-deferred) -(add-hook 'c-mode-hook 'display-line-numbers-mode) -(add-hook 'c-ts-mode-hook 'lsp-deferred) -(add-hook 'c-ts-mode-hook 'display-line-numbers-mode) - -(add-hook 'c++-mode-hook 'lsp-deferred) -(add-hook 'c++-mode-hook 'display-line-numbers-mode) -(add-hook 'c++-ts-mode-hook 'lsp-deferred) -(add-hook 'c++-ts-mode-hook 'display-line-numbers-mode) -(when (treesit-language-available-p 'c) (push '(c-mode . c-ts-mode) major-mode-remap-alist)) -(when (treesit-language-available-p 'cpp) (push '(c++-mode . c++-ts-mode) major-mode-remap-alist)) - -(add-to-list 'c-default-style '(c-mode . "bsd")) -(add-to-list 'c-default-style '(c++-mode . "bsd")) -(add-to-list 'c-default-style '(c-ts-mode . "bsd")) -(add-to-list 'c-default-style '(c++-ts-mode . "bsd")) -;; C/C++:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Python][Python:1]] -(use-package lsp-pyright) -(setq lsp-pyright-langserver-command "pyright") -(add-hook 'python-mode-hook 'lsp-deferred) -(add-hook 'python-ts-mode-hook 'lsp-deferred) -(when (treesit-language-available-p 'python) (push '(python-mode . python-ts-mode) major-mode-remap-alist)) -;; Python:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Java][Java:1]] -(use-package lsp-java) -(setq lsp-java-vmargs '("-XX:+UseParallelGC" "-XX:GCTimeRatio=4" "-XX:AdaptiveSizePolicyWeight=90" "-Dsun.zip.disableMemoryMapping=true" "-Xmx2G" "-Xms100m")) -(add-hook 'java-mode-hook (lambda () (when (getenv "JDTLS_PATH") (setq lsp-java-server-install-dir (getenv "JDTLS_PATH"))))) -(add-hook 'java-mode-hook 'lsp-deferred) -(add-hook 'java-mode-hook 'display-line-numbers-mode) - -(add-hook 'java-ts-mode-hook (lambda () (when (getenv "JDTLS_PATH") (setq lsp-java-server-install-dir (getenv "JDTLS_PATH"))))) -(add-hook 'java-ts-mode-hook 'lsp-deferred) -(add-hook 'java-ts-mode-hook 'display-line-numbers-mode) - -(when (treesit-language-available-p 'java) (push '(java-mode . java-ts-mode) major-mode-remap-alist)) - -(add-to-list 'c-default-style '(java-mode . "java")) -(add-to-list 'c-default-style '(java-ts-mode . "java")) -;; Java:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Other][Other:1]] -(add-to-list 'c-default-style '(awk-mode . "awk")) -(add-to-list 'c-default-style '(other . "bsd")) - - - - -(setq-default c-basic-offset 4) -(setq-default c-indent-level 4) - -(setq-default c-ts-mode-indent-offset 4) -(setq-default c-ts-mode-indent-style 'bsd) - -(setq-default c-hungry-delete-key t) - -(electric-pair-mode 1) -(electric-indent-mode -1) -(setq-default tab-width 4) -(setq-default indent-tabs-mode nil) - -(add-hook 'prog-mode-hook 'display-line-numbers-mode) -(add-hook 'prog-mode-hook 'electric-indent-local-mode) -;; Other:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Keys][Keys:1]] -(use-package cua-base) - - ;;; Keybinds -;; Eat Term -(define-key cua--eat-semi-char-keymap (kbd "C-v") #'eat-yank) -(define-key cua--eat-char-keymap (kbd "C-S-v") #'eat-yank) -(define-key cua--eat-semi-char-keymap (kbd "C-c") #'copy-region-as-kill) -(define-key cua--eat-char-keymap (kbd "C-S-c") #'copy-region-as-kill) -(define-key eat-mode-map (kbd "C-") #'eat-self-input) -(define-key eat-mode-map (kbd "C-") #'eat-self-input) -;; perspective -(define-key global-map (kbd "C-x C-b") #'persp-list-buffers) -(define-key global-map (kbd "C-x C-B") #'list-buffers) -(define-key global-map (kbd "C-x b") #'persp-switch-to-buffer*) -(define-key global-map (kbd "C-x B") #'consult-buffer) -;; CUA-like global -(define-key global-map (kbd "C-s") 'save-buffer) -(define-key global-map (kbd "C-r") 'query-replace) -(define-key global-map (kbd "C-S-r") 'replace-string) -(define-key global-map (kbd "M-r") 'query-replace-regexp) -(define-key global-map (kbd "M-S-r") 'replace-regexp) -(define-key global-map (kbd "C-a") 'mark-whole-buffer) -(define-key global-map (kbd "C-f") 'isearch-forward) -(define-key global-map (kbd "C-S-f") 'isearch-backward) -(define-key isearch-mode-map (kbd "C-f") 'isearch-repeat-forward) -(define-key isearch-mode-map (kbd "C-S-f") 'isearch-repeat-backward) -(define-key global-map (kbd "M-f") 'consult-ripgrep) -(define-key global-map (kbd "C-M-f") 'consult-find) -;; CUA -(define-key cua--cua-keys-keymap (kbd "C-z") 'undo-tree-undo) -(define-key cua--cua-keys-keymap (kbd "C-y") 'undo-tree-redo) -(define-key cua-global-keymap (kbd "C-SPC") 'completion-at-point) -(define-key cua-global-keymap (kbd "C-M-SPC") 'cua-set-mark) -(cua-mode 1) -;; TAB -(define-key global-map (kbd "C-") #'indent-rigidly-left) -(define-key global-map (kbd "C-") #'indent-rigidly-right) -;; Dashboard -(define-key dashboard-mode-map (kbd "C-r") #'dashboard-refresh-buffer) - -;; Hyper -(define-key key-translation-map (kbd "") 'event-apply-hyper-modifier ) -(define-key key-translation-map (kbd "") 'event-apply-hyper-modifier ) -(define-key key-translation-map (kbd "∇") 'event-apply-hyper-modifier ) -;; Treemacs -(define-key global-map (kbd "C-H-t") 'treemacs) - -;; Unbind -(define-key isearch-mode-map (kbd "C-s") nil) -(define-key isearch-mode-map (kbd "C-r") nil) -;; Keys:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*CUA Overrides][CUA Overrides:1]] -(defun cua--eat-semi-char-override-keymap () - (setq-local cua--keymap-alist (copy-tree cua--keymap-alist)) - (setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-semi-char-keymap)) -(defun cua--eat-char-override-keymap () - (setq-local cua--keymap-alist (copy-tree cua--keymap-alist)) - (setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-char-keymap)) - -(advice-add 'eat-semi-char-mode :after #'cua--eat-semi-char-override-keymap) -(advice-add 'eat-char-mode :after #'cua--eat-char-override-keymap) -;(add-hook 'eat-char-mode-hook #'cua--eat-char-override-keymap) -;; CUA Overrides:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Yasnippet init][Yasnippet init:1]] -(use-package yasnippet -:config (yas-global-mode 1)) -;; Yasnippet init:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Update config script][Update config script:1]] -(defun materus/sync-config () - "Function to sync config from MATERUS_CONFIG_DIR to emacs folder" - (if (getenv "MATERUS_CONFIG_DIR") - (progn (copy-directory (concat (getenv "MATERUS_CONFIG_DIR") "extraFiles/config/emacs/") - user-emacs-directory t t t) t) - (progn (message "Can't use if MATERUS_CONFIG_DIR is not set!") nil))) -(defun materus/compare-file-time (file1 file2) - "Returns t when file1 is newer than file2" - (time-less-p - (nth 5 (file-attributes file2)) - (nth 5 (file-attributes file1)) - )) -(defun materus/compile-if-needed (file) - (unless (and (file-exists-p (concat user-emacs-directory file "c")) - (materus/compare-file-time (concat user-emacs-directory file "c") - (concat user-emacs-directory file))) - (byte-compile-file (concat user-emacs-directory file))) - ) -(defun materus/compile-config-if-needed () - (materus/compile-if-needed "early-init.el") - (materus/compile-if-needed "init.el") - (materus/compile-if-needed "etc/materus/emacs-config.el")) -(defun materus/update-config () - "Will sync and compile config" - (interactive) - (when (materus/sync-config) (materus/compile-config-if-needed) (byte-recompile-directory (concat user-emacs-directory "etc/materus/extra") 0 t))) -;; Update config script:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Byte compile][Byte compile:1]] -(materus/compile-config-if-needed) -;; Byte compile:1 ends here - -;; [[file:../../../../org-conf/emacs-config.org::*Test][Test:1]] -;;; (global-set-key (kbd "C-∇") (kbd "C-H")) -;;; (global-set-key (kbd "H-∇") (lambda () (interactive) (insert-char #x2207))) -;;; (buffer-text-pixel-size) -;;; (set-window-vscroll nil 960 t t) - -;;; (set-window-margins (selected-window) 0 0) - -;;; (buffer-local-value 'var (get-buffer "your-buffer-name")) - -;;; (setq completion-styles '(orderless basic) -;;; completion-category-defaults nil -;;; completion-category-overrides '((file (styles partial-completion)))) -;; Test:1 ends here diff --git a/dotfiles/emacs/init.el b/dotfiles/emacs/init.el deleted file mode 100644 index b0f1ab1..0000000 --- a/dotfiles/emacs/init.el +++ /dev/null @@ -1,22 +0,0 @@ -;;; -*- lexical-binding: t; -*- - -;; [[file:../../org-conf/emacs-config.org::*Init][Init:2]] -(setq-default materus/use-nix-packages (require 'materus-config nil 'noerror)) -(require 'cl-lib) -(require 'package) - -(add-to-list 'load-path (concat user-emacs-directory "etc/materus/extra")) ; Extra load path for packages -(setq package-user-dir (concat user-emacs-directory "var/elpa/" emacs-version "/" )) ; Set elpa path for this emacs version, should use nix packages anyway so keeping just in case -(setq package-gnupghome-dir (concat user-emacs-directory "var/elpa/gnupg/" )) ; Set path to gnupg for elpa -(add-to-list 'package-archives - '("nongnu-devel" . "https://elpa.nongnu.org/nongnu-devel/")) ; Add nongnu-devel repo to package manager -(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) ; Add melpa repo to package manager -(customize-set-variable 'package-archive-priorities '(("gnu" . 99) - ("nongnu" . 80) - ("nongnu-devel" . 70) - ("melpa" . 0))) ; Repository priority - -(load (concat user-emacs-directory "etc/materus/nix-init") t) -(load (concat user-emacs-directory "etc/materus/emacs-config")) -(load custom-file t) -;; Init:2 ends here diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..5921719 --- /dev/null +++ b/flake.lock @@ -0,0 +1,1050 @@ +{ + "nodes": { + "base16": { + "inputs": { + "fromYaml": "fromYaml" + }, + "locked": { + "lastModified": 1746562888, + "narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "ref": "main", + "repo": "base16.nix", + "type": "github" + } + }, + "base16_2": { + "inputs": { + "fromYaml": "fromYaml_2" + }, + "locked": { + "lastModified": 1746562888, + "narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "ref": "main", + "repo": "base16.nix", + "type": "github" + } + }, + "config-stable": { + "inputs": { + "base16": "base16", + "devshell": "devshell", + "emacs-overlay": "emacs-overlay", + "flake-utils": "flake-utils", + "git-agecrypt": "git-agecrypt", + "home-manager": [ + "hm-stable" + ], + "impermanence": "impermanence", + "nix-vscode-extensions": "nix-vscode-extensions", + "nixerus": "nixerus", + "nixos-hardware": "nixos-hardware", + "nixpkgs": [ + "nixpkgs-stable" + ], + "nur": "nur_2", + "plasma-manager": "plasma-manager", + "sops-nix": "sops-nix" + }, + "locked": { + "path": "./nix/subflake", + "type": "path" + }, + "original": { + "path": "./nix/subflake", + "type": "path" + }, + "parent": [] + }, + "config-unstable": { + "inputs": { + "base16": "base16_2", + "devshell": "devshell_2", + "emacs-overlay": "emacs-overlay_2", + "flake-utils": "flake-utils_2", + "git-agecrypt": "git-agecrypt_2", + "home-manager": "home-manager", + "impermanence": "impermanence_2", + "nix-vscode-extensions": "nix-vscode-extensions_2", + "nixerus": "nixerus_2", + "nixos-hardware": "nixos-hardware_2", + "nixpkgs": [ + "nixpkgs" + ], + "nur": "nur_4", + "plasma-manager": "plasma-manager_2", + "sops-nix": "sops-nix_2" + }, + "locked": { + "path": "./nix/subflake", + "type": "path" + }, + "original": { + "path": "./nix/subflake", + "type": "path" + }, + "parent": [] + }, + "devshell": { + "inputs": { + "nixpkgs": [ + "config-stable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741473158, + "narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=", + "owner": "numtide", + "repo": "devshell", + "rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0", + "type": "github" + }, + "original": { + "owner": "numtide", + "ref": "main", + "repo": "devshell", + "type": "github" + } + }, + "devshell_2": { + "inputs": { + "nixpkgs": [ + "config-unstable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741473158, + "narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=", + "owner": "numtide", + "repo": "devshell", + "rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0", + "type": "github" + }, + "original": { + "owner": "numtide", + "ref": "main", + "repo": "devshell", + "type": "github" + } + }, + "emacs-overlay": { + "inputs": { + "nixpkgs": [ + "config-stable", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1747498832, + "narHash": "sha256-qLzhGOSIZdd4QDpbUgQyt3Tp2o4d4k1N6vcebS+DN4I=", + "owner": "nix-community", + "repo": "emacs-overlay", + "rev": "20bad5faaa8cd9782977d70b8b34638f6449a2a7", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "emacs-overlay", + "type": "github" + } + }, + "emacs-overlay_2": { + "inputs": { + "nixpkgs": [ + "config-unstable", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_2" + }, + "locked": { + "lastModified": 1747498832, + "narHash": "sha256-qLzhGOSIZdd4QDpbUgQyt3Tp2o4d4k1N6vcebS+DN4I=", + "owner": "nix-community", + "repo": "emacs-overlay", + "rev": "20bad5faaa8cd9782977d70b8b34638f6449a2a7", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "emacs-overlay", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "config-stable", + "nixerus", + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "config-stable", + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "config-unstable", + "nixerus", + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": [ + "config-unstable", + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "ref": "main", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "ref": "main", + "repo": "flake-utils", + "type": "github" + } + }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1731966426, + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "106af9e2f715e2d828df706c386a685698f3223b", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, + "fromYaml_2": { + "flake": false, + "locked": { + "lastModified": 1731966426, + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "106af9e2f715e2d828df706c386a685698f3223b", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, + "git-agecrypt": { + "inputs": { + "flake-utils": [ + "config-stable", + "flake-utils" + ], + "nixpkgs": [ + "config-stable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1710176518, + "narHash": "sha256-cmnBW/691mmLHq8tWpD3+zwCf7Wph5fcVdSxQGxqd1k=", + "owner": "vlaci", + "repo": "git-agecrypt", + "rev": "126be86c515466c5878a60561f754a9ab4af6ee8", + "type": "github" + }, + "original": { + "owner": "vlaci", + "ref": "main", + "repo": "git-agecrypt", + "type": "github" + } + }, + "git-agecrypt_2": { + "inputs": { + "flake-utils": [ + "config-unstable", + "flake-utils" + ], + "nixpkgs": [ + "config-unstable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1710176518, + "narHash": "sha256-cmnBW/691mmLHq8tWpD3+zwCf7Wph5fcVdSxQGxqd1k=", + "owner": "vlaci", + "repo": "git-agecrypt", + "rev": "126be86c515466c5878a60561f754a9ab4af6ee8", + "type": "github" + }, + "original": { + "owner": "vlaci", + "ref": "main", + "repo": "git-agecrypt", + "type": "github" + } + }, + "hm-stable": { + "inputs": { + "nixpkgs": [ + "nixpkgs-stable" + ] + }, + "locked": { + "lastModified": 1747331121, + "narHash": "sha256-3MmiUN/jOHBHQUnjqzg6qKArc17j2OS6jisEppDY4g8=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "1eec32f0efe3b830927989767a9e6ece0d82d608", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-24.11", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "config-unstable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1747439237, + "narHash": "sha256-5rCGrnkglKKj4cav1U3HC+SIUNJh08pqOK4spQv9RjA=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "ae755329092c87369b9e9a1510a8cf1ce2b1c708", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "home-manager", + "type": "github" + } + }, + "impermanence": { + "locked": { + "lastModified": 1737831083, + "narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=", + "owner": "nix-community", + "repo": "impermanence", + "rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "impermanence", + "type": "github" + } + }, + "impermanence_2": { + "locked": { + "lastModified": 1737831083, + "narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=", + "owner": "nix-community", + "repo": "impermanence", + "rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "impermanence", + "type": "github" + } + }, + "nix-vscode-extensions": { + "inputs": { + "flake-utils": [ + "config-stable", + "flake-utils" + ], + "nixpkgs": [ + "config-stable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1747446936, + "narHash": "sha256-O5HLvg27oWAUHaZvAK8p30whJLlZSAUWMu7RZwWwX/0=", + "owner": "nix-community", + "repo": "nix-vscode-extensions", + "rev": "c23c72f97fc61391f9022f5f426c1b737b2d639a", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "nix-vscode-extensions", + "type": "github" + } + }, + "nix-vscode-extensions_2": { + "inputs": { + "flake-utils": [ + "config-unstable", + "flake-utils" + ], + "nixpkgs": [ + "config-unstable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1747446936, + "narHash": "sha256-O5HLvg27oWAUHaZvAK8p30whJLlZSAUWMu7RZwWwX/0=", + "owner": "nix-community", + "repo": "nix-vscode-extensions", + "rev": "c23c72f97fc61391f9022f5f426c1b737b2d639a", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "nix-vscode-extensions", + "type": "github" + } + }, + "nixerus": { + "inputs": { + "home-manager": [ + "config-stable", + "home-manager" + ], + "nixpkgs": [ + "config-stable", + "nixpkgs" + ], + "nur": "nur" + }, + "locked": { + "lastModified": 1747136507, + "narHash": "sha256-lnt9LypZVMRzRDpl+gQtrInxvsF7CL18TTEMthXz8p8=", + "owner": "materusPL", + "repo": "Nixerus", + "rev": "8c329020c653c04a8f0f50dc7400c01b3b9e3733", + "type": "github" + }, + "original": { + "owner": "materusPL", + "ref": "master", + "repo": "Nixerus", + "type": "github" + } + }, + "nixerus_2": { + "inputs": { + "home-manager": [ + "config-unstable", + "home-manager" + ], + "nixpkgs": [ + "config-unstable", + "nixpkgs" + ], + "nur": "nur_3" + }, + "locked": { + "lastModified": 1747136507, + "narHash": "sha256-lnt9LypZVMRzRDpl+gQtrInxvsF7CL18TTEMthXz8p8=", + "owner": "materusPL", + "repo": "Nixerus", + "rev": "8c329020c653c04a8f0f50dc7400c01b3b9e3733", + "type": "github" + }, + "original": { + "owner": "materusPL", + "ref": "master", + "repo": "Nixerus", + "type": "github" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1747129300, + "narHash": "sha256-L3clA5YGeYCF47ghsI7Tcex+DnaaN/BbQ4dR2wzoiKg=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "e81fd167b33121269149c57806599045fd33eeed", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", + "type": "github" + } + }, + "nixos-hardware_2": { + "locked": { + "lastModified": 1747129300, + "narHash": "sha256-L3clA5YGeYCF47ghsI7Tcex+DnaaN/BbQ4dR2wzoiKg=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "e81fd167b33121269149c57806599045fd33eeed", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1741173522, + "narHash": "sha256-k7VSqvv0r1r53nUI/IfPHCppkUAddeXn843YlAC5DR0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d69ab0d71b22fa1ce3dbeff666e6deb4917db049", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1747335874, + "narHash": "sha256-IKKIXTSYJMmUtE+Kav5Rob8SgLPnfnq4Qu8LyT4gdqQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba8b70ee098bc5654c459d6a95dfc498b91ff858", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1747335874, + "narHash": "sha256-IKKIXTSYJMmUtE+Kav5Rob8SgLPnfnq4Qu8LyT4gdqQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba8b70ee098bc5654c459d6a95dfc498b91ff858", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_3": { + "locked": { + "lastModified": 1747335874, + "narHash": "sha256-IKKIXTSYJMmUtE+Kav5Rob8SgLPnfnq4Qu8LyT4gdqQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ba8b70ee098bc5654c459d6a95dfc498b91ff858", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1741173522, + "narHash": "sha256-k7VSqvv0r1r53nUI/IfPHCppkUAddeXn843YlAC5DR0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d69ab0d71b22fa1ce3dbeff666e6deb4917db049", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1741173522, + "narHash": "sha256-k7VSqvv0r1r53nUI/IfPHCppkUAddeXn843YlAC5DR0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d69ab0d71b22fa1ce3dbeff666e6deb4917db049", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1741173522, + "narHash": "sha256-k7VSqvv0r1r53nUI/IfPHCppkUAddeXn843YlAC5DR0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d69ab0d71b22fa1ce3dbeff666e6deb4917db049", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1747327360, + "narHash": "sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4+wYK4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e06158e58f3adee28b139e9c2bcfcc41f8625b46", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nur": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1741294988, + "narHash": "sha256-3408u6q615kVTb23WtDriHRmCBBpwX7iau6rvfipcu4=", + "path": "/nix/store/hfzv9pkm0c6hzvkav8ii476s4cx9nph3-source", + "rev": "b30c245e2c44c7352a27485bfd5bc483df660f0e", + "type": "path" + }, + "original": { + "id": "nur", + "type": "indirect" + } + }, + "nur_2": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs_2", + "treefmt-nix": "treefmt-nix_2" + }, + "locked": { + "lastModified": 1741294988, + "narHash": "sha256-3408u6q615kVTb23WtDriHRmCBBpwX7iau6rvfipcu4=", + "owner": "nix-community", + "repo": "NUR", + "rev": "b30c245e2c44c7352a27485bfd5bc483df660f0e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "NUR", + "type": "github" + } + }, + "nur_3": { + "inputs": { + "flake-parts": "flake-parts_3", + "nixpkgs": "nixpkgs_3", + "treefmt-nix": "treefmt-nix_3" + }, + "locked": { + "lastModified": 1741294988, + "narHash": "sha256-3408u6q615kVTb23WtDriHRmCBBpwX7iau6rvfipcu4=", + "path": "/nix/store/hfzv9pkm0c6hzvkav8ii476s4cx9nph3-source", + "rev": "b30c245e2c44c7352a27485bfd5bc483df660f0e", + "type": "path" + }, + "original": { + "id": "nur", + "type": "indirect" + } + }, + "nur_4": { + "inputs": { + "flake-parts": "flake-parts_4", + "nixpkgs": "nixpkgs_4", + "treefmt-nix": "treefmt-nix_4" + }, + "locked": { + "lastModified": 1741294988, + "narHash": "sha256-3408u6q615kVTb23WtDriHRmCBBpwX7iau6rvfipcu4=", + "owner": "nix-community", + "repo": "NUR", + "rev": "b30c245e2c44c7352a27485bfd5bc483df660f0e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "NUR", + "type": "github" + } + }, + "plasma-manager": { + "inputs": { + "home-manager": [ + "config-stable", + "home-manager" + ], + "nixpkgs": [ + "config-stable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1742765550, + "narHash": "sha256-2vVIh2JrL6GAGfgCeY9e6iNKrBjs0Hw3bGQEAbwVs68=", + "owner": "nix-community", + "repo": "plasma-manager", + "rev": "b70be387276e632fe51232887f9e04e2b6ef8c16", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "trunk", + "repo": "plasma-manager", + "type": "github" + } + }, + "plasma-manager_2": { + "inputs": { + "home-manager": [ + "config-unstable", + "home-manager" + ], + "nixpkgs": [ + "config-unstable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1742765550, + "narHash": "sha256-2vVIh2JrL6GAGfgCeY9e6iNKrBjs0Hw3bGQEAbwVs68=", + "owner": "nix-community", + "repo": "plasma-manager", + "rev": "b70be387276e632fe51232887f9e04e2b6ef8c16", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "trunk", + "repo": "plasma-manager", + "type": "github" + } + }, + "root": { + "inputs": { + "config-stable": "config-stable", + "config-unstable": "config-unstable", + "hm-stable": "hm-stable", + "nixpkgs": "nixpkgs_5", + "nixpkgs-stable": "nixpkgs-stable_3" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": [ + "config-stable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1746485181, + "narHash": "sha256-PxrrSFLaC7YuItShxmYbMgSuFFuwxBB+qsl9BZUnRvg=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "e93ee1d900ad264d65e9701a5c6f895683433386", + "type": "github" + }, + "original": { + "owner": "Mic92", + "ref": "master", + "repo": "sops-nix", + "type": "github" + } + }, + "sops-nix_2": { + "inputs": { + "nixpkgs": [ + "config-unstable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1746485181, + "narHash": "sha256-PxrrSFLaC7YuItShxmYbMgSuFFuwxBB+qsl9BZUnRvg=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "e93ee1d900ad264d65e9701a5c6f895683433386", + "type": "github" + }, + "original": { + "owner": "Mic92", + "ref": "master", + "repo": "sops-nix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "config-stable", + "nixerus", + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733222881, + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_2": { + "inputs": { + "nixpkgs": [ + "config-stable", + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733222881, + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_3": { + "inputs": { + "nixpkgs": [ + "config-unstable", + "nixerus", + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733222881, + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_4": { + "inputs": { + "nixpkgs": [ + "config-unstable", + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733222881, + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix index 70f2ddb..5bfa56a 100644 --- a/flake.nix +++ b/flake.nix @@ -1,14 +1,6 @@ -# [[file:org-conf/nix-flake.org::*Main Flake][Main Flake:1]] { - description = "Lemon flake: NixOS and home manager configs"; + description = "MKK flake: NixOS and home manager configs"; inputs = { - private = { - type = "github"; - owner = "materusPL"; - repo = "Nixerus"; - ref = "mock"; - }; - nixpkgs = { type = "github"; owner = "NixOS"; @@ -16,16 +8,8 @@ ref = "nixos-unstable"; }; - configInputs = { - type = "github"; - owner = "materusPL"; - repo = "nixos-config"; - ref = "inputs"; - inputs = { - nixpkgs.follows = "nixpkgs"; - }; - }; - + + nixpkgs-stable = { type = "github"; owner = "NixOS"; @@ -40,25 +24,22 @@ ref = "release-24.11"; inputs.nixpkgs.follows = "nixpkgs-stable"; }; - - configInputs-stable = { - type = "github"; - owner = "materusPL"; - repo = "nixos-config"; - ref = "inputs"; + + config-unstable = { + url = "path:./nix/subflake"; + inputs = { + nixpkgs.follows = "nixpkgs"; + }; + }; + + config-stable = { + url = "path:./nix/subflake"; inputs = { nixpkgs.follows = "nixpkgs-stable"; home-manager.follows = "hm-stable"; }; }; }; - outputs = - let - rootPath = builtins.toString ./.; - in - inputs@{ self, ... }: - { + outputs = inputs: import (builtins.toString ./nix) { inherit inputs; configRootPath = (builtins.toString ./.); }; - }; } -# Main Flake:1 ends here diff --git a/org-conf/nix-flake.org b/flake.org similarity index 74% rename from org-conf/nix-flake.org rename to flake.org index de7bce6..d72aa8a 100644 --- a/org-conf/nix-flake.org +++ b/flake.org @@ -1,29 +1,20 @@ -:PROPERTIES: -:NIX-DIR: ../nix/ -:END: #+TITLE: Nix Flakes Config #+AUTHOR: materus -#+DESCRIPTION: Nix flake declarations and some configuration maker functions. +#+DESCRIPTION: Nix flake declarations #+STARTUP: overview -#+PROPERTY: header-args :tangle (concat (org-entry-get nil "NIX-DIR" t) "default.nix") :comments link #+OPTIONS: \n:t #+auto_tangle: t * Flakes ** Main Flake -Flake of entire repo. [[../flake.nix][link]] -#+begin_src nix header-args :tangle (concat (org-entry-get nil "NIX-DIR" t) "../flake.nix") :comments link - { - description = "Lemon flake: NixOS and home manager configs"; - inputs = { - private = { - type = "github"; - owner = "materusPL"; - repo = "Nixerus"; - ref = "mock"; - }; +Flake of entire repo. [[./flake.nix][link]] +#+name: main_flake +#+begin_src nix header-args :tangle ./flake.nix + { + description = "MKK flake: NixOS and home manager configs"; + inputs = { nixpkgs = { type = "github"; owner = "NixOS"; @@ -31,16 +22,8 @@ Flake of entire repo. [[../flake.nix][link]] ref = "nixos-unstable"; }; - configInputs = { - type = "github"; - owner = "materusPL"; - repo = "nixos-config"; - ref = "inputs"; - inputs = { - nixpkgs.follows = "nixpkgs"; - }; - }; - + + nixpkgs-stable = { type = "github"; owner = "NixOS"; @@ -55,31 +38,31 @@ Flake of entire repo. [[../flake.nix][link]] ref = "release-24.11"; inputs.nixpkgs.follows = "nixpkgs-stable"; }; - - configInputs-stable = { - type = "github"; - owner = "materusPL"; - repo = "nixos-config"; - ref = "inputs"; + + config-unstable = { + url = "path:./nix/subflake"; + inputs = { + nixpkgs.follows = "nixpkgs"; + }; + }; + + config-stable = { + url = "path:./nix/subflake"; inputs = { nixpkgs.follows = "nixpkgs-stable"; home-manager.follows = "hm-stable"; }; }; }; - outputs = - let - rootPath = builtins.toString ./.; - in - inputs@{ self, ... }: - { + outputs = inputs: import (builtins.toString ./nix) { inherit inputs; configRootPath = (builtins.toString ./.); }; - }; } #+end_src ** Subflake -Subflake with dependencies, use so there's no need for duplication for stable and unstable. [[../nix/subflake/flake.nix][link]] -#+begin_src nix header-args :tangle (concat (org-entry-get nil "NIX-DIR" t) "/subflake/flake.nix") :comments link +Subflake with dependencies, used so there's no need for duplication for stable and unstable. [[./nix/subflake/flake.nix][link]] + +#+name: subflake +#+begin_src nix header-args :tangle ./nix/subflake/flake.nix { description = "Subflake of Lemon repository, contains dependencies"; inputs = { @@ -131,7 +114,6 @@ Subflake with dependencies, use so there's no need for duplication for stable an ref = "master"; inputs = { nixpkgs.follows = "nixpkgs"; - flake-utils.follows = "flake-utils"; }; }; @@ -196,6 +178,13 @@ Subflake with dependencies, use so there's no need for duplication for stable an }; }; + impermanence = { + type = "github"; + owner = "nix-community"; + repo = "impermanence"; + ref = "master"; + }; + nur = { type = "github"; owner = "nix-community"; diff --git a/nix/common.nix b/nix/common.nix new file mode 100644 index 0000000..62707d7 --- /dev/null +++ b/nix/common.nix @@ -0,0 +1,211 @@ +# * common.nix +{ + pkgs, + lib, + mkkArg, + config, + ... +}: +{ + imports = [ +# * NIX & NIXPKGS + { + nixpkgs.config = { + allowUnfree = lib.mkDefault true; + joypixels.acceptLicense = lib.mkDefault true; + nvidia.acceptLicense = lib.mkDefault true; + }; + + nix.package = lib.mkDefault pkgs.nixVersions.nix_2_28; + nix.settings = { + experimental-features = [ + "nix-command" + "flakes" + "no-url-literals" + ]; + + auto-optimise-store = true; + trusted-users = [ + "root" + "@wheel" + ]; + + substituters = [ + "https://nix-community.cachix.org" + "https://cache.nixos.org/" + "https://nixerus.cachix.org/" + ]; + trusted-public-keys = [ + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + "nixerus.cachix.org-1:2x7sIG7y1vAoxc8BNRJwsfapZsiX4hIl4aTi9V5ZDdE=" + ]; + }; + + nix.registry = { + nixpkgs-stable = { + from = { + type = "indirect"; + id = "nixpkgs-stable"; + }; + flake = mkkArg.stable.nixpkgs; + }; + nixpkgs-unstable = { + from = { + type = "indirect"; + id = "nixpkgs-unstable"; + }; + flake = mkkArg.unstable.nixpkgs; + }; + + nixpkgs = { + from = { + type = "indirect"; + id = "nixpkgs"; + }; + flake = mkkArg.current.nixpkgs; + }; + + emacs-overlay = { + from = { + type = "indirect"; + id = "emacs-overlay"; + }; + flake = mkkArg.current.emacs-overlay; + }; + + flake-utils = { + from = { + type = "indirect"; + id = "flake-utils"; + }; + flake = mkkArg.current.flake-utils; + }; + + nixos-hardware = { + from = { + type = "indirect"; + id = "nixos-hardware"; + }; + flake = mkkArg.current.nixos-hardware; + }; + + nixerus = { + from = { + type = "indirect"; + id = "nixerus"; + }; + flake = mkkArg.current.nixerus; + }; + + devshell = { + from = { + type = "indirect"; + id = "devshell"; + }; + flake = mkkArg.current.devshell; + }; + + home-manager = { + from = { + type = "indirect"; + id = "home-manager"; + }; + flake = mkkArg.current.home-manager; + }; + + sops-nix = { + from = { + type = "indirect"; + id = "sops-nix"; + }; + flake = mkkArg.current.sops-nix; + }; + + base16 = { + from = { + type = "indirect"; + id = "base16"; + }; + flake = mkkArg.current.base16; + }; + + git-agecrypt = { + from = { + type = "indirect"; + id = "git-agecrypt"; + }; + flake = mkkArg.current.git-agecrypt; + }; + + plasma-manager = { + from = { + type = "indirect"; + id = "plasma-manager"; + }; + flake = mkkArg.current.plasma-manager; + }; + + nur = { + from = { + type = "indirect"; + id = "nur"; + }; + flake = mkkArg.current.nur; + }; + + nix-vscode-extensions = { + from = { + type = "indirect"; + id = "nix-vscode-extensions"; + }; + flake = mkkArg.current.nix-vscode-extensions; + }; + + impermanence = { + from = { + type = "indirect"; + id = "impermanence"; + }; + flake = mkkArg.current.impermanence; + }; + + }; + } +# * Assertions + { + config.assertions = [ + { + assertion = builtins ? currentSystem; + message = "MKK must be build with --impure"; + } + { + assertion = (builtins.readFile "${mkkArg.configRootPath}/private/check-encryption") == "DECRYPTED"; + message = "Need to decrypt MKK repo to build"; + } + ]; + } +# * Args + { + options.konfig = lib.mkOption { default = { }; }; + config = { + konfig = { + unstable = mkkArg.unstable; + stable = mkkArg.stable; + current = mkkArg.current; + nixerusPkgs = + (import mkkArg.current.nixerus { inherit pkgs; }) // + (if (pkgs.system == "x86_64-linux") then { + i686Linux = import mkkArg.current.nixerus { pkgs = pkgs.pkgsi686Linux; }; + } else {}); + + arg = mkkArg; + rootFlake = (builtins.getFlake mkkArg.configRootPath); + vars = lib.mkDefault { }; + }; + _module.args.konfig = config.konfig; + }; + } +# * common.nix END + ]; + +} diff --git a/nix/default.nix b/nix/default.nix new file mode 100644 index 0000000..fe22784 --- /dev/null +++ b/nix/default.nix @@ -0,0 +1,30 @@ +# * default.nix +{ inputs, configRootPath }: +let + stable = inputs.config-stable; + unstable = inputs.config-unstable; + nixpkgs = stable.nixpkgs; + nixpkgs-unstable = unstable.nixpkgs; + mkkArg = { + inherit stable; + inherit unstable; + inherit configRootPath; + }; +in +{ +# * NixOS configurations + nixosConfigurations = { +# ** materusPC + + "materusPC" = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + specialArgs = { mkkArg = mkkArg // {current = stable;}; }; + modules = [ + ./common.nix + ./hosts/materusPC.nix + ]; + }; + + }; + +} diff --git a/nix/hosts/materusPC.nix b/nix/hosts/materusPC.nix new file mode 100644 index 0000000..2c3437e --- /dev/null +++ b/nix/hosts/materusPC.nix @@ -0,0 +1,262 @@ +# * materusPC +{ + lib, + pkgs, + config, + konfig, + ... +}: +{ + imports = [ +# * CONFIG +# ** Nix System Settings + { + nixpkgs.hostPlatform = "x86_64-linux"; + system.copySystemConfiguration = false; + system.stateVersion = "23.05"; + } +# ** Network + { + networking.hostName = "materusPC"; + } +# ** Hardware +# *** Filesystems + { + zramSwap = { + enable = true; + memoryPercent = 25; + }; + + swapDevices = [ + { + label = "NixOS_Swap"; + } + ]; + + fileSystems."/etc/nixos" = { + device = "/materus/config/mkk"; + fsType = "none"; + options = [ "bind" ]; + depends = [ "/materus" ]; + }; + + fileSystems."/materus" = { + device = "/dev/disk/by-label/NixOS_Root"; + fsType = "btrfs"; + options = [ + "subvol=@materus" + "noatime" + "compress=zstd" + "ssd" + "space_cache=v2" + ]; + neededForBoot = true; + }; + + fileSystems."/" = { + device = "/dev/disk/by-label/NixOS_Root"; + fsType = "btrfs"; + options = [ + "subvol=@" + "noatime" + "ssd" + "space_cache=v2" + "compress=zstd" + ]; + }; + + fileSystems."/nix" = { + device = "/dev/disk/by-label/NixOS_Root"; + fsType = "btrfs"; + options = [ + "subvol=@nix" + "noatime" + "compress=zstd" + "ssd" + "space_cache=v2" + ]; + }; + + fileSystems."/home" = { + device = "/dev/disk/by-label/NixOS_Root"; + fsType = "btrfs"; + options = [ + "subvol=@home" + "noatime" + "compress=zstd" + "ssd" + "space_cache=v2" + ]; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-label/NixOS_Root"; + fsType = "btrfs"; + options = [ + "subvol=@boot" + "ssd" + ]; + }; + + fileSystems."/boot/efi" = { + device = "/dev/disk/by-label/NixOS_EFI"; + fsType = "vfat"; + }; + } +# *** Kernel & Boot + { + boot.kernelPackages = pkgs.linuxPackagesFor pkgs.linux_zen; + + boot.kernelParams = [ + #"rcu_nocbs=${materusArg.materusPC.vmCores}" + #"nohz_full=${materusArg.materusPC.vmCores}" + "vfio_iommu_type1.allow_unsafe_interrupts=1" + "pcie_acs_override=downstream,multifunction" + #''vfio-pci.ids="1002:744c"'' + "nox2apic" + "nvme_core.default_ps_max_latency_us=0" + "nvme_core.io_timeout=255" + "nvme_core.max_retries=10" + "nvme_core.shutdown_timeout=10" + "amd_iommu=on" + "amdgpu.ppfeaturemask=0xffffffff" + "amdgpu.runpm=0" + "iommu=pt" + "psi=1" + # Intel Arc A310 + "i915.force_probe=!56a6" + "xe.force_probe=56a6" + # Video + "video=HDMI-A-3:1920x1080@144" + "video=DP-3:1920x1080@240" + ]; + boot.kernelModules = [ + "pci-stub" + "amdgpu" + "i2c_dev" + "kvm_amd" + "vfio" + "vfio_iommu_type1" + "vfio-pci" + "kvmfr" + "xe" + ]; + boot.extraModprobeConfig = '' + options kvm_amd nested=1 avic=1 npt=1 sev=0 + options vfio_iommu_type1 allow_unsafe_interrupts=1 + options kvmfr static_size_mb=64 + ''; + boot.kernel.sysctl = { + "vm.max_map_count" = 1000000; + "vm.swappiness" = 10; + "net.ipv4.ip_forward" = 1; + }; + + boot.initrd.availableKernelModules = [ + "xhci_pci" + "ahci" + "nvme" + "usb_storage" + "usbhid" + "sd_mod" + ]; + boot.initrd.kernelModules = [ + "vfio-pci" + "amdgpu" + ]; + + boot.extraModulePackages = with config.boot.kernelPackages; [ + v4l2loopback + kvmfr + ]; + + boot.supportedFilesystems = [ + "ntfs" + "btrfs" + "vfat" + "exfat" + "ext4" + ]; + + boot.tmp.useTmpfs = true; + + #bootloader + boot.loader.efi.canTouchEfiVariables = true; + boot.loader.efi.efiSysMountPoint = "/boot/efi"; + boot.loader.grub = { + enable = true; + efiSupport = true; + device = "nodev"; + gfxmodeEfi = pkgs.lib.mkDefault "1920x1080@240"; + gfxmodeBios = pkgs.lib.mkDefault "1920x1080@240"; + useOSProber = true; + memtest86.enable = true; + }; + + boot.plymouth.enable = true; + + boot.binfmt.emulatedSystems = [ "aarch64-linux" ]; + } + +# *** Firmware & Others + { + hardware.firmware = with pkgs; [ + konfig.nixerusPkgs.amdgpu-pro-libs.firmware.vcn + konfig.nixerusPkgs.amdgpu-pro-libs.firmware + linux-firmware + alsa-firmware + sof-firmware + ]; + + environment.variables = { + DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1 = "1"; + #VK_ICD_FILENAMES = "${pkgs.mesa.drivers}/share/vulkan/icd.d/radeon_icd.x86_64.json:${pkgs.driversi686Linux.mesa.drivers}/share/vulkan/icd.d/radeon_icd.i686.json"; + AMD_VULKAN_ICD = "RADV"; + RADV_PERFTEST = "gpl,rt,sam"; + #OCL_ICD_VENDORS = "${pkgs.rocmPackages.clr.icd}/etc/OpenCL/vendors/"; + }; + hardware.cpu.amd.updateMicrocode = lib.mkForce true; + + #extra + hardware.wooting.enable = true; + hardware.bluetooth.enable = true; + #Graphics + hardware.graphics.enable = true; + hardware.graphics.enable32Bit = true; + hardware.graphics.extraPackages = with pkgs; [ + vaapiVdpau + vpl-gpu-rt + intel-media-driver + libvdpau-va-gl + amdvlk + vkbasalt + rocmPackages.clr.icd + rocmPackages.clr + konfig.nixerusPkgs.amdgpu-pro-libs.vulkan + konfig.nixerusPkgs.amdgpu-pro-libs.amf + ]; + hardware.graphics.extraPackages32 = with pkgs.pkgsi686Linux; [ + vaapiVdpau + vkbasalt + pkgs.driversi686Linux.amdvlk + konfig.nixerusPkgs.i686Linux.amdgpu-pro-libs.vulkan + libvdpau-va-gl + ]; + /* + services.udev.extraRules = '' + + #GPU bar size + ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x1002", ATTR{device}=="0x744c", ATTR{resource0_resize}="15" + ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x1002", ATTR{device}=="0x744c", ATTR{resource2_resize}="8" + ''; + */ + + #Trim + services.fstrim = { + enable = true; + interval = "weekly"; + }; + } +# * materusPC END + ]; +} diff --git a/nix/subflake/flake.nix b/nix/subflake/flake.nix index 59a2958..8e025a0 100644 --- a/nix/subflake/flake.nix +++ b/nix/subflake/flake.nix @@ -1,4 +1,3 @@ -# [[file:../../org-conf/nix-flake.org::*Subflake][Subflake:1]] { description = "Subflake of Lemon repository, contains dependencies"; inputs = { @@ -50,7 +49,6 @@ ref = "master"; inputs = { nixpkgs.follows = "nixpkgs"; - flake-utils.follows = "flake-utils"; }; }; @@ -115,6 +113,13 @@ }; }; + impermanence = { + type = "github"; + owner = "nix-community"; + repo = "impermanence"; + ref = "master"; + }; + nur = { type = "github"; owner = "nix-community"; @@ -126,4 +131,3 @@ outputs = inputs: inputs; } -# Subflake:1 ends here diff --git a/org-conf/emacs-config.org b/org-conf/emacs-config.org deleted file mode 100644 index efd7b3a..0000000 --- a/org-conf/emacs-config.org +++ /dev/null @@ -1,1008 +0,0 @@ -:PROPERTIES: -:EMACS-DIR: ../dotfiles/emacs/ -:END: -#+TITLE: Materus Emacs Cfg -#+AUTHOR: materus -#+DESCRIPTION: materus emacs configuration -#+STARTUP: overview -#+PROPERTY: header-args :tangle (concat (org-entry-get nil "EMACS-DIR" t) "etc/materus/emacs-config.el") :comments link -#+OPTIONS: \n:t -#+auto_tangle: t - -My emacs config, tangled file is [[../dotfiles/emacs/etc/materus/emacs-config.el][there]] - -* Table of Contents :noexport:TOC_3: -- [[#init-files][Init Files]] - - [[#early-init][Early Init]] - - [[#early-init-variables][Early Init Variables]] - - [[#garbage-collector][Garbage Collector]] - - [[#early-frame-settings][Early Frame Settings]] - - [[#native-compilation][Native compilation]] - - [[#init][Init]] - - [[#compile-time][Compile Time]] -- [[#packages][Packages]] - - [[#init-package-manager-config][Init package manager config]] - - [[#packages-list--function][Packages list & function]] -- [[#configuration][Configuration]] - - [[#no-littering][No Littering]] - - [[#graphical][Graphical]] - - [[#mouse][Mouse]] - - [[#misc][Misc]] - - [[#dashboard][Dashboard]] - - [[#modeline][Modeline]] - - [[#diff-hl][Diff-hl]] - - [[#org-mode][Org-mode]] - - [[#completions][Completions]] - - [[#style][Style]] - - [[#minibuffer][Minibuffer]] - - [[#code-completion][Code completion]] - - [[#terms][Terms]] - - [[#eat][Eat]] - - [[#miscellaneous][Miscellaneous]] - - [[#defaults][Defaults]] - - [[#elcord][Elcord]] - - [[#undo-tree][Undo-Tree]] - - [[#projectile][Projectile]] - - [[#treemacs][Treemacs]] - - [[#magit][Magit]] - - [[#dirvish--dired][Dirvish / Dired]] - - [[#perspective][Perspective]] -- [[#programming][Programming]] - - [[#lsp][LSP]] - - [[#dap][DAP]] - - [[#nix][Nix]] - - [[#emacs-lisp][Emacs Lisp]] - - [[#cc][C/C++]] - - [[#python][Python]] - - [[#java][Java]] - - [[#other][Other]] -- [[#keybindings][Keybindings]] - - [[#keys][Keys]] - - [[#cua-overrides][CUA Overrides]] -- [[#snippets][Snippets]] - - [[#yasnippet-init][Yasnippet init]] -- [[#other-1][Other]] - - [[#update-config-script][Update config script]] - - [[#byte-compile][Byte compile]] -- [[#test][Test]] - -* Init Files -** Early Init -:PROPERTIES: -:header-args: :tangle (concat (org-entry-get nil "EMACS-DIR" t) "early-init.el") :comments link -:END: -Early init file, setting for GC and some paths. -Tangled file is [[./early-init.el][there]] -#+begin_src emacs-lisp :comments no - ;;; -*- lexical-binding: t; -*- -#+end_src -*** Early Init Variables -Setting early init variables -#+begin_src emacs-lisp - (defvar materus/init-early t - "Is emacs using materus early init") ; Var to ensure early-init loaded, not used anymore but keeping it anyway - (setq materus/init-early t) ; Probably useless - - (setenv "LSP_USE_PLISTS" "true") ; Make lsp-mode use plists - ;; - (setq c-default-style nil) ; Clear default styles for languages, will set them up later - (setq default-input-method nil) ; Disable default input method, I'm not using them anyway so far - (setq initial-major-mode 'fundamental-mode) ; Use fundamental mode in scratch buffer, speed up loading, not really important when emacs used as daemon - (setq auto-save-default nil) ; TODO: configure auto saves, disable for now - (setq backup-directory-alist - `((".*" . ,(concat user-emacs-directory "var/backups/")))) ; Set backup location - (setq auto-save-file-name-transforms - `((".*" ,(concat user-emacs-directory "var/recovery/") t))) ; Set auto-save location - (setq auto-save-list-file-prefix (concat user-emacs-directory "var/auto-save/sessions/")) ; Set auto-save-list location - (setq load-prefer-newer t) ; Prefer newer files to load - - ;; Packages - (setq package-enable-at-startup t) ; Ensure packages are enable since I'm either using built in package manager or nix - (setq package-quickstart nil) ; Disable package quickstart, it's annoying if forget to update it and doesn't speed up much - ;; - - (setq inhibit-compacting-font-caches t) ; Don't compact fonts - - (set-language-environment "UTF-8") ; Use UTF-8 - - (setq custom-file (concat user-emacs-directory "etc/custom.el")) ; Set custom file location, don't want clutter in main directory - (setq custom-theme-directory - (concat user-emacs-directory "/etc/materus/themes" )) ; Set custom themes location - - (setq ring-bell-function 'ignore) ; Disable bell - - - (defvar materus-emacs-gc-cons-threshold (* 64 1024 1024) - "The value of `gc-cons-threshold' after Emacs startup.") ; Define after init garbage collector threshold -#+end_src -*** Garbage Collector -Settings for garbage collector -#+begin_src emacs-lisp - (setq gc-cons-threshold most-positive-fixnum) ; Set `gc-cons-threshold' so it won't collectect during initialization - - (add-hook 'emacs-startup-hook - (lambda () - (setq gc-cons-threshold materus-emacs-gc-cons-threshold))) ; Set `gc-cons-threshold' to desired value after startup -#+end_src -*** Early Frame Settings -Early frame settings, maybe some could be move to normal init -#+begin_src emacs-lisp - (setq frame-inhibit-implied-resize t) - (setq frame-resize-pixelwise t) - (setq window-resize-pixelwise t) ; Allow pixelwise resizing of window and frame - - (unless (daemonp) - (add-to-list 'initial-frame-alist '(fullscreen . maximized))) ; Start first frame maximized if not running as daemon, daemon frame are set up later in config - (setq default-frame-alist ; Set default size for frames - '((width . 130) - (height . 40))) - - (advice-add #'tty-run-terminal-initialization :override #'ignore) - (add-hook 'window-setup-hook - (lambda () - (unless (display-graphic-p) - (advice-remove #'tty-run-terminal-initialization #'ignore) - (tty-run-terminal-initialization (selected-frame) nil t) - ))) -#+end_src -*** Native compilation -#+begin_src emacs-lisp - (setq native-comp-async-report-warnings-errors nil) ; Silence warnings - (setq native-comp-speed 3) ; Set native-comp speed - - (setq native-comp-jit-compilation t - ;;native-comp-deferred-compilation t - package-native-compile t) - - - ;; Setting up native-comp cache location - - (when (and (fboundp 'startup-redirect-eln-cache) - (fboundp 'native-comp-available-p) - (native-comp-available-p)) - (startup-redirect-eln-cache - (convert-standard-filename - (concat user-emacs-directory "var/eln-cache/")))) -#+end_src - -** Init -:PROPERTIES: -:header-args: :tangle (concat (org-entry-get nil "EMACS-DIR" t) "init.el") :comments link -:END: -Init File, tangled [[./init.el][there]] -Checking if using emacs from my nix config, loads config and custom.el -Sets up package.el -#+begin_src emacs-lisp :comments no - ;;; -*- lexical-binding: t; -*- -#+end_src - -#+begin_src emacs-lisp - (setq-default materus/use-nix-packages (require 'materus-config nil 'noerror)) - (require 'cl-lib) - (require 'package) - - (add-to-list 'load-path (concat user-emacs-directory "etc/materus/extra")) ; Extra load path for packages - (setq package-user-dir (concat user-emacs-directory "var/elpa/" emacs-version "/" )) ; Set elpa path for this emacs version, should use nix packages anyway so keeping just in case - (setq package-gnupghome-dir (concat user-emacs-directory "var/elpa/gnupg/" )) ; Set path to gnupg for elpa - (add-to-list 'package-archives - '("nongnu-devel" . "https://elpa.nongnu.org/nongnu-devel/")) ; Add nongnu-devel repo to package manager - (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) ; Add melpa repo to package manager - (customize-set-variable 'package-archive-priorities '(("gnu" . 99) - ("nongnu" . 80) - ("nongnu-devel" . 70) - ("melpa" . 0))) ; Repository priority - - (load (concat user-emacs-directory "etc/materus/nix-init") t) - (load (concat user-emacs-directory "etc/materus/emacs-config")) - (load custom-file t) -#+end_src -** Compile Time -Some defvar so native-compile wont complain -#+begin_src emacs-lisp :comments no - ;;; -*- lexical-binding: t; -*- -#+end_src -#+begin_src emacs-lisp - (eval-when-compile - (defvar doom-modeline-support-imenu nil) - (defvar display-time-24hr-format nil) - (defvar lsp-nix-nixd-formatting-command nil) - (defvar cua--cua-keys-keymap nil) - (declare-function lsp-stdio-connection "lsp-mode" (COMMAND &optional TEST-COMMAND)) - (declare-function make-lsp-client "lsp-mode") - (declare-function lsp-register-client "lsp-mode" ( CLIENT )) - ) -#+end_src -* Packages -Package manager config if not using nix. -After some testing default package manager works best for me. -** Init package manager config - -#+begin_src emacs-lisp - -#+end_src - -** Packages list & function -Packages to install -#+begin_src emacs-lisp - (defvar materus/packages - '( - use-package - elcord - dashboard - magit - git-timemachine - avy - vterm - direnv - projectile - clipetty - which-key - iedit - hideshowvis - evil - perspective - treemacs-evil - treemacs - treemacs-nerd-icons - treemacs-perspective - treemacs-icons-dired - treemacs-magit - treemacs-projectile - tree-edit - nerd-icons - nerd-icons-completion - minions - rainbow-delimiters - rainbow-mode - cmake-mode - lsp-mode - lsp-java - lsp-jedi - lsp-haskell - lsp-ui - lsp-treemacs - flycheck - gradle-mode - groovy-mode - kotlin-mode - dap-mode - d-mode - lua-mode - multiple-cursors - org - org-contrib - org-ql - org-rainbow-tags - org-roam - org-roam-ui - org-review - org-present - org-superstar - org-auto-tangle - visual-fill-column - csharp-mode - markdown-mode - json-mode - nix-mode - nixfmt - no-littering - right-click-context - dracula-theme - doom-themes - doom-modeline - popper - undo-tree - bash-completion - eldoc-box - yasnippet - async - request - nix-ts-mode - markdown-ts-mode - llvm-ts-mode - treesit-fold - treesit-auto - tree-sitter-langs - eat - vlf - edit-indirect - zones - sudo-edit - toc-org - empv - volatile-highlights - highlight - elfeed - elfeed-goodies - drag-stuff - dirvish - rg - shfmt - ;; Completions & Minibuffer - corfu - company - company-quickhelp - cape - embark - embark-consult - orderless - vertico - marginalia - ) - "A list of packages to ensure are installed at launch.") - - (defun materus/packages-installed-p () - (cl-loop for p in materus/packages - when (not (package-installed-p p)) do (cl-return nil) - finally (cl-return t))) - - (defun materus/install-packages () - (unless (materus/packages-installed-p) - (package-refresh-contents) - (dolist (p materus/packages) - (when (not (package-installed-p p)) - (package-install p))))) - (unless materus/use-nix-packages - (materus/install-packages)) -#+end_src - -* Configuration -General configurations of packages modes etc. -** No Littering -Set up no littering -#+begin_src emacs-lisp - (require 'recentf) - (use-package no-littering - :config - (setq package-quickstart-file - (concat user-emacs-directory "var/quickstart/package-quickstart-" emacs-version ".el" )) - (add-to-list 'recentf-exclude - (recentf-expand-file-name no-littering-var-directory)) - (add-to-list 'recentf-exclude - (recentf-expand-file-name no-littering-etc-directory))) -#+end_src -** Graphical -Graphical related settings. -*** Mouse -#+begin_src emacs-lisp - (context-menu-mode 1) - (setq mouse-wheel-follow-mouse 't) - (setq scroll-step 1) - (setq mouse-drag-and-drop-region t) - (xterm-mouse-mode 1) - (pixel-scroll-precision-mode 1) - (setq-default pixel-scroll-precision-large-scroll-height 10.0) -#+end_src -*** Misc -#+begin_src emacs-lisp - (when (daemonp) - (add-hook 'after-make-frame-functions - (lambda (frame) (when (= (length (frame-list)) 2) - (set-frame-parameter frame 'fullscreen 'maximized)) - (select-frame-set-input-focus frame) ))) - - - (when (display-graphic-p) - (set-frame-font "Hack Nerd Font" nil t) - ) - - (setq-default display-line-numbers-width 3) - (setq-default display-line-numbers-widen t) - (setq truncate-string-ellipsis "…") - - (global-tab-line-mode 1) - - (tool-bar-mode -1) - (setq window-divider-default-bottom-width 1) - (setq window-divider-default-right-width 1) - (window-divider-mode 1) - - (setq-default cursor-type '(bar . 2)) - ;; Rainbow mode - (use-package rainbow-mode - :hook - ((org-mode . rainbow-mode) - (prog-mode . rainbow-mode))) - - ;; Delimiters - (use-package rainbow-delimiters :hook - (prog-mode . rainbow-delimiters-mode) - :config - (set-face-attribute 'rainbow-delimiters-depth-1-face nil :foreground "#FFFFFF") - (set-face-attribute 'rainbow-delimiters-depth-2-face nil :foreground "#FFFF00") - (set-face-attribute 'rainbow-delimiters-depth-5-face nil :foreground "#6A5ACD") - (set-face-attribute 'rainbow-delimiters-unmatched-face nil :foreground "#FF0000")) - ;; Nerd Icons - (use-package nerd-icons) - (use-package nerd-icons-completion - :after (marginalia) - :config - (nerd-icons-completion-mode 1) - (add-hook 'marginalia-mode-hook #'nerd-icons-completion-marginalia-setup)) - - ;; Theme - (use-package dracula-theme :config - (if (daemonp) - (add-hook 'after-make-frame-functions - (lambda (frame) - (with-selected-frame frame (load-theme 'dracula t)))) - (load-theme 'dracula t))) - - (defun startup-screen-advice (orig-fun &rest args) - (when (= (seq-count #'buffer-file-name (buffer-list)) 0) - (apply orig-fun args))) - (advice-add 'display-startup-screen :around #'startup-screen-advice) ; Hide startup screen if started with file -#+end_src -*** Dashboard -#+begin_src emacs-lisp - (use-package dashboard - :after (nerd-icons projectile) - :config - (setq dashboard-center-content t) - (setq dashboard-display-icons-p t) - (setq dashboard-icon-type 'nerd-icons) - (setq dashboard-projects-backend 'projectile) - (setq dashboard-items '((recents . 5) - (bookmarks . 5) - (projects . 5) - (agenda . 5) - (registers . 5))) - (dashboard-setup-startup-hook) - (when (daemonp) - (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*"))) ; Show dashboard when emacs is running as daemon - ) - ) -#+end_src -*** Modeline -#+begin_src emacs-lisp - (use-package doom-modeline - :init (setq doom-modeline-support-imenu t) - :hook (after-init . doom-modeline-mode) - :config - (setq doom-modeline-icon t) - (setq doom-modeline-project-detection 'auto) - (setq doom-modeline-height 20) - (setq doom-modeline-enable-word-count t) - (setq doom-modeline-minor-modes t) - (setq display-time-24hr-format t) - (display-time-mode 1) - (column-number-mode 1) - (line-number-mode 1)) - - (use-package minions - :hook (after-init . minions-mode)) -#+end_src -*** Diff-hl -#+begin_src emacs-lisp - (use-package diff-hl - :config - (setq diff-hl-side 'right) - (global-diff-hl-mode 1) - (diff-hl-margin-mode 1) - (diff-hl-flydiff-mode 1) - (global-diff-hl-show-hunk-mouse-mode 1)) - -#+end_src -** Org-mode -Org mode settings - -#+begin_SRC emacs-lisp - (use-package org - :mode (("\\.org$" . org-mode)) - :hook - ((org-mode . org-indent-mode) - (org-mode . display-line-numbers-mode) - ) - :config - (require 'org-mouse) - (require 'org-tempo) - (setq org-src-window-setup 'current-window) - (add-hook 'org-mode-hook (lambda () - (setq-local - electric-pair-inhibit-predicate - `(lambda (c) - (if - (char-equal c ?<) t (,electric-pair-inhibit-predicate c))))))) - - (use-package org-modern - :after (org) - :hook - (org-indent-mode . org-modern-mode) - (org-agenda-finalize . org-modern-agenda) - :config - (setq org-modern-block-name '("▼ " . "▲ "))) - (use-package org-auto-tangle - :after (org) - :hook (org-mode . org-auto-tangle-mode) - ) - (use-package toc-org - :after (org) - :hook - ((org-mode . toc-org-mode ) - (markdown-mode . toc-org-mode))) - (setq org-latex-pdf-process '("latexmk -xelatex -quiet -shell-escape -f -output-directory=%o %f")) - (org-babel-do-load-languages - 'org-babel-load-languages - '((latex . t) - (emacs-lisp . t) - (shell . t) - (css . t) - (C . t) - (calc . t) - (awk . t) - (sql . t) - (sqlite . t))) - -#+end_SRC -** Completions -*** Style -#+begin_src emacs-lisp - (use-package orderless - :init - ;; Tune the global completion style settings to your liking! - ;; This affects the minibuffer and non-lsp completion at point. - (setq completion-styles '(basic partial-completion orderless) - completion-category-defaults nil - completion-category-overrides nil)) -#+end_src -*** Minibuffer -#+begin_src emacs-lisp - (use-package consult) - (use-package marginalia) - - (use-package which-key - :config - (which-key-mode 1)) - - (use-package vertico - :after (consult marginalia) - :config - (setq completion-in-region-function - (lambda (&rest args) - (apply (if vertico-mode - #'consult-completion-in-region - #'completion--in-region) - args))) - (vertico-mode 1) - (marginalia-mode 1)) - (use-package vertico-mouse - :config - (vertico-mouse-mode 1)) -#+end_src -*** Code completion -#+begin_src emacs-lisp - - (use-package cape) - - (use-package corfu - ;; Optional customizations - :custom - (corfu-cycle nil) ;; Enable cycling for `corfu-next/previous' - (corfu-auto t) ;; Enable auto completion - (global-corfu-minibuffer nil) - ;; (corfu-quit-at-boundary nil) ;; Never quit at completion boundary - ;; (corfu-quit-no-match nil) ;; Never quit, even if there is no match - (corfu-preview-current nil) ;; Disable current candidate preview - ;; (corfu-preselect 'prompt) ;; Preselect the prompt - ;; (corfu-on-exact-match nil) ;; Configure handling of exact matches - - ;; Enable Corfu only for certain modes. See also `global-corfu-modes'. - ;; :hook ((prog-mode . corfu-mode) - ;; (shell-mode . corfu-mode) - ;; (eshell-mode . corfu-mode)) - - ;; Recommended: Enable Corfu globally. This is recommended since Dabbrev can - ;; be used globally (M-/). See also the customization variable - ;; `global-corfu-modes' to exclude certain modes. - :init - (global-corfu-mode 1) - (corfu-popupinfo-mode 1) - (corfu-history-mode 1)) - - - (use-package corfu-terminal - :after (corfu) - :config - (when (or (daemonp) (not (display-graphic-p))) - (corfu-terminal-mode))) - - (use-package corfu-mouse - :after (corfu) - :config - (corfu-mouse-mode) - (keymap-set corfu--mouse-ignore-map "" 'ignore) - (keymap-set corfu-map "" 'ignore)) - - (use-package kind-icon - :config - (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)) - - (global-completion-preview-mode 1) - - #+end_src -** Terms -*** Eat -#+begin_src emacs-lisp - (use-package eat) - (defvar cua--eat-semi-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT semi-char mode CUA keymap") - (defvar cua--eat-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT char mode CUA keymap") - -#+end_src -** Miscellaneous -Other configs -*** Defaults -#+begin_src emacs-lisp - (setq-default buffer-file-coding-system 'utf-8-unix) - (setq text-mode-ispell-word-completion nil) ; Disable ispell -#+end_src -*** Elcord -#+begin_src emacs-lisp - (defun materus/elcord-toggle (&optional _frame) - "Toggle elcord based on visible frames" - (if (> (length (frame-list)) 1) - (elcord-mode 1) - (elcord-mode -1)) - ) - (use-package elcord - :config - (unless (daemonp) (elcord-mode 1)) - (add-hook 'after-delete-frame-functions 'materus/elcord-toggle) - (add-hook 'server-after-make-frame-hook 'materus/elcord-toggle)) -#+end_src -*** Undo-Tree -#+begin_src emacs-lisp - (use-package undo-tree - :config - (global-undo-tree-mode 1) - (defvar materus/undo-tree-dir (concat user-emacs-directory "var/undo-tree/")) - (unless (file-exists-p materus/undo-tree-dir) - (make-directory materus/undo-tree-dir t)) - (setq undo-tree-visualizer-diff t) - (setq undo-tree-history-directory-alist `(("." . ,materus/undo-tree-dir ))) - (setq undo-tree-visualizer-timestamps t) - ) -#+end_src -*** Projectile -#+begin_src emacs-lisp - (use-package projectile - :config (projectile-mode 1)) -#+end_src -*** Treemacs -#+begin_src emacs-lisp - (use-package treemacs) - (use-package treemacs-projectile - :after (projectile treemacs)) - (use-package treemacs-nerd-icons - :after (nerd-icons treemacs)) - (use-package treemacs-perspective - :after (treemacs)) - (use-package treemacs-mouse-interface - :after (treemacs)) -#+end_src -*** Magit -#+begin_src emacs-lisp - (use-package magit) -#+end_src -*** Dirvish / Dired -#+begin_src emacs-lisp - (setq dired-mouse-drag-files t) - (use-package dirvish - :config - (dirvish-override-dired-mode 1) - (setq dirvish-attributes - '(vc-state - subtree-state - nerd-icons - collapse - git-msg - file-time - file-size))) -#+end_src -*** Perspective -#+begin_src emacs-lisp - (require 'perspective) - (setq persp-mode-prefix-key (kbd "C-c M-p")) - (setq persp-modestring-short t) - (persp-mode 1) -#+end_src - -* Programming -** LSP -#+begin_src emacs-lisp - (use-package lsp-mode - :custom - (lsp-completion-provider :none) ;; we use Corfu! - :config - (setq lsp-keep-workspace-alive nil) - (require 'lsp-ui) - :init - (defun materus/orderless-dispatch-flex-first (_pattern index _total) - (and (eq index 0) 'orderless-flex)) - - (defun materus/lsp-mode-setup-completion () - (setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults)) - '(orderless)) - ;; Optionally configure the first word as flex filtered. - (add-hook 'orderless-style-dispatchers #'materus/orderless-dispatch-flex-first nil 'local) - ;; Optionally configure the cape-capf-buster. - (setq-local completion-at-point-functions (list (cape-capf-buster #'lsp-completion-at-point)))) - - :hook - (lsp-completion-mode . materus/lsp-mode-setup-completion)) - - - - - (setq read-process-output-max (* 1024 1024 3)) - - (defun lsp-booster--advice-json-parse (old-fn &rest args) - "Try to parse bytecode instead of json." - (or - (when (equal (following-char) ?#) - (let ((bytecode (read (current-buffer)))) - (when (byte-code-function-p bytecode) - (funcall bytecode)))) - (apply old-fn args))) - (advice-add (if (progn (require 'json) - (fboundp 'json-parse-buffer)) - 'json-parse-buffer - 'json-read) - :around - #'lsp-booster--advice-json-parse) - - (defun lsp-booster--advice-final-command (old-fn cmd &optional test?) - "Prepend emacs-lsp-booster command to lsp CMD." - (let ((orig-result (funcall old-fn cmd test?))) - (if (and (not test?) ; for check lsp-server-present? - (not (file-remote-p default-directory)) ; see lsp-resolve-final-command, it would add extra shell wrapper - lsp-use-plists - (not (functionp 'json-rpc-connection)) ; native json-rpc - (executable-find "emacs-lsp-booster")) - (progn - (when-let* ((command-from-exec-path (executable-find (car orig-result)))) ; resolve command from exec-path (in case not found in $PATH) - (setcar orig-result command-from-exec-path)) - (message "Using emacs-lsp-booster for %s!" orig-result) - (cons "emacs-lsp-booster" orig-result)) - orig-result))) - (advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command) -#+end_src -** DAP -#+begin_src emacs-lisp - (use-package dap-mode - :config - (require 'dap-lldb) - (require 'dap-gdb-lldb) - (require 'dap-cpptools) - (setq dap-gdb-lldb-extension-version "0.27.0") - (dap-auto-configure-mode 1) - ) - -#+end_src -** Nix -#+begin_src emacs-lisp - (use-package nix-mode) - (use-package nix-ts-mode) - (use-package nixfmt) - (use-package lsp-nix) - (with-eval-after-load 'lsp-mode - (add-to-list 'lsp-disabled-clients '(nix-mode . nix-nil)) - (setq lsp-nix-nixd-server-path "nixd" - lsp-nix-nixd-formatting-command [ "nixfmt" ] - lsp-nix-nixd-nixpkgs-expr "import { }")) - - (setq lsp-nix-nixd-formatting-command "nixfmt") - (add-hook 'nix-mode-hook 'lsp-deferred) - (add-hook 'nix-mode-hook 'display-line-numbers-mode) - - (add-hook 'nix-ts-mode-hook 'lsp-deferred) - (add-hook 'nix-ts-mode-hook 'display-line-numbers-mode) - - (when (treesit-language-available-p 'nix) (push '(nix-mode . nix-ts-mode) major-mode-remap-alist)) -#+end_src -** Emacs Lisp -#+begin_src emacs-lisp - (add-hook 'emacs-lisp-mode-hook 'display-line-numbers-mode) -#+end_src -** C/C++ -#+begin_src emacs-lisp - (use-package lsp-clangd) - (setq lsp-clients-clangd-args '("--fallback-style=microsoft")) - - (add-hook 'c-mode-hook 'lsp-deferred) - (add-hook 'c-mode-hook 'display-line-numbers-mode) - (add-hook 'c-ts-mode-hook 'lsp-deferred) - (add-hook 'c-ts-mode-hook 'display-line-numbers-mode) - - (add-hook 'c++-mode-hook 'lsp-deferred) - (add-hook 'c++-mode-hook 'display-line-numbers-mode) - (add-hook 'c++-ts-mode-hook 'lsp-deferred) - (add-hook 'c++-ts-mode-hook 'display-line-numbers-mode) - (when (treesit-language-available-p 'c) (push '(c-mode . c-ts-mode) major-mode-remap-alist)) - (when (treesit-language-available-p 'cpp) (push '(c++-mode . c++-ts-mode) major-mode-remap-alist)) - - (add-to-list 'c-default-style '(c-mode . "bsd")) - (add-to-list 'c-default-style '(c++-mode . "bsd")) - (add-to-list 'c-default-style '(c-ts-mode . "bsd")) - (add-to-list 'c-default-style '(c++-ts-mode . "bsd")) -#+end_src -** Python -#+begin_src emacs-lisp - (use-package lsp-pyright) - (setq lsp-pyright-langserver-command "pyright") - (add-hook 'python-mode-hook 'lsp-deferred) - (add-hook 'python-ts-mode-hook 'lsp-deferred) - (when (treesit-language-available-p 'python) (push '(python-mode . python-ts-mode) major-mode-remap-alist)) -#+end_src -** Java -#+begin_src emacs-lisp - (use-package lsp-java) - (setq lsp-java-vmargs '("-XX:+UseParallelGC" "-XX:GCTimeRatio=4" "-XX:AdaptiveSizePolicyWeight=90" "-Dsun.zip.disableMemoryMapping=true" "-Xmx2G" "-Xms100m")) - (add-hook 'java-mode-hook (lambda () (when (getenv "JDTLS_PATH") (setq lsp-java-server-install-dir (getenv "JDTLS_PATH"))))) - (add-hook 'java-mode-hook 'lsp-deferred) - (add-hook 'java-mode-hook 'display-line-numbers-mode) - - (add-hook 'java-ts-mode-hook (lambda () (when (getenv "JDTLS_PATH") (setq lsp-java-server-install-dir (getenv "JDTLS_PATH"))))) - (add-hook 'java-ts-mode-hook 'lsp-deferred) - (add-hook 'java-ts-mode-hook 'display-line-numbers-mode) - - (when (treesit-language-available-p 'java) (push '(java-mode . java-ts-mode) major-mode-remap-alist)) - - (add-to-list 'c-default-style '(java-mode . "java")) - (add-to-list 'c-default-style '(java-ts-mode . "java")) -#+end_src - -** Other -#+begin_src emacs-lisp - (add-to-list 'c-default-style '(awk-mode . "awk")) - (add-to-list 'c-default-style '(other . "bsd")) - - - - - (setq-default c-basic-offset 4) - (setq-default c-indent-level 4) - - (setq-default c-ts-mode-indent-offset 4) - (setq-default c-ts-mode-indent-style 'bsd) - - (setq-default c-hungry-delete-key t) - - (electric-pair-mode 1) - (electric-indent-mode -1) - (setq-default tab-width 4) - (setq-default indent-tabs-mode nil) - - (add-hook 'prog-mode-hook 'display-line-numbers-mode) - (add-hook 'prog-mode-hook 'electric-indent-local-mode) -#+end_src -* Keybindings -** Keys - -#+begin_src emacs-lisp - (use-package cua-base) - - ;;; Keybinds - ;; Eat Term - (define-key cua--eat-semi-char-keymap (kbd "C-v") #'eat-yank) - (define-key cua--eat-char-keymap (kbd "C-S-v") #'eat-yank) - (define-key cua--eat-semi-char-keymap (kbd "C-c") #'copy-region-as-kill) - (define-key cua--eat-char-keymap (kbd "C-S-c") #'copy-region-as-kill) - (define-key eat-mode-map (kbd "C-") #'eat-self-input) - (define-key eat-mode-map (kbd "C-") #'eat-self-input) - ;; perspective - (define-key global-map (kbd "C-x C-b") #'persp-list-buffers) - (define-key global-map (kbd "C-x C-B") #'list-buffers) - (define-key global-map (kbd "C-x b") #'persp-switch-to-buffer*) - (define-key global-map (kbd "C-x B") #'consult-buffer) - ;; CUA-like global - (define-key global-map (kbd "C-s") 'save-buffer) - (define-key global-map (kbd "C-r") 'query-replace) - (define-key global-map (kbd "C-S-r") 'replace-string) - (define-key global-map (kbd "M-r") 'query-replace-regexp) - (define-key global-map (kbd "M-S-r") 'replace-regexp) - (define-key global-map (kbd "C-a") 'mark-whole-buffer) - (define-key global-map (kbd "C-f") 'isearch-forward) - (define-key global-map (kbd "C-S-f") 'isearch-backward) - (define-key isearch-mode-map (kbd "C-f") 'isearch-repeat-forward) - (define-key isearch-mode-map (kbd "C-S-f") 'isearch-repeat-backward) - (define-key global-map (kbd "M-f") 'consult-ripgrep) - (define-key global-map (kbd "C-M-f") 'consult-find) - ;; CUA - (define-key cua--cua-keys-keymap (kbd "C-z") 'undo-tree-undo) - (define-key cua--cua-keys-keymap (kbd "C-y") 'undo-tree-redo) - (define-key cua-global-keymap (kbd "C-SPC") 'completion-at-point) - (define-key cua-global-keymap (kbd "C-M-SPC") 'cua-set-mark) - (cua-mode 1) - ;; TAB - (define-key global-map (kbd "C-") #'indent-rigidly-left) - (define-key global-map (kbd "C-") #'indent-rigidly-right) - ;; Dashboard - (define-key dashboard-mode-map (kbd "C-r") #'dashboard-refresh-buffer) - - ;; Hyper - (define-key key-translation-map (kbd "") 'event-apply-hyper-modifier ) - (define-key key-translation-map (kbd "") 'event-apply-hyper-modifier ) - (define-key key-translation-map (kbd "∇") 'event-apply-hyper-modifier ) - ;; Treemacs - (define-key global-map (kbd "C-H-t") 'treemacs) - - ;; Unbind - (define-key isearch-mode-map (kbd "C-s") nil) - (define-key isearch-mode-map (kbd "C-r") nil) -#+end_src - -** CUA Overrides - -#+begin_src emacs-lisp -(defun cua--eat-semi-char-override-keymap () - (setq-local cua--keymap-alist (copy-tree cua--keymap-alist)) - (setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-semi-char-keymap)) -(defun cua--eat-char-override-keymap () - (setq-local cua--keymap-alist (copy-tree cua--keymap-alist)) - (setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-char-keymap)) - -(advice-add 'eat-semi-char-mode :after #'cua--eat-semi-char-override-keymap) -(advice-add 'eat-char-mode :after #'cua--eat-char-override-keymap) -;(add-hook 'eat-char-mode-hook #'cua--eat-char-override-keymap) -#+end_src - -* Snippets -** Yasnippet init - -#+begin_src emacs-lisp - (use-package yasnippet - :config (yas-global-mode 1)) -#+end_src - -* Other -** Update config script -#+begin_src emacs-lisp - (defun materus/sync-config () - "Function to sync config from MATERUS_CONFIG_DIR to emacs folder" - (if (getenv "MATERUS_CONFIG_DIR") - (progn (copy-directory (concat (getenv "MATERUS_CONFIG_DIR") "extraFiles/config/emacs/") - user-emacs-directory t t t) t) - (progn (message "Can't use if MATERUS_CONFIG_DIR is not set!") nil))) - (defun materus/compare-file-time (file1 file2) - "Returns t when file1 is newer than file2" - (time-less-p - (nth 5 (file-attributes file2)) - (nth 5 (file-attributes file1)) - )) - (defun materus/compile-if-needed (file) - (unless (and (file-exists-p (concat user-emacs-directory file "c")) - (materus/compare-file-time (concat user-emacs-directory file "c") - (concat user-emacs-directory file))) - (byte-compile-file (concat user-emacs-directory file))) - ) - (defun materus/compile-config-if-needed () - (materus/compile-if-needed "early-init.el") - (materus/compile-if-needed "init.el") - (materus/compile-if-needed "etc/materus/emacs-config.el")) - (defun materus/update-config () - "Will sync and compile config" - (interactive) - (when (materus/sync-config) (materus/compile-config-if-needed) (byte-recompile-directory (concat user-emacs-directory "etc/materus/extra") 0 t))) -#+end_src - -** Byte compile -Byte compile files. -#+begin_src emacs-lisp - (materus/compile-config-if-needed) -#+end_src -* Test -Just for testing some code -#+begin_src emacs-lisp - ;;; (global-set-key (kbd "C-∇") (kbd "C-H")) - ;;; (global-set-key (kbd "H-∇") (lambda () (interactive) (insert-char #x2207))) - ;;; (buffer-text-pixel-size) - ;;; (set-window-vscroll nil 960 t t) - - ;;; (set-window-margins (selected-window) 0 0) - - ;;; (buffer-local-value 'var (get-buffer "your-buffer-name")) - - ;;; (setq completion-styles '(orderless basic) - ;;; completion-category-defaults nil - ;;; completion-category-overrides '((file (styles partial-completion)))) -#+end_src diff --git a/private/check-encryption b/private/check-encryption new file mode 100644 index 0000000000000000000000000000000000000000..093f84b1beabe9527bf495dcf9c70ede0e5a32c3 GIT binary patch literal 31 ncmZQ@_Y83kiVO&05b+Lqc3#UM$@~ZFidbW|_BDHj<~#)eoq-FG literal 0 HcmV?d00001