From 51f1c74dc2aa45085ce63c77474bba7179901809 Mon Sep 17 00:00:00 2001 From: derped Date: Sat, 16 Nov 2024 11:12:30 +0100 Subject: [PATCH] Remove emacs. --- config/etc/i3/config.nix | 3 - machines/Lilim/options.nix | 19 -- machines/Marid/options.nix | 18 -- options/emacs-init-defaults.nix | 52 ---- options/emacs-init.nix | 469 ------------------------------ options/machine.nix | 2 +- pkgs/systemPackages.nix | 7 - pkgsets/emacs.nix | 169 ----------- pkgsets/emacs/company.nix | 176 ----------- pkgsets/emacs/direnv.nix | 15 - pkgsets/emacs/docker.nix | 22 -- pkgsets/emacs/dockerfile.nix | 11 - pkgsets/emacs/doom-modeline.nix | 24 -- pkgsets/emacs/doom-themes.nix | 19 -- pkgsets/emacs/elfeed.nix | 151 ---------- pkgsets/emacs/elpy.nix | 43 --- pkgsets/emacs/fcitx.nix | 18 -- pkgsets/emacs/flycheck.nix | 33 --- pkgsets/emacs/flyspell.nix | 33 --- pkgsets/emacs/latex.nix | 30 -- pkgsets/emacs/lsp.nix | 60 ---- pkgsets/emacs/magit.nix | 14 - pkgsets/emacs/mu4e.nix | 122 -------- pkgsets/emacs/nix-mode.nix | 13 - pkgsets/emacs/org.nix | 440 ---------------------------- pkgsets/emacs/php-mode.nix | 16 - pkgsets/emacs/powerline.nix | 18 -- pkgsets/emacs/rust.nix | 55 ---- pkgsets/emacs/solarized-theme.nix | 12 - pkgsets/emacs/telega.nix | 17 -- pkgsets/emacs/transmission.nix | 50 ---- pkgsets/emacs/undo-tree.nix | 18 -- pkgsets/emacs/web-mode.nix | 100 ------- pkgsets/emacs/yaml-mode.nix | 14 - pkgsets/emacs/yasnippet.nix | 21 -- pkgsets/emacs/yuck-mode.nix | 12 - 36 files changed, 1 insertion(+), 2295 deletions(-) delete mode 100644 options/emacs-init-defaults.nix delete mode 100644 options/emacs-init.nix delete mode 100644 pkgsets/emacs.nix delete mode 100644 pkgsets/emacs/company.nix delete mode 100644 pkgsets/emacs/direnv.nix delete mode 100644 pkgsets/emacs/docker.nix delete mode 100644 pkgsets/emacs/dockerfile.nix delete mode 100644 pkgsets/emacs/doom-modeline.nix delete mode 100644 pkgsets/emacs/doom-themes.nix delete mode 100644 pkgsets/emacs/elfeed.nix delete mode 100644 pkgsets/emacs/elpy.nix delete mode 100644 pkgsets/emacs/fcitx.nix delete mode 100644 pkgsets/emacs/flycheck.nix delete mode 100644 pkgsets/emacs/flyspell.nix delete mode 100644 pkgsets/emacs/latex.nix delete mode 100644 pkgsets/emacs/lsp.nix delete mode 100644 pkgsets/emacs/magit.nix delete mode 100644 pkgsets/emacs/mu4e.nix delete mode 100644 pkgsets/emacs/nix-mode.nix delete mode 100644 pkgsets/emacs/org.nix delete mode 100644 pkgsets/emacs/php-mode.nix delete mode 100644 pkgsets/emacs/powerline.nix delete mode 100644 pkgsets/emacs/rust.nix delete mode 100644 pkgsets/emacs/solarized-theme.nix delete mode 100644 pkgsets/emacs/telega.nix delete mode 100644 pkgsets/emacs/transmission.nix delete mode 100644 pkgsets/emacs/undo-tree.nix delete mode 100644 pkgsets/emacs/web-mode.nix delete mode 100644 pkgsets/emacs/yaml-mode.nix delete mode 100644 pkgsets/emacs/yasnippet.nix delete mode 100644 pkgsets/emacs/yuck-mode.nix diff --git a/config/etc/i3/config.nix b/config/etc/i3/config.nix index 03b1cb1..1221fc8 100644 --- a/config/etc/i3/config.nix +++ b/config/etc/i3/config.nix @@ -18,7 +18,6 @@ exec ${pkgs.feh}/bin/feh --bg-scale $(xdg-user-dir PICTURES)/wallpaper.jpg #exec pulseaudio -D exec fcitx5 - #exec env=LC_CTYPE=zh_CN.UTF-8 emacs --daemon #exec conky -c $HOME/.my_little_conky/.conkyrc #exec xsnow -nosanta -norudolf -notrees #exec $LOCK @@ -139,8 +138,6 @@ floating_modifier $mod # start a terminal - bindsym $mod+Shift+Return exec emacsclient -c - bindsym $mod+Mod1+Return exec emacsclient -c -e '(eshell t)' bindsym $mod+Return exec alacritty # kill focused window diff --git a/machines/Lilim/options.nix b/machines/Lilim/options.nix index 90c7b04..3d2b699 100644 --- a/machines/Lilim/options.nix +++ b/machines/Lilim/options.nix @@ -32,25 +32,6 @@ with lib; { "dict" "nodejs" "latex" - "emacs" - "emacs::company" - "emacs::direnv" - "emacs::doom-modeline" - "emacs::doom-themes" - "emacs::elpy" - "emacs::flycheck" - "emacs::flyspell" - "emacs::latex" - "emacs::lsp" - "emacs::magit" - "emacs::mu4e" - "emacs::elfeed" - "emacs::nix-mode" - "emacs::org" - "emacs::transmission" - "emacs::web-mode" - "emacs::yaml-mode" - "emacs::yasnippet" "extra" "haskell" "mail_utils" diff --git a/machines/Marid/options.nix b/machines/Marid/options.nix index 1e239ee..1337599 100644 --- a/machines/Marid/options.nix +++ b/machines/Marid/options.nix @@ -26,24 +26,6 @@ with lib; { "base" "dict" "nodejs" - "emacs" - "emacs::company" - "emacs::docker" - "emacs::doom-modeline" - "emacs::doom-themes" - "emacs::elpy" - "emacs::fcitx" - "emacs::flycheck" - "emacs::flyspell" - "emacs::undo-tree" - "emacs::lsp" - "emacs::magit" - "emacs::mu4e" - "emacs::nix-mode" - "emacs::org" - "emacs::php-mode" - "emacs::web-mode" - "emacs::yasnippet" "extra" "mail_utils" "python3" diff --git a/options/emacs-init-defaults.nix b/options/emacs-init-defaults.nix deleted file mode 100644 index 0e755e9..0000000 --- a/options/emacs-init-defaults.nix +++ /dev/null @@ -1,52 +0,0 @@ -# Original Source: -# https://gitlab.com/rycee/nur-expressions/raw/master/hm-modules/emacs-init-defaults.nix (49ff2d63e867c09e658c959c0d8a73d641061c30) -# MIT License -# Copyright (c) 2019 Robert Helgesson -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -{pkgs, ...}: { - programs.emacs.init.usePackage = { - deadgrep = { - config = '' - (setq deadgrep-executable "${pkgs.ripgrep}/bin/rg") - ''; - }; - - ggtags = { - config = '' - (setq ggtags-executable-directory "${pkgs.global}/bin") - ''; - }; - - idris-mode = { - config = '' - (setq idris-interpreter-path "${pkgs.idris}/bin/idris") - ''; - }; - - pandoc-mode = { - config = '' - (setq pandoc-binary "${pkgs.pandoc}/bin/pandoc") - ''; - }; - - ripgrep = { - config = '' - (setq ripgrep-executable "${pkgs.ripgrep}/bin/rg") - ''; - }; - }; -} diff --git a/options/emacs-init.nix b/options/emacs-init.nix deleted file mode 100644 index f226940..0000000 --- a/options/emacs-init.nix +++ /dev/null @@ -1,469 +0,0 @@ -# Original Source: -# https://gitlab.com/rycee/nur-expressions/raw/master/hm-modules/emacs-init.nix (d27525db3358b9463fab1b4a7739cb77e27b768c) -# MIT License -# Copyright (c) 2019 Robert Helgesson -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -{ - config, - lib, - pkgs, - ... -}: -with lib; let - cfg = config.programs.emacs.init; - - packageFunctionType = mkOptionType { - name = "packageFunction"; - description = "function from epkgs to package"; - check = isFunction; - merge = mergeOneOption; - }; - - usePackageType = types.submodule ({ - name, - config, - ... - }: { - options = { - enable = mkEnableOption "Emacs package ${name}"; - - package = mkOption { - type = - types.either - (types.str // {description = "name of package";}) - packageFunctionType; - default = name; - description = '' - The package to use for this module. Either the package name - within the Emacs package set or a function taking the Emacs - package set and returning a package. - ''; - }; - - defer = mkOption { - type = types.either types.bool types.ints.positive; - default = false; - description = '' - The setting. - ''; - }; - - demand = mkOption { - type = types.bool; - default = false; - description = '' - The setting. - ''; - }; - - diminish = mkOption { - type = types.listOf types.str; - default = []; - description = '' - The entries to use for . - ''; - }; - - chords = mkOption { - type = types.attrsOf types.str; - default = {}; - example = { - "jj" = "ace-jump-char-mode"; - "jk" = "ace-jump-word-mode"; - }; - description = '' - The entries to use for . - ''; - }; - - mode = mkOption { - type = types.listOf types.str; - default = []; - description = '' - The entries to use for . - ''; - }; - - after = mkOption { - type = types.listOf types.str; - default = []; - description = '' - The entries to use for . - ''; - }; - - bind = mkOption { - type = types.attrsOf types.str; - default = {}; - example = { - "M-" = "drag-stuff-up"; - "M-" = "drag-stuff-down"; - }; - description = '' - The entries to use for . - ''; - }; - - bindLocal = mkOption { - type = types.attrsOf (types.attrsOf types.str); - default = {}; - example = {helm-command-map = {"C-c h" = "helm-execute-persistent-action";};}; - description = '' - The entries to use for local keymaps in . - ''; - }; - - bindKeyMap = mkOption { - type = types.attrsOf types.str; - default = {}; - example = {"C-c p" = "projectile-command-map";}; - description = '' - The entries to use for . - ''; - }; - - command = mkOption { - type = types.listOf types.str; - default = []; - description = '' - The entries to use for . - ''; - }; - - config = mkOption { - type = types.lines; - default = ""; - description = '' - Code to place in the section. - ''; - }; - - extraConfig = mkOption { - type = types.lines; - default = ""; - description = '' - Additional lines to place in the use-package configuration. - ''; - }; - - hook = mkOption { - type = types.listOf types.str; - default = []; - description = '' - The entries to use for . - ''; - }; - - init = mkOption { - type = types.lines; - default = ""; - description = '' - The entries to use for . - ''; - }; - - assembly = mkOption { - type = types.lines; - readOnly = true; - internal = true; - description = "The final use-package code."; - }; - }; - - config = mkIf config.enable { - assembly = let - quoted = v: ''"${escape ["\""] v}"''; - mkBindHelper = cmd: prefix: bs: - optionals (bs != {}) ( - [":${cmd} (${prefix}"] - ++ mapAttrsToList (n: v: " (${quoted n} . ${v})") bs - ++ [")"] - ); - - mkAfter = vs: optional (vs != []) ":after (${toString vs})"; - mkCommand = vs: optional (vs != []) ":commands (${toString vs})"; - mkDiminish = vs: optional (vs != []) ":diminish (${toString vs})"; - mkMode = map (v: ":mode ${v}"); - mkBind = mkBindHelper "bind" ""; - mkBindLocal = bs: let - mkMap = n: mkBindHelper "bind" ":map ${n}"; - in - flatten (mapAttrsToList mkMap bs); - mkBindKeyMap = mkBindHelper "bind-keymap" ""; - mkChords = mkBindHelper "chords" ""; - mkHook = map (v: ":hook ${v}"); - mkDefer = v: - if isBool v - then optional v ":defer t" - else [":defer ${toString v}"]; - mkDemand = v: optional v ":demand t"; - in - concatStringsSep "\n " ( - ["(use-package ${name}"] - ++ mkAfter config.after - ++ mkBind config.bind - ++ mkBindKeyMap config.bindKeyMap - ++ mkBindLocal config.bindLocal - ++ mkChords config.chords - ++ mkCommand config.command - ++ mkDefer config.defer - ++ mkDemand config.demand - ++ mkDiminish config.diminish - ++ mkHook config.hook - ++ mkMode config.mode - ++ optionals (config.init != "") [":init" config.init] - ++ optionals (config.config != "") [":config" config.config] - ++ optional (config.extraConfig != "") config.extraConfig - ) - + ")"; - }; - }); - - usePackageStr = name: pkgConfStr: '' - (use-package ${name} - ${pkgConfStr}) - ''; - - mkRecommendedOption = type: extraDescription: - mkOption { - type = types.bool; - default = false; - example = true; - description = - '' - Whether to enable recommended ${type} settings. - '' - + optionalString (extraDescription != "") '' - - ${extraDescription} - ''; - }; - - # Recommended GC settings. - gcSettings = '' - (defun hm/reduce-gc () - "Reduce the frequency of garbage collection." - (setq gc-cons-threshold 402653184 - gc-cons-percentage 0.6)) - - (defun hm/restore-gc () - "Restore the frequency of garbage collection." - (setq gc-cons-threshold 16777216 - gc-cons-percentage 0.1)) - - ;; Make GC more rare during init and while minibuffer is active. - (eval-and-compile #'hm/reduce-gc) - (add-hook 'minibuffer-setup-hook #'hm/reduce-gc) - - ;; But make it more regular after startup and after closing minibuffer. - (add-hook 'emacs-startup-hook #'hm/restore-gc) - (add-hook 'minibuffer-exit-hook #'hm/restore-gc) - - ;; Avoid unnecessary regexp matching while loading .el files. - (defvar hm/file-name-handler-alist file-name-handler-alist) - (setq file-name-handler-alist nil) - - (defun hm/restore-file-name-handler-alist () - "Restores the file-name-handler-alist variable." - (setq file-name-handler-alist hm/file-name-handler-alist) - (makunbound 'hm/file-name-handler-alist)) - - (add-hook 'emacs-startup-hook #'hm/restore-file-name-handler-alist) - ''; - - # Whether the configuration makes use of `:diminish`. - hasDiminish = any (p: p.diminish != []) (attrValues cfg.usePackage); - - # Whether the configuration makes use of `:bind`. - hasBind = any (p: p.bind != {}) (attrValues cfg.usePackage); - - # Whether the configuration makes use of `:chords`. - hasChords = any (p: p.chords != {}) (attrValues cfg.usePackage); - - usePackageSetup = - '' - (eval-when-compile - (require 'package) - - (setq package-archives nil - package-enable-at-startup nil - package--init-file-ensured t) - - (require 'use-package) - - ;; To help fixing issues during startup. - (setq use-package-verbose ${ - if cfg.usePackageVerbose - then "t" - else "nil" - })) - '' - + optionalString hasDiminish '' - ;; For :diminish in (use-package). - (require 'diminish) - '' - + optionalString hasBind '' - ;; For :bind in (use-package). - (require 'bind-key) - '' - + optionalString hasChords '' - ;; For :chords in (use-package). - (use-package use-package-chords - :config (key-chord-mode 1)) - ''; - - initFile = - '' - ;;; hm-init.el --- Emacs configuration à la Home Manager. - ;; - ;; -*- lexical-binding: t; -*- - ;; - ;;; Commentary: - ;; - ;; A configuration generated from a Nix based configuration by - ;; Home Manager. - ;; - ;;; Code: - - ${optionalString cfg.startupTimer '' - ;; Remember when configuration started. See bottom for rest of this. - ;; Idea taken from http://writequit.org/org/settings.html. - (defconst emacs-start-time (current-time)) - ''} - - ${optionalString cfg.recommendedGcSettings gcSettings} - - ${cfg.prelude} - - ${usePackageSetup} - '' - + concatStringsSep "\n\n" - (map (getAttr "assembly") - (filter (getAttr "enable") - (attrValues cfg.usePackage))) - + '' - - ${cfg.postlude} - - ${optionalString cfg.startupTimer '' - ;; Make a note of how long the configuration part of the start took. - (let ((elapsed (float-time (time-subtract (current-time) - emacs-start-time)))) - (message "Loading settings...done (%.3fs)" elapsed)) - ''} - - (provide 'hm-init) - ;; hm-init.el ends here - ''; -in { - imports = [./emacs-init-defaults.nix]; - - options.programs.emacs.init = { - enable = mkEnableOption "Emacs configuration"; - - recommendedGcSettings = mkRecommendedOption "garbage collection" '' - This will reduce garbage collection frequency during startup and - while the minibuffer is active. - ''; - - startupTimer = mkEnableOption "Emacs startup duration timer"; - - prelude = mkOption { - type = types.lines; - default = ""; - description = '' - Configuration lines to add in the beginning of - init.el. - ''; - }; - - postlude = mkOption { - type = types.lines; - default = ""; - description = '' - Configuration lines to add in the end of - init.el. - ''; - }; - - usePackageVerbose = mkEnableOption "verbose use-package mode"; - - usePackage = mkOption { - type = types.attrsOf usePackageType; - default = {}; - example = literalExample '' - { - dhall-mode = { - mode = [ '''"\\.dhall\\'"''' ]; - }; - } - ''; - description = '' - Attribute set of use-package configurations. - ''; - }; - }; - - config = mkIf cfg.enable { - machine.pkgsets.emacs.pkgs = epkgs: let - getPkg = v: - if isFunction v - then [(v epkgs)] - else optional (isString v && hasAttr v epkgs) epkgs.${v}; - in - [epkgs.use-package] - ++ optional hasBind epkgs.bind-key - ++ optional hasDiminish epkgs.diminish - ++ optional hasChords epkgs.use-package-chords - ++ ( - concatMap (v: getPkg v.package) - (builtins.attrValues cfg.usePackage) - ); - - # use lucid as toolkit; emacs will otherwise crash quite frequently when run in daemon mode - # https://gitlab.gnome.org/GNOME/gtk/issues/221 - # Enabling again for now as gtk3 is needed for wayland support - machine.pkgsets.emacs.pkgwrap = let - inherit - ((pkgs.emacsPackagesFor - (pkgs.emacs29.override { - withGTK2 = false; - withGTK3 = true; - withPgtk = true; - }))) - emacsWithPackages - ; - in - emacsWithPackages config.machine.pkgsets.emacs.pkgs; - - environment.systemPackages = [ - ((pkgs.emacsPackagesFor config.machine.pkgsets.emacs.pkgwrap).trivialBuild { - pname = "hm-init"; - version = "0"; - src = pkgs.writeText "hm-init.el" initFile; - preferLocalBuild = true; - allowSubstitutes = false; - }) - ]; - - # This has no effect, will have to add a wrapper to emacs (or just copy this to ~/.emacs.d/init.el) - environment.etc."emacs.d/init.el".text = '' - (require 'hm-init) - (provide 'init) - ''; - }; -} diff --git a/options/machine.nix b/options/machine.nix index bbb1ca4..d48ec20 100644 --- a/options/machine.nix +++ b/options/machine.nix @@ -16,7 +16,7 @@ with lib; let type = with types; oneOf [package (listOf package)]; default = fn.pkgFilter cfg.pkgsets."${pname}".pkgs; description = '' - Package Wrapper for packages using a wrapper function (like python, emacs, haskell, ...) + Package Wrapper for packages using a wrapper function (like python, haskell, ...) ''; }; pkgs = mkOption { diff --git a/pkgs/systemPackages.nix b/pkgs/systemPackages.nix index ac07b34..1369ae6 100644 --- a/pkgs/systemPackages.nix +++ b/pkgs/systemPackages.nix @@ -23,11 +23,4 @@ in { cfg.pkgs) cfg.pkgsets) (v: v.pkgwrap)); - - services.emacs = mkIf (elem "emacs" cfg.pkgs) { - defaultEditor = true; - enable = true; - install = true; - package = cfg.pkgsets.emacs.pkgwrap; - }; } diff --git a/pkgsets/emacs.nix b/pkgsets/emacs.nix deleted file mode 100644 index ef1b739..0000000 --- a/pkgsets/emacs.nix +++ /dev/null @@ -1,169 +0,0 @@ -{ - config, - lib, - fn, - pkgs, - ... -}: -with lib; let - modefiles = fn.lst { - p = toString ./emacs; - b = true; - }; -in rec { - imports = - [ - ../options/emacs-init.nix - ] - ++ modefiles; - - programs.emacs.init = { - enable = elem "emacs" config.machine.pkgs; - recommendedGcSettings = true; - - prelude = '' - ;; Disable UI Clutter - (menu-bar-mode -1) - (tool-bar-mode -1) - (scroll-bar-mode -1) - (tooltip-mode -1) - (blink-cursor-mode -1) - (setq ring-bell-function 'ignore) - (setq inhibit-startup-buffer-menu t) - (setq use-dialog-box nil) - (setq inhibit-startup-message t) - (setq inhibit-splash-screen t) - (setq initial-scratch-message nil) - (fset 'yes-or-no-p 'y-or-n-p) - (setq-default show-trailing-whitespace t) - - - - ;; Save and Backup behaviour - (add-hook 'before-save-hook 'delete-trailing-whitespace) - (setq create-lockfiles nil) - (setq backup-directory-alist `(("." . "~/.emacs_saves"))) - (setq backup-by-copying t) - (setq delete-old-versions t - kept-new-versions 6 - kept-old-versions 2 - version-control t) - - - - ;; Tabs vs Spaces... I like Spaces - (setq-default indent-tabs-mode nil - tab-width 2 - c-basic-offset 2 - js-indent-level 2 - sh-basic-offset 2 - sh-indentation 2 - smie-indent-basic 2) - - - - ;; General Functions I want - (put 'narrow-to-region 'disabled nil) - (put 'upcase-region 'disabled nil) - (put 'downcase-region 'disabled nil) - - - - ;; Global UI related Modes - (global-display-line-numbers-mode) - (setq display-line-numbers-width-start t) - (setq display-line-numbers-grow-only t) - (column-number-mode t) - (global-hl-line-mode t) - (size-indication-mode t) - (show-paren-mode t) - (setq split-height-threshold 200) - (setq split-width-threshold nil) - - - - ;; Text Scaling - (global-set-key (kbd "C-+") 'text-scale-increase) - (global-set-key (kbd "C--") 'text-scale-decrease) - - - - ;; Font Config - (defun set-fonts (frame) - (interactive) - "Adjust the font settings of FRAME so Emacs can display emoji and chinese properly." - (set-fontset-font t 'ascii (font-spec :family "DejaVu Sans Mono") frame 'preprend) - (set-fontset-font t 'big5 (font-spec :family "AR PL UMing TW") frame) - (set-fontset-font t 'chinese-gbk (font-spec :family "AR PL UMing CN") frame) - (set-fontset-font t 'symbol (font-spec :family "Symbola") frame 'prepend)) - - ;; For when Emacs is started in GUI mode: - (set-fonts nil) - ;; Hook for when a frame is created with emacsclient - ;; see https://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Frames.html - (add-hook 'after-make-frame-functions 'set-fonts) - - ;; Fix keyboard input of 'dead-keys' - (require 'iso-transl) - - - - ;; Some small helper functions - ;; These are based on the already existing 'kill' versions of the function - ;; It's literally just a M-x r-str kill delete (and getting rid of tabs) - (defun delete-word (arg) - "Delete characters forward until encountering the end of a word. - With argument ARG, do this that many times." - (interactive "p") - (delete-region (point) (progn (forward-word arg) (point)))) - (define-key global-map [remap kill-word] 'delete-word) - ;; (define-key global-map (kbd <>) 'kill-word) - - (defun backward-delete-word (arg) - "Delete characters backward until encountering the beginning of a word. - With argument ARG, do this that many times." - (interactive "p") - (delete-word (- arg))) - (define-key global-map [remap backward-kill-word] 'backward-delete-word) - - (defun delete-whole-line (&optional arg) - "Delete current line. - With prefix ARG, delete that many lines starting from the current line. - If ARG is negative, delete backward. Also delete the preceding newline. - \(This is meant to make \\[repeat] work well with negative arguments.) - If ARG is zero, delete current line but exclude the trailing newline." - (interactive "p") - (or arg (setq arg 1)) - (if (and (> arg 0) (eobp) (save-excursion (forward-visible-line 0) (eobp))) - (signal 'end-of-buffer nil)) - (if (and (< arg 0) (bobp) (save-excursion (end-of-visible-line) (bobp))) - (signal 'beginning-of-buffer nil)) - (unless (eq last-command 'delete-region) - (delete-new "") - (setq last-command 'delete-region)) - (cond ((zerop arg) - ;; We need to delete in two steps, because the previous command - ;; could have been a delete command, in which case the text - ;; before point needs to be prepended to the current delete - ;; ring entry and the text after point appended. Also, we - ;; need to use save-excursion to avoid copying the same text - ;; twice to the delete ring in read-only buffers. - (save-excursion - (delete-region (point) (progn (forward-visible-line 0) (point)))) - (delete-region (point) (progn (end-of-visible-line) (point)))) - ((< arg 0) - (save-excursion - (delete-region (point) (progn (end-of-visible-line) (point)))) - (delete-region (point) - (progn (forward-visible-line (1+ arg)) - (unless (bobp) (backward-char)) - (point)))) - (t - (save-excursion - (delete-region (point) (progn (forward-visible-line 0) (point)))) - (delete-region (point) - (progn (forward-visible-line arg) (point)))))) - (define-key global-map [remap kill-whole-line] 'delete-whole-line) - ''; - }; -} diff --git a/pkgsets/emacs/company.nix b/pkgsets/emacs/company.nix deleted file mode 100644 index 3a31d4b..0000000 --- a/pkgsets/emacs/company.nix +++ /dev/null @@ -1,176 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; let - # Source: https://github.com/Henry/dot-emacs/blob/master/my-lisp/company-pcomplete.el - company-pcomplete = pkgs.writeText "company-pcomplete.el" '' - ;;; company-pcomplete.el --- company-mode pcomplete backend -*- lexical-binding: t -*- - - ;; Copyright (C) 2016 Free Software Foundation, Inc. - - ;; Author: Henry G. Weller - - ;; This file is part of GNU Emacs. - - ;; GNU Emacs is free software: you can redistribute it and/or modify - ;; it under the terms of the GNU General Public License as published by - ;; the Free Software Foundation, either version 3 of the License, or - ;; (at your option) any later version. - - ;; GNU Emacs is distributed in the hope that it will be useful, - ;; but WITHOUT ANY WARRANTY; without even the implied warranty of - ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ;; GNU General Public License for more details. - - ;; You should have received a copy of the GNU General Public License - ;; along with GNU Emacs. If not, see . - - - ;;; Commentary: - ;; - ;; Based on `ac-pcomplete', see https://www.emacswiki.org/emacs/EshellCompletion - ;; and `pcomplete`, see pcomplete.el. - - ;;; Code: - - (require 'company) - (require 'cl-lib) - (require 'pcomplete) - - (defgroup company-pcomplete nil - "Completion backend using pcomplete." - :group 'company) - - (defvar company-pcomplete-available 'unknown) - - (defun company-pcomplete--prefix () - (let* ((pcomplete-stub) - pcomplete-seen - pcomplete-norm-func - pcomplete-args - pcomplete-last pcomplete-index - (pcomplete-autolist pcomplete-autolist) - (pcomplete-suffix-list pcomplete-suffix-list)) - (pcomplete-completions) - (buffer-substring (pcomplete-begin) (point)))) - - (defun company-pcomplete--candidates () - (let* ((pcomplete-stub) - (pcomplete-show-list t) - pcomplete-seen pcomplete-norm-func - pcomplete-args pcomplete-last pcomplete-index - (pcomplete-autolist pcomplete-autolist) - (pcomplete-suffix-list pcomplete-suffix-list) - (candidates (pcomplete-completions)) - (prefix (buffer-substring (pcomplete-begin) (point))) - ;; Collect all possible completions for the current stub - (cnds (all-completions pcomplete-stub candidates)) - (bnds (completion-boundaries pcomplete-stub candidates nil "")) - (skip (- (length pcomplete-stub) (car bnds)))) - ;; Replace the stub at the beginning of each candidate by the prefix - (mapcar #'(lambda (cand) (concat prefix (substring cand skip))) cnds))) - - (defun company-pcomplete-available () - (when (eq company-pcomplete-available 'unknown) - (condition-case _err - (progn - (company-pcomplete--candidates) - (setq company-pcomplete-available t)) - (error - (message "Company: pcomplete not found") - (setq company-pcomplete-available nil)))) - company-pcomplete-available) - - ;;;###autoload - (defun company-pcomplete (command &optional _arg &rest ignored) - "`company-mode' completion backend using `pcomplete'." - (interactive (list 'interactive)) - (cl-case command - (interactive (company-begin-backend 'company-pcomplete)) - (prefix (when (company-pcomplete-available) - (company-pcomplete--prefix))) - (candidates (company-pcomplete--candidates)) - (sorted t))) - - (provide 'company-pcomplete) - ''; -in - mkIf (elem "emacs::company" config.machine.pkgs) { - programs.emacs.init.usePackage = { - company = { - enable = true; - package = epkgs: [epkgs.company epkgs.company-web]; - diminish = ["company-mode"]; - hook = - ["(after-init . global-company-mode)"] - ++ optional (elem "emacs::rust" config.machine.pkgs) - ''(rust-mode . (lambda () (setq company-backends '((company-capf :with company-yasnippet)))))'' - ++ optional (elem "emacs::web-mode" config.machine.pkgs) - '' (web-mode . (lambda () (set (make-local-variable 'company-backends) '(company-web-html company-css)) - (company-mode t)))''; - bind = {"\t" = "'company-complete-common";}; - init = ''(require 'ffap)''; - config = '' - ;; (setq company-tooltip-align-annotations t) - (setq company-idle-delay 0.3 - company-show-numbers t) - - ${ - optionalString - (elem "emacs::org" config.machine.pkgs) '' - (load-file "${company-pcomplete}")'' - } - ''; - extraConfig = '' - :bind (:map company-mode-map - ([remap completion-at-point] . company-complete-common) - ([remap complete-symbol] . company-complete-common)) - ''; - }; - - company-box = { - enable = true; - hook = ["(company-mode . (lambda () (company-box-mode)))"]; - config = '' - (setq company-box-icons-alist 'company-box-icons-all-the-icons) - - - (setq company-box-icons-lsp - `(( 1 . ,(all-the-icons-faicon "file-text-o" :v-adjust -0.0575)) ; Text - ( 2 . ,(all-the-icons-faicon "cube" :v-adjust -0.0575)) ; Method - ( 3 . ,(all-the-icons-faicon "cube" :v-adjust -0.0575)) ; Function - ( 4 . ,(all-the-icons-faicon "cube" :v-adjust -0.0575)) ; Constructor - ( 5 . ,(all-the-icons-faicon "tag" :v-adjust -0.0575)) ; Field - ( 6 . ,(all-the-icons-faicon "tag" :v-adjust -0.0575)) ; Variable - ( 7 . ,(all-the-icons-faicon "cog" :v-adjust -0.0575)) ; Class - ( 8 . ,(all-the-icons-faicon "cogs" :v-adjust -0.0575)) ; Interface - ( 9 . ,(all-the-icons-alltheicon "less")) ; Module - (10 . ,(all-the-icons-faicon "wrench" :v-adjust -0.0575)) ; Property - (11 . ,(all-the-icons-faicon "tag" :v-adjust -0.0575)) ; Unit - (12 . ,(all-the-icons-faicon "tag" :v-adjust -0.0575)) ; Value - (13 . ,(all-the-icons-material "content_copy" :v-adjust -0.2)) ; Enum - (14 . ,(all-the-icons-faicon "tag" :v-adjust -0.0575)) ; Keyword - (15 . ,(all-the-icons-material "content_paste" :v-adjust -0.2)) ; Snippet - (16 . ,(all-the-icons-material "palette" :v-adjust -0.2)) ; Color - (17 . ,(all-the-icons-faicon "file" :v-adjust -0.0575)) ; File - (18 . ,(all-the-icons-faicon "tag" :v-adjust -0.0575)) ; Reference - (19 . ,(all-the-icons-faicon "folder" :v-adjust -0.0575)) ; Folder - (20 . ,(all-the-icons-faicon "tag" :v-adjust -0.0575)) ; EnumMember - (21 . ,(all-the-icons-faicon "tag" :v-adjust -0.0575)) ; Constant - (22 . ,(all-the-icons-faicon "cog" :v-adjust -0.0575)) ; Struct - (23 . ,(all-the-icons-faicon "bolt" :v-adjust -0.0575)) ; Event - (24 . ,(all-the-icons-faicon "tag" :v-adjust -0.0575)) ; Operator - (25 . ,(all-the-icons-faicon "cog" :v-adjust -0.0575)) ; TypeParameter - )) - ''; - }; - all-the-icons = {enable = true;}; - company-jedi = { - enable = elem "emacs::elpy" config.machine.pkgs; - }; - }; - fonts.packages = pkgs.emacs-all-the-icons-fonts.all; - } diff --git a/pkgsets/emacs/direnv.nix b/pkgsets/emacs/direnv.nix deleted file mode 100644 index 818cf7b..0000000 --- a/pkgsets/emacs/direnv.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; - mkIf (elem "emacs::direnv" config.machine.pkgs) { - programs.emacs.init.usePackage.direnv = { - enable = true; - config = ''(direnv-mode)''; - }; - services.lorri.enable = true; - environment.systemPackages = with pkgs; [lorri direnv]; - } diff --git a/pkgsets/emacs/docker.nix b/pkgsets/emacs/docker.nix deleted file mode 100644 index a2e9cd8..0000000 --- a/pkgsets/emacs/docker.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::docker" config.machine.pkgs) { - programs.emacs.init.usePackage = { - dockerfile-mode = { - enable = true; - }; - docker = { - enable = true; - }; - docker-compose-mode = { - enable = true; - }; - docker-tramp = { - enable = true; - }; - }; - } diff --git a/pkgsets/emacs/dockerfile.nix b/pkgsets/emacs/dockerfile.nix deleted file mode 100644 index ed6f27b..0000000 --- a/pkgsets/emacs/dockerfile.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::dockerfile" config.machine.pkgs) { - programs.emacs.init.usePackage.dockerfile-mode = { - enable = true; - }; - } diff --git a/pkgsets/emacs/doom-modeline.nix b/pkgsets/emacs/doom-modeline.nix deleted file mode 100644 index c79cae9..0000000 --- a/pkgsets/emacs/doom-modeline.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; - mkIf (elem "emacs::doom-modeline" config.machine.pkgs) { - programs.emacs.init.usePackage.doom-modeline = { - enable = true; - hook = ["(after-init . doom-modeline-mode)"]; - config = '' - (setq doom-modeline-icon t) - (setq doom-modeline-height 25) - (setq doom-modeline-bar-width 3) - ;; The default priority of detection is `ffip' > `projectile' > `project'. - (setq doom-modeline-project-detection 'project) - (setq doom-modeline-buffer-file-name-style 'truncate-upto-project) - (setq doom-modeline-unicode-fallback nil) - - (setq doom-modeline--battery-status t) - ''; - }; - } diff --git a/pkgsets/emacs/doom-themes.nix b/pkgsets/emacs/doom-themes.nix deleted file mode 100644 index 8c7d4cf..0000000 --- a/pkgsets/emacs/doom-themes.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; - mkIf (elem "emacs::doom-themes" config.machine.pkgs) { - programs.emacs.init.usePackage.doom-themes = { - enable = true; - config = '' - ;; Load the theme (doom-one, doom-molokai, etc); keep in mind that each theme - ;; may have their own settings. - (load-theme 'doom-solarized-dark t) - - ;; ${optionalString (elem "emacs::org" config.machine.pkgs) "(doom-themes-org-config)"} - ''; - }; - } diff --git a/pkgsets/emacs/elfeed.nix b/pkgsets/emacs/elfeed.nix deleted file mode 100644 index 20f3b2f..0000000 --- a/pkgsets/emacs/elfeed.nix +++ /dev/null @@ -1,151 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; - mkIf (elem "emacs::elfeed" config.machine.pkgs) { - programs.emacs.init.usePackage = { - elfeed = let - pyEnv = pkgs.python3.withPackages (ps: with ps; [beautifulsoup4 lxml requests]); - pyScript = pkgs.writeScript "elfeedFetcher.py" '' - #!${pyEnv}/bin/python3 - import sys - from requests import get - from bs4 import BeautifulSoup - - header_agent = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0'} - with get(sys.argv[1], headers=header_agent) as r: - soup = BeautifulSoup(r.text, 'lxml') - abstract = soup.find('dd', {"id": "abstract"}).text.replace('"', '\\"') - article = '\n\n'.join( - [soup.find('p', {"id": "first"}, class_="lead").text] + - [ - p.text for p in - soup.find('div', {"id": "text"}).findAll('p') - ]).replace('"', '\\"') - print(f"(setq abstract \"{abstract}\") (setq article \"{article}\")") - ''; - in { - enable = true; - hook = [''(elfeed-new-entry . elfeed-content-fetcher)'']; - config = '' - (load-file "~/.emacs.d/elfeed.el") - - (defun elfeed-play-with-mpv (entry) - "Play entry link with mpv." - (interactive (elfeed-search-selected :single)) - (start-process "elfeed-mpv" nil "mpv" "--ytdl-format=[height<=1080]" (elfeed-entry-link entry))) - - (defun elfeed-search-show-entry-custom (entry) - "Custom actions for various sources." - (interactive (list (elfeed-search-selected :ignore-region))) - (if (equal (car (elfeed-entry-id entry)) "www.youtube.com") (elfeed-play-with-mpv entry) - (elfeed-show-entry entry))) - (define-key elfeed-search-mode-map [remap elfeed-search-show-entry] 'elfeed-search-show-entry-custom) - - (defun elfeed-get-yt-description (url) - (shell-command-to-string (format "${pkgs.yt-dlp}/bin/yt-dlp --get-description \"%s\" 2> /dev/null" url))) - - (defun elfeed-get-sd-article (url) - (eval-string (shell-command-to-string (format "${pyEnv}/bin/python3 ${pyScript} \"%s\" 2> /dev/null" url)))) - - (defun eval-string (string) - (eval (car (read-from-string (format "(progn %s)" string))))) - - (defun elfeed-content-fetcher (entry) - "Fetches content for various entries (currently only sciencedaily)." - (interactive (list (elfeed-search-selected :ignore-region))) - - (let ((url (elfeed-entry-link entry)) - (feed-id (elfeed-deref (elfeed-entry-feed-id entry))) - ) - (when (equal (car (elfeed-entry-id entry)) "www.sciencedaily.com") - (elfeed-get-sd-article (cdr (elfeed-entry-id entry))) - ;; (setf (elfeed-entry-content entry) (elfeed-ref article)) - (setf (elfeed-meta entry :content) (elfeed-ref article)) - (setf (elfeed-meta entry :abstract) abstract) - (makunbound 'abstract) - (makunbound 'article)))) - - (defun elfeed-show-refresh--mail-style () - "Update the buffer to match the selected entry, using a mail-style." - (interactive) - (let* ((inhibit-read-only t) - (title (elfeed-entry-title elfeed-show-entry)) - (date (seconds-to-time (elfeed-entry-date elfeed-show-entry))) - (authors (elfeed-meta elfeed-show-entry :authors)) - (link (elfeed-entry-link elfeed-show-entry)) - (tags (elfeed-entry-tags elfeed-show-entry)) - (tagsstr (mapconcat #'symbol-name tags ", ")) - (nicedate (format-time-string "%a, %e %b %Y %T %Z" date)) - (content (if (elfeed-meta elfeed-show-entry :content) (elfeed-deref (elfeed-meta elfeed-show-entry :content)) (elfeed-deref (elfeed-entry-content elfeed-show-entry)))) - (type (elfeed-entry-content-type elfeed-show-entry)) - (feed (elfeed-entry-feed elfeed-show-entry)) - (feed-title (elfeed-feed-title feed)) - (base (and feed (elfeed-compute-base (elfeed-feed-url feed))))) - (erase-buffer) - (insert (format (propertize "Title: %s\n" 'face 'message-header-name) - (propertize title 'face 'message-header-subject))) - (when elfeed-show-entry-author - (dolist (author authors) - (let ((formatted (elfeed--show-format-author author))) - (insert - (format (propertize "Author: %s\n" 'face 'message-header-name) - (propertize formatted 'face 'message-header-to)))))) - (insert (format (propertize "Date: %s\n" 'face 'message-header-name) - (propertize nicedate 'face 'message-header-other))) - (insert (format (propertize "Feed: %s\n" 'face 'message-header-name) - (propertize feed-title 'face 'message-header-other))) - (when tags - (insert (format (propertize "Tags: %s\n" 'face 'message-header-name) - (propertize tagsstr 'face 'message-header-other)))) - (insert (propertize "Link: " 'face 'message-header-name)) - (elfeed-insert-link link link) - (insert "\n") - (cl-loop for enclosure in (elfeed-entry-enclosures elfeed-show-entry) - do (insert (propertize "Enclosure: " 'face 'message-header-name)) - do (elfeed-insert-link (car enclosure)) - do (insert "\n")) - (insert "\n") - (if content - (if (eq type 'html) - (elfeed-insert-html content base) - (insert content)) - (insert (propertize "(empty)\n" 'face 'italic))) - (goto-char (point-min)))) - - - (defun elfeed-db-gc (&optional stats-p) - "Clean up unused content from the content database. - If STATS is true, return the space cleared in bytes." - (elfeed-db-gc-empty-feeds) - (let* ((data (expand-file-name "data" elfeed-db-directory)) - (dirs (directory-files data t "^[0-9a-z]\\{2\\}$")) - (ids (cl-mapcan (lambda (d) (directory-files d nil nil t)) dirs)) - (table (make-hash-table :test 'equal))) - (dolist (id ids) - (setf (gethash id table) nil)) - (with-elfeed-db-visit (entry _) - (let ((content (elfeed-entry-content entry)) - (meta-content (elfeed-meta entry :content))) - (when (elfeed-ref-p content) - (setf (gethash (elfeed-ref-id content) table) t)) - (when (elfeed-ref-p (meta-content)) - (setf (gethash (elfeed-ref-id meta-content) table) t)))) - (cl-loop for id hash-keys of table using (hash-value used) - for used-p = (or used (member id '("." ".."))) - when (and (not used-p) stats-p) - sum (let* ((ref (elfeed-ref--create :id id)) - (file (elfeed-ref--file ref))) - (* 1.0 (nth 7 (file-attributes file)))) - unless used-p - do (elfeed-ref-delete (elfeed-ref--create :id id)) - finally (cl-loop for dir in dirs - when (elfeed-directory-empty-p dir) - do (delete-directory dir))))) - ''; - }; - }; - } diff --git a/pkgsets/emacs/elpy.nix b/pkgsets/emacs/elpy.nix deleted file mode 100644 index 87a981b..0000000 --- a/pkgsets/emacs/elpy.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::elpy" config.machine.pkgs) { - programs.emacs.init.usePackage.elpy = { - enable = true; - after = ["python"]; - command = ["elpy-enable"]; - hook = - [ - '' - (elpy-mode - . (lambda () - (set (make-local-variable 'company-backends) - '((company-dabbrev-code company-yasnippet elpy-company-backend))))) - '' - ] - ++ (optional (elem "emacs::flyspell" config.machine.pkgs) "(elpy-mode . (lambda () (flyspell-prog-mode)))") - ++ (optional (elem "emacs::flycheck" config.machine.pkgs) "(elpy-mode . (lambda () (flycheck-mode)))"); - bindLocal = { - elpy-mode-map = { - "" = "company-indent-or-complete-common"; - }; - }; - init = ''(with-eval-after-load 'python (elpy-enable))''; - config = '' - (setq elpy-project-root-finder-functions '(elpy-project-find-git-root elpy-project-find-python-root elpy-project-find-hg-root elpy-project-find-svn-root)) - (setq elpy-rpc-backend "jedi") - (setq python-shell-interpreter "ipython" - python-shell-interpreter-args "-i --simple-prompt") - - ${optionalString (elem "emacs::flycheck" config.machine.pkgs) '' - ;; manually set what python-mypy is and configure it to ignore 3rd party imports - (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) - (setq-default flycheck-checker 'python-pylint) - (flycheck-add-next-checker 'python-pylint 'python-flake8 t) - ;; (flycheck-add-next-checker 'python-mypy 'python-flake8 t)''} - ''; - }; - } diff --git a/pkgsets/emacs/fcitx.nix b/pkgsets/emacs/fcitx.nix deleted file mode 100644 index e6d113e..0000000 --- a/pkgsets/emacs/fcitx.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::fcitx" config.machine.pkgs) { - programs.emacs.init.usePackage = { - fcitx = { - enable = true; - demand = true; - config = '' - ;; (setq fcitx-use-dbus t) - (fcitx-default-setup) - ''; - }; - }; - } diff --git a/pkgsets/emacs/flycheck.nix b/pkgsets/emacs/flycheck.nix deleted file mode 100644 index e2588b2..0000000 --- a/pkgsets/emacs/flycheck.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::flycheck" config.machine.pkgs) { - programs.emacs.init.usePackage.flycheck = { - enable = true; - command = ["global-flycheck-mode"]; - defer = 1; - bind = {}; - config = '' - - ''; - }; - - programs.emacs.init.usePackage.flycheck-haskell = { - enable = elem "emacs::haskell" config.machine.pkgs; - }; - - programs.emacs.init.usePackage.flycheck-mypy = { - enable = elem "emacs::elpy" config.machine.pkgs; - }; - - programs.emacs.init.usePackage.pylint = { - enable = elem "emacs::elpy" config.machine.pkgs; - }; - - programs.emacs.init.usePackage.flycheck-rust = { - enable = elem "emacs::rust" config.machine.pkgs; - }; - } diff --git a/pkgsets/emacs/flyspell.nix b/pkgsets/emacs/flyspell.nix deleted file mode 100644 index 32410da..0000000 --- a/pkgsets/emacs/flyspell.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::flyspell" config.machine.pkgs) { - programs.emacs.init.usePackage.flyspell = { - enable = true; - package = epkgs: null; - diminish = ["flyspell-mode"]; - command = ["flyspell-mode" "flyspell-prog-mode"]; - hook = []; - bind = { - "C-M-" = "flyspell-switch-dictionary"; - "C-c f" = "ispell-word"; - }; - config = '' - ;; Make flyspell less verbose and disable annoying keybind - (setq flyspell-issue-message-flag nil - flyspell-issue-welcome-flag nil - flyspell-use-meta-tab nil) - - (defun flyspell-switch-dictionary () - (interactive) - (let* ((dic ispell-current-dictionary) - (change (if (string= dic "deutsch8") "english" "deutsch8"))) - (ispell-change-dictionary change) - (message "Dictionary switched to %s" change) - )) - ''; - }; - } diff --git a/pkgsets/emacs/latex.nix b/pkgsets/emacs/latex.nix deleted file mode 100644 index b2122c6..0000000 --- a/pkgsets/emacs/latex.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; - mkIf (elem "emacs::latex" config.machine.pkgs) { - programs.emacs.init.usePackage = { - latex-mode = { - enable = true; - package = epkgs: null; - defer = true; - }; - - tex-site = { - enable = true; - defer = true; - package = epkgs: epkgs.auctex; - hook = []; - mode = [''("\\.tex\\'" . TeX-latex-mode)'']; - }; - - preview = { - enable = true; - defer = true; - package = epkgs: epkgs.auctex; - }; - }; - } diff --git a/pkgsets/emacs/lsp.nix b/pkgsets/emacs/lsp.nix deleted file mode 100644 index b8ff89d..0000000 --- a/pkgsets/emacs/lsp.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; - mkIf (elem "emacs::lsp" config.machine.pkgs) { - programs.emacs.init.usePackage = { - lsp-mode = { - enable = true; - command = ["lsp-mode"]; - config = '' - (setq lsp-keymap-prefix "C-c") - (setq lsp-eldoc-render-all nil) - - (defvar lsp-language-id-configuration '( - ${optionalString (elem "emacs::rust" config.machine.pkgs) - ''(rust-mode . "rust")''} - )) - ${optionalString (elem "emacs::rust" config.machine.pkgs) '' - (setq lsp-rust-clippy-preference "on") - ''} - ${optionalString (elem "emacs::web-mode" config.machine.pkgs) '' - (setq lsp-clients-deno-enable-unstable 't) - (setq lsp-clients-deno-import-map "./import_map.json") - (setq lsp-clients-deno-config "./deno.json") - ''} - ${optionalString (elem "emacs::php-mode" config.machine.pkgs) '' - (setq lsp-intelephense-php-version "8.2") - (setq lsp-intelephense-server-command `("${pkgs.nodePackages.intelephense}/bin/intelephense" "--stdio")) - ''} - ''; - }; - - lsp-ui = { - enable = true; - after = ["lsp-mode"]; - config = '' - (setq lsp-ui-sideline-enable 't) - (setq lsp-ui-sideline-show-symbol nil) - (setq lsp-ui-sideline-show-hover nil) - (setq lsp-ui-doc-show-with-cursor 't) - (setq lsp-ui-doc-delay 1) - (setq lsp-ui-sideline-show-code-actions 't) - (setq lsp-ui-sideline-update-mode 'point) - (define-key lsp-ui-mode-map [remap xref-find-definitions] #'lsp-ui-peek-find-definitions) - (define-key lsp-ui-mode-map [remap xref-find-references] #'lsp-ui-peek-find-references) - ''; - }; - - lsp-ui-flycheck = { - enable = true; - package = epkgs: [epkgs.lsp-ui]; - after = - ["lsp-ui"] - ++ optional (elem "emacs::flycheck" config.machine.pkgs) "flycheck"; - }; - }; - } diff --git a/pkgsets/emacs/magit.nix b/pkgsets/emacs/magit.nix deleted file mode 100644 index 65b313c..0000000 --- a/pkgsets/emacs/magit.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::magit" config.machine.pkgs) { - programs.emacs.init.usePackage.magit = { - enable = true; - bind = { - "C-c m" = "magit-status"; - }; - }; - } diff --git a/pkgsets/emacs/mu4e.nix b/pkgsets/emacs/mu4e.nix deleted file mode 100644 index 9810625..0000000 --- a/pkgsets/emacs/mu4e.nix +++ /dev/null @@ -1,122 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; let - defaultEncrypt = pkgs.emacsPackages.trivialBuild rec { - pname = "defaultencrypt"; - version = "ba07acc8e9fd692534c39c7cdad0a19dc0d897d9"; - - src = pkgs.fetchFromGitLab { - owner = "lechten"; - repo = pname; - rev = version; - sha256 = "1ln7h1syx7yi7bqvirv90mk4rvwxg4zm1wvfcvhfh64s3hqrbfgl"; - }; - }; -in - mkIf (elem "emacs::mu4e" config.machine.pkgs) { - programs.emacs.init.usePackage.pinentry = { - enable = true; - command = ["pinentry-start"]; - hook = ["(after-init . pinentry-start)"]; - }; - - programs.emacs.init.usePackage.mu4e = { - enable = true; - package = epkgs: null; - command = ["mu4e"]; - diminish = ["mu4e-mode"]; - hook = [ - "(mu4e-view-mode . visual-line-mode)" - "(mu4e-compose-mode . flyspell-mode)" - '' (message-send . (lambda () - (unless (yes-or-no-p "Send this message?") - (signal 'quit nil))))'' - ]; - bind = {"\t" = "'company-complete-common";}; - bindLocal = rec { - mu4e-headers-mode-map = { - "C-+" = "nil"; - "C--" = "nil"; - }; - mu4e-view-mode-map = mu4e-headers-mode-map; - }; - init = '' - ;; (add-to-list 'load-path "${defaultEncrypt}/share/emacs/site-lisp") - ;; (require 'jl-encrypt) - ''; - config = '' - (setq mail-user-agent 'mu4e-user-agent) - (setq org-mu4e-link-query-in-headers-mode t) - (setq mu4e-maildir "~/.mail/Mail") - (setq mu4e-get-mail-command "${pkgs.isync.override { withCyrusSaslXoauth2 = true; }}/bin/mbsync -a") - (setq mu4e-context-policy 'pick-first) - (setq mu4e-change-filenames-when-moving t) - (setq starttls-use-gnutls t) - (setq message-send-mail-function 'smtpmail-send-it) - (setq mu4e-update-interval 300) - (setq mu4e-use-fancy-chars t) - (setq mu4e-view-show-addresses t) - (setq mu4e-headers-show-threads t) - (setq mu4e-headers-skip-duplicates t) - (setq mail-user-agent 'mu4e-user-agent) - (defvaralias 'mu4e-compose-signature 'message-signature) - (setq-default mu4e-save-multiple-attachments-without-asking t) - (setq-default mu4e-view-show-addresses t) - (setq-default mu4e-confirm-quit nil) - (setq-default mu4e-hide-index-messages t) - (setq-default mu4e-index-update-in-background t) - (setq mu4e-compose-in-new-frame nil) - - ;;rename files when moving - ;;NEEDED FOR MBSYNC - (setq mu4e-change-filenames-when-moving t) - - (setq mu4e-html2text-command "iconv -c -t utf-8 | ${pkgs.pandoc}/bin/pandoc -f html -t plain") - (setq mu4e-view-show-images t) - (when (fboundp 'imagemagick-register-types) - (imagemagick-register-types)) - (setq message-kill-buffer-on-exit t) - - ;; Encryption Stuff - ;; (setq mml-secure-openpgp-sign-with-sender t) - ;; ;; (setq mm-sign-option ‘guided’) - ;; (setq epa-pinentry-mode 'loopback) - ;; mailAcc config goes here - (load-file "~/.emacs.d/mu4e.el") - - (defun my-browse-url-firefox-privately (url &optional new-window) - "Make firefox open URL in private-browsing window." - (interactive (browse-url-interactive-arg "URL: ")) - (let ((process-environment (browse-url-process-environment))) - (apply 'start-process - (concat "firefox " url) - nil - browse-url-firefox-program - (list "-private-window" url)))) - (setq browse-url-browser-function 'my-browse-url-firefox-privately) - (add-to-list 'mu4e-view-actions - '("ViewInBrowser" . mu4e-action-view-in-browser) t) - ''; - extraConfig = '' - :load-path "${pkgs.mu.mu4e}/share/emacs/site-lisp/mu4e" - ''; - }; - - programs.emacs.init.usePackage.mu4e-alert = { - enable = true; - # hook = [ "after-init . mu4e-alert-enable-mode-line-display" ]; - }; - - # programs.emacs.init.usePackage.org-mu4e = { - # enable = (elem "emacs::org" config.machine.pkgs); - # }; - - environment.systemPackages = with pkgs; [ - mu - (isync.override { withCyrusSaslXoauth2 = true; }) - ]; - } diff --git a/pkgsets/emacs/nix-mode.nix b/pkgsets/emacs/nix-mode.nix deleted file mode 100644 index 34b9944..0000000 --- a/pkgsets/emacs/nix-mode.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::nix-mode" config.machine.pkgs) { - programs.emacs.init.usePackage.nix-mode = { - enable = true; - mode = [''"\\.nix\\'"'']; - config = ''(setq nix-nixfmt-bin "nixfmt -w 150")''; - }; - } diff --git a/pkgsets/emacs/org.nix b/pkgsets/emacs/org.nix deleted file mode 100644 index dcf2264..0000000 --- a/pkgsets/emacs/org.nix +++ /dev/null @@ -1,440 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; - mkIf (elem "emacs::org" config.machine.pkgs) { - programs.emacs.init.usePackage.org = { - enable = true; - package = epkgs: [epkgs.org]; - mode = [''("\\.org\\'" . org-mode)'']; - command = ["org-mode"]; - hook = - [ - "(org-mode . (lambda () (org-indent-mode)))" - '' - (org-mode - . (lambda () - ;; Automatic line-wrapping in org-mode - ;;(auto-fill-mode 1) - - (setq completion-at-point-functions - '(org-completion-symbols - ora-cap-filesystem)))) - '' - '' - (org-mode - . (lambda () - "Beautify Org Checkbox Symbol" - (push '("[ ]" . "☐" ) prettify-symbols-alist) - (push '("[X]" . "☑" ) prettify-symbols-alist) - (push '("[-]" . "❍" ) prettify-symbols-alist) - (prettify-symbols-mode))) - '' - ] - ++ optional (elem "emacs::flyspell" config.machine.pkgs) "(org-mode . (lambda () (flyspell-mode)))"; - bind = { - "C-c a" = "org-agenda"; - }; - bindLocal = { - org-mode-map = - { - "M-" = "org-metaup"; - "M-" = "org-metadown"; - "M-." = "org-open-at-point"; - "M-," = "org-mark-ring-goto"; - "M-S-" = "org-insert-todo-heading-respect-content"; - "M-" = "org-meta-return"; - "M-p" = "org-previous-visible-heading"; - "M-n" = "org-next-visible-heading"; - } - // (optionalAttrs (elem "emacs::company" config.machine.pkgs) { - "" = "company-pcomplete"; - }); - }; - config = '' - ;; Insead of "..." show "…" when there's hidden folded content - - ;; org-prettify - (defface org-checkbox-done-text - '((t (:foreground "#71696A" :strike-through t))) - "Face for the text part of a checked org-mode checkbox.") - - (font-lock-add-keywords - 'org-mode - `(("^[ \t]*\\(?:[-+*]\\|[0-9]+[).]\\)[ \t]+\\(\\(?:\\[@\\(?:start:\\)?[0-9]+\\][ \t]*\\)?\\[\\(?:X\\|\\([0-9]+\\)/\\2\\)\\][^\n]*\n\\)" - 1 'org-checkbox-done-text prepend)) - 'append) - - ;; Some characters to choose from: …, ⤵, ▼, ↴, ⬎, ⤷, and ⋱ - (setq org-ellipsis " ▼") - ;; get nice looking tables (only for non org-tables; rarely used) - (setq table-cell-horizontal-chars "\u2501") - (setq table-cell-vertical-char ?\u2503) - (setq table-cell-intersection-char ?\u254B) - - (setq org-directory "~/Documents/org/") - - ;; Show headings up to level 2 by default when opening an org files - (setq org-startup-folded 'content) - - ;; Show inline images by default - (setq org-startup-with-inline-images t) - - ;; Add more levels to headlines that get displayed with imenu - (setq org-imenu-depth 5) - - ;; Enter key follows links (= C-c C-o) - (setq org-return-follows-link t) - - ;; Don't remove links after inserting - (setq org-keep-stored-link-after-insertion t) - - (setq org-tag-alist (quote ((:startgroup) - ("WAITING" . ?w) - ("HOLD" . ?h) - ("CANCELLED" . ?c) - ("NOTE" . ?n) - (:endgroup) - ("PERSONAL" . ?P) - ("WORK" . ?W) - ("ATOMX" . ?A) - ("E5" . ?E) - ("HOGASO" . ?H) - ("ORG" . ?o) - ("crypt" . ?C) - ("FLAGGED" . ??)))) - - ;; Allow setting single tags without the menu - (setq org-fast-tag-selection-single-key (quote expert)) - - (setq org-archive-mark-done nil) - (setq org-archive-location "%s_archive::* Archived Tasks") - - ;; C-RET, C-S-RET insert new heading after current task content - (setq org-insert-heading-respect-content nil) - - ;; Show a little bit more when using sparse-trees - (setq org-show-following-heading t) - (setq org-show-hierarchy-above t) - (setq org-show-siblings (quote ((default)))) - - ;; don't show * / = etc - (setq org-hide-emphasis-markers t) - - ;; leave highlights in sparse tree after edit. C-c C-c removes highlights - (setq org-remove-highlights-with-change nil) - - ;; M-RET should not split the lines - (setq org-M-RET-may-split-line '((default . nil))) - - (setq org-special-ctrl-a/e t) - (setq org-special-ctrl-k t) - (setq org-yank-adjusted-subtrees t) - - ;; Show org entities as UTF-8 characters (e.g. \sum as ∑) - (setq org-pretty-entities t) - ;; But Don't print "bar" as subscript in "foo_bar" - (setq org-pretty-entities-include-sub-superscripts nil) - ;; And also don't display ^ or _ as super/subscripts - (setq org-use-sub-superscripts nil) - ;; undone TODO entries will block switching the parent to DONE - (setq org-enforce-todo-dependencies t) - - (setq org-use-fast-todo-selection t) - - (setq org-todo-keywords - (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)") - (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" "PHONE" "MEETING")))) - - (setq org-todo-keyword-faces - (quote (("TODO" :foreground "red" :weight bold) - ("NEXT" :foreground "blue" :weight bold) - ("DONE" :foreground "forest green" :weight bold) - ("WAITING" :foreground "orange" :weight bold) - ("HOLD" :foreground "magenta" :weight bold) - ("CANCELLED" :foreground "forest green" :weight bold) - ("MEETING" :foreground "forest green" :weight bold) - ("PHONE" :foreground "forest green" :weight bold)))) - - ;; Auto completion for symbols in org-mode - ;; https://oremacs.com/2017/10/04/completion-at-point/ - (defun org-completion-symbols () - (when (looking-back "[`~=][a-zA-Z]+" nil) - (let (cands) - (save-match-data - (save-excursion - (goto-char (point-min)) - (while (re-search-forward "[`~=]\\([a-zA-Z.\\-_]+\\)[`~=]" nil t) - (cl-pushnew - (match-string-no-properties 0) cands :test 'equal)) - cands)) - (when cands - (list (match-beginning 0) (match-end 0) cands))))) - - (defun ora-cap-filesystem () - (let (path) - (when (setq path (ffap-string-at-point)) - (when (string-match "\\`file:\\(.*\\)\\'" path) - (setq path (match-string 1 path))) - (let ((compl (all-completions path #'read-file-name-internal))) - (when compl - (let* ((str (car compl)) - (offset - (let ((i 0) - (len (length str))) - (while (and (< i len) - (equal (get-text-property i 'face str) - 'completions-common-part)) - (cl-incf i)) - i))) - (list (- (point) offset) (point) compl))))))) - - ''; - }; - - programs.emacs.init.usePackage.ob = { - enable = true; - package = epkgs: [epkgs.ob-ipython epkgs.ob-rust epkgs.ob-diagrams]; - defer = true; - init = '' - (add-hook 'org-babel-after-execute-hook 'org-display-inline-images 'append) - ''; - config = '' - (setq org-confirm-babel-evaluate nil) ; don't prompt me to confirm everytime I want to evaluate a block - - (defun org-babel-restart-session-to-point (&optional arg) - "Restart session up to the src-block in the current point. - Goes to beginning of buffer and executes each code block with - `org-babel-execute-src-block' that has the same language and - session as the current block. ARG has same meaning as in - `org-babel-execute-src-block'." - (interactive "P") - (unless (org-in-src-block-p) - (error "You must be in a src-block to run this command")) - (let* ((current-point (point-marker)) - (info (org-babel-get-src-block-info)) - (lang (nth 0 info)) - (params (nth 2 info)) - (session (cdr (assoc :session params)))) - (save-excursion - (goto-char (point-min)) - (while (re-search-forward org-babel-src-block-regexp nil t) - ;; goto start of block - (goto-char (match-beginning 0)) - (let* ((this-info (org-babel-get-src-block-info)) - (this-lang (nth 0 this-info)) - (this-params (nth 2 this-info)) - (this-session (cdr (assoc :session this-params)))) - (when - (and - (< (point) (marker-position current-point)) - (string= lang this-lang) - (src-block-in-session-p session)) - (org-babel-execute-src-block arg))) - ;; move forward so we can find the next block - (forward-line))))) - - (defun org-babel-kill-session () - "Kill session for current code block." - (interactive) - (unless (org-in-src-block-p) - (error "You must be in a src-block to run this command")) - (save-window-excursion - (org-babel-switch-to-session) - (kill-buffer))) - - (defun org-babel-remove-result-buffer () - "Remove results from every code block in buffer." - (interactive) - (save-excursion - (goto-char (point-min)) - (while (re-search-forward org-babel-src-block-regexp nil t) - (org-babel-remove-result)))) - - - ;; this adds a "new language" in babel that gets exported as js in html - ;; https://www.reddit.com/r/orgmode/comments/5bi6ku/tip_for_exporting_javascript_source_block_to/ - (add-to-list 'org-src-lang-modes '("inline-js" . javascript)) - (defvar org-babel-default-header-args:inline-js - '((:results . "html") - (:exports . "results"))) - (defun org-babel-execute:inline-js (body _params) - (format "" body)) - - ;; Path when plantuml is installed from AUR (package `plantuml') - (setq org-plantuml-jar-path "/opt/plantuml/plantuml.jar") - - ;; add all languages to org mode - (org-babel-do-load-languages - 'org-babel-load-languages - '((C . t) - ;;(R . t) - (asymptote) - (awk) - (calc . t) - (clojure . t) - (comint) - (css) - (ditaa . t) - (dot . t) - (emacs-lisp . t) - (fortran) - (gnuplot . t) - (haskell) - (io) - (java) - (js . t) - (latex) - (lilypond) - (lisp) - (lua . t) - (matlab) - (maxima) - (mscgen) - (ocaml) - (octave . t) - (org . t) - (perl) - (picolisp) - (plantuml . t) - (python . t) - ;; (ipython . t) - ;; (restclient . t) - (ref) - (ruby) - (sass) - (scala) - (scheme) - (screen) - (shell . t) - (shen) - (snippet) - (sql . t) - (sqlite . t))) - ''; - }; - - programs.emacs.init.usePackage.org-src = { - enable = true; - package = epkgs: null; - defer = true; - init = ''(put 'org-src-preserve-indentation 'safe-local-variable 'booleanp)''; - config = '' - (setq org-src-window-setup 'current-window) - - (setq org-src-fontify-natively t) ; syntax highlighting for source code blocks - - ;; Tab should do indent in code blocks - ;; I think I hate this function (causes scroll on TAB - (setq org-src-tab-acts-natively t) - ;; ?Fix weird scrolling - - ;; Don't remove (or add) any extra whitespace - (setq org-src-preserve-indentation nil) - (setq org-edit-src-content-indentation 0) - - ;;; Some helper function to manage org-babel sessions - - (defun src-block-in-session-p (&optional name) - "Return if src-block is in a session of NAME. - NAME may be nil for unnamed sessions." - (let* ((info (org-babel-get-src-block-info)) - ;;(lang (nth 0 info)) - ;;(body (nth 1 info)) - (params (nth 2 info)) - (session (cdr (assoc :session params)))) - - (cond - ;; unnamed session, both name and session are nil - ((and (null session) - (null name)) - t) - ;; Matching name and session - ((and - (stringp name) - (stringp session) - (string= name session)) - t) - ;; no match - (t nil)))) - - ;; dot == graphviz-dot - (add-to-list 'org-src-lang-modes '("dot" . graphviz-dot)) - - ;; Add 'conf-mode' to org-babel - (add-to-list 'org-src-lang-modes '("ini" . conf)) - (add-to-list 'org-src-lang-modes '("conf" . conf)) - ''; - }; - - programs.emacs.init.usePackage.org-tempo = { - enable = true; - package = epkgs: null; - }; - - programs.emacs.init.usePackage.ox = { - enable = true; - package = epkgs: null; - defer = true; - command = []; - config = '' - ;; Use html5 as org export and use new tags - (setq org-html-doctype "html5") - (setq org-html-html5-fancy t) - ;; Don't add html footer to export - (setq org-html-postamble nil) - ;; Don't export ^ or _ as super/subscripts - (setq org-export-with-sub-superscripts nil) - ''; - }; - - programs.emacs.init.usePackage.ox-gfm = { - enable = true; - after = ["ox"]; - }; - - programs.emacs.init.usePackage.ox-rst = { - enable = true; - after = ["ox"]; - }; - - programs.emacs.init.usePackage.ox-md = { - enable = true; - package = epkgs: null; - after = ["ox"]; - }; - - programs.emacs.init.usePackage.org-bullets = { - enable = true; - hook = ["(org-mode . org-bullets-mode)"]; - }; - - programs.emacs.init.usePackage.org-crypt = { - enable = true; - package = epkgs: null; - after = ["org"]; - hook = ["(org-mode . (lambda () (add-hook 'before-save-hook 'org-encrypt-entries nil t)))"]; - command = ["org-decrypt-entry" "org-encrypt-entry"]; - bindLocal = { - org-mode-map = { - "C-c d" = "org-decrypt-entry"; - "C-c e" = "org-encrypt-entry"; - }; - }; - config = '' - (setq org-tags-exclude-from-inheritance (quote ("crypt"))) - ;; GPG key to use for encryption - (load-file "~/.emacs.d/org-crypt-key.el") - - ;; don't ask to disable auto-save - (setq org-crypt-disable-auto-save "encrypt") - ''; - }; - - programs.emacs.init.usePackage.org-drill = { - enable = true; - }; - } diff --git a/pkgsets/emacs/php-mode.nix b/pkgsets/emacs/php-mode.nix deleted file mode 100644 index 43a5718..0000000 --- a/pkgsets/emacs/php-mode.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::php-mode" config.machine.pkgs) { - programs.emacs.init.usePackage = { - php-mode = { - enable = true; - hook = - lib.optional (elem "emacs::lsp" config.machine.pkgs) - ''(typescript-mode . (lambda () (lsp)))''; - }; - }; - } diff --git a/pkgsets/emacs/powerline.nix b/pkgsets/emacs/powerline.nix deleted file mode 100644 index aa5e050..0000000 --- a/pkgsets/emacs/powerline.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::powerline" config.machine.pkgs) { - programs.emacs.init.usePackage.powerline = { - enable = true; - config = '' - ;; color palette from https://github.com/kuanyui/moe-theme.el/blob/master/moe-theme.el#L283 - (set-face-attribute 'mode-line nil :background "#afd7ff" :foreground "#005f87") - (set-face-attribute 'mode-line-buffer-id nil :background "#afd7ff" :foreground "#080808") - (set-face-attribute 'minibuffer-prompt nil :foreground "#5fafd7" :background "#3a3a3a") - (powerline-default-theme) - ''; - }; - } diff --git a/pkgsets/emacs/rust.nix b/pkgsets/emacs/rust.nix deleted file mode 100644 index 4fffbb9..0000000 --- a/pkgsets/emacs/rust.nix +++ /dev/null @@ -1,55 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; let - rustEnv = pkgs.symlinkJoin { - name = "rustEnv"; - paths = config.machine.pkgsets.rustpkgs.pkgwrap; - }; -in - mkIf (elem "emacs::rust" config.machine.pkgs) { - programs.emacs.init.usePackage.rust-mode = { - enable = true; - hook = - [''(rust-mode . (lambda () (cargo-minor-mode)))''] - ++ ( - if (elem "emacs::lsp" config.machine.pkgs) - then [''(rust-mode . (lambda () (lsp)))''] - else [''(rust-mode . (lambda () (racer-mode)))''] - ); - mode = [''("\\.rs\\'" . rust-mode)'']; - command = ["rust-mode"]; - bindLocal = optionalAttrs (elem "emacs::company" config.machine.pkgs) { - rust-mode-map = { - "" = "company-indent-or-complete-common"; - }; - }; - config = '' - (setq rust-rustfmt-bin "${rustEnv}/bin/rustfmt") - (setq rust-format-on-save t) - ''; - }; - - programs.emacs.init.usePackage.cargo = { - enable = true; - defer = true; - }; - - programs.emacs.init.usePackage.racer = { - enable = true; - defer = true; - hook = - [ - ''(racer-mode . (lambda () (eldoc-mode)))'' - ] - ++ optional (elem "emacs::company" config.machine.pkgs) ''(racer-mode . (lambda () (company-mode)))''; - - config = '' - (setq racer-rust-src-path "${rustEnv}/lib/rustlib/src/rust/src") - (setq racer-cmd "${rustEnv}/bin/racer") - ''; - }; - } diff --git a/pkgsets/emacs/solarized-theme.nix b/pkgsets/emacs/solarized-theme.nix deleted file mode 100644 index 87bd900..0000000 --- a/pkgsets/emacs/solarized-theme.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::solarized-theme" config.machine.pkgs) { - programs.emacs.init.usePackage.solarized-theme = { - enable = true; - config = "(load-theme 'solarized-dark t)"; - }; - } diff --git a/pkgsets/emacs/telega.nix b/pkgsets/emacs/telega.nix deleted file mode 100644 index 7e2c83c..0000000 --- a/pkgsets/emacs/telega.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::telega" config.machine.pkgs) { - programs.emacs.init.usePackage.telegram = { - enable = true; - defer = true; - package = epkgs: [epkgs.telega epkgs.visual-fill-column]; - command = ["telega"]; - config = '' - (telega-alert-mode 1) - ''; - }; - } diff --git a/pkgsets/emacs/transmission.nix b/pkgsets/emacs/transmission.nix deleted file mode 100644 index e654242..0000000 --- a/pkgsets/emacs/transmission.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; - mkIf (elem "emacs::transmission" config.machine.pkgs) { - programs.emacs.init.usePackage = { - transmission = { - enable = true; - defer = true; - command = ["transmission"]; - bindLocal = { - transmission-mode-map = { - "A" = '' (lambda () - (interactive) - (transmission-add (read-string "Magnet URI: ")))''; - }; - }; - config = '' - ;; Auto refresh for all transmission buffers - (setq transmission-refresh-modes '(transmission-mode - transmission-files-mode - transmission-info-mode - transmission-peers-mode)) - - (defun transmission () - "Open a `transmission-mode' buffer." - (interactive) - (let* ((name "*transmission*") - (buffer (or (get-buffer name) - (generate-new-buffer name)))) - (transmission-turtle-poll) - (unless (eq buffer (current-buffer)) - (with-current-buffer buffer - (unless (eq major-mode 'transmission-mode) - (condition-case e - (progn - (transmission-mode) - (revert-buffer) - (goto-char (point-min))) - (error - (kill-buffer buffer) - (signal (car e) (cdr e)))))) - (switch-to-buffer buffer)))) - ''; - }; - }; - } diff --git a/pkgsets/emacs/undo-tree.nix b/pkgsets/emacs/undo-tree.nix deleted file mode 100644 index 564514c..0000000 --- a/pkgsets/emacs/undo-tree.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::undo-tree" config.machine.pkgs) { - programs.emacs.init.usePackage.undo-tree = { - enable = true; - hook = ["(after-init . global-undo-tree-mode)"]; - config = '' - (setq undo-tree-visualizer-diff 't) - (setq undo-tree-auto-save-history 't) - (setq undo-tree-enable-undo-in-region 't) - (setq undo-tree-history-directory-alist '(("." . "~/.emacs_undo"))) - ''; - }; - } diff --git a/pkgsets/emacs/web-mode.nix b/pkgsets/emacs/web-mode.nix deleted file mode 100644 index 2e16941..0000000 --- a/pkgsets/emacs/web-mode.nix +++ /dev/null @@ -1,100 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::web-mode" config.machine.pkgs) { - programs.emacs.init.usePackage = { - web-mode = { - enable = true; - init = "(require 'sgml-mode)"; - hook = [ - "(web-mode . (lambda () (sgml-electric-tag-pair-mode)))" - '' - (web-mode . (lambda () - (when (and (buffer-file-name) - (equal (file-name-extension (buffer-file-name)) "svelte")) - (lsp)))) - '' - ]; - # bind = {}; - mode = [ - ''("\\.html\\'" . web-mode)'' - ''("\\.css\\'" . web-mode)'' - ''("\\.html?\\'" . web-mode)'' - ''("\\.svelte\\'" . web-mode)'' - ''("\\.phtml\\'" . web-mode)'' - ''("\\.tpl\\.php\\'" . web-mode)'' - ''("\\.[agj]sp\\'" . web-mode)'' - ''("\\.as[cp]x\\'" . web-mode)'' - ''("\\.erb\\'" . web-mode)'' - ''("\\.mustache\\'" . web-mode)'' - ''("\\.djhtml\\'" . web-mode)'' - ]; - config = '' - (setq web-mode-markup-indent-offset 2) - (setq web-mode-css-indent-offset 2) - (setq web-mode-code-indent-offset 2) - (setq web-mode-sql-indent-offset 2) - (setq web-mode-script-padding 2) - (setq web-mode-style-padding 2) - (setq web-mode-part-padding 2) - (setq web-mode-block-padding 2) - (setq web-mode-enable-comment-annotation 't) - - (setq web-mode-enable-current-element-highlight 't) - - (setq web-mode-enable-sql-detection 't) - (setq web-mode-auto-close-style 2) - - (setq web-mode-engines-alist - '(("php" . "\\.phtml\\'") - ("blade" . "\\.blade\\.")) - ) - ''; - }; - js2-mode = { - enable = true; - mode = [ - ''("\\.js\\'" . js2-mode)'' - ]; - }; - typescript-mode = { - enable = true; - hook = - ["(typescript-mode . (lambda () (subword-mode)))"] - ++ lib.optional (elem "emacs::lsp" config.machine.pkgs) - ''(typescript-mode . (lambda () (lsp)))''; - mode = [ - ''("\\.ts\\'" . typescript-mode)'' - ''("\\.tsx?\\'" . typescript-tsx-mode)'' - ]; - init = '' - (define-derived-mode typescript-tsx-mode typescript-mode "tsx") - ''; - config = '' - (setq typescript-indent-level 2) - ''; - }; - # https://github.com/NixOS/nixpkgs/pull/150239 - tree-sitter = { - enable = true; - package = epkgs: [epkgs.tree-sitter (epkgs.tree-sitter-langs.withPlugins (p: epkgs.tree-sitter-langs.plugins ++ [p.tree-sitter-markdown p.tree-sitter-tsx]))]; - hook = [ - "(typescript-mode . tree-sitter-hl-mode)" - "(typescript-tsx-mode . tree-sitter-hl-mode)" - ]; - config = '' - (tree-sitter-require 'tsx) - (add-to-list 'tree-sitter-major-mode-language-alist '(typescript-tsx-mode . tsx)) - ''; - }; - impatient-mode = { - enable = true; - }; - simple-httpd = { - enable = true; - }; - }; - } diff --git a/pkgsets/emacs/yaml-mode.nix b/pkgsets/emacs/yaml-mode.nix deleted file mode 100644 index 1946615..0000000 --- a/pkgsets/emacs/yaml-mode.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; - mkIf (elem "emacs::yaml-mode" config.machine.pkgs) { - programs.emacs.init.usePackage = { - yaml-mode = { - enable = true; - }; - }; - } diff --git a/pkgsets/emacs/yasnippet.nix b/pkgsets/emacs/yasnippet.nix deleted file mode 100644 index d5d03fc..0000000 --- a/pkgsets/emacs/yasnippet.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; - mkIf (elem "emacs::yasnippet" config.machine.pkgs) { - programs.emacs.init.usePackage = { - yasnippet = { - enable = true; - hook = ["(after-init . yas-global-mode)"]; - # config = '' - - # ''; - }; - yasnippet-snippets = { - enable = true; - }; - }; - } diff --git a/pkgsets/emacs/yuck-mode.nix b/pkgsets/emacs/yuck-mode.nix deleted file mode 100644 index 3d02392..0000000 --- a/pkgsets/emacs/yuck-mode.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - config, - lib, - ... -}: -with lib; - mkIf (elem "emacs::yuck-mode" config.machine.pkgs) { - programs.emacs.init.usePackage.yuck-mode = { - enable = true; - mode = [''"\\.yuck\\'"'']; - }; - }