Skip to content

Instantly share code, notes, and snippets.

@andir
Created May 11, 2026 09:48
Show Gist options
  • Select an option

  • Save andir/1bda736dcfc3853d2e402e82b127ddd6 to your computer and use it in GitHub Desktop.

Select an option

Save andir/1bda736dcfc3853d2e402e82b127ddd6 to your computer and use it in GitHub Desktop.
{ lib, pkgs, ... }:
let
mkFallback = binaryName: pkg: pkgs.writeShellScriptBin binaryName ''
set -e
self="$0"
self_path=''${self%/${binaryName}}
stripped_path=$(echo "$PATH" | ${pkgs.gnused}/bin/sed -e "s;$self_path:*;;g")
PATH="$stripped_path" ${pkgs.which}/bin/which ${binaryName} > /dev/null 2>&1 && PATH=$stripped_path exec ${binaryName} "$@"
export PATH="$PATH:${lib.getBin pkg}/bin/"
exec ${binaryName} "$@"
'';
in
{
home.file.".emacs" = {
text = "(require 'andir)";
};
home.packages = with pkgs; [
nil
#terraform-lsp
terraform
#rnix-lsp
ispell # for spell checking
languagetool # for more spelling stuff
openjdk_headless # for languagetool :|
nixpkgs-fmt
#dotnet-sdk_6 # for dotnet/C# development
(mkFallback "rust-analyzer" pkgs.rust-analyzer)
(mkFallback "cargo" pkgs.cargo)
(mkFallback "rustc" pkgs.rustc)
(mkFallback "nixfmt" pkgs.nixfmt)
(mkFallback "rustfmt" pkgs.rustfmt)
(mkFallback "yaml-language-server" pkgs.yaml-language-server)
(mkFallback "markdown" pkgs.multimarkdown)
(mkFallback "claude" (pkgs.writeScriptBin "claude" ''
export AWS_PROFILE=ClaudeCode
${if !stdenv.isLinux then "export CLAUDE_CODE_USE_BEDROCK=1" else ""}
exec ${pkgs.claude-code}/bin/claude
''))
];
services.emacs = {
enable = pkgs.system != "aarch64-darwin";
startWithUserSession = true;
defaultEditor = true;
};
programs.emacs = {
enable = true;
package = pkgs.my-emacs;
extraConfig =
let
remoteNotmuch = user: address: pkgs.writeShellScript "remote-notmuch" ''
exec ${pkgs.openssh}/bin/ssh ${user}@${address} "notmuch" "$@"
'';
remoteMbsync = user: address: pkgs.writeShellScript "mbsync" ''
exec ${pkgs.openssh}/bin/ssh ${user}@${address} "mbsync" "$@"
'';
in
''
(setq languagetool-java-bin "${pkgs.openjdk_headless}/bin/java"
languagetool-java-arguments '("-cp" "${pkgs.languagetool}/share")
languagetool-console-command "${pkgs.languagetool}/share/languagetool-commandline.jar"
languagetool-server-command "${pkgs.languagetool}/share/languagetool-server.jar")
;; C# support for DoL
(setq lsp-csharp-server-path "${"" /*pkgs.omnisharp-roslyn*/}/bin/OmniSharp")
(defvar andir-remote-notmuch-command "${remoteNotmuch "andi" "172.20.24.174"}")
(defvar andir-remote-mbsync-command "${remoteMbsync "andi" "172.20.24.174"}")
(with-eval-after-load 'counsel
(setq counsel-fzf-cmd "${pkgs.fzf}/bin/fzf -f \"%s\""
))
(with-eval-after-load 'rg
(setq rg-executable "${pkgs.ripgrep}/bin/rg"))
;; load config
;;(require 'andir)
'';
extraPackages = epkgs: with epkgs; let
config = epkgs.trivialBuild {
pname = "andir";
src = pkgs.writeText "andir.el" (builtins.readFile ./emacs.el);
nativeBuildInputs = [ pkgs.gitMinimal ];
version = "0.0";
packageRequires = dependencies;
preBuild = ''
export HOME=$(mktemp -d)
'';
};
dependencies = [
ace-window
eat
evil
evil-collection
undo-tree
nix-mode
nixpkgs-fmt
rust-mode
rustic
yaml-mode
json-mode
php-mode
python-mode
python-black
lsp-mode
#lsp-java
lsp-ui
lsp-treemacs
helm-lsp
#dap-mode
lua-mode
#gdb
cmake-mode
dts-mode
k8s-mode
nyan-mode
# alternative completion stuff to company
corfu
cape
vertico
# vertico-directory
orderless
consult
# terraform-mode is a bit weird with issues around highlighting nested stuff
terraform-mode
go-mode
# theme
(dracula-theme.overrideAttrs (_: {
src = pkgs.sources.dracula-theme;
}))
srcery-theme
doom-themes
doom-modeline
material-theme
all-the-icons
# faster terminal
vterm
ghostel
evil-ghostel
# the well known git plugin
magit
(pkgs.mk-majutsu epkgs)
forge # git forge supprt
# completion at point
#company
# compat, see emacs.el
#flymake-proc
# fix space vs tabs wars
dtrt-indent
# show syntax checking errors
flycheck
consult-notmuch
# telescope like completion
counsel
counsel-projectile # search within the current dir
helm
# searching for files
rg
#direnv
envrc
inheritenv
which-key
tree-sitter
tree-sitter-indent
tree-sitter-langs
notmuch
rainbow-delimiters
# source of ol-notmuch
#org-contrib
# RSS reader
elfeed
# no-littering
no-littering
# org-neomutt-hello, an org plugin to show notmuch counts
#(epkgs.trivialBuild {
# pname = "org-notmuch-hello";
# version = "git${pkgs.sources.org-notmuch-hello.revision}";
# src = pkgs.sources.org-notmuch-hello;
# packageRequires = with epkgs; [
# notmuch
# ];
#})
#piem
my-repo-pins
editorconfig
highlight-indentation
clang-format
typescript-mode
dockerfile-mode
languagetool
mpdel # mpd client
platformio-mode
# github code review
ghub
code-review
haskell-mode
lsp-haskell
ement
textsize
realgud
scala-mode
lsp-metals
#prettier-emacs
# bitwarden integration
(epkgs.trivialBuild {
pname = "emacs-bitwarden";
version = "git${pkgs.sources."emacs-bitwarden".revision}";
src = pkgs.sources."emacs-bitwarden";
packageRequires = [ ];
})
] ++ (if pkgs.stdenv.isLinux then [
(epkgs.trivialBuild {
pname = "gnome-night-light.el";
version = "git${pkgs.sources."gnome-night-light".revision}";
src = pkgs.sources."gnome-night-light";
packageRequires = [ ];
})
] else [ ]);
in
[
config
];
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment