This commit is contained in:
Mateusz Słodkowicz 2025-05-18 08:49:34 +02:00
parent a0b40b81c4
commit c3cd49a38c
Signed by: materus
GPG Key ID: 28D140BCA60B4FD1
16 changed files with 3514 additions and 1965 deletions

View File

@ -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]].

File diff suppressed because it is too large Load Diff

View File

@ -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)))

666
config/emacs/init.el Normal file
View File

@ -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 "<mouse-movement>" 'ignore)
(keymap-set corfu-map "<mouse-movement>" '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-<iso-lefttab>") #'indent-rigidly-left)
(define-key global-map (kbd "C-<tab>") #'indent-rigidly-right)
;; Hyper
(define-key key-translation-map (kbd "<XF86Calculator>") 'event-apply-hyper-modifier )
(define-key key-translation-map (kbd "<Calculator>") '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-<right>") #'eat-self-input)
(define-key eat-mode-map (kbd "C-<left>") #'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)))

View File

@ -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

View File

@ -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 "<mouse-movement>" 'ignore)
(keymap-set corfu-map "<mouse-movement>" '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 <nixpkgs> { }"))
(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-<right>") #'eat-self-input)
(define-key eat-mode-map (kbd "C-<left>") #'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-<iso-lefttab>") #'indent-rigidly-left)
(define-key global-map (kbd "C-<tab>") #'indent-rigidly-right)
;; Dashboard
(define-key dashboard-mode-map (kbd "C-r") #'dashboard-refresh-buffer)
;; Hyper
(define-key key-translation-map (kbd "<XF86Calculator>") 'event-apply-hyper-modifier )
(define-key key-translation-map (kbd "<Calculator>") '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

View File

@ -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

1050
flake.lock Normal file

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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";

211
nix/common.nix Normal file
View File

@ -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
];
}

30
nix/default.nix Normal file
View File

@ -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
];
};
};
}

262
nix/hosts/materusPC.nix Normal file
View File

@ -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
];
}

View File

@ -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

File diff suppressed because it is too large Load Diff

BIN
private/check-encryption Normal file

Binary file not shown.