From a7ac7b4b74f75d26f03b77463d75e0d87977ba61 Mon Sep 17 00:00:00 2001 From: Andrea Ciceri Date: Tue, 19 Sep 2023 21:44:19 +0200 Subject: [PATCH] Things --- flake.lock | 86 ++++++++++++++++++++++++++++--------- flake.nix | 12 +++++- hmModules/default.nix | 18 +++----- init.el | 91 +++++++++++++++++++++++++++++++++------- packages/combobulate.nix | 10 +++++ packages/default.nix | 62 +++++++++++++++++---------- packages/nix-ts-mode.nix | 9 ++++ packages/packages.nix | 16 +++++-- 8 files changed, 232 insertions(+), 72 deletions(-) create mode 100644 packages/combobulate.nix create mode 100644 packages/nix-ts-mode.nix diff --git a/flake.lock b/flake.lock index 49279a8..9dd0d6f 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,21 @@ { "nodes": { + "combobulate": { + "flake": false, + "locked": { + "lastModified": 1695034590, + "narHash": "sha256-YZgYaRVX8cO5W90MUD9CJO8sfiqhDyJDV58hE7utbVI=", + "owner": "mickeynp", + "repo": "combobulate", + "rev": "d51ca57221f8c2689665da4dbe55dc618f0d04e0", + "type": "github" + }, + "original": { + "owner": "mickeynp", + "repo": "combobulate", + "type": "github" + } + }, "emacs-overlay": { "inputs": { "flake-utils": "flake-utils", @@ -7,11 +23,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1691921730, - "narHash": "sha256-2vTR0Vq2VRQt7+4todEdOJRGIU/qyPdVCXJgbosz3Aw=", + "lastModified": 1694602127, + "narHash": "sha256-8lcpkk35COSkygePlvsOtSpR7tZx1SIgxdltZ0UZvXM=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "9279ce7180483c5ec9e6da74b87000a49a4942c0", + "rev": "b99f00b0bc835dd490b455c8df0bab2acc16021c", "type": "github" }, "original": { @@ -43,11 +59,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1689068808, - "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", "owner": "numtide", "repo": "flake-utils", - "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", "type": "github" }, "original": { @@ -59,11 +75,11 @@ "indent-bars": { "flake": false, "locked": { - "lastModified": 1691609947, - "narHash": "sha256-hLIqwuWt75kEQqfzZ+VKQsSVhuHqFRzN8ko29Y/Pi/o=", + "lastModified": 1695000820, + "narHash": "sha256-qJy9g/tdce74Rh7FyMxCSBZjK6paZrPaL4UpS/uxPSg=", "owner": "jdtsmith", "repo": "indent-bars", - "rev": "7da1a4a2a4d7e024a7eff99fde08844049287e04", + "rev": "2b0a4ad16804fb48821f661cd6be4652c0e37d72", "type": "github" }, "original": { @@ -72,13 +88,30 @@ "type": "github" } }, + "nix-ts-mode": { + "flake": false, + "locked": { + "lastModified": 1694965545, + "narHash": "sha256-HijDb+2ojDk1Evv/KEIrZ/xW+QXz6IJoUllniTsE3hs=", + "owner": "aciceri", + "repo": "nix-ts-mode", + "rev": "8da9a76cd014d56ee734553a32c9e006e375bce4", + "type": "github" + }, + "original": { + "owner": "aciceri", + "ref": "improved", + "repo": "nix-ts-mode", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1691654369, - "narHash": "sha256-gSILTEx1jRaJjwZxRlnu3ZwMn1FVNk80qlwiCX8kmpo=", + "lastModified": 1694422566, + "narHash": "sha256-lHJ+A9esOz9vln/3CJG23FV6Wd2OoOFbDeEs4cMGMqc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ce5e4a6ef2e59d89a971bc434ca8ca222b9c7f5e", + "rev": "3a2786eea085f040a66ecde1bc3ddc7099f6dbeb", "type": "github" }, "original": { @@ -108,11 +141,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1691693223, - "narHash": "sha256-9t8ZY1XNAsWqxAJmXgg+GXqF5chORMVnBT6PSHaRV3I=", + "lastModified": 1694499547, + "narHash": "sha256-R7xMz1Iia6JthWRHDn36s/E248WB1/je62ovC/dUVKI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "18784aac1013da9b442adf29b6c7c228518b5d3f", + "rev": "e5f018cf150e29aac26c61dac0790ea023c46b24", "type": "github" }, "original": { @@ -122,15 +155,30 @@ "type": "github" } }, + "nixpkgs_2": { + "locked": { + "lastModified": 1694422566, + "narHash": "sha256-lHJ+A9esOz9vln/3CJG23FV6Wd2OoOFbDeEs4cMGMqc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3a2786eea085f040a66ecde1bc3ddc7099f6dbeb", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { + "combobulate": "combobulate", "emacs-overlay": "emacs-overlay", "flake-parts": "flake-parts", "indent-bars": "indent-bars", - "nixpkgs": [ - "emacs-overlay", - "nixpkgs" - ] + "nix-ts-mode": "nix-ts-mode", + "nixpkgs": "nixpkgs_2" } }, "systems": { diff --git a/flake.nix b/flake.nix index 9ce0154..c982002 100644 --- a/flake.nix +++ b/flake.nix @@ -4,14 +4,22 @@ inputs = { flake-parts.url = "github:hercules-ci/flake-parts"; emacs-overlay.url = "github:nix-community/emacs-overlay"; - nixpkgs.follows = "emacs-overlay/nixpkgs"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; indent-bars = { # TODO remove when it lands on (M)ELPA url = "github:jdtsmith/indent-bars"; flake = false; }; + nix-ts-mode = { + url = "github:aciceri/nix-ts-mode/improved"; + flake = false; + }; + combobulate = { + url = "github:mickeynp/combobulate"; + # url = "github:aciceri/combobulate/nix"; + flake = false; + }; }; - outputs = inputs @ {flake-parts, ...}: flake-parts.lib.mkFlake {inherit inputs;} { systems = ["x86_64-linux"]; diff --git a/hmModules/default.nix b/hmModules/default.nix index 1edeb45..cc0115c 100644 --- a/hmModules/default.nix +++ b/hmModules/default.nix @@ -44,24 +44,17 @@ }; home.packages = with pkgs; [ - # TODO add epub-thumbnailer to nixpkgs - nil - terraform-lsp - imagemagick - ffmpegthumbnailer - mediainfo - unzipNLS binutils (ripgrep.override {withPCRE2 = true;}) gnutls fd - imagemagick - sqlite - maim - jq - xclip hunspell python3 + imagemagick + ffmpegthumbnailer + mediainfo + unzipNLS + pkgs.tree-sitter-grammars.tree-sitter-nix ] ++ (with hunspellDicts; [ en_US-large @@ -76,6 +69,7 @@ "$HOME/.config/emacs" $DRY_RUN_CMD ln -s "$HOME/.config/emacs" "$HOME/emacs" fi + $DRY_RUN_CMD ln -sfn ${self.packages.${pkgs.system}.treesitGrammars} "$HOME/.config/emacs/tree-sitter" ''; }; }; diff --git a/init.el b/init.el index 1b4a765..86dfc5e 100644 --- a/init.el +++ b/init.el @@ -105,11 +105,14 @@ (use-package indent-bars :custom + (indent-bars-treesit-support t) + (indent-bars-spacing-override 2) + ;; (indent-bars-treesit-wrap '()) (indent-bars-color '(highlight :face-bg t :blend 0.2)) (indent-bars-highlight-current-depth '(:blend 0.4)) (indent-bars-no-stipple-char (string-to-char "┋"))) -(use-package diredf +(use-package diredfl :config (diredfl-global-mode)) (use-package treemacs @@ -344,10 +347,16 @@ :hook ((prog-mode . hl-line-mode) (prog-mode . display-line-numbers-mode))) -(use-package which-key :delight :config (which-key-mode)) +(use-package which-key :delight :config + (which-key-mode) + (which-key-setup-side-window-right)) (use-package magit - :hook (magit-mode . magit-delta-mode) + :hook ((magit-mode . magit-delta-mode)) + :custom + (magit-todos-keyword-suffix "([^)]+):") + :config + (magit-todos-mode +1) :bind (("C-c o g" . magit))) (use-package sideline @@ -365,13 +374,24 @@ (+ (apply #'+ lengths) (if (display-graphic-p) 1 3))))) (advice-add 'sideline--align :override #'ccr-sideline--align)) -(use-package nix-mode - :delight nix-prettify-mode - :hook ((nix-mode . eglot-ensure) - (nix-mode . tree-sitter-hl-mode) - (nix-mode . (lambda () (setq indent-bars-spacing-override 2) (indent-bars-mode)))) - :config - (global-nix-prettify-mode)) +;; FIXME there is something deeply wrong about how nix is configured here +;; (use-package nix-mode +;; :delight nix-prettify-mode +;; :config +;; (global-nix-prettify-mode)) + +(use-package nix-ts-mode + :hook ( + (nix-ts-mode . (lambda () + (require 'eglot) + (add-to-list 'eglot-server-programs + '(nix-ts-mode . ("nil"))) + (eglot-ensure))) + (nix-ts-mode . electric-pair-mode) + (nix-ts-mode . (lambda () (setq indent-bars-spacing-override 2) (indent-bars-mode))) + ) + :mode "\\.nix\\'" + ) (use-package haskell-mode :hook ((haskell-mode . eglot-ensure) @@ -381,6 +401,10 @@ :hook (purescript-mode . turn-on-purescript-indentation)) (use-package terraform-mode + :after eglot + :config + (add-to-list 'eglot-server-programs + '(terraform-mode . ("terraform-lsp"))) :hook ((terraform-mode . eglot-ensure) (terraform-mode . tree-sitter-hl-mode))) @@ -390,6 +414,20 @@ (use-package sh-mode :hook (sh-mode . tree-sitter-hl-mode)) +;; FIXME +;; (use-package mmm-mode +;; :config +;; (mmm-add-group 'nix-sh +;; '((sh-command +;; :submode sh-mode +;; :face mmm-output-submode-face +;; :front "[^'a-zA-Z]''[^']" +;; :back "''[^$\\']" +;; :include-front t +;; :front-offset 4 +;; :end-not-begin t))) +;; (mmm-add-mode-ext-class 'nix-mode "\\.nix\\'" 'nix-sh)) + (use-package paredit :delight :hook ((lisp-mode . enable-paredit-mode) @@ -398,8 +436,6 @@ (use-package eldoc :delight) -(use-package tree-sitter :delight) - (use-package diff-hl :init (global-diff-hl-mode 1) @@ -416,20 +452,24 @@ (use-package eat :custom (eat-kill-buffer-on-exit t) - :bind (("C-c o t" . eat-project))) + :bind (("C-c o t" . eat-project)) + ;; doesn't work well + ;; ((eat-mode . compilation-shell-minor-mode)) + ) (use-package popper :custom (popper-reference-buffers '("\*Messages\*" "Output\*$" "\\*Async Shell Command\\*" + (completion-list-mode . hide) help-mode compilation-mode "^\\*eshell.*\\*$" eshell-mode ;eshell as a popup "^\\*shell.*\\*$" shell-mode ;shell as a popup "^\\*term.*\\*$" term-mode ;term as a popup "^\\*eat.*\\*$" eat-mode ;eat as a popup - )) + )) (popper-window-height 0.33) (popper-echo-lines 1) (popper-mode-line nil) @@ -440,10 +480,33 @@ ("C-c t c" . popper-cycle) ("C-c t p" . popper-toggle-type))) +(use-package org-roam) +(use-package consult-org-roam + :delight + :after org-roam + :init + (require 'consult-org-roam) + ;; Activate the minor mode + (consult-org-roam-mode 1) + :custom + (consult-org-roam-grep-func #'consult-ripgrep) + (consult-org-roam-buffer-narrow-key ?r) + (consult-org-roam-buffer-after-buffers t) + :config + (consult-customize + consult-org-roam-forward-links + :preview-key (kbd "M-.")) + :bind + ("C-c n f" . consult-org-roam-file-find) + ("C-c n b" . consult-org-roam-backlinks) + ("C-c n l" . consult-org-roam-forward-links) + ("C-c n r" . consult-org-roam-search)) (provide 'init) ;;; init.el ends here ;; Local Variables: ;; byte-compile-warnings: (not free-vars noruntime unresolved) ;; End: + + diff --git a/packages/combobulate.nix b/packages/combobulate.nix new file mode 100644 index 0000000..19cdfef --- /dev/null +++ b/packages/combobulate.nix @@ -0,0 +1,10 @@ +{ + trivialBuild, + src, + ... +}: +trivialBuild { + inherit src; + version = "git"; + pname = "combombulate"; +} diff --git a/packages/default.nix b/packages/default.nix index 66c6967..9126696 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -18,43 +18,61 @@ # https://github.com/NixOS/nixpkgs/issues/209114 _module.args.pkgs = inputs.nixpkgs.legacyPackages.${system}.extend (self: super: { indent-bars-source = inputs.indent-bars; - tree-sitter-grammars = - super.tree-sitter-grammars - // { - tree-sitter-rust = super.tree-sitter-grammars.tree-sitter-rust.overrideAttrs (_: { - nativeBuildInputs = [self.nodejs self.tree-sitter]; - configurePhase = '' - tree-sitter generate --abi 13 src/grammar.json - ''; - }); - }; + nix-ts-mode-source = inputs.nix-ts-mode; + combobulate-source = inputs.combobulate; + # tree-sitter-grammars = + # super.tree-sitter-grammars + # // { + # tree-sitter-rust = super.tree-sitter-grammars.tree-sitter-rust.overrideAttrs (_: { + # nativeBuildInputs = [self.nodejs self.tree-sitter]; + # configurePhase = '' + # tree-sitter generate --abi 13 src/grammar.json + # ''; + # }); + # }; }); packages = { + treesitGrammars = let + all-grammars = pkgs.tree-sitter.withPlugins builtins.attrValues; + in + pkgs.runCommand "treesit-grammars" {} '' + mkdir $out + for f in ${all-grammars}/* + do + cp $f $out/"libtree-sitter-$(basename $f)" + done + ''; ccrEmacsWithoutPackages = (inputs'.emacs-overlay.packages.emacs-unstable.override { - # treeSitterPlugins = - # builtins.attrValues - # (builtins.removeAttrs pkgs.tree-sitter-grammars ["recurseForDerivations"]); - withNS = false; - withX = false; - withGTK2 = false; - withGTK3 = false; - withWebP = false; + withPgtk = true; + # withNS = false; + # withX = false; + # withGTK2 = false; + # withGTK3 = false; + # withWebP = false; }) .overrideAttrs (old: { name = "ccr-emacs"; version = "29"; }); - ccrEmacs = - (emacsPackagesFor self'.packages.ccrEmacsWithoutPackages).emacsWithPackages - (import ./packages.nix pkgs); + ccrEmacs = let + emacs = + (emacsPackagesFor self'.packages.ccrEmacsWithoutPackages).emacsWithPackages + (import ./packages.nix pkgs); + in + pkgs.runCommand "emacs" {} '' + cp -r ${emacs} emacs + chmod 700 -R emacs + mkdir emacs/share/emacs + cp -r emacs $out + ''; default = self'.packages.ccrEmacs; }; apps = { ccrEmacs.program = "${self'.packages.ccrEmacs}/bin/emacs"; - default = self'.apps.ccrEmacs; + default = config.apps.ccrEmacs; }; }; } diff --git a/packages/nix-ts-mode.nix b/packages/nix-ts-mode.nix new file mode 100644 index 0000000..adcd4b7 --- /dev/null +++ b/packages/nix-ts-mode.nix @@ -0,0 +1,9 @@ +{ + trivialBuild, + src, +}: +trivialBuild { + inherit src; + pname = "nix-ts-mode"; + version = "git"; +} diff --git a/packages/packages.nix b/packages/packages.nix index 534a073..a37a45b 100644 --- a/packages/packages.nix +++ b/packages/packages.nix @@ -22,13 +22,17 @@ with epkgs; [ embark-consult magit magit-delta + magit-todos diff-hl corfu corfu-terminal kind-icon cape which-key - nix-mode + # nix-mode + (nix-ts-mode.overrideAttrs (_: { + src = pkgs.nix-ts-mode-source; + })) unisonlang-mode purescript-mode dhall-mode @@ -36,8 +40,6 @@ with epkgs; [ inheritenv popper paredit - tree-sitter - tree-sitter-langs yaml-mode hl-todo markdown-mode @@ -48,4 +50,12 @@ with epkgs; [ src = pkgs.indent-bars-source; inherit (epkgs) trivialBuild compat; }) + (pkgs.callPackage ./combobulate.nix { + src = pkgs.combobulate-source; + inherit (epkgs) trivialBuild; + }) + org-roam + consult-org-roam + + ement ]