summary refs log tree commit diff stats
path: root/user
diff options
context:
space:
mode:
Diffstat (limited to 'user')
-rwxr-xr-xuser/emacs/.local/share/applications/emacsclient.desktop12
-rw-r--r--user/modules/emacs.nix48
-rw-r--r--user/packages/emacs.nix127
3 files changed, 173 insertions, 14 deletions
diff --git a/user/emacs/.local/share/applications/emacsclient.desktop b/user/emacs/.local/share/applications/emacsclient.desktop
deleted file mode 100755
index 7cf42241..00000000
--- a/user/emacs/.local/share/applications/emacsclient.desktop
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env xdg-open
-[Desktop Entry]
-Name=Emacsclient
-Comment=Edit text
-MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
-Exec=emacsclient -c %F -a ""
-Icon=emacs
-Type=Application
-Terminal=false
-Categories=Development;TextEditor;
-StartupWMClass=Emacs
-Keywords=Text;Editor;
diff --git a/user/modules/emacs.nix b/user/modules/emacs.nix
index 82a22b52..6860627e 100644
--- a/user/modules/emacs.nix
+++ b/user/modules/emacs.nix
@@ -1,9 +1,53 @@
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
+let
+  pkgsUnstable = if pkgs.stdenv.isDarwin then import <nixpkgs-unstable> {} else import <nixos-unstable> {};
+  emacsPackage = import ../packages/emacs.nix {
+    pkgs = pkgs.unstable;
+    emacs = pkgs.unstable.emacs;
+  };
+
+  editorScript = pkgs.writeScriptBin "edit" ''
+    #!${pkgs.runtimeShell}
+    if [ -z "$1" ]; then
+      exec ${emacsPackage}/bin/emacsclient --create-frame --alternate-editor ${emacsPackage}/bin/emacs
+    else
+      exec ${emacsPackage}/bin/emacsclient --alternate-editor ${emacsPackage}/bin/emacs "$@"
+    fi
+  '';
+  desktopApplicationFile = pkgs.writeTextFile {
+    name = "emacsclient.desktop";
+    destination = "/share/applications/emacsclient.desktop";
+    text = ''
+      [Desktop Entry]
+      Name=Emacsclient
+      GenericName=Text Editor
+      Comment=Edit text
+      MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
+      Exec=${editorScript}/bin/edit %F
+      Icon=emacs
+      Type=Application
+      Terminal=false
+      Categories=Development;TextEditor;
+      StartupWMClass=Emacs
+      Keywords=Text;Editor;
+    '';
+  };
+in
 {
+  home.packages = [
+    emacsPackage
+    editorScript
+  ];
+  nixpkgs.config.packageOverrides = {
+    myEmacs = emacsPackage;
+  };
+  systemd.user.sessionVariables = {
+    EDITOR = lib.mkOverride 900 "${editorScript}/bin/edit";
+  };
   home.file.".emacs.d" = {
     recursive = true;
     source = ../emacs/.emacs.d;
   };
-  home.file.".local/share/applications/emacsclient.desktop".source = ../emacs/.local/share/applications/emacsclient.desktop;
+  home.file.".local/share/applications/emacsclient.desktop".source = desktopApplicationFile;
 }
diff --git a/user/packages/emacs.nix b/user/packages/emacs.nix
new file mode 100644
index 00000000..3644f520
--- /dev/null
+++ b/user/packages/emacs.nix
@@ -0,0 +1,127 @@
+{
+  pkgs ? import <nixpkgs-unstable> {},
+  emacs ? pkgs.emacs
+}:
+
+let
+  myEmacs = pkgs.lib.overrideDerivation (emacs) (attrs: {
+    postInstall = attrs.postInstall + ''
+      rm $out/share/applications/emacs.desktop
+    '';
+  });
+  stdenv = pkgs.stdenv;
+
+  emacsWithPackages = (pkgs.emacsPackagesNgGen myEmacs).emacsWithPackages;
+in
+  emacsWithPackages (epkgs: (with epkgs; [
+    ace-link
+    all-the-icons
+    almost-mono-themes
+    add-node-modules-path
+    ag
+    all-the-icons
+    amx
+    auto-async-byte-compile
+    avy
+    basic-theme
+    bash-completion
+    caddyfile-mode
+    company
+    company-web
+    company-tabnine
+    counsel
+    counsel-projectile
+    crux
+    docker-compose-mode
+    dockerfile-mode
+    editorconfig
+    eink-theme
+    eldoc-box
+    emmet-mode
+    esh-autosuggest
+    esh-buf-stack
+    esh-help
+    eshell-fringe-status
+    eshell-toggle
+    eshell-up
+    evil
+    evil-collection
+    evil-commentary
+    evil-magit
+    evil-mu4e
+    evil-org
+    evil-quickscope
+    evil-space
+    evil-surround
+    eyebrowse
+    feature-mode
+    fish-completion
+    flycheck
+    flymake-diagnostic-at-point
+    general
+    git-gutter-fringe
+    git-messenger
+    git-timemachine
+    gitattributes-mode
+    gitconfig-mode
+    gitignore-mode
+    gitlab-ci-mode
+    gitlab-ci-mode-flycheck
+    goto-chg
+    haskell-mode
+    helpful
+    ivy-hydra
+    jinja2-mode
+    js2-mode
+    json-mode
+    k8s-mode
+    # kubernetes
+    # kubernetes-evil
+    ledger-mode
+    lsp-mode
+    lsp-ui
+    lsp-haskell
+    lsp-treemacs
+    magit
+    markdown-mode
+    minions
+    monotropic-theme
+    moody
+    nginx-mode
+    nix-mode
+    nix-update
+    org-journal
+    paredit
+    php-mode
+    posframe
+    prettier-js
+    projectile
+    projectile-ripgrep
+    quickrun
+    relative-buffers
+    restclient
+    ripgrep
+    rjsx-mode
+    scss-mode
+    spacemacs-theme
+    swiper
+    toml-mode
+    typescript-mode
+    undo-tree
+    use-package
+    web-mode
+    wgrep-ag
+    ws-butler
+    which-key
+    yaml-mode
+  ] ++ (if stdenv.isDarwin then [
+    exec-path-from-shell
+    ns-auto-titlebar
+  ] else [
+  ])) ++ (with epkgs.elpaPackages; [
+    rainbow-mode
+  ]) ++ (if !stdenv.isDarwin then [
+    # From main packages set
+
+    pkgs.mu
+  ] else []))