71435d9546
* agenix has not been updated (https://github.com/ryantm/agenix/pull/241). * wasm-bindgen bumped to 0.2.92 in Rust WASM projects * 3p/lisp: port lispPackages from stable channel The Lisp package set we are using (`pkgs.lispPackages`) is the "old old" package set, whereas we were supposed to have been using `pkgs.lispPackages_new` (which is the "old new" package set). Either way we missed that train, and now there's a "new new" package set, but with a twist: Lisp packages in nixpkgs are now tied to their compilers, so the most generic way to access them seems to be from `pkgs.sbclPackages`. Switching to the packages from the "new new" package set doesn't work: Lots of stuff stops building if we just switch the sources over, and not everything is trivially fixable. For now we stay on the lispPackages from the stable channel. We need to look into the migration later. Or rewrite panettone. * tvix: update generated protobuf files * 3p/nixpkgs: pick trunk from stable channel; newer versions try to read files and do network I/O during build, but don't print enough details in error messages to figure out why. * 3p/overlays: remove tdlib override (nixpkgs is currently new enough) * 3p/overlays: override telega.el sources while updates are lagging in nixpkgs * users/flokli/ipu6-softisp: update firmware paths, which NixOS now stores zstd-compressed. Change-Id: I5a7a6c8b5d0688461bca92b9e6d654356d3a1cf1 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11711 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su>
189 lines
5.1 KiB
Nix
189 lines
5.1 KiB
Nix
# This file builds an Emacs pre-configured with the packages I need
|
|
# and my personal Emacs configuration.
|
|
{ depot, lib, pkgs, ... }:
|
|
|
|
pkgs.makeOverridable
|
|
({ emacs ? pkgs.emacs29 }:
|
|
let
|
|
emacsPackages = (pkgs.emacsPackagesFor emacs);
|
|
emacsWithPackages = emacsPackages.emacsWithPackages;
|
|
|
|
# If switching telega versions, use this variable because it will
|
|
# keep the version check, binary path and so on in sync.
|
|
currentTelega = epkgs: epkgs.telega;
|
|
|
|
# $PATH for binaries that need to be available to Emacs
|
|
emacsBinPath = lib.makeBinPath [
|
|
(currentTelega pkgs.emacsPackages)
|
|
pkgs.libwebp # for dwebp, required by telega
|
|
];
|
|
|
|
identity = x: x;
|
|
|
|
# tree-sitter grammars for various ts-modes
|
|
customTreesitGrammars = emacs.pkgs.treesit-grammars.with-grammars (g: with g; [
|
|
tree-sitter-bash
|
|
tree-sitter-c
|
|
tree-sitter-cmake
|
|
tree-sitter-cpp
|
|
tree-sitter-css
|
|
tree-sitter-dockerfile
|
|
tree-sitter-go
|
|
tree-sitter-gomod
|
|
tree-sitter-hcl
|
|
tree-sitter-html
|
|
tree-sitter-java
|
|
tree-sitter-json
|
|
tree-sitter-latex
|
|
tree-sitter-make
|
|
tree-sitter-nix
|
|
tree-sitter-python
|
|
tree-sitter-rust
|
|
tree-sitter-sql
|
|
tree-sitter-toml
|
|
tree-sitter-yaml
|
|
]);
|
|
|
|
tazjinsEmacs = pkgfun: (emacsWithPackages (epkgs: pkgfun (with epkgs; [
|
|
ace-link
|
|
ace-window
|
|
avy
|
|
bazel
|
|
browse-kill-ring
|
|
cargo
|
|
clojure-mode
|
|
consult
|
|
deft
|
|
direnv
|
|
elixir-mode
|
|
elm-mode
|
|
erlang
|
|
depotExwm
|
|
go-mode
|
|
google-c-style
|
|
gruber-darker-theme
|
|
haskell-mode
|
|
ht
|
|
hydra
|
|
idle-highlight-mode
|
|
inspector
|
|
jq-mode
|
|
kotlin-mode
|
|
kubernetes
|
|
magit
|
|
markdown-toc
|
|
multiple-cursors
|
|
nginx-mode
|
|
nix-mode
|
|
notmuch
|
|
paredit
|
|
password-store
|
|
pinentry
|
|
prescient
|
|
protobuf-mode
|
|
rainbow-delimiters
|
|
rainbow-mode
|
|
request
|
|
restclient
|
|
rust-mode
|
|
sly
|
|
string-edit-at-point
|
|
terraform-mode
|
|
undo-tree
|
|
uuidgen
|
|
vertico
|
|
vterm
|
|
web-mode
|
|
websocket
|
|
which-key
|
|
xelb
|
|
yasnippet
|
|
zetteldeft
|
|
zoxide
|
|
|
|
# experimental (not otherwise embedded in config yet)
|
|
orderless
|
|
corfu
|
|
eat
|
|
|
|
# Wonky stuff
|
|
(currentTelega epkgs)
|
|
customTreesitGrammars # TODO(tazjin): how is this *supposed* to work?!
|
|
|
|
# Custom depot packages (either ours, or overridden ones)
|
|
tvlPackages.dottime
|
|
tvlPackages.nix-util
|
|
tvlPackages.passively
|
|
tvlPackages.rcirc
|
|
tvlPackages.term-switcher
|
|
tvlPackages.treecrumbs
|
|
tvlPackages.tvl
|
|
|
|
# Dynamic/native modules
|
|
depot.users.tazjin.gio-list-apps
|
|
])));
|
|
|
|
# Tired of telega.el runtime breakages through tdlib
|
|
# incompatibility. Target to make that a build failure instead.
|
|
tdlibCheck =
|
|
let
|
|
tgEmacs = emacsWithPackages (epkgs: [ (currentTelega epkgs) ]);
|
|
verifyTdlibVersion = builtins.toFile "verify-tdlib-version.el" ''
|
|
(require 'telega)
|
|
(defvar tdlib-version "${pkgs.tdlib.version}")
|
|
(when (or (version< tdlib-version
|
|
telega-tdlib-min-version)
|
|
(and telega-tdlib-max-version
|
|
(version< telega-tdlib-max-version
|
|
tdlib-version)))
|
|
(message "Found TDLib version %s, but require %s to %s"
|
|
tdlib-version telega-tdlib-min-version telega-tdlib-max-version)
|
|
(kill-emacs 1))
|
|
'';
|
|
in
|
|
pkgs.runCommand "tdlibCheck" { } ''
|
|
export PATH="${emacsBinPath}:$PATH"
|
|
${tgEmacs}/bin/emacs --script ${verifyTdlibVersion} && touch $out
|
|
'';
|
|
in
|
|
lib.fix
|
|
(self: l: f: (pkgs.writeShellScriptBin "tazjins-emacs" ''
|
|
export PATH="${emacsBinPath}:$PATH"
|
|
exec ${tazjinsEmacs f}/bin/emacs \
|
|
--debug-init \
|
|
--no-site-file \
|
|
--no-site-lisp \
|
|
--no-init-file \
|
|
--directory ${./config} ${if l != null then "--directory ${l}" else ""} \
|
|
--eval "(add-to-list 'treesit-extra-load-path \"${customTreesitGrammars}/lib\")" \
|
|
--eval "(require 'init)" $@
|
|
'').overrideAttrs
|
|
(_: {
|
|
passthru = {
|
|
# Expose original Emacs used for my configuration.
|
|
inherit emacs;
|
|
|
|
# Expose the pure emacs with all packages.
|
|
inherit emacsPackages;
|
|
emacsWithPackages = tazjinsEmacs f;
|
|
|
|
# Call overrideEmacs with a function (pkgs -> pkgs) to modify the
|
|
# packages that should be included in this Emacs distribution.
|
|
overrideEmacs = f': self l f';
|
|
|
|
# Call withLocalConfig with the path to a *folder* containing a
|
|
# `local.el` which provides local system configuration.
|
|
withLocalConfig = confDir: self confDir f;
|
|
|
|
# Expose telega/tdlib version check as a target that is built in
|
|
# CI.
|
|
#
|
|
# TODO(tazjin): uncomment when telega works again
|
|
inherit tdlibCheck;
|
|
meta.ci.targets = [ "tdlibCheck" ];
|
|
};
|
|
}))
|
|
null
|
|
identity
|
|
)
|
|
{ }
|