mirror of
https://github.com/materusPL/nixos-config
synced 2025-07-08 07:34:25 +02:00
Compare commits
8 Commits
a0b40b81c4
...
398673494c
Author | SHA1 | Date | |
---|---|---|---|
398673494c | |||
9a37d9eb2f | |||
0e60e2517f | |||
f4a22eb9a6 | |||
ca9e1f520a | |||
80af4584e6 | |||
f2a598668b | |||
c3cd49a38c |
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1,2 +1,3 @@
|
|||||||
**/private/** filter=git-crypt diff=git-crypt
|
**/private/** filter=git-crypt diff=git-crypt
|
||||||
private/** filter=git-crypt diff=git-crypt
|
private/** filter=git-crypt diff=git-crypt
|
||||||
|
*-private.nix filter=git-crypt diff=git-crypt
|
@ -1,10 +1,9 @@
|
|||||||
#+TITLE: Lemon
|
#+TITLE: Materus Komplete Konfig
|
||||||
#+DESCRIPTION: NixOS config and dotfiles
|
#+DESCRIPTION: NixOS config and dotfiles
|
||||||
#+AUTHOR: Mateusz "materus" Słodkowicz
|
#+AUTHOR: Mateusz "materus" Słodkowicz
|
||||||
#+OPTIONS: \n:t
|
#+OPTIONS: \n:t
|
||||||
#+LANGUAGE: en
|
#+LANGUAGE: en
|
||||||
|
|
||||||
Lemon is mine collection of NixOS config, dotfiles and some scripts.
|
This is collection of all mine systems config. NixOS, dotfiles, VFIO etc.
|
||||||
Most of my config is tangled from Emacs Org files located [[./org-conf/][there]].
|
|
||||||
Part of it is encrypted with [[https://github.com/AGWA/git-crypt][git-crypt]].
|
Part of it is encrypted with [[https://github.com/AGWA/git-crypt][git-crypt]].
|
||||||
|
|
||||||
|
1154
config/emacs/EMACS-CONFIG.org
Normal file
1154
config/emacs/EMACS-CONFIG.org
Normal file
File diff suppressed because it is too large
Load Diff
87
config/emacs/early-init.el
Normal file
87
config/emacs/early-init.el
Normal 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
666
config/emacs/init.el
Normal 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)))
|
@ -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
|
|
@ -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
|
|
@ -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
generated
Normal file
1050
flake.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
48
flake.nix
48
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 = {
|
inputs = {
|
||||||
private = {
|
|
||||||
type = "github";
|
|
||||||
owner = "materusPL";
|
|
||||||
repo = "Nixerus";
|
|
||||||
ref = "mock";
|
|
||||||
};
|
|
||||||
|
|
||||||
nixpkgs = {
|
nixpkgs = {
|
||||||
type = "github";
|
type = "github";
|
||||||
owner = "NixOS";
|
owner = "NixOS";
|
||||||
@ -16,49 +8,35 @@
|
|||||||
ref = "nixos-unstable";
|
ref = "nixos-unstable";
|
||||||
};
|
};
|
||||||
|
|
||||||
configInputs = {
|
|
||||||
type = "github";
|
|
||||||
owner = "materusPL";
|
|
||||||
repo = "nixos-config";
|
|
||||||
ref = "inputs";
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
nixpkgs-stable = {
|
nixpkgs-stable = {
|
||||||
type = "github";
|
type = "github";
|
||||||
owner = "NixOS";
|
owner = "NixOS";
|
||||||
repo = "nixpkgs";
|
repo = "nixpkgs";
|
||||||
ref = "nixos-24.11";
|
ref = "nixos-25.05";
|
||||||
};
|
};
|
||||||
|
|
||||||
hm-stable = {
|
hm-stable = {
|
||||||
type = "github";
|
type = "github";
|
||||||
owner = "nix-community";
|
owner = "nix-community";
|
||||||
repo = "home-manager";
|
repo = "home-manager";
|
||||||
ref = "release-24.11";
|
ref = "release-25.05";
|
||||||
inputs.nixpkgs.follows = "nixpkgs-stable";
|
inputs.nixpkgs.follows = "nixpkgs-stable";
|
||||||
};
|
};
|
||||||
|
|
||||||
configInputs-stable = {
|
config-unstable = {
|
||||||
type = "github";
|
url = "path:./nix/subflake";
|
||||||
owner = "materusPL";
|
inputs = {
|
||||||
repo = "nixos-config";
|
nixpkgs.follows = "nixpkgs";
|
||||||
ref = "inputs";
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config-stable = {
|
||||||
|
url = "path:./nix/subflake";
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.follows = "nixpkgs-stable";
|
nixpkgs.follows = "nixpkgs-stable";
|
||||||
home-manager.follows = "hm-stable";
|
home-manager.follows = "hm-stable";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
outputs =
|
outputs = inputs: import (builtins.toString ./nix) { inherit inputs; configRootPath = (builtins.toString ./.); };
|
||||||
let
|
|
||||||
rootPath = builtins.toString ./.;
|
|
||||||
in
|
|
||||||
inputs@{ self, ... }:
|
|
||||||
{
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
# Main Flake:1 ends here
|
|
||||||
|
@ -1,29 +1,25 @@
|
|||||||
:PROPERTIES:
|
|
||||||
:NIX-DIR: ../nix/
|
|
||||||
:END:
|
|
||||||
#+TITLE: Nix Flakes Config
|
#+TITLE: Nix Flakes Config
|
||||||
#+AUTHOR: materus
|
#+AUTHOR: materus
|
||||||
#+DESCRIPTION: Nix flake declarations and some configuration maker functions.
|
#+DESCRIPTION: Nix flake declarations
|
||||||
#+STARTUP: overview
|
#+STARTUP: overview
|
||||||
#+PROPERTY: header-args :tangle (concat (org-entry-get nil "NIX-DIR" t) "default.nix") :comments link
|
|
||||||
#+OPTIONS: \n:t
|
#+OPTIONS: \n:t
|
||||||
#+auto_tangle: t
|
#+auto_tangle: t
|
||||||
|
|
||||||
|
|
||||||
* Flakes
|
* Flakes
|
||||||
** Main Flake
|
** Main Flake
|
||||||
Flake of entire repo. [[../flake.nix][link]]
|
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
|
#+name: version
|
||||||
{
|
#+begin_src txt :noweb-ref version
|
||||||
description = "Lemon flake: NixOS and home manager configs";
|
25.05
|
||||||
inputs = {
|
#+end_src
|
||||||
private = {
|
|
||||||
type = "github";
|
|
||||||
owner = "materusPL";
|
|
||||||
repo = "Nixerus";
|
|
||||||
ref = "mock";
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
#+name: main_flake
|
||||||
|
#+begin_src nix header-args :tangle ./flake.nix :noweb yes
|
||||||
|
{
|
||||||
|
description = "MKK flake: NixOS and home manager configs";
|
||||||
|
inputs = {
|
||||||
nixpkgs = {
|
nixpkgs = {
|
||||||
type = "github";
|
type = "github";
|
||||||
owner = "NixOS";
|
owner = "NixOS";
|
||||||
@ -31,55 +27,44 @@ Flake of entire repo. [[../flake.nix][link]]
|
|||||||
ref = "nixos-unstable";
|
ref = "nixos-unstable";
|
||||||
};
|
};
|
||||||
|
|
||||||
configInputs = {
|
|
||||||
type = "github";
|
|
||||||
owner = "materusPL";
|
|
||||||
repo = "nixos-config";
|
|
||||||
ref = "inputs";
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
nixpkgs-stable = {
|
nixpkgs-stable = {
|
||||||
type = "github";
|
type = "github";
|
||||||
owner = "NixOS";
|
owner = "NixOS";
|
||||||
repo = "nixpkgs";
|
repo = "nixpkgs";
|
||||||
ref = "nixos-24.11";
|
ref = "nixos-<<version>>";
|
||||||
};
|
};
|
||||||
|
|
||||||
hm-stable = {
|
hm-stable = {
|
||||||
type = "github";
|
type = "github";
|
||||||
owner = "nix-community";
|
owner = "nix-community";
|
||||||
repo = "home-manager";
|
repo = "home-manager";
|
||||||
ref = "release-24.11";
|
ref = "release-<<version>>";
|
||||||
inputs.nixpkgs.follows = "nixpkgs-stable";
|
inputs.nixpkgs.follows = "nixpkgs-stable";
|
||||||
};
|
};
|
||||||
|
|
||||||
configInputs-stable = {
|
config-unstable = {
|
||||||
type = "github";
|
url = "path:./nix/subflake";
|
||||||
owner = "materusPL";
|
inputs = {
|
||||||
repo = "nixos-config";
|
nixpkgs.follows = "nixpkgs";
|
||||||
ref = "inputs";
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config-stable = {
|
||||||
|
url = "path:./nix/subflake";
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.follows = "nixpkgs-stable";
|
nixpkgs.follows = "nixpkgs-stable";
|
||||||
home-manager.follows = "hm-stable";
|
home-manager.follows = "hm-stable";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
outputs =
|
outputs = inputs: import (builtins.toString ./nix) { inherit inputs; configRootPath = (builtins.toString ./.); };
|
||||||
let
|
|
||||||
rootPath = builtins.toString ./.;
|
|
||||||
in
|
|
||||||
inputs@{ self, ... }:
|
|
||||||
{
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
#+end_src
|
#+end_src
|
||||||
** Subflake
|
** Subflake
|
||||||
Subflake with dependencies, use so there's no need for duplication for stable and unstable. [[../nix/subflake/flake.nix][link]]
|
Subflake with dependencies, used 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
|
|
||||||
|
#+name: subflake
|
||||||
|
#+begin_src nix header-args :tangle ./nix/subflake/flake.nix
|
||||||
{
|
{
|
||||||
description = "Subflake of Lemon repository, contains dependencies";
|
description = "Subflake of Lemon repository, contains dependencies";
|
||||||
inputs = {
|
inputs = {
|
||||||
@ -131,7 +116,6 @@ Subflake with dependencies, use so there's no need for duplication for stable an
|
|||||||
ref = "master";
|
ref = "master";
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.follows = "nixpkgs";
|
nixpkgs.follows = "nixpkgs";
|
||||||
flake-utils.follows = "flake-utils";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -196,6 +180,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 = {
|
nur = {
|
||||||
type = "github";
|
type = "github";
|
||||||
owner = "nix-community";
|
owner = "nix-community";
|
79
nix/common-os.nix
Normal file
79
nix/common-os.nix
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
# * Common OS
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
mkkArg,
|
||||||
|
config,
|
||||||
|
konfig,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
mkkArg.current.sops-nix.nixosModules.sops
|
||||||
|
# * Config
|
||||||
|
# ** System
|
||||||
|
# *** Fonts
|
||||||
|
{
|
||||||
|
options.mkk.os.fonts.enable = konfig.nixerusPkgs.lib.mkBoolOpt false "Enable MKK font settings for OS";
|
||||||
|
|
||||||
|
config = lib.mkIf config.mkk.os.fonts.enable {
|
||||||
|
|
||||||
|
fonts.packages = konfig.vars.packageLists.fonts;
|
||||||
|
fonts.enableDefaultPackages = lib.mkDefault true;
|
||||||
|
|
||||||
|
fonts.fontconfig.enable = lib.mkDefault true;
|
||||||
|
fonts.fontconfig.cache32Bit = lib.mkDefault true;
|
||||||
|
|
||||||
|
fonts.fontconfig.defaultFonts.sansSerif = [ "Noto Sans" "DejaVu Sans" "WenQuanYi Zen Hei" "Noto Color Emoji" ];
|
||||||
|
fonts.fontconfig.defaultFonts.serif = [ "Noto Serif" "DejaVu Serif" "WenQuanYi Zen Hei" "Noto Color Emoji" ];
|
||||||
|
fonts.fontconfig.defaultFonts.emoji = [ "Noto Color Emoji" "OpenMoji Color" ];
|
||||||
|
fonts.fontconfig.defaultFonts.monospace = [ "Hack Nerd Font" "Noto Sans Mono" "WenQuanYi Zen Hei Mono" ];
|
||||||
|
|
||||||
|
fonts.fontDir.enable = lib.mkDefault true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# ** Shells
|
||||||
|
# *** Zsh
|
||||||
|
{
|
||||||
|
options.mkk.os.zsh.enable =
|
||||||
|
konfig.nixerusPkgs.lib.mkBoolOpt true "Enable MKK system zsh config";
|
||||||
|
config = lib.mkIf config.mkk.os.zsh.enable {
|
||||||
|
users.defaultUserShell = pkgs.zsh;
|
||||||
|
environment.shells = [ pkgs.zsh ];
|
||||||
|
programs.zsh = {
|
||||||
|
enable = true;
|
||||||
|
enableGlobalCompInit = false;
|
||||||
|
interactiveShellInit = ''
|
||||||
|
if [[ ''${__MATERUS_HM_ZSH:-0} == 0 ]]; then
|
||||||
|
source ${pkgs.grml-zsh-config}/etc/zsh/zshrc
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
promptInit = '''';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# ** Assertions
|
||||||
|
{
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion = builtins.pathExists (config.konfig.vars.path.mkk + "/host/keys/ssh_host_ed25519_key");
|
||||||
|
message = "Not found host ed25519 key";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
assertion = builtins.pathExists (config.konfig.vars.path.mkk + "/host/keys//ssh_host_rsa_key");
|
||||||
|
message = "Not found host RSA key";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
# ** Variables
|
||||||
|
{
|
||||||
|
mkk.commonVariables = {
|
||||||
|
path = {
|
||||||
|
mkk = "/mkk";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# * Common OS END
|
||||||
|
];
|
||||||
|
}
|
261
nix/common.nix
Normal file
261
nix/common.nix
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
# * common.nix
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
mkkArg,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
# * Config
|
||||||
|
# ** NIX & NIXPKGS
|
||||||
|
{
|
||||||
|
nixpkgs.config = {
|
||||||
|
allowUnfree = lib.mkDefault true;
|
||||||
|
joypixels.acceptLicense = lib.mkDefault true;
|
||||||
|
nvidia.acceptLicense = lib.mkDefault true;
|
||||||
|
};
|
||||||
|
|
||||||
|
nix.package = lib.mkDefault pkgs.nixVersions.latest;
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# ** Variables
|
||||||
|
{
|
||||||
|
mkk.commonVariables = {
|
||||||
|
packageLists = rec {
|
||||||
|
defaultFonts = [
|
||||||
|
pkgs.dejavu_fonts
|
||||||
|
pkgs.freefont_ttf
|
||||||
|
pkgs.gyre-fonts
|
||||||
|
pkgs.liberation_ttf
|
||||||
|
pkgs.unifont
|
||||||
|
];
|
||||||
|
fonts = [
|
||||||
|
pkgs.noto-fonts
|
||||||
|
pkgs.noto-fonts-extra
|
||||||
|
pkgs.noto-fonts-emoji
|
||||||
|
pkgs.noto-fonts-cjk-sans
|
||||||
|
pkgs.noto-fonts-cjk-serif
|
||||||
|
|
||||||
|
pkgs.wqy_zenhei
|
||||||
|
|
||||||
|
pkgs.corefonts
|
||||||
|
pkgs.hack-font
|
||||||
|
pkgs.ubuntu_font_family
|
||||||
|
pkgs.monocraft
|
||||||
|
|
||||||
|
pkgs.nerd-fonts.hack
|
||||||
|
pkgs.nerd-fonts.meslo-lg
|
||||||
|
pkgs.nerd-fonts.droid-sans-mono
|
||||||
|
pkgs.nerd-fonts.profont
|
||||||
|
pkgs.nerd-fonts.fira-code
|
||||||
|
|
||||||
|
] ++ defaultFonts;
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# ** Assertions
|
||||||
|
{
|
||||||
|
config.assertions = [
|
||||||
|
{
|
||||||
|
assertion = builtins ? currentSystem;
|
||||||
|
message = "MKK must be build with --impure";
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
assertion = mkkArg.isDecrypted;
|
||||||
|
message = "Need to decrypt MKK repo to build";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
# ** Args
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(if mkkArg.isDecrypted then ./variables-private.nix else {})
|
||||||
|
(if mkkArg.isOs then ./common-os.nix else {})
|
||||||
|
];
|
||||||
|
options.konfig = lib.mkOption { default = { }; };
|
||||||
|
options.mkk.commonVariables = 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 = config.mkk.commonVariables;
|
||||||
|
};
|
||||||
|
_module.args.konfig = config.konfig;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
# * common.nix END
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
78
nix/default.nix
Normal file
78
nix/default.nix
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
# * Outputs - default.nix
|
||||||
|
{ inputs, configRootPath }:
|
||||||
|
let
|
||||||
|
isDecrypted =
|
||||||
|
npkgs: system:
|
||||||
|
let
|
||||||
|
file = ../private/check-encryption;
|
||||||
|
resultFile = npkgs.legacyPackages."${system}".runCommandLocal "check-encryption" { src = file; } ''
|
||||||
|
if [[ "$(< $src)" != "DECRYPTED" ]]; then
|
||||||
|
echo -n "no" >> $out;
|
||||||
|
else
|
||||||
|
echo -n "yes" >> $out;
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
(builtins.readFile resultFile == "yes");
|
||||||
|
|
||||||
|
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 =
|
||||||
|
let
|
||||||
|
mkSystem =
|
||||||
|
hostname:
|
||||||
|
{
|
||||||
|
system ? "x86_64-linux",
|
||||||
|
isStable ? true,
|
||||||
|
extraArgs ? { },
|
||||||
|
extraModules ? [ ],
|
||||||
|
}:
|
||||||
|
(if isStable then nixpkgs else nixpkgs-unstable).lib.nixosSystem {
|
||||||
|
system = system;
|
||||||
|
specialArgs = {
|
||||||
|
mkkArg =
|
||||||
|
mkkArg
|
||||||
|
// {
|
||||||
|
current = (if isStable then stable else unstable);
|
||||||
|
isDecrypted = (isDecrypted (if isStable then stable else unstable).nixpkgs system);
|
||||||
|
isStable = isStable;
|
||||||
|
isOs = true;
|
||||||
|
}
|
||||||
|
// extraArgs;
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
./common.nix
|
||||||
|
./hosts/${hostname}.nix
|
||||||
|
(
|
||||||
|
if
|
||||||
|
(
|
||||||
|
(isDecrypted (if isStable then stable else unstable).nixpkgs system)
|
||||||
|
&& builtins.pathExists ./hosts/${hostname}-private.nix
|
||||||
|
)
|
||||||
|
then
|
||||||
|
./hosts/${hostname}-private.nix
|
||||||
|
else
|
||||||
|
{ }
|
||||||
|
)
|
||||||
|
|
||||||
|
] ++ extraModules;
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# ** materusPC
|
||||||
|
"materusPC" = mkSystem "materusPC" { };
|
||||||
|
# * default.nix END
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
BIN
nix/hosts/materusPC-private.nix
Normal file
BIN
nix/hosts/materusPC-private.nix
Normal file
Binary file not shown.
925
nix/hosts/materusPC.nix
Normal file
925
nix/hosts/materusPC.nix
Normal file
@ -0,0 +1,925 @@
|
|||||||
|
# * materusPC
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
konfig,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
# * CONFIG
|
||||||
|
# ** General Settings
|
||||||
|
# *** SOPS
|
||||||
|
{
|
||||||
|
sops.age.generateKey = false;
|
||||||
|
sops.gnupg.home = null;
|
||||||
|
sops.gnupg.sshKeyPaths = [ ];
|
||||||
|
sops.age.sshKeyPaths = [ (konfig.vars.path.mkk + "/host/keys/ssh_host_ed25519_key") ];
|
||||||
|
sops.defaultSopsFile = konfig.rootFlake + "/private/materusPC-secrets.yaml";
|
||||||
|
#sops.secrets."users/materus" = { neededForUsers = true; };
|
||||||
|
sops.secrets.wireguard = { };
|
||||||
|
|
||||||
|
services.openssh.hostKeys = [
|
||||||
|
{
|
||||||
|
bits = 4096;
|
||||||
|
path = konfig.vars.path.mkk + "/host/keys/ssh_host_rsa_key";
|
||||||
|
type = "rsa";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
path = konfig.vars.path.mkk + "/host/keys/ssh_host_ed25519_key";
|
||||||
|
type = "ed25519";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
# *** Nix System Settings
|
||||||
|
{
|
||||||
|
nixpkgs.hostPlatform = "x86_64-linux";
|
||||||
|
system.copySystemConfiguration = false;
|
||||||
|
system.stateVersion = "23.05";
|
||||||
|
|
||||||
|
}
|
||||||
|
# *** Users
|
||||||
|
{
|
||||||
|
users.users.materus = {
|
||||||
|
isNormalUser = true;
|
||||||
|
extraGroups = [
|
||||||
|
"audio"
|
||||||
|
"video"
|
||||||
|
"render"
|
||||||
|
"pipewire"
|
||||||
|
"wheel"
|
||||||
|
"networkmanager"
|
||||||
|
"input"
|
||||||
|
"kvm"
|
||||||
|
"libvirt-qemu"
|
||||||
|
"libvirt"
|
||||||
|
"libvirtd"
|
||||||
|
"podman"
|
||||||
|
"scanner"
|
||||||
|
"lp"
|
||||||
|
];
|
||||||
|
shell = pkgs.zsh;
|
||||||
|
description = "Mateusz Słodkowicz";
|
||||||
|
openssh.authorizedKeys.keyFiles = [ ("${konfig.rootFlake}" + "/private/pubkeys/materus.pub") ];
|
||||||
|
#hashedPasswordFile = config.sops.secrets."users/materus".path;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# *** Audio
|
||||||
|
{
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
audio.enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
systemWide = true;
|
||||||
|
jack.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.pulseaudio.enable = false;
|
||||||
|
environment.sessionVariables =
|
||||||
|
let
|
||||||
|
makePluginPath =
|
||||||
|
format:
|
||||||
|
"$HOME/.${format}:"
|
||||||
|
+ (lib.makeSearchPath format [
|
||||||
|
"$HOME/.nix-profile/lib"
|
||||||
|
"/run/current-system/sw/lib"
|
||||||
|
"/etc/profiles/per-user/$USER/lib"
|
||||||
|
]);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
ALSOFT_DRIVERS = "pulse";
|
||||||
|
|
||||||
|
DSSI_PATH = makePluginPath "dssi";
|
||||||
|
LADSPA_PATH = makePluginPath "ladspa";
|
||||||
|
LV2_PATH = makePluginPath "lv2";
|
||||||
|
LXVST_PATH = makePluginPath "lxvst";
|
||||||
|
VST_PATH = makePluginPath "vst";
|
||||||
|
VST3_PATH = makePluginPath "vst3";
|
||||||
|
|
||||||
|
};
|
||||||
|
services.udev.extraRules = ''
|
||||||
|
KERNEL=="rtc0", GROUP="audio"
|
||||||
|
KERNEL=="hpet", GROUP="audio"
|
||||||
|
DEVPATH=="/devices/virtual/misc/cpu_dma_latency", OWNER="root", GROUP="audio", MODE="0660"
|
||||||
|
'';
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
openal
|
||||||
|
pulseaudio
|
||||||
|
|
||||||
|
reaper
|
||||||
|
audacity
|
||||||
|
|
||||||
|
yabridge
|
||||||
|
yabridgectl
|
||||||
|
|
||||||
|
vital
|
||||||
|
odin2
|
||||||
|
surge
|
||||||
|
fire
|
||||||
|
decent-sampler
|
||||||
|
lsp-plugins
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
||||||
|
# *** Other
|
||||||
|
{
|
||||||
|
mkk.os.fonts.enable = true;
|
||||||
|
}
|
||||||
|
# ** Desktop
|
||||||
|
# *** XDG
|
||||||
|
{
|
||||||
|
xdg.portal.enable = true;
|
||||||
|
xdg.portal.wlr.enable = true;
|
||||||
|
xdg.portal.xdgOpenUsePortal = true;
|
||||||
|
xdg.portal.extraPortals = [ pkgs.kdePackages.xdg-desktop-portal-kde ];
|
||||||
|
|
||||||
|
xdg.portal.config.common.default = "*";
|
||||||
|
|
||||||
|
|
||||||
|
environment.sessionVariables = {
|
||||||
|
XDG_CACHE_HOME = "\${HOME}/.cache";
|
||||||
|
XDG_CONFIG_HOME = "\${HOME}/.config";
|
||||||
|
XDG_BIN_HOME = "\${HOME}/.local/bin";
|
||||||
|
XDG_DATA_HOME = "\${HOME}/.local/share";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# *** KDE Plasma
|
||||||
|
{
|
||||||
|
environment.plasma6.excludePackages = with pkgs.kdePackages; [
|
||||||
|
kwallet
|
||||||
|
kwalletmanager
|
||||||
|
kwallet-pam
|
||||||
|
];
|
||||||
|
environment.variables = {
|
||||||
|
# Old fix for black cursor on amdgpu, seems to work fine now
|
||||||
|
#KWIN_DRM_NO_AMS = "1";
|
||||||
|
|
||||||
|
#Fix for amdgpu crashes
|
||||||
|
KWIN_DRM_USE_MODIFIERS = "0";
|
||||||
|
KWIN_DRM_NO_DIRECT_SCANOUT = "1";
|
||||||
|
QT_PLUGIN_PATH = [
|
||||||
|
"${pkgs.qt6.qtimageformats}/${pkgs.qt6.qtbase.qtPluginPrefix}"
|
||||||
|
"${pkgs.kdePackages.ffmpegthumbs}/${pkgs.qt6.qtbase.qtPluginPrefix}"
|
||||||
|
];
|
||||||
|
XCURSOR_THEME = "breeze_cursors";
|
||||||
|
};
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
kdePackages.ark
|
||||||
|
kdePackages.kcalc
|
||||||
|
kdePackages.kate
|
||||||
|
];
|
||||||
|
programs.kdeconnect.enable = true;
|
||||||
|
|
||||||
|
programs.firefox.nativeMessagingHosts.packages = [pkgs.kdePackages.plasma-browser-integration ];
|
||||||
|
programs.chromium.enablePlasmaBrowserIntegration = true;
|
||||||
|
}
|
||||||
|
# *** SDDM
|
||||||
|
(
|
||||||
|
let
|
||||||
|
plasma-materus = pkgs.writeScript "plasma-materus" ''
|
||||||
|
export KWIN_DRM_DEVICES="/dev/dri/by-path/pci-0000\:53\:00.0-card"
|
||||||
|
${pkgs.kdePackages.plasma-workspace}/libexec/plasma-dbus-run-session-if-needed ${pkgs.kdePackages.plasma-workspace}/bin/startplasma-wayland
|
||||||
|
'';
|
||||||
|
|
||||||
|
westonSddm =
|
||||||
|
let
|
||||||
|
xcfg = config.services.xserver;
|
||||||
|
in
|
||||||
|
pkgs.writeText "weston.ini" ''
|
||||||
|
[core]
|
||||||
|
xwayland=false
|
||||||
|
shell=fullscreen-shell.so
|
||||||
|
|
||||||
|
[keyboard]
|
||||||
|
keymap_model = ${builtins.toString xcfg.xkb.model};
|
||||||
|
keymap_layout = ${builtins.toString xcfg.xkb.layout};
|
||||||
|
keymap_variant = ${builtins.toString xcfg.xkb.variant};
|
||||||
|
keymap_options = ${builtins.toString xcfg.xkb.options};
|
||||||
|
|
||||||
|
[libinput]
|
||||||
|
enable-tap = ${builtins.toString xcfg.libinput.mouse.tapping};
|
||||||
|
left-handed = ${builtins.toString xcfg.libinput.mouse.leftHanded};
|
||||||
|
|
||||||
|
[output]
|
||||||
|
name=DP-3
|
||||||
|
mode=1920x1080@240
|
||||||
|
|
||||||
|
[output]
|
||||||
|
name=DP-4
|
||||||
|
mode=off
|
||||||
|
|
||||||
|
[output]
|
||||||
|
name=HDMI-A-3
|
||||||
|
mode=off
|
||||||
|
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
services.displayManager.defaultSession = "plasma-materus";
|
||||||
|
|
||||||
|
services.displayManager.sddm.enable = true;
|
||||||
|
services.displayManager.sddm.wayland.enable = true;
|
||||||
|
services.displayManager.sddm.wayland.compositor = lib.mkForce "weston";
|
||||||
|
services.displayManager.sddm.wayland.compositorCommand = lib.concatStringsSep " " [
|
||||||
|
"${lib.getExe pkgs.weston}"
|
||||||
|
"--shell=kiosk"
|
||||||
|
"-c ${westonSddm}"
|
||||||
|
];
|
||||||
|
services.displayManager.sessionPackages = [
|
||||||
|
(
|
||||||
|
(pkgs.writeTextDir "share/wayland-sessions/plasma-materus.desktop" ''
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Plasma (Wayland Materus)
|
||||||
|
Comment=Plasma Desktop with KWIN_DRM_DEVICES env
|
||||||
|
Exec=${plasma-materus}
|
||||||
|
DesktopNames=KDE
|
||||||
|
Type=Application
|
||||||
|
'').overrideAttrs
|
||||||
|
(_: {
|
||||||
|
passthru.providedSessions = [ "plasma-materus" ];
|
||||||
|
})
|
||||||
|
)
|
||||||
|
];
|
||||||
|
|
||||||
|
services.displayManager.sddm.settings = {
|
||||||
|
General = {
|
||||||
|
InputMethod = "";
|
||||||
|
};
|
||||||
|
Theme = {
|
||||||
|
CursorTheme = "breeze_cursors";
|
||||||
|
CursorSize = "24";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
)
|
||||||
|
# ** Programs & Services
|
||||||
|
# *** Java
|
||||||
|
{
|
||||||
|
programs = {
|
||||||
|
java.enable = true;
|
||||||
|
java.package = pkgs.jdk;
|
||||||
|
java.binfmt = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.variables = {
|
||||||
|
JAVA_8_HOME = "${pkgs.jdk8}/lib/openjdk/";
|
||||||
|
JAVA_17_HOME = "${pkgs.jdk17}/lib/openjdk/";
|
||||||
|
JAVA_21_HOME = "${pkgs.jdk21}/lib/openjdk/";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# *** Samba
|
||||||
|
{
|
||||||
|
services.samba-wsdd.enable = true;
|
||||||
|
services.samba-wsdd.openFirewall = true;
|
||||||
|
services.samba = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.sambaFull;
|
||||||
|
openFirewall = true;
|
||||||
|
settings = {
|
||||||
|
global = {
|
||||||
|
"workgroup" = "WORKGROUP";
|
||||||
|
"server string" = "smbmaterus";
|
||||||
|
"netbios name " = "smbmaterus";
|
||||||
|
"security" = "user";
|
||||||
|
"hosts allow" = "192.168.122. 127.0.0.1 localhost";
|
||||||
|
"hosts deny" = "0.0.0.0/0";
|
||||||
|
"guest account" = "nobody";
|
||||||
|
"map to guest" = "bad user";
|
||||||
|
"allow insecure wide links" = "yes";
|
||||||
|
};
|
||||||
|
windows = {
|
||||||
|
"path" = "/materus/data/VM/windows_shared";
|
||||||
|
"browseable" = "yes";
|
||||||
|
"read only" = "no";
|
||||||
|
"guest ok" = "no";
|
||||||
|
"create mask" = "0644";
|
||||||
|
"directory mask" = "0755";
|
||||||
|
"force user" = "materus";
|
||||||
|
"force group" = "users";
|
||||||
|
"follow symlinks" = "yes";
|
||||||
|
"wide links" = "yes";
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
# *** XServer
|
||||||
|
{
|
||||||
|
services.xserver.xkb.layout = "pl";
|
||||||
|
|
||||||
|
services.xserver.enable = true;
|
||||||
|
#services.xserver.videoDrivers = [ "amdgpu" "intel" ];
|
||||||
|
|
||||||
|
services.xserver.displayManager.startx.enable = false;
|
||||||
|
|
||||||
|
services.xserver.exportConfiguration = true;
|
||||||
|
services.xserver.extraConfig = pkgs.lib.mkDefault ''
|
||||||
|
Section "OutputClass"
|
||||||
|
Identifier "amd-options"
|
||||||
|
Option "TearFree" "True"
|
||||||
|
Option "SWCursor" "True"
|
||||||
|
Option "VariableRefresh" "true"
|
||||||
|
Option "AsyncFlipSecondaries" "true"
|
||||||
|
Option "DRI3" "1"
|
||||||
|
MatchDriver "amdgpu"
|
||||||
|
EndSection
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
# *** Input
|
||||||
|
{
|
||||||
|
environment.sessionVariables = {
|
||||||
|
QT_XKB_CONFIG_ROOT = "\${XKB_CONFIG_ROOT}";
|
||||||
|
GTK_IM_MODULE = "fcitx";
|
||||||
|
QT_IM_MODULE = "fcitx";
|
||||||
|
XMODIFIERS = "@im=fcitx";
|
||||||
|
SDL_IM_MODULE = "fcitx";
|
||||||
|
|
||||||
|
MOZ_USE_XINPUT2 = "1";
|
||||||
|
PATH = [ "\${XDG_BIN_HOME}" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
i18n.inputMethod.enable = true;
|
||||||
|
i18n.inputMethod.type = "fcitx5";
|
||||||
|
i18n.inputMethod.fcitx5.addons = [
|
||||||
|
pkgs.kdePackages.fcitx5-configtool
|
||||||
|
pkgs.fcitx5-lua
|
||||||
|
pkgs.fcitx5-mozc
|
||||||
|
pkgs.fcitx5-gtk
|
||||||
|
pkgs.kdePackages.fcitx5-qt
|
||||||
|
];
|
||||||
|
|
||||||
|
services.libinput.enable = true;
|
||||||
|
services.libinput.mouse = {
|
||||||
|
accelProfile = "flat";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# *** Shell
|
||||||
|
{
|
||||||
|
environment.shellInit = ''
|
||||||
|
if ! [ -z "$DISPLAY" ]; then xhost +si:localuser:root &> /dev/null; fi;
|
||||||
|
if ! [ -z "$DISPLAY" ]; then xhost +si:localuser:$USER &> /dev/null; fi;
|
||||||
|
'';
|
||||||
|
environment.enableAllTerminfo = true;
|
||||||
|
environment.pathsToLink = [
|
||||||
|
"/share/zsh"
|
||||||
|
"/share/bash-completion"
|
||||||
|
"/share/fish"
|
||||||
|
];
|
||||||
|
environment.shells = with pkgs; [
|
||||||
|
zsh
|
||||||
|
bashInteractive
|
||||||
|
fish
|
||||||
|
];
|
||||||
|
mkk.os.zsh.enable = true;
|
||||||
|
}
|
||||||
|
# *** Other Services
|
||||||
|
{
|
||||||
|
systemd.tmpfiles.rules = [ "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}" ];
|
||||||
|
services.flatpak.enable = true;
|
||||||
|
services.gvfs.enable = true;
|
||||||
|
|
||||||
|
services.dbus.enable = true;
|
||||||
|
services.dbus.packages = [ pkgs.gcr ];
|
||||||
|
|
||||||
|
services.printing.enable = true;
|
||||||
|
|
||||||
|
|
||||||
|
services.teamviewer.enable = true;
|
||||||
|
|
||||||
|
services.pcscd.enable = true;
|
||||||
|
|
||||||
|
services.davfs2.enable = true;
|
||||||
|
|
||||||
|
# GPG
|
||||||
|
programs.gnupg.agent = {
|
||||||
|
enable = true;
|
||||||
|
enableSSHSupport = false;
|
||||||
|
enableBrowserSocket = true;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
# SSH
|
||||||
|
programs.ssh.startAgent = true;
|
||||||
|
services.openssh.enable = true;
|
||||||
|
services.openssh.settings.PermitRootLogin = "no";
|
||||||
|
services.openssh.settings.PasswordAuthentication = false;
|
||||||
|
services.openssh.openFirewall = true;
|
||||||
|
|
||||||
|
# Sunshine
|
||||||
|
services.sunshine = {
|
||||||
|
enable = true;
|
||||||
|
capSysAdmin = true;
|
||||||
|
openFirewall = true;
|
||||||
|
autoStart = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# *** Other Apps
|
||||||
|
{
|
||||||
|
programs = {
|
||||||
|
fish.enable = true;
|
||||||
|
command-not-found.enable = false;
|
||||||
|
dconf.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.firefox.enable = true;
|
||||||
|
|
||||||
|
|
||||||
|
programs.gamemode.enable = true;
|
||||||
|
programs.corectrl.enable = true;
|
||||||
|
|
||||||
|
programs.nix-ld.enable = true;
|
||||||
|
programs.nix-ld.libraries = with pkgs; [
|
||||||
|
|
||||||
|
];
|
||||||
|
programs.chromium.enable = true;
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
|
||||||
|
(vivaldi.overrideAttrs (oldAttrs: {
|
||||||
|
dontWrapQtApps = false;
|
||||||
|
dontPatchELF = true;
|
||||||
|
nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ pkgs.kdePackages.wrapQtAppsHook ];
|
||||||
|
}))
|
||||||
|
|
||||||
|
#(pkgs.lutris.override { extraLibraries = pkgs: with pkgs; [ pkgs.samba pkgs.jansson pkgs.tdb pkgs.libunwind pkgs.libusb1 pkgs.gnutls pkgs.gtk3 pkgs.pango ]; })
|
||||||
|
konfig.nixerusPkgs.amdgpu-pro-libs.prefixes
|
||||||
|
(pkgs.bottles.override {
|
||||||
|
extraPkgs = pkgs: [
|
||||||
|
pkgs.libsForQt5.breeze-qt5
|
||||||
|
pkgs.kdePackages.breeze-gtk
|
||||||
|
pkgs.nss_latest
|
||||||
|
];
|
||||||
|
extraLibraries = pkgs: [
|
||||||
|
pkgs.samba
|
||||||
|
pkgs.jansson
|
||||||
|
pkgs.tdb
|
||||||
|
pkgs.libunwind
|
||||||
|
pkgs.libusb1
|
||||||
|
pkgs.gnutls
|
||||||
|
pkgs.gtk3
|
||||||
|
pkgs.pango
|
||||||
|
];
|
||||||
|
})
|
||||||
|
glibc
|
||||||
|
glib
|
||||||
|
gtk3
|
||||||
|
gtk4
|
||||||
|
gsettings-desktop-schemas
|
||||||
|
kdePackages.dolphin
|
||||||
|
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
||||||
|
vlc
|
||||||
|
vkbasalt-cli
|
||||||
|
|
||||||
|
patchelf
|
||||||
|
killall
|
||||||
|
util-linux
|
||||||
|
xorg.xhost
|
||||||
|
nix-top
|
||||||
|
|
||||||
|
gitFull
|
||||||
|
curl
|
||||||
|
wget
|
||||||
|
|
||||||
|
config.programs.java.package
|
||||||
|
|
||||||
|
nss_latest
|
||||||
|
|
||||||
|
pciutils
|
||||||
|
|
||||||
|
(aspellWithDicts (
|
||||||
|
ds: with ds; [
|
||||||
|
en
|
||||||
|
en-computers
|
||||||
|
en-science
|
||||||
|
pl
|
||||||
|
]
|
||||||
|
))
|
||||||
|
steamtinkerlaunch
|
||||||
|
distrobox
|
||||||
|
# WebP support
|
||||||
|
libwebp
|
||||||
|
webp-pixbuf-loader
|
||||||
|
|
||||||
|
# Compression
|
||||||
|
p7zip
|
||||||
|
unrar
|
||||||
|
bzip2
|
||||||
|
rar
|
||||||
|
unzip
|
||||||
|
zstd
|
||||||
|
xz
|
||||||
|
zip
|
||||||
|
gzip
|
||||||
|
|
||||||
|
tree
|
||||||
|
mc
|
||||||
|
lf
|
||||||
|
htop
|
||||||
|
nmon
|
||||||
|
iftop
|
||||||
|
iptraf-ng
|
||||||
|
mprocs
|
||||||
|
tldr
|
||||||
|
bat
|
||||||
|
##config.materus.profile.packages.home-manager
|
||||||
|
gcr
|
||||||
|
# pgcli
|
||||||
|
# litecli
|
||||||
|
#zenmonitor
|
||||||
|
|
||||||
|
nix-du
|
||||||
|
|
||||||
|
wineWowPackages.stagingFull
|
||||||
|
winetricks
|
||||||
|
protontricks
|
||||||
|
gnupg
|
||||||
|
pinentry
|
||||||
|
pinentry-gnome3
|
||||||
|
pinentry-curses
|
||||||
|
ncurses
|
||||||
|
monkeysphere
|
||||||
|
gparted
|
||||||
|
|
||||||
|
virt-viewer
|
||||||
|
|
||||||
|
inkscape
|
||||||
|
gimp
|
||||||
|
|
||||||
|
git-crypt
|
||||||
|
|
||||||
|
bubblewrap
|
||||||
|
bindfs
|
||||||
|
|
||||||
|
binutils
|
||||||
|
|
||||||
|
qbittorrent
|
||||||
|
mkvtoolnix
|
||||||
|
nicotine-plus
|
||||||
|
picard
|
||||||
|
opusTools
|
||||||
|
aegisub
|
||||||
|
];
|
||||||
|
}
|
||||||
|
# ** Network
|
||||||
|
# *** Firewall & Others
|
||||||
|
{
|
||||||
|
|
||||||
|
services = {
|
||||||
|
syncthing = {
|
||||||
|
enable = true;
|
||||||
|
user = "materus";
|
||||||
|
dataDir = "/home/materus";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.hostName = "materusPC";
|
||||||
|
networking.useDHCP = lib.mkDefault true;
|
||||||
|
networking.wireless.iwd.enable = true;
|
||||||
|
|
||||||
|
networking.firewall.enable = true;
|
||||||
|
|
||||||
|
networking.firewall = {
|
||||||
|
logReversePathDrops = false;
|
||||||
|
# wireguard trips rpfilter up
|
||||||
|
extraCommands = ''
|
||||||
|
ip46tables -t mangle -I nixos-fw-rpfilter -p udp -m udp --sport ${konfig.vars.wireguard.ports.materusPC} -j RETURN
|
||||||
|
ip46tables -t mangle -I nixos-fw-rpfilter -p udp -m udp --dport ${konfig.vars.wireguard.ports.materusPC} -j RETURN
|
||||||
|
'';
|
||||||
|
extraStopCommands = ''
|
||||||
|
ip46tables -t mangle -D nixos-fw-rpfilter -p udp -m udp --sport ${konfig.vars.wireguard.ports.materusPC} -j RETURN || true
|
||||||
|
ip46tables -t mangle -D nixos-fw-rpfilter -p udp -m udp --dport ${konfig.vars.wireguard.ports.materusPC} -j RETURN || true
|
||||||
|
'';
|
||||||
|
|
||||||
|
allowedTCPPorts = [
|
||||||
|
24800
|
||||||
|
5900
|
||||||
|
5357
|
||||||
|
4656
|
||||||
|
8080
|
||||||
|
9943
|
||||||
|
9944
|
||||||
|
# Syncthing
|
||||||
|
22000
|
||||||
|
config.services.syncthing.relay.statusPort
|
||||||
|
config.services.syncthing.relay.port
|
||||||
|
];
|
||||||
|
allowedUDPPorts = [
|
||||||
|
(lib.strings.toInt konfig.vars.wireguard.ports.materusPC)
|
||||||
|
24800
|
||||||
|
5900
|
||||||
|
3702
|
||||||
|
4656
|
||||||
|
6000
|
||||||
|
9943
|
||||||
|
9944
|
||||||
|
# Syncthing
|
||||||
|
22000
|
||||||
|
21027
|
||||||
|
# Zomboid
|
||||||
|
17000
|
||||||
|
17001
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
# *** NetworkManager
|
||||||
|
{
|
||||||
|
sops.templates."networkmanager.env".content = ''
|
||||||
|
WIREGUARD_PRIVATEKEY="${config.sops.placeholder.wireguard}"
|
||||||
|
'';
|
||||||
|
networking.networkmanager.ensureProfiles.environmentFiles = [
|
||||||
|
config.sops.templates."networkmanager.env".path
|
||||||
|
];
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
#networking.networkmanager.wifi.backend = "iwd";
|
||||||
|
|
||||||
|
networking.networkmanager.settings = {
|
||||||
|
connectivity = {
|
||||||
|
uri = "http://nmcheck.gnome.org/check_network_status.txt";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.networkmanager.ensureProfiles.profiles = {
|
||||||
|
wg0 = {
|
||||||
|
connection = {
|
||||||
|
id = "wg0";
|
||||||
|
type = "wireguard";
|
||||||
|
interface-name = "wg0";
|
||||||
|
};
|
||||||
|
wireguard = {
|
||||||
|
private-key = "$WIREGUARD_PRIVATEKEY";
|
||||||
|
};
|
||||||
|
"wireguard-peer.${konfig.vars.wireguard.pubKeys.valkyrie}" = {
|
||||||
|
endpoint = "${konfig.vars.ip.valkyrie.ipv4}:${konfig.vars.wireguard.ports.valkyrie}";
|
||||||
|
allowed-ips = "${konfig.vars.wireguard.masks.general};";
|
||||||
|
persistent-keepalive = "20";
|
||||||
|
};
|
||||||
|
ipv4 = {
|
||||||
|
address1 = "${konfig.vars.wireguard.ip.materusPC}/23";
|
||||||
|
dns = "${konfig.vars.wireguard.ip.valkyrie};";
|
||||||
|
method = "manual";
|
||||||
|
never-default = "true";
|
||||||
|
};
|
||||||
|
ipv6 = {
|
||||||
|
addr-gen-mode = "stable-privacy";
|
||||||
|
method = "disabled";
|
||||||
|
};
|
||||||
|
proxy = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# ** Hardware
|
||||||
|
# *** 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
|
||||||
|
{
|
||||||
|
services.udev = {
|
||||||
|
packages = with pkgs; [
|
||||||
|
game-devices-udev-rules
|
||||||
|
];
|
||||||
|
};
|
||||||
|
hardware.uinput.enable = true;
|
||||||
|
hardware.steam-hardware.enable = true;
|
||||||
|
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# *** 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";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# * materusPC END
|
||||||
|
];
|
||||||
|
}
|
@ -1,4 +1,3 @@
|
|||||||
# [[file:../../org-conf/nix-flake.org::*Subflake][Subflake:1]]
|
|
||||||
{
|
{
|
||||||
description = "Subflake of Lemon repository, contains dependencies";
|
description = "Subflake of Lemon repository, contains dependencies";
|
||||||
inputs = {
|
inputs = {
|
||||||
@ -50,7 +49,6 @@
|
|||||||
ref = "master";
|
ref = "master";
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.follows = "nixpkgs";
|
nixpkgs.follows = "nixpkgs";
|
||||||
flake-utils.follows = "flake-utils";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -115,6 +113,13 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
impermanence = {
|
||||||
|
type = "github";
|
||||||
|
owner = "nix-community";
|
||||||
|
repo = "impermanence";
|
||||||
|
ref = "master";
|
||||||
|
};
|
||||||
|
|
||||||
nur = {
|
nur = {
|
||||||
type = "github";
|
type = "github";
|
||||||
owner = "nix-community";
|
owner = "nix-community";
|
||||||
@ -126,4 +131,3 @@
|
|||||||
|
|
||||||
outputs = inputs: inputs;
|
outputs = inputs: inputs;
|
||||||
}
|
}
|
||||||
# Subflake:1 ends here
|
|
||||||
|
BIN
nix/variables-private.nix
Normal file
BIN
nix/variables-private.nix
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
private/check-encryption
Normal file
BIN
private/check-encryption
Normal file
Binary file not shown.
BIN
private/materusPC-secrets.yaml
Normal file
BIN
private/materusPC-secrets.yaml
Normal file
Binary file not shown.
BIN
private/pubkeys/materus.pub
Normal file
BIN
private/pubkeys/materus.pub
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user