diff --git a/flake.lock b/flake.lock index c963eda..da04ba2 100644 --- a/flake.lock +++ b/flake.lock @@ -34,6 +34,25 @@ } }, "emacs-overlay": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1684348799, + "narHash": "sha256-K/2G+BnHK3JdGnT/qkYWGljgy5kUeCZDSnBz4cLqb+c=", + "owner": "nix-community", + "repo": "emacs-overlay", + "rev": "95c844b1985808df780acc1835a354fe3ff27282", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "emacs-overlay", + "type": "github" + } + }, + "emacs-overlay_2": { "flake": false, "locked": { "lastModified": 1676366521, @@ -163,6 +182,21 @@ } }, "flake-utils": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { "inputs": { "systems": "systems" }, @@ -255,7 +289,7 @@ "inputs": { "doom-emacs": "doom-emacs", "doom-snippets": "doom-snippets", - "emacs-overlay": "emacs-overlay", + "emacs-overlay": "emacs-overlay_2", "emacs-so-long": "emacs-so-long", "evil-escape": "evil-escape", "evil-markdown": "evil-markdown", @@ -263,10 +297,10 @@ "evil-quick-diff": "evil-quick-diff", "explain-pause-mode": "explain-pause-mode", "flake-compat": "flake-compat", - "flake-utils": "flake-utils", + "flake-utils": "flake-utils_2", "format-all": "format-all", "nix-straight": "nix-straight", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "nose": "nose", "ob-racket": "ob-racket", "org": "org", @@ -311,17 +345,18 @@ }, "nixpkgs": { "locked": { - "lastModified": 1682566018, - "narHash": "sha256-HPzPRFiy2o/7k7mtnwfM1E6NVZHiFbPdmYCMoIpkHO4=", + "lastModified": 1673540789, + "narHash": "sha256-xqnxBOK3qctIeUVxecydrEDbEXjsvHCPGPbvsl63M/U=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8e3b64db39f2aaa14b35ee5376bd6a2e707cadc2", + "rev": "0f213d0fee84280d8c3a97f7469b988d6fe5fcdf", "type": "github" }, "original": { - "id": "nixpkgs", - "ref": "nixpkgs-unstable", - "type": "indirect" + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs-unstable": { @@ -341,6 +376,21 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1682566018, + "narHash": "sha256-HPzPRFiy2o/7k7mtnwfM1E6NVZHiFbPdmYCMoIpkHO4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8e3b64db39f2aaa14b35ee5376bd6a2e707cadc2", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixpkgs-unstable", + "type": "indirect" + } + }, + "nixpkgs_3": { "locked": { "lastModified": 1684171562, "narHash": "sha256-BMUWjVWAUdyMWKk0ATMC9H0Bv4qAV/TXwwPUvTiC5IQ=", @@ -470,11 +520,12 @@ }, "root": { "inputs": { + "emacs-overlay": "emacs-overlay", "gruvbox-gtk-theme": "gruvbox-gtk-theme", "gruvbox-kvantum-theme": "gruvbox-kvantum-theme", "home-manager": "home-manager", "nix-doom-emacs": "nix-doom-emacs", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_3", "nixpkgs-unstable": "nixpkgs-unstable" } }, diff --git a/flake.nix b/flake.nix index 5d9484a..703e7ee 100644 --- a/flake.nix +++ b/flake.nix @@ -6,6 +6,7 @@ url = "github:nix-community/home-manager/release-22.11"; inputs.nixpkgs.follows = "nixpkgs"; }; + emacs-overlay.url = "github:nix-community/emacs-overlay"; nix-doom-emacs.url = "github:nix-community/nix-doom-emacs"; gruvbox-gtk-theme = { url = "github:Fausto-Korpsvart/Gruvbox-GTK-Theme"; diff --git a/modules/editor/emacs/doom.d/init.el b/modules/editor/emacs/doom.d/init.el index a399bdd..c04eb00 100644 --- a/modules/editor/emacs/doom.d/init.el +++ b/modules/editor/emacs/doom.d/init.el @@ -98,12 +98,13 @@ magit ; a git porcelain for Emacs ;;make ; run make tasks from Emacs ;;pass ; password manager for nerds - ;;pdf ; pdf enhancements + pdf ; pdf enhancements ;;prodigy ; FIXME managing external services & code builders ;;rgb ; creating color strings ;;taskrunner ; taskrunner for all your projects terraform ; infrastructure as code ;;tmux ; an API for interacting with tmux + tree-sitter ;;upload ; map local to remote projects via ssh/ftp :os diff --git a/modules/editor/emacs/emacs.nix b/modules/editor/emacs/emacs.nix index 529807d..467fc09 100644 --- a/modules/editor/emacs/emacs.nix +++ b/modules/editor/emacs/emacs.nix @@ -9,16 +9,29 @@ in { config = mkIf cfg.enable { home-manager.users.${config.user.name} = { - imports = [ inputs.nix-doom-emacs.hmModule ]; + nixpkgs.overlays = [ inputs.emacs-overlay.overlay ]; home.packages = with pkgs.unstable; [ + binutils ripgrep fd findutils.locate - metals - rnix-lsp - nixfmt + terraform + pandoc + + # Formatters and linters + nixfmt # nix formatter + shfmt # sh formatter + shellcheck # sh linter + html-tidy # HTML formatter + nodePackages.stylelint # CSS linter + nodePackages.js-beautify # JS/CSS/HTML formatter + + # LSPs + metals # Scala + rnix-lsp # Nix + phpactor # PHP # Used by org-roam sqlite @@ -27,30 +40,68 @@ in { # Used by elfeed-tube yt-dlp mpv + + # Used by dirvish + imagemagick + ffmpegthumbnailer + mediainfo + poppler_utils + gnutar + unzip ]; services.emacs = { enable = true; client.enable = true; + package = with pkgs; + ((emacsPackagesFor emacsNativeComp).emacsWithPackages + (epkgs: [ epkgs.vterm ])); }; - programs.doom-emacs = { + # Use either this or nix-doom-emacs + programs.emacs = { enable = true; - doomPrivateDir = ./doom.d; - emacsPackagesOverlay = final: prev: { - ob-ammonite = with final; - (trivialBuild { - src = pkgs.fetchFromGitHub { - owner = "zwild"; - repo = "ob-ammonite"; - rev = "39937dff395e70aff76a4224fa49cf2ec6c57cca"; - sha256 = pkgs.lib.fakeSha256; - }; - pname = "ob-ammonite"; - packageRequires = [ s dash editorconfig ]; - }); - }; + package = with pkgs; + ((emacsPackagesFor emacsNativeComp).emacsWithPackages + (epkgs: [ epkgs.vterm ])); }; + xdg.configFile = { "doom" = { source = ./doom.d; }; }; + home.sessionPath = [ + "${ + config.home-manager.users.${config.user.name}.xdg.configHome + }/emacs/bin" + ]; + home.activation = { + installDoomEmacs = '' + if [ ! -d "${ + config.home-manager.users.${config.user.name}.xdg.configHome + }/emacs" ]; then + git clone --depth=1 --single-branch https://github.com/doomemacs/doomemacs "${ + config.home-manager.users.${config.user.name}.xdg.configHome + }/emacs" + fi + ''; + }; + + # imports = [ inputs.nix-doom-emacs.hmModule ]; + # programs.doom-emacs = { + # enable = true; + # doomPrivateDir = ./doom.d; + # emacsPackagesOverlay = final: prev: { + # ob-ammonite = with final; + # (trivialBuild { + # src = pkgs.fetchFromGitHub { + # owner = "zwild"; + # repo = "ob-ammonite"; + # rev = "39937dff395e70aff76a4224fa49cf2ec6c57cca"; + # sha256 = pkgs.lib.fakeSha256; + # }; + # pname = "ob-ammonite"; + # packageRequires = [ s dash editorconfig ]; + # }); + # }; + # }; }; + fonts.fonts = [ pkgs.emacs-all-the-icons-fonts ]; }; }