Update Emacs Config
This commit is contained in:
parent
f5d0d4065f
commit
fd229ecd76
|
@ -17,7 +17,7 @@
|
|||
enableTerminal = lib.mkDefault true;
|
||||
enableTerminalExtra = lib.mkDefault true;
|
||||
enableNixDevel = lib.mkDefault true;
|
||||
editor.emacs.enable = false;
|
||||
editor.emacs.enable = true;
|
||||
editor.code.fhs.enable = true;
|
||||
editor.code.fhs.packages = (ps: with ps; let llvmpkgs = llvmPackages_18; in [
|
||||
llvmpkgs.clang
|
||||
|
|
|
@ -3,30 +3,48 @@
|
|||
lib,
|
||||
pkgs,
|
||||
materusArg,
|
||||
materusCfg,
|
||||
...
|
||||
}:
|
||||
let
|
||||
}: let
|
||||
emacs-pkg = pkgs.emacs;
|
||||
|
||||
materus-config =
|
||||
e:
|
||||
materus-nix = e:
|
||||
e.trivialBuild {
|
||||
pname = "materus-config";
|
||||
src = pkgs.writeText "materus-config.el" ''
|
||||
pname = "materus-nix";
|
||||
src = pkgs.writeText "materus-nix.el" ''
|
||||
(when (file-exists-p "${config.programs.emacs.package}/opt/emacs/buildtime")
|
||||
(setq emacs-build-time (decode-time (seconds-to-time (string-to-number (with-temp-buffer
|
||||
(insert-file-contents "${config.programs.emacs.package}/opt/emacs/buildtime")
|
||||
(buffer-string)))))))
|
||||
(provide 'materus-config)
|
||||
|
||||
|
||||
|
||||
|
||||
(defvar lsp-java-configuration-runtimes nil)
|
||||
(setq dap-lldb-debug-program '("${pkgs.llvmPackages.lldb}/bin/lldb-vscode"))
|
||||
(setq lsp-java-configuration-runtimes '[(:name "JavaSE-1.8"
|
||||
:path "${pkgs.jdk8}/lib/openjdk/")
|
||||
(:name "JavaSE-17"
|
||||
:path "${pkgs.jdk17}/lib/openjdk/")
|
||||
(:name "JavaSE-21"
|
||||
:path "${pkgs.jdk21}/lib/openjdk/"
|
||||
:default t)])
|
||||
|
||||
(setq lsp-nix-nixd-nixos-options-expr (concat "(builtins.getFlake \"/etc/nixos\").nixosConfigurations." (system-name) ".options"))
|
||||
(setenv "JAVA_HOME" "${pkgs.jdk21}/lib/openjdk")
|
||||
(setenv "PATH" (concat "${emacsEnv}/bin:" (getenv "PATH")))
|
||||
(setq exec-path (append '("${emacsEnv}/bin") exec-path))
|
||||
|
||||
|
||||
(call-process-shell-command "${pkgs.xorg.xmodmap}/bin/xmodmap -e \"keycode 148 = Hyper_L\" -e \"remove Mod4 = Hyper_L\" -e \"add Mod3 = Hyper_L\" &" nil 0)
|
||||
(call-process-shell-command "${pkgs.xorg.xmodmap}/bin/xmodmap -e \"keycode 66 = Hyper_L\" -e \"remove Mod4 = Hyper_L\" -e \"add Mod3 = Hyper_L\" &" nil 0)
|
||||
|
||||
(provide 'materus-nix)
|
||||
'';
|
||||
version = "1.0.0";
|
||||
};
|
||||
|
||||
configPath = "${materusArg.cfg.path}" + "/extraFiles/config/emacs/";
|
||||
packages =
|
||||
epkgs: with epkgs; [
|
||||
(materus-config epkgs)
|
||||
packages = epkgs:
|
||||
with epkgs; [
|
||||
treesit-grammars.with-all-grammars
|
||||
use-package
|
||||
elcord
|
||||
|
@ -150,12 +168,18 @@ let
|
|||
emacsEnv = pkgs.buildEnv {
|
||||
name = "emacs-env";
|
||||
paths = with pkgs; [
|
||||
jdk21
|
||||
|
||||
luaformatter
|
||||
pandoc
|
||||
(luajit.withPackages (p: [p.fennel p.lua-lsp]))
|
||||
(luajit.withPackages (p: [
|
||||
p.fennel
|
||||
p.lua-lsp
|
||||
]))
|
||||
fennel-ls
|
||||
fnlfmt
|
||||
|
||||
sbcl
|
||||
silver-searcher
|
||||
guile
|
||||
plantuml
|
||||
mermaid-cli
|
||||
|
@ -176,7 +200,6 @@ let
|
|||
gdb
|
||||
materusArg.unstable.nixd
|
||||
jdt-language-server
|
||||
jdk
|
||||
gradle
|
||||
fpc
|
||||
nodejs
|
||||
|
@ -186,50 +209,12 @@ let
|
|||
};
|
||||
|
||||
cfg = config.materus.profile.editor.emacs;
|
||||
|
||||
setNixInit = ''
|
||||
(defvar lsp-java-configuration-runtimes nil)
|
||||
(setq dap-lldb-debug-program '("${pkgs.llvmPackages.lldb}/bin/lldb-vscode"))
|
||||
(setq lsp-java-configuration-runtimes '[(:name "JavaSE-1.8"
|
||||
:path "${pkgs.jdk8}/lib/openjdk/")
|
||||
(:name "JavaSE-17"
|
||||
:path "${pkgs.jdk17}/lib/openjdk/")
|
||||
(:name "JavaSE-21"
|
||||
:path "${pkgs.jdk21}/lib/openjdk/"
|
||||
:default t)])
|
||||
(setq lsp-nix-nixd-nixos-options-expr (concat "(builtins.getFlake \"/etc/nixos\").nixosConfigurations." (system-name) ".options"))
|
||||
(setenv "PATH" (concat (getenv "PATH") ":${emacsEnv}/bin"))
|
||||
(setq exec-path (append exec-path '("${emacsEnv}/bin")))
|
||||
(call-process-shell-command "${pkgs.xorg.xmodmap}/bin/xmodmap -e \"keycode 148 = Hyper_L\" -e \"remove Mod4 = Hyper_L\" -e \"add Mod3 = Hyper_L\" &" nil 0)
|
||||
(call-process-shell-command "${pkgs.xorg.xmodmap}/bin/xmodmap -e \"keycode 66 = Hyper_L\" -e \"remove Mod4 = Hyper_L\" -e \"add Mod3 = Hyper_L\" &" nil 0)
|
||||
'';
|
||||
in
|
||||
{
|
||||
options.materus.profile.editor.emacs.enable = materusArg.pkgs.lib.mkBoolOpt false "Enable emacs with materus cfg";
|
||||
in {
|
||||
options.materus.profile.editor.emacs.enable =
|
||||
materusArg.pkgs.lib.mkBoolOpt false "Enable emacs with materus cfg";
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.activation.emacsSetup = lib.hm.dag.entryAfter [ "linkGeneration" ] ''
|
||||
mkdir -p ${config.xdg.configHome}/emacs/var/recovery
|
||||
mkdir -p ${config.xdg.configHome}/emacs/etc/materus
|
||||
mkdir -p ${config.xdg.configHome}/emacs/var/backups
|
||||
${pkgs.rsync}/bin/rsync -zr --no-times --chmod=744 "${configPath}" "${config.xdg.configHome}/emacs"
|
||||
|
||||
|
||||
run ${config.programs.emacs.finalPackage}/bin/emacs -Q --batch \
|
||||
--eval '(setq warning-minimum-log-level :error)' \
|
||||
--eval '(setq package-user-dir (concat user-emacs-directory "var/elpa/" emacs-version "/" ))' \
|
||||
--eval '(setq package-gnupghome-dir (concat user-emacs-directory "var/elpa/gnupg/" ))' \
|
||||
--eval '(package-initialize)' \
|
||||
--eval '(byte-recompile-directory (concat user-emacs-directory "etc/materus/extra") 0 t)' \
|
||||
--eval '(byte-compile-file "${config.xdg.configHome}/emacs/early-init.el")' \
|
||||
--eval '(byte-compile-file "${config.xdg.configHome}/emacs/init.el")' \
|
||||
--eval '(byte-compile-file "${config.xdg.configHome}/emacs/etc/materus/nix-init.el")' \
|
||||
--eval '(byte-compile-file "${config.xdg.configHome}/emacs/etc/materus/emacs-config.el")'
|
||||
'';
|
||||
|
||||
xdg.configFile = {
|
||||
"emacs/etc/materus/nix-init.el".text = setNixInit;
|
||||
};
|
||||
home.activation.emacsSetup = lib.hm.dag.entryAfter ["linkGeneration"] '''';
|
||||
|
||||
#Emacsclient with COLORTERM env variable, without it display in "-nw" client is broken
|
||||
xdg.desktopEntries.emacs = {
|
||||
|
@ -274,6 +259,7 @@ in
|
|||
|
||||
programs.emacs = {
|
||||
enable = true;
|
||||
extraPackages = epkgs: [(materus-nix epkgs) epkgs.vterm epkgs.treesit-grammars.with-all-grammars];
|
||||
package = lib.mkDefault (
|
||||
(emacs-pkg.override {
|
||||
withSQLite3 = true;
|
||||
|
@ -282,9 +268,11 @@ in
|
|||
#withXwidgets = true;
|
||||
withGTK3 = true;
|
||||
withAlsaLib = true;
|
||||
|
||||
#withGconf = true;
|
||||
withImageMagick = true;
|
||||
}).overrideAttrs
|
||||
})
|
||||
.overrideAttrs
|
||||
(
|
||||
f: p: {
|
||||
#Remove .desktop files, will use my own. Add file with buildtime in case of using elpaca
|
||||
|
@ -298,95 +286,6 @@ in
|
|||
}
|
||||
)
|
||||
);
|
||||
extraPackages =
|
||||
epkgs:
|
||||
(packages (
|
||||
epkgs.overrideScope (
|
||||
ff: pp: {
|
||||
#Build lsp-mode with plist support, need to set this in emacs too
|
||||
|
||||
lsp-mode = (
|
||||
pp.lsp-mode.overrideAttrs (
|
||||
f: p: {
|
||||
patches = [ ./lsp-mode.patch ];
|
||||
buildPhase =
|
||||
''
|
||||
export LSP_USE_PLISTS=true
|
||||
''
|
||||
+ p.buildPhase;
|
||||
}
|
||||
)
|
||||
);
|
||||
lsp-java = (
|
||||
pp.lsp-java.overrideAttrs (
|
||||
f: p: {
|
||||
buildPhase =
|
||||
''
|
||||
export LSP_USE_PLISTS=true
|
||||
''
|
||||
+ p.buildPhase;
|
||||
}
|
||||
)
|
||||
);
|
||||
lsp-jedi = (
|
||||
pp.lsp-jedi.overrideAttrs (
|
||||
f: p: {
|
||||
buildPhase =
|
||||
''
|
||||
export LSP_USE_PLISTS=true
|
||||
''
|
||||
+ p.buildPhase;
|
||||
}
|
||||
)
|
||||
);
|
||||
lsp-haskell = (
|
||||
pp.lsp-haskell.overrideAttrs (
|
||||
f: p: {
|
||||
buildPhase =
|
||||
''
|
||||
export LSP_USE_PLISTS=true
|
||||
''
|
||||
+ p.buildPhase;
|
||||
}
|
||||
)
|
||||
);
|
||||
lsp-ui = (
|
||||
pp.lsp-ui.overrideAttrs (
|
||||
f: p: {
|
||||
buildPhase =
|
||||
''
|
||||
export LSP_USE_PLISTS=true
|
||||
''
|
||||
+ p.buildPhase;
|
||||
}
|
||||
)
|
||||
);
|
||||
lsp-treemacs = (
|
||||
pp.lsp-treemacs.overrideAttrs (
|
||||
f: p: {
|
||||
buildPhase =
|
||||
''
|
||||
export LSP_USE_PLISTS=true
|
||||
''
|
||||
+ p.buildPhase;
|
||||
}
|
||||
)
|
||||
);
|
||||
dap-mode = (
|
||||
pp.dap-mode.overrideAttrs (
|
||||
f: p: {
|
||||
buildPhase =
|
||||
''
|
||||
export LSP_USE_PLISTS=true
|
||||
''
|
||||
+ p.buildPhase;
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
)
|
||||
));
|
||||
};
|
||||
|
||||
};
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,12 +1,10 @@
|
|||
;;; -*- lexical-binding: t; -*-
|
||||
|
||||
;; [[file:emacs-materus-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
|
||||
;;; 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 'fundamental-mode) ; Use fundamental mode in scratch buffer, speed up loading, not really important when emacs used as daemon
|
||||
|
@ -18,14 +16,16 @@
|
|||
(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 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
|
||||
|
@ -34,19 +34,22 @@
|
|||
(setq ring-bell-function 'ignore) ; Disable bell
|
||||
|
||||
|
||||
(defvar materus-emacs-gc-cons-threshold (* 64 1024 1024)
|
||||
(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:emacs-materus-config.org::*Garbage Collector][Garbage Collector:1]]
|
||||
|
||||
;;; 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
|
||||
;; Garbage Collector:1 ends here
|
||||
(setq gc-cons-threshold materus/emacs-gc-cons-threshold))) ; Set `gc-cons-threshold' to desired value after startup
|
||||
|
||||
|
||||
|
||||
|
||||
;;; FRAMES
|
||||
|
||||
;; [[file:emacs-materus-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
|
||||
|
@ -64,9 +67,10 @@
|
|||
(advice-remove #'tty-run-terminal-initialization #'ignore)
|
||||
(tty-run-terminal-initialization (selected-frame) nil t)
|
||||
)))
|
||||
;; Early Frame Settings:1 ends here
|
||||
|
||||
;; [[file:emacs-materus-config.org::*Native compilation][Native compilation:1]]
|
||||
|
||||
;;; NATIVE COMPILATION
|
||||
|
||||
(setq native-comp-async-report-warnings-errors nil) ; Silence warnings
|
||||
(setq native-comp-speed 3) ; Set native-comp speed
|
||||
|
||||
|
@ -83,4 +87,3 @@
|
|||
(startup-redirect-eln-cache
|
||||
(convert-standard-filename
|
||||
(concat user-emacs-directory "var/eln-cache/"))))
|
||||
;; Native compilation:1 ends here
|
||||
|
|
|
@ -1,608 +0,0 @@
|
|||
#+TITLE: Materus Emacs Cfg
|
||||
#+AUTHOR: materus
|
||||
#+DESCRIPTION: materus emacs configuration
|
||||
#+STARTUP: overview
|
||||
#+PROPERTY: EMACS-DIR: ./
|
||||
#+PROPERTY: header-args :tangle (concat (org-entry-get nil "EMACS-DIR" t) "etc/materus/emacs-config.el") :comments link
|
||||
#+OPTIONS: \n:t
|
||||
#+auto_tangle: t
|
||||
|
||||
My emacs config, tangled file is [[file:etc/materus/emacs-config.el][there]]
|
||||
|
||||
* Table of Contents :noexport:TOC_3:
|
||||
- [[#init-files][Init Files]]
|
||||
- [[#early-init][Early Init]]
|
||||
- [[#early-init-variables][Early Init Variables]]
|
||||
- [[#garbage-collector][Garbage Collector]]
|
||||
- [[#early-frame-settings][Early Frame Settings]]
|
||||
- [[#native-compilation][Native compilation]]
|
||||
- [[#init][Init]]
|
||||
- [[#compile-time][Compile Time]]
|
||||
- [[#packages][Packages]]
|
||||
- [[#init-package-manager-config][Init package manager config]]
|
||||
- [[#packages-list--function][Packages list & function]]
|
||||
- [[#configuration][Configuration]]
|
||||
- [[#no-littering][No Littering]]
|
||||
- [[#graphical][Graphical]]
|
||||
- [[#mouse][Mouse]]
|
||||
- [[#misc][Misc]]
|
||||
- [[#dashboard][Dashboard]]
|
||||
- [[#modeline][Modeline]]
|
||||
- [[#diff-hl][Diff-hl]]
|
||||
- [[#org-mode][Org-mode]]
|
||||
- [[#completions][Completions]]
|
||||
- [[#style][Style]]
|
||||
- [[#minibuffer][Minibuffer]]
|
||||
- [[#miscellaneous][Miscellaneous]]
|
||||
- [[#programming][Programming]]
|
||||
- [[#lsp][LSP]]
|
||||
- [[#dap][DAP]]
|
||||
- [[#nix][Nix]]
|
||||
- [[#emacs-lisp][Emacs Lisp]]
|
||||
- [[#cc][C/C++]]
|
||||
- [[#python][Python]]
|
||||
- [[#java][Java]]
|
||||
- [[#other][Other]]
|
||||
- [[#keybindings][Keybindings]]
|
||||
- [[#keys][Keys]]
|
||||
- [[#snippets][Snippets]]
|
||||
- [[#yasnippet-init][Yasnippet init]]
|
||||
- [[#other-1][Other]]
|
||||
- [[#update-config-script][Update config script]]
|
||||
- [[#byte-compile][Byte compile]]
|
||||
- [[#test][Test]]
|
||||
|
||||
* Init Files
|
||||
** Early Init
|
||||
:PROPERTIES:
|
||||
:header-args: :tangle (concat (org-entry-get nil "EMACS-DIR" t) "early-init.el") :comments link
|
||||
:END:
|
||||
Early init file, setting for GC and some paths.
|
||||
Tangled file is [[./early-init.el][there]]
|
||||
#+begin_src emacs-lisp :comments no
|
||||
;;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
*** Early Init Variables
|
||||
Setting early init variables
|
||||
#+begin_src emacs-lisp
|
||||
(defvar materus/init-early t
|
||||
"Is emacs using materus early init") ; Var to ensure early-init loaded, not used anymore but keeping it anyway
|
||||
(setq materus/init-early t) ; Probably useless
|
||||
|
||||
(setenv "LSP_USE_PLISTS" "true") ; Make lsp-mode use plists
|
||||
;;
|
||||
(setq c-default-style nil) ; Clear default styles for languages, will set them up later
|
||||
(setq default-input-method nil) ; Disable default input method, I'm not using them anyway so far
|
||||
(setq initial-major-mode 'fundamental-mode) ; Use fundamental mode in scratch buffer, speed up loading, not really important when emacs used as daemon
|
||||
(setq auto-save-default nil) ; TODO: configure auto saves, disable for now
|
||||
(setq backup-directory-alist
|
||||
`((".*" . ,(concat user-emacs-directory "var/backups/")))) ; Set backup location
|
||||
(setq auto-save-file-name-transforms
|
||||
`((".*" ,(concat user-emacs-directory "var/recovery/") t))) ; Set auto-save location
|
||||
(setq auto-save-list-file-prefix (concat user-emacs-directory "var/auto-save/sessions/")) ; Set auto-save-list location
|
||||
(setq load-prefer-newer t) ; Prefer newer files to load
|
||||
|
||||
;; Packages
|
||||
(setq package-enable-at-startup t) ; Ensure packages are enable since I'm either using built in package manager or nix
|
||||
(setq package-quickstart nil) ; Disable package quickstart, it's annoying if forget to update it and doesn't speed up much
|
||||
;;
|
||||
|
||||
(setq inhibit-compacting-font-caches t) ; Don't compact fonts
|
||||
|
||||
(set-language-environment "UTF-8") ; Use UTF-8
|
||||
|
||||
(setq custom-file (concat user-emacs-directory "etc/custom.el")) ; Set custom file location, don't want clutter in main directory
|
||||
(setq custom-theme-directory
|
||||
(concat user-emacs-directory "/etc/materus/themes" )) ; Set custom themes location
|
||||
|
||||
(setq ring-bell-function 'ignore) ; Disable bell
|
||||
|
||||
|
||||
(defvar materus-emacs-gc-cons-threshold (* 64 1024 1024)
|
||||
"The value of `gc-cons-threshold' after Emacs startup.") ; Define after init garbage collector threshold
|
||||
#+end_src
|
||||
*** Garbage Collector
|
||||
Settings for garbage collector
|
||||
#+begin_src emacs-lisp
|
||||
(setq gc-cons-threshold most-positive-fixnum) ; Set `gc-cons-threshold' so it won't collectect during initialization
|
||||
|
||||
(add-hook 'emacs-startup-hook
|
||||
(lambda ()
|
||||
(setq gc-cons-threshold materus-emacs-gc-cons-threshold))) ; Set `gc-cons-threshold' to desired value after startup
|
||||
#+end_src
|
||||
*** Early Frame Settings
|
||||
Early frame settings, maybe some could be move to normal init
|
||||
#+begin_src emacs-lisp
|
||||
(setq frame-inhibit-implied-resize t)
|
||||
(setq frame-resize-pixelwise t)
|
||||
(setq window-resize-pixelwise t) ; Allow pixelwise resizing of window and frame
|
||||
|
||||
(unless (daemonp)
|
||||
(add-to-list 'initial-frame-alist '(fullscreen . maximized))) ; Start first frame maximized if not running as daemon, daemon frame are set up later in config
|
||||
(setq default-frame-alist ; Set default size for frames
|
||||
'((width . 130)
|
||||
(height . 40)))
|
||||
|
||||
(advice-add #'tty-run-terminal-initialization :override #'ignore)
|
||||
(add-hook 'window-setup-hook
|
||||
(lambda ()
|
||||
(unless (display-graphic-p)
|
||||
(advice-remove #'tty-run-terminal-initialization #'ignore)
|
||||
(tty-run-terminal-initialization (selected-frame) nil t)
|
||||
)))
|
||||
#+end_src
|
||||
*** Native compilation
|
||||
#+begin_src emacs-lisp
|
||||
(setq native-comp-async-report-warnings-errors nil) ; Silence warnings
|
||||
(setq native-comp-speed 3) ; Set native-comp speed
|
||||
|
||||
(setq native-comp-jit-compilation t
|
||||
;;native-comp-deferred-compilation t
|
||||
package-native-compile t)
|
||||
|
||||
|
||||
;; Setting up native-comp cache location
|
||||
|
||||
(when (and (fboundp 'startup-redirect-eln-cache)
|
||||
(fboundp 'native-comp-available-p)
|
||||
(native-comp-available-p))
|
||||
(startup-redirect-eln-cache
|
||||
(convert-standard-filename
|
||||
(concat user-emacs-directory "var/eln-cache/"))))
|
||||
#+end_src
|
||||
|
||||
** Init
|
||||
:PROPERTIES:
|
||||
:header-args: :tangle (concat (org-entry-get nil "EMACS-DIR" t) "init.el") :comments link
|
||||
:END:
|
||||
Init File, tangled [[./init.el][there]]
|
||||
Checking if using emacs from my nix config, loads config and custom.el
|
||||
Sets up package.el
|
||||
#+begin_src emacs-lisp :comments no
|
||||
;;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(setq-default materus/use-nix-packages (require 'materus-config nil 'noerror))
|
||||
(require 'cl-lib)
|
||||
(require 'package)
|
||||
|
||||
(add-to-list 'load-path (concat user-emacs-directory "etc/materus/extra")) ; Extra load path for packages
|
||||
(setq package-user-dir (concat user-emacs-directory "var/elpa/" emacs-version "/" )) ; Set elpa path for this emacs version, should use nix packages anyway so keeping just in case
|
||||
(setq package-gnupghome-dir (concat user-emacs-directory "var/elpa/gnupg/" )) ; Set path to gnupg for elpa
|
||||
(add-to-list 'package-archives
|
||||
'("nongnu-devel" . "https://elpa.nongnu.org/nongnu-devel/")) ; Add nongnu-devel repo to package manager
|
||||
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) ; Add melpa repo to package manager
|
||||
(customize-set-variable 'package-archive-priorities '(("gnu" . 99)
|
||||
("nongnu" . 80)
|
||||
("nongnu-devel" . 70)
|
||||
("melpa" . 0))) ; Repository priority
|
||||
|
||||
(load (concat user-emacs-directory "etc/materus/nix-init") t)
|
||||
(load (concat user-emacs-directory "etc/materus/emacs-config"))
|
||||
(load custom-file t)
|
||||
#+end_src
|
||||
** Compile Time
|
||||
Some defvar so native-compile wont complain
|
||||
#+begin_src emacs-lisp :comments no
|
||||
;;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
#+begin_src emacs-lisp
|
||||
(eval-when-compile
|
||||
(defvar doom-modeline-support-imenu nil)
|
||||
(defvar display-time-24hr-format nil)
|
||||
(defvar lsp-nix-nixd-formatting-command nil)
|
||||
(defvar cua--cua-keys-keymap nil)
|
||||
(declare-function lsp-stdio-connection "lsp-mode" (COMMAND &optional TEST-COMMAND))
|
||||
(declare-function make-lsp-client "lsp-mode")
|
||||
(declare-function lsp-register-client "lsp-mode" ( CLIENT ))
|
||||
)
|
||||
#+end_src
|
||||
* Packages
|
||||
Package manager config if not using nix.
|
||||
After some testing default package manager works best for me.
|
||||
** Init package manager config
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
|
||||
#+end_src
|
||||
|
||||
** Packages list & function
|
||||
Packages to install
|
||||
#+begin_src emacs-lisp
|
||||
(defvar materus/packages
|
||||
'(
|
||||
use-package
|
||||
elcord
|
||||
dashboard
|
||||
magit
|
||||
git-timemachine
|
||||
avy
|
||||
vterm
|
||||
direnv
|
||||
projectile
|
||||
clipetty
|
||||
which-key
|
||||
iedit
|
||||
hideshowvis
|
||||
evil
|
||||
perspective
|
||||
treemacs-evil
|
||||
treemacs
|
||||
treemacs-nerd-icons
|
||||
treemacs-perspective
|
||||
treemacs-icons-dired
|
||||
treemacs-magit
|
||||
treemacs-projectile
|
||||
tree-edit
|
||||
nerd-icons
|
||||
nerd-icons-completion
|
||||
minions
|
||||
rainbow-delimiters
|
||||
rainbow-mode
|
||||
cmake-mode
|
||||
lsp-mode
|
||||
lsp-java
|
||||
lsp-jedi
|
||||
lsp-haskell
|
||||
lsp-ui
|
||||
lsp-treemacs
|
||||
flycheck
|
||||
gradle-mode
|
||||
groovy-mode
|
||||
kotlin-mode
|
||||
dap-mode
|
||||
d-mode
|
||||
lua-mode
|
||||
multiple-cursors
|
||||
org
|
||||
org-contrib
|
||||
org-ql
|
||||
org-rainbow-tags
|
||||
org-roam
|
||||
org-roam-ui
|
||||
org-review
|
||||
org-present
|
||||
org-superstar
|
||||
org-auto-tangle
|
||||
visual-fill-column
|
||||
csharp-mode
|
||||
markdown-mode
|
||||
json-mode
|
||||
nix-mode
|
||||
nixfmt
|
||||
no-littering
|
||||
right-click-context
|
||||
dracula-theme
|
||||
doom-themes
|
||||
doom-modeline
|
||||
popper
|
||||
undo-tree
|
||||
bash-completion
|
||||
eldoc-box
|
||||
yasnippet
|
||||
async
|
||||
request
|
||||
nix-ts-mode
|
||||
markdown-ts-mode
|
||||
llvm-ts-mode
|
||||
treesit-fold
|
||||
treesit-auto
|
||||
tree-sitter-langs
|
||||
eat
|
||||
vlf
|
||||
edit-indirect
|
||||
zones
|
||||
sudo-edit
|
||||
toc-org
|
||||
empv
|
||||
volatile-highlights
|
||||
highlight
|
||||
elfeed
|
||||
elfeed-goodies
|
||||
drag-stuff
|
||||
dirvish
|
||||
rg
|
||||
shfmt
|
||||
;; Completions & Minibuffer
|
||||
corfu
|
||||
company
|
||||
company-quickhelp
|
||||
cape
|
||||
embark
|
||||
embark-consult
|
||||
orderless
|
||||
vertico
|
||||
marginalia
|
||||
)
|
||||
"A list of packages to ensure are installed at launch.")
|
||||
|
||||
(defun materus/packages-installed-p ()
|
||||
(cl-loop for p in materus/packages
|
||||
when (not (package-installed-p p)) do (cl-return nil)
|
||||
finally (cl-return t)))
|
||||
|
||||
(defun materus/install-packages ()
|
||||
(unless (materus/packages-installed-p)
|
||||
(package-refresh-contents)
|
||||
(dolist (p materus/packages)
|
||||
(when (not (package-installed-p p))
|
||||
(package-install p)))))
|
||||
(unless materus/use-nix-packages
|
||||
(materus/install-packages))
|
||||
#+end_src
|
||||
|
||||
* Configuration
|
||||
General configurations of packages modes etc.
|
||||
** No Littering
|
||||
Set up no littering
|
||||
|
||||
** Graphical
|
||||
Graphical related settings.
|
||||
*** Mouse
|
||||
|
||||
*** Misc
|
||||
#+begin_src emacs-lisp
|
||||
|
||||
;; Rainbow mode
|
||||
|
||||
|
||||
#+end_src
|
||||
*** Dashboard
|
||||
|
||||
*** Modeline
|
||||
|
||||
*** Diff-hl
|
||||
|
||||
** Org-mode
|
||||
Org mode settings
|
||||
|
||||
#+begin_SRC emacs-lisp
|
||||
|
||||
|
||||
#+end_SRC
|
||||
** Completions
|
||||
*** Style
|
||||
|
||||
*** Minibuffer
|
||||
|
||||
|
||||
|
||||
** Miscellaneous
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
* Programming
|
||||
** LSP
|
||||
#+begin_src emacs-lisp
|
||||
(use-package lsp-mode
|
||||
:custom
|
||||
(lsp-completion-provider :none) ;; we use Corfu!
|
||||
:config
|
||||
(setq lsp-keep-workspace-alive nil)
|
||||
(require 'lsp-ui)
|
||||
:init
|
||||
(defun materus/orderless-dispatch-flex-first (_pattern index _total)
|
||||
(and (eq index 0) 'orderless-flex))
|
||||
|
||||
(defun materus/lsp-mode-setup-completion ()
|
||||
(setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults))
|
||||
'(orderless))
|
||||
;; Optionally configure the first word as flex filtered.
|
||||
(add-hook 'orderless-style-dispatchers #'materus/orderless-dispatch-flex-first nil 'local)
|
||||
;; Optionally configure the cape-capf-buster.
|
||||
(setq-local completion-at-point-functions (list (cape-capf-buster #'lsp-completion-at-point))))
|
||||
|
||||
:hook
|
||||
(lsp-completion-mode . materus/lsp-mode-setup-completion))
|
||||
|
||||
|
||||
|
||||
|
||||
(setq read-process-output-max (* 1024 1024 3))
|
||||
|
||||
(defun lsp-booster--advice-json-parse (old-fn &rest args)
|
||||
"Try to parse bytecode instead of json."
|
||||
(or
|
||||
(when (equal (following-char) ?#)
|
||||
(let ((bytecode (read (current-buffer))))
|
||||
(when (byte-code-function-p bytecode)
|
||||
(funcall bytecode))))
|
||||
(apply old-fn args)))
|
||||
(advice-add (if (progn (require 'json)
|
||||
(fboundp 'json-parse-buffer))
|
||||
'json-parse-buffer
|
||||
'json-read)
|
||||
:around
|
||||
#'lsp-booster--advice-json-parse)
|
||||
|
||||
(defun lsp-booster--advice-final-command (old-fn cmd &optional test?)
|
||||
"Prepend emacs-lsp-booster command to lsp CMD."
|
||||
(let ((orig-result (funcall old-fn cmd test?)))
|
||||
(if (and (not test?) ; for check lsp-server-present?
|
||||
(not (file-remote-p default-directory)) ; see lsp-resolve-final-command, it would add extra shell wrapper
|
||||
lsp-use-plists
|
||||
(not (functionp 'json-rpc-connection)) ; native json-rpc
|
||||
(executable-find "emacs-lsp-booster"))
|
||||
(progn
|
||||
(when-let* ((command-from-exec-path (executable-find (car orig-result)))) ; resolve command from exec-path (in case not found in $PATH)
|
||||
(setcar orig-result command-from-exec-path))
|
||||
(message "Using emacs-lsp-booster for %s!" orig-result)
|
||||
(cons "emacs-lsp-booster" orig-result))
|
||||
orig-result)))
|
||||
(advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command)
|
||||
#+end_src
|
||||
** DAP
|
||||
#+begin_src emacs-lisp
|
||||
(use-package dap-mode
|
||||
:config
|
||||
(require 'dap-lldb)
|
||||
(require 'dap-gdb-lldb)
|
||||
(require 'dap-cpptools)
|
||||
(setq dap-gdb-lldb-extension-version "0.27.0")
|
||||
(dap-auto-configure-mode 1)
|
||||
)
|
||||
|
||||
#+end_src
|
||||
** Nix
|
||||
#+begin_src emacs-lisp
|
||||
(use-package nix-mode)
|
||||
(use-package nix-ts-mode)
|
||||
(use-package nixfmt)
|
||||
(use-package lsp-nix)
|
||||
(with-eval-after-load 'lsp-mode
|
||||
(add-to-list 'lsp-disabled-clients '(nix-mode . nix-nil))
|
||||
(setq lsp-nix-nixd-server-path "nixd"
|
||||
lsp-nix-nixd-formatting-command [ "nixfmt" ]
|
||||
lsp-nix-nixd-nixpkgs-expr "import <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))
|
||||
#+end_src
|
||||
** Emacs Lisp
|
||||
#+begin_src emacs-lisp
|
||||
(add-hook 'emacs-lisp-mode-hook 'display-line-numbers-mode)
|
||||
#+end_src
|
||||
** C/C++
|
||||
#+begin_src emacs-lisp
|
||||
(use-package lsp-clangd)
|
||||
(setq lsp-clients-clangd-args '("--fallback-style=microsoft"))
|
||||
|
||||
(add-hook 'c-mode-hook 'lsp-deferred)
|
||||
(add-hook 'c-mode-hook 'display-line-numbers-mode)
|
||||
(add-hook 'c-ts-mode-hook 'lsp-deferred)
|
||||
(add-hook 'c-ts-mode-hook 'display-line-numbers-mode)
|
||||
|
||||
(add-hook 'c++-mode-hook 'lsp-deferred)
|
||||
(add-hook 'c++-mode-hook 'display-line-numbers-mode)
|
||||
(add-hook 'c++-ts-mode-hook 'lsp-deferred)
|
||||
(add-hook 'c++-ts-mode-hook 'display-line-numbers-mode)
|
||||
(when (treesit-language-available-p 'c) (push '(c-mode . c-ts-mode) major-mode-remap-alist))
|
||||
(when (treesit-language-available-p 'cpp) (push '(c++-mode . c++-ts-mode) major-mode-remap-alist))
|
||||
|
||||
(add-to-list 'c-default-style '(c-mode . "bsd"))
|
||||
(add-to-list 'c-default-style '(c++-mode . "bsd"))
|
||||
(add-to-list 'c-default-style '(c-ts-mode . "bsd"))
|
||||
(add-to-list 'c-default-style '(c++-ts-mode . "bsd"))
|
||||
#+end_src
|
||||
** Python
|
||||
#+begin_src emacs-lisp
|
||||
(use-package lsp-pyright)
|
||||
(setq lsp-pyright-langserver-command "pyright")
|
||||
(add-hook 'python-mode-hook 'lsp-deferred)
|
||||
(add-hook 'python-ts-mode-hook 'lsp-deferred)
|
||||
(when (treesit-language-available-p 'python) (push '(python-mode . python-ts-mode) major-mode-remap-alist))
|
||||
#+end_src
|
||||
** Java
|
||||
#+begin_src emacs-lisp
|
||||
(use-package lsp-java)
|
||||
(setq lsp-java-vmargs '("-XX:+UseParallelGC" "-XX:GCTimeRatio=4" "-XX:AdaptiveSizePolicyWeight=90" "-Dsun.zip.disableMemoryMapping=true" "-Xmx2G" "-Xms100m"))
|
||||
(add-hook 'java-mode-hook (lambda () (when (getenv "JDTLS_PATH") (setq lsp-java-server-install-dir (getenv "JDTLS_PATH")))))
|
||||
(add-hook 'java-mode-hook 'lsp-deferred)
|
||||
(add-hook 'java-mode-hook 'display-line-numbers-mode)
|
||||
|
||||
(add-hook 'java-ts-mode-hook (lambda () (when (getenv "JDTLS_PATH") (setq lsp-java-server-install-dir (getenv "JDTLS_PATH")))))
|
||||
(add-hook 'java-ts-mode-hook 'lsp-deferred)
|
||||
(add-hook 'java-ts-mode-hook 'display-line-numbers-mode)
|
||||
|
||||
(when (treesit-language-available-p 'java) (push '(java-mode . java-ts-mode) major-mode-remap-alist))
|
||||
|
||||
(add-to-list 'c-default-style '(java-mode . "java"))
|
||||
(add-to-list 'c-default-style '(java-ts-mode . "java"))
|
||||
#+end_src
|
||||
|
||||
** Other
|
||||
#+begin_src emacs-lisp
|
||||
(add-to-list 'c-default-style '(awk-mode . "awk"))
|
||||
(add-to-list 'c-default-style '(other . "bsd"))
|
||||
|
||||
|
||||
|
||||
|
||||
(setq-default c-basic-offset 4)
|
||||
(setq-default c-indent-level 4)
|
||||
|
||||
(setq-default c-ts-mode-indent-offset 4)
|
||||
(setq-default c-ts-mode-indent-style 'bsd)
|
||||
|
||||
(setq-default c-hungry-delete-key t)
|
||||
|
||||
(electric-pair-mode 1)
|
||||
(electric-indent-mode -1)
|
||||
(setq-default tab-width 4)
|
||||
(setq-default indent-tabs-mode nil)
|
||||
|
||||
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
|
||||
(add-hook 'prog-mode-hook 'electric-indent-local-mode)
|
||||
#+end_src
|
||||
* Keybindings
|
||||
** Keys
|
||||
|
||||
|
||||
|
||||
* Snippets
|
||||
** Yasnippet init
|
||||
|
||||
|
||||
|
||||
* Other
|
||||
** Update config script
|
||||
#+begin_src emacs-lisp
|
||||
(defun materus/sync-config ()
|
||||
"Function to sync config from MATERUS_CONFIG_DIR to emacs folder"
|
||||
(if (getenv "MATERUS_CONFIG_DIR")
|
||||
(progn (copy-directory (concat (getenv "MATERUS_CONFIG_DIR") "extraFiles/config/emacs/")
|
||||
user-emacs-directory t t t) t)
|
||||
(progn (message "Can't use if MATERUS_CONFIG_DIR is not set!") nil)))
|
||||
(defun materus/compare-file-time (file1 file2)
|
||||
"Returns t when file1 is newer than file2"
|
||||
(time-less-p
|
||||
(nth 5 (file-attributes file2))
|
||||
(nth 5 (file-attributes file1))
|
||||
))
|
||||
(defun materus/compile-if-needed (file)
|
||||
(unless (and (file-exists-p (concat user-emacs-directory file "c"))
|
||||
(materus/compare-file-time (concat user-emacs-directory file "c")
|
||||
(concat user-emacs-directory file)))
|
||||
(byte-compile-file (concat user-emacs-directory file)))
|
||||
)
|
||||
(defun materus/compile-config-if-needed ()
|
||||
(materus/compile-if-needed "early-init.el")
|
||||
(materus/compile-if-needed "init.el")
|
||||
(materus/compile-if-needed "etc/materus/emacs-config.el"))
|
||||
(defun materus/update-config ()
|
||||
"Will sync and compile config"
|
||||
(interactive)
|
||||
(when (materus/sync-config) (materus/compile-config-if-needed) (byte-recompile-directory (concat user-emacs-directory "etc/materus/extra") 0 t)))
|
||||
#+end_src
|
||||
|
||||
** Byte compile
|
||||
Byte compile files.
|
||||
#+begin_src emacs-lisp
|
||||
(materus/compile-config-if-needed)
|
||||
#+end_src
|
||||
* Test
|
||||
Just for testing some code
|
||||
#+begin_src emacs-lisp
|
||||
;;; (global-set-key (kbd "C-∇") (kbd "C-H"))
|
||||
;;; (global-set-key (kbd "H-∇") (lambda () (interactive) (insert-char #x2207)))
|
||||
;;; (buffer-text-pixel-size)
|
||||
;;; (set-window-vscroll nil 960 t t)
|
||||
|
||||
;;; (set-window-margins (selected-window) 0 0)
|
||||
|
||||
;;; (buffer-local-value 'var (get-buffer "your-buffer-name"))
|
||||
|
||||
;;; (setq completion-styles '(orderless basic)
|
||||
;;; completion-category-defaults nil
|
||||
;;; completion-category-overrides '((file (styles partial-completion))))
|
||||
#+end_src
|
|
@ -1,362 +0,0 @@
|
|||
;;; -*- lexical-binding: t; -*-
|
||||
|
||||
;; [[file:../../emacs-materus-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:../../emacs-materus-config.org::*Init package manager config][Init package manager config:1]]
|
||||
|
||||
;; Init package manager config:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-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:../../emacs-materus-config.org::*Misc][Misc:1]]
|
||||
;; Rainbow mode
|
||||
;; Misc:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Org-mode][Org-mode:1]]
|
||||
|
||||
;; Org-mode:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-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:../../emacs-materus-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:../../emacs-materus-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:../../emacs-materus-config.org::*Emacs Lisp][Emacs Lisp:1]]
|
||||
(add-hook 'emacs-lisp-mode-hook 'display-line-numbers-mode)
|
||||
;; Emacs Lisp:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-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:../../emacs-materus-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:../../emacs-materus-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:../../emacs-materus-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:../../emacs-materus-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:../../emacs-materus-config.org::*Byte compile][Byte compile:1]]
|
||||
(materus/compile-config-if-needed)
|
||||
;; Byte compile:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-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 +1,548 @@
|
|||
;;; -*- 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
|
||||
|
||||
;; [[file:emacs-materus-config.org::*Init][Init:2]]
|
||||
(setq-default materus/use-nix-packages (require 'materus-config nil 'noerror))
|
||||
(require 'cl-lib)
|
||||
(require 'package)
|
||||
(setq read-process-output-max (* 1024 1024 3))
|
||||
|
||||
(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
|
||||
;; 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))
|
||||
|
||||
(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
|
||||
(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)))
|
||||
|
||||
(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 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)
|
||||
(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 eat)
|
||||
|
||||
(materus/use-package vterm)
|
||||
(use-package helm
|
||||
:config
|
||||
(setq helm-x-icons-provider 'nerd-icons)
|
||||
(setq helm-move-to-line-cycle-in-source nil)
|
||||
(helm-mode 1)
|
||||
)
|
||||
(use-package helm-projectile
|
||||
:after (helm projectile))
|
||||
(use-package helm-ag
|
||||
:after (helm))
|
||||
(use-package helm-rg
|
||||
:after (helm))
|
||||
(use-package helm-ls-git
|
||||
:after (helm))
|
||||
(use-package company
|
||||
:hook
|
||||
((prog-mode . company-mode)))
|
||||
(use-package slime-company
|
||||
:if (executable-find "sbcl")
|
||||
:after (company slime))
|
||||
|
||||
(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)
|
||||
|
||||
|
||||
(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 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)
|
||||
: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-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)))
|
||||
(use-package paredit)
|
||||
|
||||
(use-package slime
|
||||
:if (executable-find "sbcl")
|
||||
:config
|
||||
(setq inferior-lisp-program "sbcl")
|
||||
(slime-setup '(slime-fancy slime-company)))
|
||||
(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 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-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)
|
||||
|
||||
;; 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)
|
||||
|
||||
;; Helm
|
||||
(global-set-key (kbd "M-x") 'helm-M-x)
|
||||
(global-set-key (kbd "C-x r b") #'helm-filtered-bookmarks)
|
||||
(global-set-key (kbd "C-x C-f") #'helm-find-files)
|
||||
(global-set-key (kbd "C-x b") #'helm-mini)
|
||||
;; 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)))
|
||||
|
|
Loading…
Reference in New Issue