This commit is contained in:
Andrea Ciceri 2023-09-19 21:44:19 +02:00
parent 2a1f2576e4
commit a7ac7b4b74
Signed by: aciceri
SSH key fingerprint: SHA256:/AagBweyV4Hlfg9u092n8hbHwD5fcB6A3qhDiDA65Rg
8 changed files with 232 additions and 72 deletions

86
flake.lock generated
View file

@ -1,5 +1,21 @@
{ {
"nodes": { "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": { "emacs-overlay": {
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
@ -7,11 +23,11 @@
"nixpkgs-stable": "nixpkgs-stable" "nixpkgs-stable": "nixpkgs-stable"
}, },
"locked": { "locked": {
"lastModified": 1691921730, "lastModified": 1694602127,
"narHash": "sha256-2vTR0Vq2VRQt7+4todEdOJRGIU/qyPdVCXJgbosz3Aw=", "narHash": "sha256-8lcpkk35COSkygePlvsOtSpR7tZx1SIgxdltZ0UZvXM=",
"owner": "nix-community", "owner": "nix-community",
"repo": "emacs-overlay", "repo": "emacs-overlay",
"rev": "9279ce7180483c5ec9e6da74b87000a49a4942c0", "rev": "b99f00b0bc835dd490b455c8df0bab2acc16021c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -43,11 +59,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1689068808, "lastModified": 1694529238,
"narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", "rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -59,11 +75,11 @@
"indent-bars": { "indent-bars": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1691609947, "lastModified": 1695000820,
"narHash": "sha256-hLIqwuWt75kEQqfzZ+VKQsSVhuHqFRzN8ko29Y/Pi/o=", "narHash": "sha256-qJy9g/tdce74Rh7FyMxCSBZjK6paZrPaL4UpS/uxPSg=",
"owner": "jdtsmith", "owner": "jdtsmith",
"repo": "indent-bars", "repo": "indent-bars",
"rev": "7da1a4a2a4d7e024a7eff99fde08844049287e04", "rev": "2b0a4ad16804fb48821f661cd6be4652c0e37d72",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -72,13 +88,30 @@
"type": "github" "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": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1691654369, "lastModified": 1694422566,
"narHash": "sha256-gSILTEx1jRaJjwZxRlnu3ZwMn1FVNk80qlwiCX8kmpo=", "narHash": "sha256-lHJ+A9esOz9vln/3CJG23FV6Wd2OoOFbDeEs4cMGMqc=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "ce5e4a6ef2e59d89a971bc434ca8ca222b9c7f5e", "rev": "3a2786eea085f040a66ecde1bc3ddc7099f6dbeb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -108,11 +141,11 @@
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1691693223, "lastModified": 1694499547,
"narHash": "sha256-9t8ZY1XNAsWqxAJmXgg+GXqF5chORMVnBT6PSHaRV3I=", "narHash": "sha256-R7xMz1Iia6JthWRHDn36s/E248WB1/je62ovC/dUVKI=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "18784aac1013da9b442adf29b6c7c228518b5d3f", "rev": "e5f018cf150e29aac26c61dac0790ea023c46b24",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -122,15 +155,30 @@
"type": "github" "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": { "root": {
"inputs": { "inputs": {
"combobulate": "combobulate",
"emacs-overlay": "emacs-overlay", "emacs-overlay": "emacs-overlay",
"flake-parts": "flake-parts", "flake-parts": "flake-parts",
"indent-bars": "indent-bars", "indent-bars": "indent-bars",
"nixpkgs": [ "nix-ts-mode": "nix-ts-mode",
"emacs-overlay", "nixpkgs": "nixpkgs_2"
"nixpkgs"
]
} }
}, },
"systems": { "systems": {

View file

@ -4,14 +4,22 @@
inputs = { inputs = {
flake-parts.url = "github:hercules-ci/flake-parts"; flake-parts.url = "github:hercules-ci/flake-parts";
emacs-overlay.url = "github:nix-community/emacs-overlay"; emacs-overlay.url = "github:nix-community/emacs-overlay";
nixpkgs.follows = "emacs-overlay/nixpkgs"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
indent-bars = { indent-bars = {
# TODO remove when it lands on (M)ELPA # TODO remove when it lands on (M)ELPA
url = "github:jdtsmith/indent-bars"; url = "github:jdtsmith/indent-bars";
flake = false; 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, ...}: outputs = inputs @ {flake-parts, ...}:
flake-parts.lib.mkFlake {inherit inputs;} { flake-parts.lib.mkFlake {inherit inputs;} {
systems = ["x86_64-linux"]; systems = ["x86_64-linux"];

View file

@ -44,24 +44,17 @@
}; };
home.packages = with pkgs; home.packages = with pkgs;
[ [
# TODO add epub-thumbnailer to nixpkgs
nil
terraform-lsp
imagemagick
ffmpegthumbnailer
mediainfo
unzipNLS
binutils binutils
(ripgrep.override {withPCRE2 = true;}) (ripgrep.override {withPCRE2 = true;})
gnutls gnutls
fd fd
imagemagick
sqlite
maim
jq
xclip
hunspell hunspell
python3 python3
imagemagick
ffmpegthumbnailer
mediainfo
unzipNLS
pkgs.tree-sitter-grammars.tree-sitter-nix
] ]
++ (with hunspellDicts; [ ++ (with hunspellDicts; [
en_US-large en_US-large
@ -76,6 +69,7 @@
"$HOME/.config/emacs" "$HOME/.config/emacs"
$DRY_RUN_CMD ln -s "$HOME/.config/emacs" "$HOME/emacs" $DRY_RUN_CMD ln -s "$HOME/.config/emacs" "$HOME/emacs"
fi fi
$DRY_RUN_CMD ln -sfn ${self.packages.${pkgs.system}.treesitGrammars} "$HOME/.config/emacs/tree-sitter"
''; '';
}; };
}; };

89
init.el
View file

@ -105,11 +105,14 @@
(use-package indent-bars (use-package indent-bars
:custom :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-color '(highlight :face-bg t :blend 0.2))
(indent-bars-highlight-current-depth '(:blend 0.4)) (indent-bars-highlight-current-depth '(:blend 0.4))
(indent-bars-no-stipple-char (string-to-char ""))) (indent-bars-no-stipple-char (string-to-char "")))
(use-package diredf (use-package diredfl
:config (diredfl-global-mode)) :config (diredfl-global-mode))
(use-package treemacs (use-package treemacs
@ -344,10 +347,16 @@
:hook ((prog-mode . hl-line-mode) :hook ((prog-mode . hl-line-mode)
(prog-mode . display-line-numbers-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 (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))) :bind (("C-c o g" . magit)))
(use-package sideline (use-package sideline
@ -365,13 +374,24 @@
(+ (apply #'+ lengths) (if (display-graphic-p) 1 3))))) (+ (apply #'+ lengths) (if (display-graphic-p) 1 3)))))
(advice-add 'sideline--align :override #'ccr-sideline--align)) (advice-add 'sideline--align :override #'ccr-sideline--align))
(use-package nix-mode ;; FIXME there is something deeply wrong about how nix is configured here
:delight nix-prettify-mode ;; (use-package nix-mode
:hook ((nix-mode . eglot-ensure) ;; :delight nix-prettify-mode
(nix-mode . tree-sitter-hl-mode) ;; :config
(nix-mode . (lambda () (setq indent-bars-spacing-override 2) (indent-bars-mode)))) ;; (global-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 (use-package haskell-mode
:hook ((haskell-mode . eglot-ensure) :hook ((haskell-mode . eglot-ensure)
@ -381,6 +401,10 @@
:hook (purescript-mode . turn-on-purescript-indentation)) :hook (purescript-mode . turn-on-purescript-indentation))
(use-package terraform-mode (use-package terraform-mode
:after eglot
:config
(add-to-list 'eglot-server-programs
'(terraform-mode . ("terraform-lsp")))
:hook ((terraform-mode . eglot-ensure) :hook ((terraform-mode . eglot-ensure)
(terraform-mode . tree-sitter-hl-mode))) (terraform-mode . tree-sitter-hl-mode)))
@ -390,6 +414,20 @@
(use-package sh-mode (use-package sh-mode
:hook (sh-mode . tree-sitter-hl-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 (use-package paredit
:delight :delight
:hook ((lisp-mode . enable-paredit-mode) :hook ((lisp-mode . enable-paredit-mode)
@ -398,8 +436,6 @@
(use-package eldoc (use-package eldoc
:delight) :delight)
(use-package tree-sitter :delight)
(use-package diff-hl (use-package diff-hl
:init :init
(global-diff-hl-mode 1) (global-diff-hl-mode 1)
@ -416,13 +452,17 @@
(use-package eat (use-package eat
:custom :custom
(eat-kill-buffer-on-exit t) (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 (use-package popper
:custom :custom
(popper-reference-buffers '("\*Messages\*" (popper-reference-buffers '("\*Messages\*"
"Output\*$" "Output\*$"
"\\*Async Shell Command\\*" "\\*Async Shell Command\\*"
(completion-list-mode . hide)
help-mode help-mode
compilation-mode compilation-mode
"^\\*eshell.*\\*$" eshell-mode ;eshell as a popup "^\\*eshell.*\\*$" eshell-mode ;eshell as a popup
@ -440,10 +480,33 @@
("C-c t c" . popper-cycle) ("C-c t c" . popper-cycle)
("C-c t p" . popper-toggle-type))) ("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) (provide 'init)
;;; init.el ends here ;;; init.el ends here
;; Local Variables: ;; Local Variables:
;; byte-compile-warnings: (not free-vars noruntime unresolved) ;; byte-compile-warnings: (not free-vars noruntime unresolved)
;; End: ;; End:

10
packages/combobulate.nix Normal file
View file

@ -0,0 +1,10 @@
{
trivialBuild,
src,
...
}:
trivialBuild {
inherit src;
version = "git";
pname = "combombulate";
}

View file

@ -18,43 +18,61 @@
# https://github.com/NixOS/nixpkgs/issues/209114 # https://github.com/NixOS/nixpkgs/issues/209114
_module.args.pkgs = inputs.nixpkgs.legacyPackages.${system}.extend (self: super: { _module.args.pkgs = inputs.nixpkgs.legacyPackages.${system}.extend (self: super: {
indent-bars-source = inputs.indent-bars; indent-bars-source = inputs.indent-bars;
tree-sitter-grammars = nix-ts-mode-source = inputs.nix-ts-mode;
super.tree-sitter-grammars combobulate-source = inputs.combobulate;
// { # tree-sitter-grammars =
tree-sitter-rust = super.tree-sitter-grammars.tree-sitter-rust.overrideAttrs (_: { # super.tree-sitter-grammars
nativeBuildInputs = [self.nodejs self.tree-sitter]; # // {
configurePhase = '' # tree-sitter-rust = super.tree-sitter-grammars.tree-sitter-rust.overrideAttrs (_: {
tree-sitter generate --abi 13 src/grammar.json # nativeBuildInputs = [self.nodejs self.tree-sitter];
''; # configurePhase = ''
}); # tree-sitter generate --abi 13 src/grammar.json
}; # '';
# });
# };
}); });
packages = { 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 = ccrEmacsWithoutPackages =
(inputs'.emacs-overlay.packages.emacs-unstable.override { (inputs'.emacs-overlay.packages.emacs-unstable.override {
# treeSitterPlugins = withPgtk = true;
# builtins.attrValues # withNS = false;
# (builtins.removeAttrs pkgs.tree-sitter-grammars ["recurseForDerivations"]); # withX = false;
withNS = false; # withGTK2 = false;
withX = false; # withGTK3 = false;
withGTK2 = false; # withWebP = false;
withGTK3 = false;
withWebP = false;
}) })
.overrideAttrs (old: { .overrideAttrs (old: {
name = "ccr-emacs"; name = "ccr-emacs";
version = "29"; version = "29";
}); });
ccrEmacs = ccrEmacs = let
emacs =
(emacsPackagesFor self'.packages.ccrEmacsWithoutPackages).emacsWithPackages (emacsPackagesFor self'.packages.ccrEmacsWithoutPackages).emacsWithPackages
(import ./packages.nix pkgs); (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; default = self'.packages.ccrEmacs;
}; };
apps = { apps = {
ccrEmacs.program = "${self'.packages.ccrEmacs}/bin/emacs"; ccrEmacs.program = "${self'.packages.ccrEmacs}/bin/emacs";
default = self'.apps.ccrEmacs; default = config.apps.ccrEmacs;
}; };
}; };
} }

9
packages/nix-ts-mode.nix Normal file
View file

@ -0,0 +1,9 @@
{
trivialBuild,
src,
}:
trivialBuild {
inherit src;
pname = "nix-ts-mode";
version = "git";
}

View file

@ -22,13 +22,17 @@ with epkgs; [
embark-consult embark-consult
magit magit
magit-delta magit-delta
magit-todos
diff-hl diff-hl
corfu corfu
corfu-terminal corfu-terminal
kind-icon kind-icon
cape cape
which-key which-key
nix-mode # nix-mode
(nix-ts-mode.overrideAttrs (_: {
src = pkgs.nix-ts-mode-source;
}))
unisonlang-mode unisonlang-mode
purescript-mode purescript-mode
dhall-mode dhall-mode
@ -36,8 +40,6 @@ with epkgs; [
inheritenv inheritenv
popper popper
paredit paredit
tree-sitter
tree-sitter-langs
yaml-mode yaml-mode
hl-todo hl-todo
markdown-mode markdown-mode
@ -48,4 +50,12 @@ with epkgs; [
src = pkgs.indent-bars-source; src = pkgs.indent-bars-source;
inherit (epkgs) trivialBuild compat; inherit (epkgs) trivialBuild compat;
}) })
(pkgs.callPackage ./combobulate.nix {
src = pkgs.combobulate-source;
inherit (epkgs) trivialBuild;
})
org-roam
consult-org-roam
ement
] ]