فا نیکسی

Emacs

پیکربندی Emacs

بسته Emacs همراه با برخی کمک‌رسان‌های اضافی ارائه می‌شود تا پیکربندی آن ساده‌تر شود. emacs.pkgs.withPackages به شما امکان می‌دهد بسته‌ها را از ELPA مدیریت کنید. این بدان معناست که نیازی نیست آن بسته‌ها را از درون Emacs نصب کنید. برای مثال، اگر بخواهید از company، counsel، flycheck، ivy، magit، projectile و use-package استفاده کنید، می‌توانید از این به عنوان یک بازنشانی در ~/.config/nixpkgs/config.nix استفاده کنید:

{
  packageOverrides =
    pkgs: with pkgs; {
      myEmacs = emacs.pkgs.withPackages (
        epkgs:
        (with epkgs.melpaStablePackages; [
          company
          counsel
          flycheck
          ivy
          magit
          projectile
          use-package
        ])
      );
    };
}

می‌توانید آن را مانند هر بسته دیگری از طریق nix-env -iA myEmacs نصب کنید. با این حال، این کار فقط آن بسته‌ها را نصب می‌کند و آن‌ها را برای ما configure نخواهد کرد. برای انجام این کار، باید یک فایل پیکربندی ارائه دهیم. خوشبختانه، انجام این کار از داخل Nix امکان‌پذیر است! با تغییر مثال بالا، می‌توانیم کاری کنیم که Emacs یک فایل پیکرب

{
  packageOverrides = pkgs: {
    myEmacsConfig = pkgs.writeText "default.el" ''
      (eval-when-compile
        (require 'use-package))

      ;; load some packages

      (use-package company
        :bind ("<C-tab>" . company-complete)
        :diminish company-mode
        :commands (company-mode global-company-mode)
        :defer 1
        :config
        (global-company-mode))

      (use-package counsel
        :commands (counsel-descbinds)
        :bind (([remap execute-extended-command] . counsel-M-x)
               ("C-x C-f" . counsel-find-file)
               ("C-c g" . counsel-git)
               ("C-c j" . counsel-git-grep)
               ("C-c k" . counsel-ag)
               ("C-x l" . counsel-locate)
               ("M-y" . counsel-yank-pop)))

      (use-package flycheck
        :defer 2
        :config (global-flycheck-mode))

      (use-package ivy
        :defer 1
        :bind (("C-c C-r" . ivy-resume)
               ("C-x C-b" . ivy-switch-buffer)
               :map ivy-minibuffer-map
               ("C-j" . ivy-call))
        :diminish ivy-mode
        :commands ivy-mode
        :config
        (ivy-mode 1))

      (use-package magit
        :defer
        :if (executable-find "git")
        :bind (("C-x g" . magit-status)
               ("C-x G" . magit-dispatch-popup))
        :init
        (setq magit-completing-read-function 'ivy-completing-read))

      (use-package projectile
        :commands projectile-mode
        :bind-keymap ("C-c p" . projectile-command-map)
        :defer 5
        :config
        (projectile-global-mode))
    '';

    myEmacs = emacs.pkgs.withPackages (
      epkgs:
      (with epkgs.melpaStablePackages; [
        (runCommand "default.el" { } ''
          mkdir -p $out/share/emacs/site-lisp
          cp ${myEmacsConfig} $out/share/emacs/site-lisp/default.el
        '')
        company
        counsel
        flycheck
        ivy
        magit
        projectile
        use-package
      ])
    );
  };
}

این یک فایل راه‌اندازی تقریباً کامل برای Emacs فراهم می‌کند. این فایل علاوه بر پیکربندی شخصی کاربر بارگذاری می‌شود. همیشه می‌توانید با پاس دادن -q به دستور Emacs آن را غیرفعال کنید.

گاهی

let
  overrides = self: super: rec {
    haskell-mode = self.melpaPackages.haskell-mode;
    # ...
  };
in
((emacsPackagesFor emacs).overrideScope overrides).withPackages (
  p: with p; [
    # here both these package will use haskell-mode of our own choice
    ghc-mod
    dante
  ]
)

{'}'}