From 91587da1cb26c47211a9a90ba1382b67f53d4ff4 Mon Sep 17 00:00:00 2001
From: Thiago Sposito
Date: Mon, 26 Jan 2026 10:54:04 -0300
Subject: [PATCH] feat: emacs config
---
home-manager/emacs/doom/early-init.el | 11 ++++
home-manager/emacs/doom/init.el | 8 +--
home-manager/services/comfy-ui.nix | 90 +++++++++++++++++++++++++--
home-manager/services/default.nix | 1 +
4 files changed, 102 insertions(+), 8 deletions(-)
create mode 100644 home-manager/emacs/doom/early-init.el
diff --git a/home-manager/emacs/doom/early-init.el b/home-manager/emacs/doom/early-init.el
new file mode 100644
index 0000000..9439656
--- /dev/null
+++ b/home-manager/emacs/doom/early-init.el
@@ -0,0 +1,11 @@
+;;; early-init.el -*- lexical-binding: t; -*-
+
+;; Set the background early to prevent the white flash
+(setq default-frame-alist
+ '((background-color . "#282c34") ; Standard Doom One background
+ (vertical-scroll-bars . nil)
+ (tool-bar-lines . 0)
+ (menu-bar-lines . 0)))
+
+;; Ensure the title bar is dark on macOS/compatible systems
+(add-to-list 'default-frame-alist '(ns-appearance . dark))
diff --git a/home-manager/emacs/doom/init.el b/home-manager/emacs/doom/init.el
index 77d4a21..965e2de 100644
--- a/home-manager/emacs/doom/init.el
+++ b/home-manager/emacs/doom/init.el
@@ -105,7 +105,7 @@
magit ; a git porcelain for Emacs
;;make ; run make tasks from Emacs
pass ; password manager for nerds
- ;;pdf ; pdf enhancements
+ (pdf +org) ; pdf enhancements
;;terraform ; infrastructure as code
;;tmux ; an API for interacting with tmux
tree-sitter ; syntax and parsing, sitting in a tree...
@@ -172,7 +172,7 @@
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
;;(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
- (scheme +guile) ; a fully conniving family of lisps
+ (scheme +guile +chez) ; a fully conniving family of lisps
sh ; she sells {ba,z,fi}sh shells on the C xor
;;sml
;;solidity ; do you need a blockchain? No.
@@ -192,8 +192,8 @@
;;calendar
;;emms
;;everywhere ; *leave* Emacs!? You must be joking
- ;;irc ; how neckbeards socialize
- ;;(rss +org) ; emacs as an RSS reader
+ irc ; how neckbeards socialize
+ (rss +org) ; emacs as an RSS reader
:config
;;literate
diff --git a/home-manager/services/comfy-ui.nix b/home-manager/services/comfy-ui.nix
index c61a129..ac48957 100644
--- a/home-manager/services/comfy-ui.nix
+++ b/home-manager/services/comfy-ui.nix
@@ -4,26 +4,96 @@ let
comfyuiSrc = pkgs.fetchFromGitHub {
owner = "Comfy-Org";
repo = "ComfyUI";
- rev = "master";
+ rev = "v0.9.2";
sha256 = "PQfZ0PD/PQn49ElGdzt/El8JrU7clETcLi/6ZUxm8f8=";
};
+ controlnetAux = pkgs.fetchFromGitHub {
+ owner = "Fannovel16";
+ repo = "comfyui_controlnet_aux";
+ rev = "136f125c89aed92ced1b6fbb491e13719b72fcc0";
+ sha256 = "DlspkqzN7Ls8kXWQMtVQygzsgu/z6FtjMqDthuza/Kc=";
+ };
+
+ ipAdapter = pkgs.fetchFromGitHub {
+ owner = "cubiq";
+ repo = "ComfyUI_IPAdapter_plus";
+ rev = "main";
+ sha256 = "Ft9WJcmjzon2tAMJq5na24iqYTnQWEQFSKUElSVwYgw=";
+ };
+
+ toolingNodes = pkgs.fetchFromGitHub {
+ owner = "Acly";
+ repo = "comfyui-tooling-nodes";
+ rev = "main";
+ sha256 = "tVvpVWDpihy7zdV/L7cOpsWE68l15xKIwuM3EriUM+Y=";
+ };
+
+ inpaintNodes = pkgs.fetchFromGitHub {
+ owner = "Acly";
+ repo = "comfyui-inpaint-nodes";
+ rev = "main";
+ sha256 = "Uy6ppXNAQAOIkmoJB8miAzVUXZ0Elyp+w+kwNxWZjvo=";
+ };
+
dataDir = "${config.home.homeDirectory}/.local/share/comfyui";
venvDir = "${dataDir}/.venv";
+ customNodesDir = "${dataDir}/custom_nodes";
+ kritaModelsDir = "${config.home.homeDirectory}/.var/app/org.kde.krita/data/krita/ai_diffusion/server/models";
startScript = pkgs.writeShellScript "comfyui-start" ''
set -e
- export LD_LIBRARY_PATH="${pkgs.stdenv.cc.cc.lib}/lib:${pkgs.zlib}/lib:${pkgs.libGL}/lib:/run/opengl-driver/lib:$LD_LIBRARY_PATH"
+ export LD_LIBRARY_PATH="${pkgs.stdenv.cc.cc.lib}/lib:${pkgs.zlib}/lib:${pkgs.libGL}/lib:${pkgs.glib}/lib:${pkgs.xorg.libxcb}/lib:${pkgs.xorg.libX11}/lib:${pkgs.xorg.libXext}/lib:/run/opengl-driver/lib:$LD_LIBRARY_PATH"
mkdir -p ${dataDir}
+ mkdir -p ${customNodesDir}
- # Copy source if not exists or update
+ # Copy source if not exists
if [ ! -f "${dataDir}/main.py" ]; then
cp -r ${comfyuiSrc}/* ${dataDir}/
chmod -R u+w ${dataDir}
fi
+ # Create extra_model_paths.yaml to use Krita AI Diffusion models
+ cat > ${dataDir}/extra_model_paths.yaml << EOF
+krita_ai:
+ base_path: ${kritaModelsDir}
+ checkpoints: checkpoints/
+ clip_vision: clip_vision/
+ controlnet: controlnet/
+ diffusion_models: diffusion_models/
+ embeddings: embeddings/
+ inpaint: inpaint/
+ ipadapter: ipadapter/
+ loras: loras/
+ style_models: style_models/
+ text_encoders: text_encoders/
+ upscale_models: upscale_models/
+ vae: vae/
+EOF
+
+ # Install custom nodes
+ if [ ! -d "${customNodesDir}/comfyui_controlnet_aux" ]; then
+ cp -r ${controlnetAux} ${customNodesDir}/comfyui_controlnet_aux
+ chmod -R u+w ${customNodesDir}/comfyui_controlnet_aux
+ fi
+
+ if [ ! -d "${customNodesDir}/ComfyUI_IPAdapter_plus" ]; then
+ cp -r ${ipAdapter} ${customNodesDir}/ComfyUI_IPAdapter_plus
+ chmod -R u+w ${customNodesDir}/ComfyUI_IPAdapter_plus
+ fi
+
+ if [ ! -d "${customNodesDir}/comfyui-tooling-nodes" ]; then
+ cp -r ${toolingNodes} ${customNodesDir}/comfyui-tooling-nodes
+ chmod -R u+w ${customNodesDir}/comfyui-tooling-nodes
+ fi
+
+ if [ ! -d "${customNodesDir}/comfyui-inpaint-nodes" ]; then
+ cp -r ${inpaintNodes} ${customNodesDir}/comfyui-inpaint-nodes
+ chmod -R u+w ${customNodesDir}/comfyui-inpaint-nodes
+ fi
+
cd ${dataDir}
# Create venv on first run
@@ -32,13 +102,25 @@ let
${venvDir}/bin/pip install --upgrade pip
fi
- # Always ensure deps are installed
+ # Install deps
if [ ! -f "${venvDir}/.deps-installed" ]; then
${venvDir}/bin/pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu124
${venvDir}/bin/pip install -r requirements.txt
touch ${venvDir}/.deps-installed
fi
+ # Install custom nodes deps
+ if [ ! -f "${venvDir}/.custom-nodes-installed" ]; then
+ for node in ${customNodesDir}/*/; do
+ if [ -f "$node/requirements.txt" ]; then
+ # Replace opencv-python with headless version (no GUI deps)
+ sed 's/opencv-python>=/opencv-python-headless>=/g' "$node/requirements.txt" > /tmp/requirements_patched.txt
+ ${venvDir}/bin/pip install -r /tmp/requirements_patched.txt || true
+ fi
+ done
+ touch ${venvDir}/.custom-nodes-installed
+ fi
+
exec ${venvDir}/bin/python main.py "$@"
'';
in
diff --git a/home-manager/services/default.nix b/home-manager/services/default.nix
index 5cf99f7..2332aca 100644
--- a/home-manager/services/default.nix
+++ b/home-manager/services/default.nix
@@ -5,3 +5,4 @@
];
}
+