diff --git a/configurations/host/materusPC/audio.nix b/configurations/host/materusPC/audio.nix index ca1ef32..b5ba550 100644 --- a/configurations/host/materusPC/audio.nix +++ b/configurations/host/materusPC/audio.nix @@ -1,6 +1,6 @@ { pkgs, lib, ... }: { - + #REGION test #sound.enable = true; security.rtkit.enable = true; services.pipewire = { @@ -9,20 +9,20 @@ alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; - systemWide = false; + systemWide = true; jack.enable = true; }; hardware.pulseaudio.enable = false; - environment.sessionVariables = let - makePluginPath = format: - (lib.makeSearchPath format [ + makePluginPath = + format: + "$HOME/.${format}:" + + (lib.makeSearchPath format [ "$HOME/.nix-profile/lib" "/run/current-system/sw/lib" "/etc/profiles/per-user/$USER/lib" - ]) - + ":$HOME/.${format}"; + ]); in { ALSOFT_DRIVERS = "pulse"; @@ -36,11 +36,37 @@ }; - services.udev = { + services.udev = let + script = pkgs.writeShellScript "arch-mknod" '' + ACTION=$1 + KERNEL=$(basename $2) + MAJOR=$3 + MINOR=$4 + + + if (systemctl is-active --quiet systemd-nspawn@archlinux); then + if [[ $ACTION == "add" || "$ACTION" == "change" ]]; then + machinectl shell root@archlinux /bin/bash -c " + if ! [ -f /dev/$KERNEL ]; then + mknod /dev/$KERNEL c $MAJOR $MINOR + chmod 660 /dev/$KERNEL + chown root:input /dev/$KERNEL + fi + " + elif [[ $ACTION == "remove" ]]; then + machinectl shell root@archlinux /bin/rm /dev/$KERNEL + fi + fi + + ''; + in { extraRules = '' KERNEL=="rtc0", GROUP="audio" KERNEL=="hpet", GROUP="audio" DEVPATH=="/devices/virtual/misc/cpu_dma_latency", OWNER="root", GROUP="audio", MODE="0660" + + + SUBSYSTEM=="hidraw", KERNEL=="hidraw*", RUN+="${script} ''$env{ACTION} ''$env{DEVNAME} ''$env{MAJOR} ''$env{MINOR}" ''; }; environment.systemPackages = with pkgs; [ diff --git a/configurations/host/materusPC/containers/arch.nix b/configurations/host/materusPC/containers/arch.nix index a589d74..69620bc 100644 --- a/configurations/host/materusPC/containers/arch.nix +++ b/configurations/host/materusPC/containers/arch.nix @@ -102,10 +102,15 @@ in "/:/run/host-root" "/run/udev" + "/run/pipewire" + + "/sys/class" + "/sys/devices" "/dev/fuse" "/dev/snd" "/dev/input" + "/dev/uinput" "/dev/shm" "/dev/kfd" "/dev/dri" @@ -131,9 +136,10 @@ in overrideStrategy = "asDropin"; serviceConfig = { DeviceAllow = [ - "char-tty rwm" - "char-input rwm" - "char-drm rwm" + "char-* rwm" + "block-* rwm" + "/dev/shm rwm" + ]; }; }; diff --git a/configurations/host/materusPC/hardware/boot.nix b/configurations/host/materusPC/hardware/boot.nix index 00654f2..2148f9f 100644 --- a/configurations/host/materusPC/hardware/boot.nix +++ b/configurations/host/materusPC/hardware/boot.nix @@ -24,7 +24,8 @@ in "rcu_nocbs=${materusArg.materusPC.vmCores}" "nohz_full=${materusArg.materusPC.vmCores}" "vfio_iommu_type1.allow_unsafe_interrupts=1" - "pcie_acs_override=downstream,multifunction" /*"pci-stub.ids=1002:744c"*/ + "pcie_acs_override=downstream,multifunction" + #''vfio-pci.ids="1002:744c"'' "nox2apic" "nvme_core.default_ps_max_latency_us=0" "nvme_core.io_timeout=255" @@ -32,10 +33,13 @@ in "nvme_core.shutdown_timeout=10" "amd_iommu=on" "amdgpu.ppfeaturemask=0xffffffff" + "amdgpu.runpm=0" "iommu=pt" "psi=1" + "i915.force_probe=!56a6" + "xe.force_probe=56a6" ] ++ video; - boot.kernelModules = [ "pci-stub" "amdgpu" "i2c_dev" "kvm_amd" "vfio" "vfio_iommu_type1" "vfio-pci" "kvmfr" ]; + 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 @@ -49,8 +53,8 @@ in boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod" ]; - boot.initrd.kernelModules = [ "amdgpu" ]; - + boot.initrd.kernelModules = [ "vfio-pci" "amdgpu" ]; + boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback kvmfr ]; diff --git a/configurations/host/materusPC/hardware/default.nix b/configurations/host/materusPC/hardware/default.nix index 79395d2..a4ba6fa 100644 --- a/configurations/host/materusPC/hardware/default.nix +++ b/configurations/host/materusPC/hardware/default.nix @@ -31,6 +31,8 @@ hardware.opengl.driSupport32Bit = true; hardware.opengl.extraPackages = with pkgs; [ vaapiVdpau + vpl-gpu-rt + intel-media-driver libvdpau-va-gl amdvlk vkbasalt diff --git a/configurations/host/materusPC/home/materus/default.nix b/configurations/host/materusPC/home/materus/default.nix index 1462705..f0c028c 100644 --- a/configurations/host/materusPC/home/materus/default.nix +++ b/configurations/host/materusPC/home/materus/default.nix @@ -1,16 +1,21 @@ -{ pkgs, materusArg, lib, ... }: +{ + pkgs, + materusArg, + lib, + ... +}: { imports = [ ./plasma.nix ]; home.stateVersion = "23.05"; home.homeDirectory = "/home/materus"; - + programs.git.signing.signByDefault = true; xdg.userDirs.enable = true; materus.profile = { - + fonts.enable = lib.mkDefault true; nixpkgs.enable = lib.mkDefault false; enableDesktop = lib.mkDefault true; @@ -19,78 +24,86 @@ enableNixDevel = lib.mkDefault true; editor.emacs.enable = true; editor.code.fhs.enable = true; - editor.code.fhs.packages = (ps: with ps; let llvmpkgs = llvmPackages_18; in [ - llvmpkgs.clang - llvmpkgs.llvm - llvmpkgs.bintools - llvmpkgs.lld - llvmpkgs.lldb - llvmpkgs.libllvm - llvmpkgs.mlir - llvmpkgs.libllvm.dev + editor.code.fhs.packages = ( + ps: + with ps; + let + llvmpkgs = llvmPackages_18; + in + [ + llvmpkgs.clang + llvmpkgs.llvm + llvmpkgs.bintools + llvmpkgs.lld + llvmpkgs.lldb + llvmpkgs.libllvm + llvmpkgs.mlir + llvmpkgs.libllvm.dev - fpc - xmake - raylib - gcc - gdb - materusArg.unstable.nixd - nixfmt-rfc-style - nixpkgs-fmt - cmake - gnumake - ninja - binutils - coreutils - util-linux - openssl - openssl.dev - pkg-config - dotnet-sdk_8 - mono - mold - python3 - lua - gtk4.dev - gtk4 - glib - glib.dev - miniaudio - SDL2.dev - SDL2 - freeglut.dev - freeglut - boost.dev - boost - glew.dev - libGL.dev - libGLU.dev - vulkan-loader.dev - vulkan-headers - xorg.xorgproto - xorg.libX11.dev - xorg.libXrandr.dev - xorg.libXrender.dev - rustup - freetype.dev + fpc + xmake + raylib + gcc + gdb + materusArg.unstable.nixd + nixfmt-rfc-style + nixpkgs-fmt + cmake + gnumake + ninja + binutils + coreutils + util-linux + openssl + openssl.dev + pkg-config + dotnet-sdk_8 + mono + mold + python3 + lua + gtk4.dev + gtk4 + glib + glib.dev + miniaudio + SDL2.dev + SDL2 + freeglut.dev + freeglut + boost.dev + boost + glew.dev + libGL.dev + libGLU.dev + vulkan-loader.dev + vulkan-headers + xorg.xorgproto + xorg.libX11.dev + xorg.libXrandr.dev + xorg.libXrender.dev + rustup + freetype.dev - fpc - gradle - bison - flex + fpc + gradle + bison + flex - ldc - dmd - dub - ]); - - + ldc + dmd + dub + ] + ); }; home.packages = [ materusArg.pkgs.ffmpeg_7-amf-full - (materusArg.pkgs.polymc-qt5.wrap { extraJDKs = [ pkgs.graalvm-ce ]; extraLibs = [ ]; }) + (materusArg.pkgs.polymc.wrap { + extraJDKs = [ pkgs.graalvm-ce ]; + extraLibs = [ ]; + }) pkgs.git-crypt pkgs.obsidian ]; @@ -133,7 +146,11 @@ exec = "${script} %U"; icon = "brave-browser"; terminal = false; - categories = [ "Application" "Network" "WebBrowser" ]; + categories = [ + "Application" + "Network" + "WebBrowser" + ]; mimeType = [ "application/pdf" "application/rdf+xml" diff --git a/configurations/host/materusPC/other/desktop/kde.nix b/configurations/host/materusPC/other/desktop/kde.nix index 28cb618..c01e8a3 100644 --- a/configurations/host/materusPC/other/desktop/kde.nix +++ b/configurations/host/materusPC/other/desktop/kde.nix @@ -1,6 +1,5 @@ { config, pkgs, lib, ... }: { - services.displayManager.defaultSession = "plasma"; xdg.portal.enable = true; xdg.portal.wlr.enable = true; diff --git a/configurations/host/materusPC/other/desktop/sddm.nix b/configurations/host/materusPC/other/desktop/sddm.nix index 2b05310..59cb69c 100644 --- a/configurations/host/materusPC/other/desktop/sddm.nix +++ b/configurations/host/materusPC/other/desktop/sddm.nix @@ -1,5 +1,10 @@ { config, pkgs, lib, ... }: 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] @@ -21,7 +26,7 @@ let mode=1920x1080@240 [output] - name=DP-2 + name=DP-4 mode=off [output] @@ -31,6 +36,8 @@ let ''; 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"; @@ -39,6 +46,17 @@ in "--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 = { @@ -49,4 +67,4 @@ in CursorSize = "24"; }; }; -} \ No newline at end of file +} diff --git a/configurations/host/materusPC/tmp.nix b/configurations/host/materusPC/tmp.nix index 466b959..4dab01f 100644 --- a/configurations/host/materusPC/tmp.nix +++ b/configurations/host/materusPC/tmp.nix @@ -6,7 +6,7 @@ }: { - + programs.gamemode.enable = true; programs.corectrl.enable = true; @@ -14,13 +14,29 @@ systemd.tmpfiles.rules = [ "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}" ]; + # Gamepad + services.udev = { + packages = with pkgs; [ + game-devices-udev-rules + ]; + }; + hardware.uinput.enable = true; + hardware.steam-hardware.enable = true; + + nix.package = pkgs.nixVersions.nix_2_28; + programs.steam = { + enable = false; + remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play + dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server + localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers + }; services.flatpak.enable = true; services.gvfs.enable = true; services.xserver.xkb.layout = "pl"; services.xserver.enable = true; - services.xserver.videoDrivers = [ "amdgpu" ]; + #services.xserver.videoDrivers = [ "amdgpu" "intel" ]; services.dbus.enable = true; services.dbus.packages = [ pkgs.gcr ]; @@ -128,9 +144,6 @@ autoStart = false; }; - hardware.sane.enable = true; - hardware.sane.extraBackends = [ pkgs.hplipWithPlugin ]; - environment.enableAllTerminfo = true; environment.pathsToLink = [ "/share/zsh" diff --git a/configurations/profile/home/editor/neovim.nix b/configurations/profile/home/editor/neovim.nix index 46585ed..a27c4b7 100644 --- a/configurations/profile/home/editor/neovim.nix +++ b/configurations/profile/home/editor/neovim.nix @@ -7,9 +7,9 @@ in config = lib.mkIf cfg.enable { programs.neovim = { enable = true; - package = materusArg.unstable.neovim-unwrapped; + package = pkgs.neovim-unwrapped; coc.enable = true; - coc.package = materusArg.unstable.vimPlugins.coc-nvim; + coc.package = pkgs.vimPlugins.coc-nvim; viAlias = true; vimAlias = true; vimdiffAlias = true; @@ -25,7 +25,7 @@ in extraPackages = with pkgs;[ ]; - plugins = with materusArg.unstable.vimPlugins;[ + plugins = with pkgs.vimPlugins;[ syntastic vim-fugitive vim-airline diff --git a/extraFiles/config/emacs/EMACS-CONFIG.org b/extraFiles/config/emacs/EMACS-CONFIG.org index 2f36303..467ed3e 100644 --- a/extraFiles/config/emacs/EMACS-CONFIG.org +++ b/extraFiles/config/emacs/EMACS-CONFIG.org @@ -5,6 +5,7 @@ #+PROPERTY: header-args :tangle no :noweb yes #+OPTIONS: \n:t #+auto_tangle: t + * Table of Contents :noexport:TOC_3: - [[#early-init][Early Init]] - [[#init-core][Init Core]] @@ -23,12 +24,14 @@ - [[#modeline][Modeline]] - [[#dashboard][Dashboard]] - [[#highlight-indent-guides][Highlight Indent Guides]] + - [[#outli][Outli]] + - [[#visual-replace][Visual Replace]] - [[#terminal][Terminal]] - [[#eat][Eat]] - [[#vterm][Vterm]] - [[#navigation-and-completion][Navigation and Completion]] - - [[#helm][HELM]] - - [[#comapny][Comapny]] + - [[#minibuffer-orderless-vertico-marginalia-consult][minibuffer (orderless, vertico, marginalia, consult)]] + - [[#code-completion-cape-corfu][Code completion (Cape, corfu)]] - [[#dirvish][Dirvish]] - [[#treemacs][Treemacs]] - [[#programming][Programming]] @@ -66,9 +69,11 @@ - [[#keybindings][Keybindings]] - [[#final-code][Final Code]] - [[#links][Links]] +- [[#tests][Tests]] - [[#archive][Archive]] - - [[#minibuffer-orderless-vertico-marginalia-consult][minibuffer (orderless, vertico, marginalia, consult)]] - - [[#code-completion-cape-corfu][Code completion (Cape, corfu)]] + - [[#navigation-and-completion-1][Navigation and completion]] + - [[#helm][HELM]] + - [[#comapny][Comapny]] * Early Init #+begin_src emacs-lisp :tangle (expand-file-name "early-init.el" user-emacs-directory) :noweb-ref early-init @@ -81,7 +86,9 @@ (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 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 @@ -95,7 +102,7 @@ (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 @@ -146,21 +153,17 @@ ;;; NATIVE COMPILATION (setq native-comp-async-report-warnings-errors nil) ; Silence warnings - (setq native-comp-speed 3) ; Set native-comp speed + (setq native-comp-speed 2) ; Set native-comp speed (setq native-comp-jit-compilation t - ;;native-comp-deferred-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/")))) +(when (boundp 'native-comp-eln-load-path) + (startup-redirect-eln-cache (expand-file-name "var/eln-cache/" user-emacs-directory))) #+end_src * Init Core @@ -176,7 +179,7 @@ (print "WARN: emacs-build-time not set up, using current time") (setq emacs-build-time (decode-time (current-time)))) (add-to-list 'load-path (concat user-emacs-directory "etc/pkgs/")) ; Extra load path for packages - + (defvar materus/nixos-config (getenv "MATERUS_CONFIG_DIR")) (setq read-process-output-max (* 1024 1024 3)) #+END_src @@ -237,6 +240,33 @@ (use-package ,package :ensure nil ,@body)) `(use-package ,package ,@body))) + (defun materus/--outli-modes () + "Check if supported mode" + (or (eq major-mode 'nix-mode) + (eq major-mode 'nix-ts-mode) + (eq major-mode 'c-mode) + (eq major-mode 'c-ts-mode) + (eq major-mode 'c++-mode) + (eq major-mode 'c++-ts-mode))) + + (defun materus/--fix-outli-formatting (FORMATTER STATUS) + "Remove whitespaces before outli headers" + (when (and (materus/--outli-modes) + (eq STATUS :reformatted)) + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (while (re-search-forward (concat "^[ ]+\\(" comment-start "\\*+ +[^ ].*\\)[ ]*") nil t) + (replace-match "\\1")))))) + + (defun materus/--electric-indent-ignore-outli (char) + "Don't indent outli headers" + (when (materus/--outli-modes) + (save-excursion + (backward-char) + (beginning-of-line) + (if (not (looking-at-p (concat "^\\(" comment-start "\\*+ +[^ ].*\\)[ ]*"))) nil 'no-indent)))) #+END_src ** Custom File @@ -269,6 +299,8 @@ (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) @@ -329,19 +361,19 @@ Setting up mouse #+end_src *** Modeline #+begin_src emacs-lisp - ;; (use-package doom-modeline - ;; :init (setq doom-modeline-support-imenu t) - ;; :hook (elpaca-after-init . doom-modeline-mode) - ;; :config - ;; (setq doom-modeline-icon t) - ;; (setq doom-modeline-project-detection 'auto) - ;; (setq doom-modeline-height 20) - ;; (setq doom-modeline-enable-word-count t) - ;; (setq doom-modeline-minor-modes t) - ;; (setq display-time-24hr-format t) - ;; (display-time-mode 1) - ;; (column-number-mode 1) - ;; (line-number-mode 1)) + (use-package 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)) @@ -377,6 +409,20 @@ Setting up mouse (use-package highlight-indent-guides :hook ((prog-mode . highlight-indent-guides-mode))) #+end_src +*** Outli +#+begin_src emacs-lisp + (use-package outli + :ensure (:host github :repo "jdtsmith/outli") + :hook ((prog-mode . outli-mode))) +#+end_src +*** Visual Replace +#+begin_src emacs-lisp + (use-package visual-replace + :defer t + :bind (("C-r" . visual-replace) + :map isearch-mode-map + ("C-r" . visual-replace-from-isearch))) +#+end_src ** Terminal *** Eat #+begin_src emacs-lisp @@ -414,40 +460,109 @@ Setting up mouse (materus/use-package vterm) #+end_src ** Navigation and Completion -*** HELM +*** minibuffer (orderless, vertico, marginalia, consult) #+begin_src emacs-lisp - (use-package helm - :config - (setq helm-x-icons-provider 'nerd-icons) - (setq helm-move-to-line-cycle-in-source nil) - (helm-mode 1) - ) - (use-package helm-projectile - :after (helm projectile)) - (use-package helm-ag - :after (helm)) - (use-package helm-rg - :after (helm)) - (use-package helm-ls-git - :after (helm)) -#+end_src -#+begin_src emacs-lisp :tangle no :noweb-ref keybindings - ;; 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) -#+end_src -*** Comapny -#+begin_src emacs-lisp - (use-package company - :hook - ((prog-mode . company-mode))) - (use-package slime-company - :if (executable-find "sbcl") - :after (company slime)) + (use-package orderless + :init + ;; Tune the global completion style settings to your liking! + ;; This affects the minibuffer and non-lsp completion at point. + (setq completion-styles '(basic partial-completion orderless) + completion-category-defaults nil + completion-category-overrides nil)) + (use-package consult) + (use-package marginalia) + (use-package embark) + (use-package embark-consult + :after (embark consult)) + (use-package vertico + :ensure t + :after (consult marginalia embark) + :config + (setq completion-in-region-function + (lambda (&rest args) + (apply (if vertico-mode + #'consult-completion-in-region + #'completion--in-region) + args))) + (vertico-mode 1) + (marginalia-mode 1)) + (use-package vertico-mouse + :config + (vertico-mouse-mode 1) + :ensure nil + :after (vertico)) #+end_src + +*** Code completion (Cape, corfu) +#+begin_src emacs-lisp + (use-package cape) + + (use-package corfu + :ensure t + :after (lsp-mode cape) + ;; Optional customizations + :custom + (corfu-cycle nil) ;; Enable cycling for `corfu-next/previous' + (corfu-auto t) ;; Enable auto completion + (global-corfu-minibuffer nil) + ;; (corfu-quit-at-boundary nil) ;; Never quit at completion boundary + ;; (corfu-quit-no-match nil) ;; Never quit, even if there is no match + (corfu-preview-current nil) ;; Disable current candidate preview + ;; (corfu-preselect 'prompt) ;; Preselect the prompt + ;; (corfu-on-exact-match nil) ;; Configure handling of exact matches + + ;; Enable Corfu only for certain modes. See also `global-corfu-modes'. + ;; :hook ((prog-mode . corfu-mode) + ;; (shell-mode . corfu-mode) + ;; (eshell-mode . corfu-mode)) + + ;; Recommended: Enable Corfu globally. This is recommended since Dabbrev can + ;; be used globally (M-/). See also the customization variable + ;; `global-corfu-modes' to exclude certain modes. + :init + (global-corfu-mode 1) + (corfu-popupinfo-mode 1) + (corfu-history-mode 1) + + (defun materus/orderless-dispatch-flex-first (_pattern index _total) + (and (eq index 0) 'orderless-flex)) + + (defun materus/lsp-mode-setup-completion () + (setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults)) + '(orderless)) + ;; Optionally configure the first word as flex filtered. + (add-hook 'orderless-style-dispatchers #'materus/orderless-dispatch-flex-first nil 'local) + ;; Optionally configure the cape-capf-buster. + (setq-local completion-at-point-functions (list (cape-capf-buster #'lsp-completion-at-point)))) + + :hook + (lsp-completion-mode . materus/lsp-mode-setup-completion)) + + + + (use-package corfu-terminal + :after (corfu) + :config + (when (or (daemonp) (not (display-graphic-p))) + (corfu-terminal-mode))) + + (use-package corfu-mouse + :after (corfu) + :ensure (:type git :repo "https://codeberg.org/materus/emacs-corfu-mouse.git") + :config + (corfu-mouse-mode) + (keymap-set corfu--mouse-ignore-map "" 'ignore) + (keymap-set corfu-map "" 'ignore)) + + (use-package kind-icon + :after (corfu) + :config + (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)) + + + + #+end_src *** Dirvish #+begin_src emacs-lisp (use-package dirvish @@ -503,6 +618,7 @@ Setting up mouse (add-hook 'prog-mode-hook 'display-line-numbers-mode) (add-hook 'prog-mode-hook 'electric-indent-local-mode) + (add-hook 'electric-indent-functions 'materus/--electric-indent-ignore-outli) #+end_src **** LSP #+begin_src emacs-lisp @@ -513,7 +629,7 @@ Setting up mouse ;; (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." @@ -564,6 +680,18 @@ Setting up mouse (dap-auto-configure-mode 1)) #+end_src +**** Formatting +#+begin_src emacs-lisp + (use-package format-all + :hook ((prog-mode . format-all-mode)) + :config + (defun format-all--buffer-from-hook () nil) ; I don't want formatting on save + (add-hook 'format-all-after-format-functions 'materus/--fix-outli-formatting) + (setq-default format-all-formatters + '(("Nix" (nixfmt)) + ("C++" (clang-format "--fallback-style=microsoft")) + ("C" (clang-format "--fallback-style=microsoft"))))) +#+end_src *** Snippets #+begin_src emacs-lisp (use-package yasnippet @@ -588,8 +716,8 @@ Setting up mouse (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)) + (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")) @@ -632,15 +760,14 @@ Setting up mouse (use-package nix-mode) (use-package nix-ts-mode) (use-package lsp-nix - :after (lsp-mode nix-mode nix-ts-mode) + :after (lsp-mode nix-mode nix-ts-mode format-all) :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" ]) ) + (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 @@ -666,8 +793,7 @@ Setting up mouse (use-package slime :if (executable-find "sbcl") :config - (setq inferior-lisp-program "sbcl") - (slime-setup '(slime-fancy slime-company))) + (setq inferior-lisp-program "sbcl")) #+end_src *** Shell **** Bash @@ -704,7 +830,7 @@ Setting up mouse ** Notes & Organization *** Org Mode #+begin_src emacs-lisp - (use-package org + (use-package org :mode (("\\.org$" . org-mode)) :hook ((org-mode . org-indent-mode) @@ -885,10 +1011,6 @@ Setting up mouse ;; 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) @@ -922,7 +1044,6 @@ Setting up mouse (add-hook 'elpaca-after-init-hook #'materus/keybind-set ) #+end_src - * Final Code #+begin_src emacs-lisp :tangle (expand-file-name "init.el" user-emacs-directory) :noweb-ref final ;;; -*- lexical-binding: t; -*- @@ -936,115 +1057,80 @@ Setting up mouse <> #+end_src Make copy in this repository -#+begin_src emacs-lisp :tangle ./early-init.el +#+begin_src emacs-lisp :tangle (if (not (string= default-directory user-emacs-directory)) "./early-init.el" "no") <> #+end_src -#+begin_src emacs-lisp :tangle ./init.el +#+begin_src emacs-lisp :tangle (if (not (string= default-directory user-emacs-directory)) "./init.el" "no") <> #+end_src * Links -[[https://github.com/emacs-tw/awesome-emacs][awesome-emacs]] +[[https://github.com/emacs-tw/awesome-emacs][awesome-emacs]] - Nice list of Emacs Packages +[[https://codeberg.org/ashton314/emacs-bedrock][Emacs Bedrock]] - Initial Config to base on +[[https://github.com/benide/emacs-config][benide Config]] - Took use-package macro for NixOS from there +[[https://gitlab.com/dwt1/dotfiles/-/blob/master/.config/emacs/config.org][DT's Config]] - Some inspiration +* Tests +:PROPERTIES: +:header-args: :tangle no +:END: +#+begin_src emacs-lisp :tangle no + + + + + (let* ((current-pos (point)) + (start (re-search-backward "^[ \t]*\\(#\\|//\\|;;\\)-NARROW_START[ \t]+\\[\\(.*\\)\\]" nil t)) + (match (match-string-no-properties 2)) + (end (re-search-forward (concat "^[ \t]*\\(#\\|//\\|;;\\)-NARROW_END[ \t]+\\[\\" (regexp-quote match) "\\]") nil t))) + (if (buffer-narrowed-p) + (progn (widen) (goto-char current-pos)) + (progn + (if start + (if end + (if ( >= end current-pos) (narrow-to-region start end) + (message "Not between narrow tags")) + (message "Not between narrow tags")) + (message "Not between narrow tags")) + (goto-char current-pos)))) +#+end_src * Archive :PROPERTIES: :header-args: :tangle no :END: -** minibuffer (orderless, vertico, marginalia, consult) +** Navigation and completion +*** HELM #+begin_src emacs-lisp - (use-package orderless - :init - ;; Tune the global completion style settings to your liking! - ;; This affects the minibuffer and non-lsp completion at point. - (setq completion-styles '(basic partial-completion orderless) - completion-category-defaults nil - completion-category-overrides nil)) - (use-package consult) - (use-package marginalia) - - - - (use-package vertico - :after (consult marginalia) + (use-package helm :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)) + (setq helm-x-icons-provider 'nerd-icons) + (setq helm-move-to-line-cycle-in-source nil) + (helm-mode 1) + ) + (use-package helm-projectile + :after (helm projectile)) + (use-package helm-ag + :after (helm)) + (use-package helm-rg + :after (helm)) + (use-package helm-ls-git + :after (helm)) #+end_src +#+begin_src emacs-lisp :tangle no + ;; Helm + (global-set-key (kbd "M-x") 'helm-M-x) + (global-set-key (kbd "C-x r b") #'helm-filtered-bookmarks) + (global-set-key (kbd "C-x C-f") #'helm-find-files) + (global-set-key (kbd "C-x b") #'helm-mini) -** Code completion (Cape, corfu) + (define-key helm-map (kbd "") #'right-char) + (define-key helm-map (kbd "") #'left-char) +#+end_src +*** Comapny #+begin_src emacs-lisp - (use-package cape) + (use-package company + :hook + ((prog-mode . company-mode))) + (use-package slime-company + :if (executable-find "sbcl") + :after (company slime)) - (use-package corfu - :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) - ;; :config - ;; :ensure nil - ;; (corfu-mouse-mode) - ;; (keymap-set corfu--mouse-ignore-map "" 'ignore) - ;; (keymap-set corfu-map "" 'ignore)) - - (use-package kind-icon - :after (corfu) - :config - (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)) - - - - #+end_src +#+end_src diff --git a/extraFiles/config/emacs/early-init.el b/extraFiles/config/emacs/early-init.el index 3fdaff4..35d0ae4 100644 --- a/extraFiles/config/emacs/early-init.el +++ b/extraFiles/config/emacs/early-init.el @@ -1,89 +1,87 @@ ;;; -*- lexical-binding: t; -*- - -;;; VARIABLES + + ;;; VARIABLES -(setenv "LSP_USE_PLISTS" "true") ; Make lsp-mode use plists + (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 + (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 package-enable-at-startup nil) + (setq package-quickstart nil) ; Disable package quickstart -(setq inhibit-startup-screen t) + (setq inhibit-startup-screen t) -(setq inhibit-compacting-font-caches t) ; Don't compact fonts + (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) + (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 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 + (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 + (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 + ;;; 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 + (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 + ;;; FRAMES -(setq frame-inhibit-implied-resize t) -(setq frame-resize-pixelwise t) -(setq window-resize-pixelwise t) ; Allow pixelwise resizing of window and frame + (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))) + (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) - ))) + (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 + ;;; NATIVE COMPILATION -(setq native-comp-async-report-warnings-errors nil) ; Silence warnings -(setq native-comp-speed 3) ; Set native-comp speed + (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) + (setq native-comp-jit-compilation t + native-comp-deferred-compilation t + package-native-compile t) -;; Setting up native-comp cache location + ;; 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/")))) +(when (boundp 'native-comp-eln-load-path) + (startup-redirect-eln-cache (expand-file-name "var/eln-cache/" user-emacs-directory))) diff --git a/extraFiles/config/emacs/init.el b/extraFiles/config/emacs/init.el index d2a2483..0249bb2 100644 --- a/extraFiles/config/emacs/init.el +++ b/extraFiles/config/emacs/init.el @@ -6,7 +6,7 @@ (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 @@ -61,6 +61,33 @@ (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 @@ -90,6 +117,8 @@ (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) @@ -126,6 +155,7 @@ (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 @@ -146,19 +176,19 @@ (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 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)) @@ -182,29 +212,112 @@ (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 eat) (materus/use-package vterm) -(use-package helm +(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 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 + (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 - ((prog-mode . company-mode))) -(use-package slime-company - :if (executable-find "sbcl") - :after (company slime)) + (lsp-completion-mode . materus/lsp-mode-setup-completion)) + + + +(use-package corfu-terminal + :after (corfu) + :config + (when (or (daemonp) (not (display-graphic-p))) + (corfu-terminal-mode))) + +(use-package corfu-mouse + :after (corfu) + :ensure (:type git :repo "https://codeberg.org/materus/emacs-corfu-mouse.git") + :config + (corfu-mouse-mode) + (keymap-set corfu--mouse-ignore-map "" 'ignore) + (keymap-set corfu-map "" 'ignore)) + +(use-package kind-icon + :after (corfu) + :config + (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)) + + (use-package dirvish :after (nerd-icons) @@ -237,7 +350,7 @@ ;; (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." @@ -284,6 +397,15 @@ (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)) @@ -302,8 +424,8 @@ (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)) + (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")) @@ -337,15 +459,14 @@ (use-package nix-mode) (use-package nix-ts-mode) (use-package lsp-nix - :after (lsp-mode nix-mode nix-ts-mode) + :after (lsp-mode nix-mode nix-ts-mode format-all) :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" ]) ) + (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 @@ -362,8 +483,7 @@ (use-package slime :if (executable-find "sbcl") :config - (setq inferior-lisp-program "sbcl") - (slime-setup '(slime-fancy slime-company))) + (setq inferior-lisp-program "sbcl")) (use-package bash-completion) (use-package diff-hl :config @@ -379,33 +499,33 @@ (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))))))) + :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 @@ -477,10 +597,6 @@ ;; 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) @@ -534,11 +650,6 @@ (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)) diff --git a/flake.lock b/flake.lock index f715682..962281d 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "fromYaml": "fromYaml" }, "locked": { - "lastModified": 1732200724, - "narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=", + "lastModified": 1746562888, + "narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=", "owner": "SenchoPens", "repo": "base16.nix", - "rev": "153d52373b0fb2d343592871009a286ec8837aec", + "rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89", "type": "github" }, "original": { @@ -24,11 +24,11 @@ "fromYaml": "fromYaml_2" }, "locked": { - "lastModified": 1732200724, - "narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=", + "lastModified": 1746562888, + "narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=", "owner": "SenchoPens", "repo": "base16.nix", - "rev": "153d52373b0fb2d343592871009a286ec8837aec", + "rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89", "type": "github" }, "original": { @@ -159,11 +159,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1744967866, - "narHash": "sha256-jWHOSSZ03R1Dvru5rXEForMgkV1RAsCd+IjMmehpmFg=", + "lastModified": 1747188492, + "narHash": "sha256-9DZ/Wr6zDvb2GxgvxkGxCFJctqhn4vIPeCh+Yctflg0=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "c54fd7dc3e696136c8257abfe12815274b42660e", + "rev": "6d15ffa9720fc7d6635238d961593a289062b555", "type": "github" }, "original": { @@ -182,11 +182,11 @@ "nixpkgs-stable": "nixpkgs-stable_2" }, "locked": { - "lastModified": 1744967866, - "narHash": "sha256-jWHOSSZ03R1Dvru5rXEForMgkV1RAsCd+IjMmehpmFg=", + "lastModified": 1747188492, + "narHash": "sha256-9DZ/Wr6zDvb2GxgvxkGxCFJctqhn4vIPeCh+Yctflg0=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "c54fd7dc3e696136c8257abfe12815274b42660e", + "rev": "6d15ffa9720fc7d6635238d961593a289062b555", "type": "github" }, "original": { @@ -436,11 +436,11 @@ ] }, "locked": { - "lastModified": 1744743431, - "narHash": "sha256-iyn/WBYDc7OtjSawbegINDe/gIkok888kQxk3aVnkgg=", + "lastModified": 1747020534, + "narHash": "sha256-D/6rkiC6w2p+4SwRiVKrWIeYzun8FBg7NlMKMwQMxO0=", "owner": "nix-community", "repo": "home-manager", - "rev": "c61bfe3ae692f42ce688b5865fac9e0de58e1387", + "rev": "b4bbdc6fde16fc2051fcde232f6e288cd22007ca", "type": "github" }, "original": { @@ -458,11 +458,11 @@ ] }, "locked": { - "lastModified": 1744919155, - "narHash": "sha256-IJksPW32V9gid9vDxoloJMRk+YGjxq5drFHBFeBkKU8=", + "lastModified": 1747184352, + "narHash": "sha256-GBZulv50wztp5cgc405t1uOkxQYhSkMqeKLI+iSrlpk=", "owner": "nix-community", "repo": "home-manager", - "rev": "72526a5f7cde2ef9075637802a1e2a8d2d658f70", + "rev": "7c1cefb98369cc85440642fdccc1c1394ca6dd2c", "type": "github" }, "original": { @@ -477,10 +477,10 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1744117652, - "narHash": "sha256-t7dFCDl4vIOOUMhEZnJF15aAzkpaup9x4ZRGToDFYWI=", - "path": "/nix/store/avba4k04vxmknff9mjchmwyvr3vpzccz-source", - "rev": "b4e98224ad1336751a2ac7493967a4c9f6d9cb3f", + "lastModified": 1746171682, + "narHash": "sha256-EyXUNSa+H+YvGVuQJP1nZskXAowxKYp79RNUsNdQTj4=", + "path": "/nix/store/xcqyjkljvvi1qk78la2vh5b783yzs7wl-source", + "rev": "50eee705bbdbac942074a8c120e8194185633675", "type": "path" }, "original": { @@ -500,11 +500,11 @@ ] }, "locked": { - "lastModified": 1744941256, - "narHash": "sha256-dCsDco+HQ0rwApyTmmyot9fUVIC0XeWOf/YpB8LZd18=", + "lastModified": 1747188026, + "narHash": "sha256-NjiJ2Bce5F7dn+6ZGCenzIjem2+Ei4SDF78x2wHVlOY=", "owner": "nix-community", "repo": "nix-vscode-extensions", - "rev": "0dd8474f697c02ac1861a96f7626f8fb9e21f268", + "rev": "083675f78e7de80e9fec1f621b8a508e58327131", "type": "github" }, "original": { @@ -526,11 +526,11 @@ ] }, "locked": { - "lastModified": 1744941256, - "narHash": "sha256-dCsDco+HQ0rwApyTmmyot9fUVIC0XeWOf/YpB8LZd18=", + "lastModified": 1747188026, + "narHash": "sha256-NjiJ2Bce5F7dn+6ZGCenzIjem2+Ei4SDF78x2wHVlOY=", "owner": "nix-community", "repo": "nix-vscode-extensions", - "rev": "0dd8474f697c02ac1861a96f7626f8fb9e21f268", + "rev": "083675f78e7de80e9fec1f621b8a508e58327131", "type": "github" }, "original": { @@ -553,11 +553,11 @@ "nur": "nur" }, "locked": { - "lastModified": 1744223916, - "narHash": "sha256-LHS51wl/LFzWvrplcL/LJ3eIqMRyiwXch4IxA1Pq1ig=", + "lastModified": 1747136507, + "narHash": "sha256-lnt9LypZVMRzRDpl+gQtrInxvsF7CL18TTEMthXz8p8=", "owner": "materusPL", "repo": "Nixerus", - "rev": "2caaf0b89ebf8edb9a1b0400c774670d838ef12f", + "rev": "8c329020c653c04a8f0f50dc7400c01b3b9e3733", "type": "github" }, "original": { @@ -580,11 +580,11 @@ "nur": "nur_3" }, "locked": { - "lastModified": 1744223916, - "narHash": "sha256-LHS51wl/LFzWvrplcL/LJ3eIqMRyiwXch4IxA1Pq1ig=", + "lastModified": 1747136507, + "narHash": "sha256-lnt9LypZVMRzRDpl+gQtrInxvsF7CL18TTEMthXz8p8=", "owner": "materusPL", "repo": "Nixerus", - "rev": "2caaf0b89ebf8edb9a1b0400c774670d838ef12f", + "rev": "8c329020c653c04a8f0f50dc7400c01b3b9e3733", "type": "github" }, "original": { @@ -596,11 +596,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1744633460, - "narHash": "sha256-fbWE4Xpw6eH0Q6in+ymNuDwTkqmFmtxcQEmtRuKDTTk=", + "lastModified": 1747129300, + "narHash": "sha256-L3clA5YGeYCF47ghsI7Tcex+DnaaN/BbQ4dR2wzoiKg=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "9a049b4a421076d27fee3eec664a18b2066824cb", + "rev": "e81fd167b33121269149c57806599045fd33eeed", "type": "github" }, "original": { @@ -612,11 +612,11 @@ }, "nixos-hardware_2": { "locked": { - "lastModified": 1744633460, - "narHash": "sha256-fbWE4Xpw6eH0Q6in+ymNuDwTkqmFmtxcQEmtRuKDTTk=", + "lastModified": 1747129300, + "narHash": "sha256-L3clA5YGeYCF47ghsI7Tcex+DnaaN/BbQ4dR2wzoiKg=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "9a049b4a421076d27fee3eec664a18b2066824cb", + "rev": "e81fd167b33121269149c57806599045fd33eeed", "type": "github" }, "original": { @@ -644,11 +644,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1744440957, - "narHash": "sha256-FHlSkNqFmPxPJvy+6fNLaNeWnF1lZSgqVCl/eWaJRc4=", + "lastModified": 1746957726, + "narHash": "sha256-k9ut1LSfHCr0AW82ttEQzXVCqmyWVA5+SHJkS5ID/Jo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "26d499fc9f1d567283d5d56fcf367edd815dba1d", + "rev": "a39ed32a651fdee6842ec930761e31d1f242cb94", "type": "github" }, "original": { @@ -660,11 +660,11 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1744440957, - "narHash": "sha256-FHlSkNqFmPxPJvy+6fNLaNeWnF1lZSgqVCl/eWaJRc4=", + "lastModified": 1746957726, + "narHash": "sha256-k9ut1LSfHCr0AW82ttEQzXVCqmyWVA5+SHJkS5ID/Jo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "26d499fc9f1d567283d5d56fcf367edd815dba1d", + "rev": "a39ed32a651fdee6842ec930761e31d1f242cb94", "type": "github" }, "original": { @@ -676,11 +676,11 @@ }, "nixpkgs-stable_3": { "locked": { - "lastModified": 1744440957, - "narHash": "sha256-FHlSkNqFmPxPJvy+6fNLaNeWnF1lZSgqVCl/eWaJRc4=", + "lastModified": 1746957726, + "narHash": "sha256-k9ut1LSfHCr0AW82ttEQzXVCqmyWVA5+SHJkS5ID/Jo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "26d499fc9f1d567283d5d56fcf367edd815dba1d", + "rev": "a39ed32a651fdee6842ec930761e31d1f242cb94", "type": "github" }, "original": { @@ -740,11 +740,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1731755305, - "narHash": "sha256-v5P3dk5JdiT+4x69ZaB18B8+Rcu3TIOrcdG4uEX7WZ8=", + "lastModified": 1746055187, + "narHash": "sha256-3dqArYSMP9hM7Qpy5YWhnSjiqniSaT2uc5h2Po7tmg0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "057f63b6dc1a2c67301286152eb5af20747a9cb4", + "rev": "3e362ce63e16b9572d8c2297c04f7c19ab6725a5", "type": "github" }, "original": { @@ -756,11 +756,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1744463964, - "narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=", + "lastModified": 1746904237, + "narHash": "sha256-3e+AVBczosP5dCLQmMoMEogM57gmZ2qrVSrmq9aResQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650", + "rev": "d89fc19e405cb2d55ce7cc114356846a0ee5e956", "type": "github" }, "original": { @@ -970,11 +970,11 @@ ] }, "locked": { - "lastModified": 1744669848, - "narHash": "sha256-pXyanHLUzLNd3MX9vsWG+6Z2hTU8niyphWstYEP3/GU=", + "lastModified": 1746485181, + "narHash": "sha256-PxrrSFLaC7YuItShxmYbMgSuFFuwxBB+qsl9BZUnRvg=", "owner": "Mic92", "repo": "sops-nix", - "rev": "61154300d945f0b147b30d24ddcafa159148026a", + "rev": "e93ee1d900ad264d65e9701a5c6f895683433386", "type": "github" }, "original": { @@ -992,11 +992,11 @@ ] }, "locked": { - "lastModified": 1744669848, - "narHash": "sha256-pXyanHLUzLNd3MX9vsWG+6Z2hTU8niyphWstYEP3/GU=", + "lastModified": 1746485181, + "narHash": "sha256-PxrrSFLaC7YuItShxmYbMgSuFFuwxBB+qsl9BZUnRvg=", "owner": "Mic92", "repo": "sops-nix", - "rev": "61154300d945f0b147b30d24ddcafa159148026a", + "rev": "e93ee1d900ad264d65e9701a5c6f895683433386", "type": "github" }, "original": {