diff --git a/config.el b/config.el index 51aa4a5..6f54428 100644 --- a/config.el +++ b/config.el @@ -1,5 +1,6 @@ ;; -*- lexical-binding: t -*- + (use-package emacs :init (setq frame-resize-pixelwise t @@ -29,20 +30,21 @@ :hook (prog-mode . display-line-numbers-mode)) (use-package mood-line - :hook (after-init . mood-line-mode)) + :hook after-init) (use-package helm :bind (("C-x C-f" . helm-find-files) ("M-x" . helm-M-x) ("M-s o" . helm-occur) - ("C-h a" . helm-apropos)) - :hook (after-init . helm-mode)) + ("C-h a" . helm-apropos) + ("C-x b" . helm-buffers)) + :hook after-init) (use-package savehist - :hook (after-init . savehist-mode)) + :hook after-init) (use-package which-key - :hook (after-init . which-key-mode)) + :hook after-init) (use-package base16-theme :config @@ -54,8 +56,9 @@ (use-package rust-mode :mode "\\.rs\\'") -(use-package envrc - :hook (after-init . envrc-global-mode)) +(when (executable-find "direnv") + (use-package envrc + :hook after-init)) (use-package eglot :hook (prog-mode . eglot-ensure)) @@ -74,19 +77,15 @@ :config (setq c-basic-offset 4)) -(use-package vterm - :preface - (defun project-vterm (&optional arg) - (interactive) - (let* ((default-directory (project-root (project-current 1))) - (vterm-buffer-name (project-prefixed-buffer-name "vterm"))) - (vterm arg))) - :bind (("C-x p t" . project-vterm) - ("C-c t" . vterm))) +(use-package eat + :bind (("C-x p t" . eat-project) + ("C-c t" . eat))) (use-package spacious-padding :config - (spacious-padding-mode) - ) + (spacious-padding-mode)) + +(use-package notmuch + :if (executable-find "notmuch")) (provide 'config) diff --git a/flake.lock b/flake.lock index 74cad55..81d9512 100644 --- a/flake.lock +++ b/flake.lock @@ -53,31 +53,10 @@ "type": "github" } }, - "parts": { - "inputs": { - "nixpkgs-lib": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1741352980, - "narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, "root": { "inputs": { "emacs": "emacs", - "nixpkgs": "nixpkgs", - "parts": "parts" + "nixpkgs": "nixpkgs" } } }, diff --git a/flake.nix b/flake.nix index 5d1f2bd..17bd0f6 100644 --- a/flake.nix +++ b/flake.nix @@ -2,35 +2,36 @@ description = "Pankomacs"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - parts = { - url = "github:hercules-ci/flake-parts"; - inputs.nixpkgs-lib.follows = "nixpkgs"; - }; emacs = { url = "github:nix-community/emacs-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; }; - outputs = inputs: - inputs.parts.lib.mkFlake { - inherit inputs; - } { + outputs = + inputs: + let + inherit (inputs.nixpkgs) lib; systems = [ "x86_64-linux" ]; - - imports = [ - ./lib.nix - ]; - - perSystem = {pkgs, ...}: { - formatter = pkgs.alejandra; - packages = { - pgtk = inputs.self.lib.mkEmacs { - inherit pkgs; - emacs = pkgs.emacs30-pgtk; + forAllSystems = lib.genAttrs systems; + pkgs = builtins.listToAttrs ( + map (system: { + name = system; + value = import inputs.nixpkgs { + inherit system; }; + }) systems + ); + in + { + lib = import ./lib.nix inputs; + formatter = forAllSystems (system: pkgs.${system}.nixfmt-rfc-style); + packages = forAllSystems (system: { + pgtk = inputs.self.lib.mkPankomacs { + pkgs = pkgs.${system}; + emacs = pkgs.${system}.emacs30-pgtk; }; - }; + }); }; } diff --git a/lib.nix b/lib.nix index cc70185..3f5f7d0 100644 --- a/lib.nix +++ b/lib.nix @@ -1,57 +1,62 @@ -{inputs, ...}: { - flake.lib = inputs.nixpkgs.lib.extend (_: _: let - mkEmacsPackage = { +inputs: +let + mkEmacsPackage = + { epkgs, pname, version, src, - deps ? [], + deps ? (epkgs: [ ]), }: - epkgs.callPackage ( - {trivialBuild}: - trivialBuild { - inherit pname version src; - buildInputs = deps; - propagatedUserEnvPkgs = deps; - } - ) {inherit (epkgs) trivialBuild;}; + epkgs.trivialBuild { + inherit pname version src; + buildInputs = deps epkgs; + propagatedUserEnvPkgs = deps epkgs; + }; - mkEmacs = { + mkPankomacs = + { pkgs, emacs, }: - (pkgs.appendOverlays [inputs.emacs.overlays.default]).emacsWithPackagesFromUsePackage { - package = emacs; - defaultInitFile = true; - config = ./config.el; - extraEmacsPackages = epkgs: - builtins.attrValues { - inherit - (epkgs) - spacious-padding - mood-line - helm - base16-theme - nix-mode - rust-mode - haskell-mode - qml-mode - envrc - vterm - ; - treesit-grammars = epkgs.treesit-grammars.with-all-grammars; - }; - override = _: prev: - builtins.listToAttrs (map (name: { + (pkgs.appendOverlays [ inputs.emacs.overlays.default ]).emacsWithPackagesFromUsePackage { + package = emacs; + defaultInitFile = true; + config = ./config.el; + extraEmacsPackages = + epkgs: + builtins.attrValues { + inherit (epkgs) + spacious-padding + mood-line + helm + base16-theme + nix-mode + rust-mode + haskell-mode + qml-mode + envrc + eat + notmuch + ; + treesit-grammars = epkgs.treesit-grammars.with-all-grammars; + }; + override = + _: prev: + builtins.listToAttrs ( + map + (name: { inherit name; value = prev.emacs; - }) [ + }) + [ "use-package" "savehist" "which-key" - ]); - }; - in { - inherit mkEmacs mkEmacsPackage; - }); + ] + ); + }; +in +{ + inherit mkPankomacs mkEmacsPackage; }