doomemacs / doomemacs

An Emacs framework for the stubborn martian hacker
MIT License
19.5k stars 3.06k forks source link

Error on `doom update`: `fatal: iconv_open(UTF-8,UTF-8-MAC) failed, but needed: precomposed unicode is not supported.` #2264

Closed bhgomes closed 3 years ago

bhgomes commented 4 years ago

What did you expect to happen? run doom update without error

What actually happened? the following

$ doom update
> Checking core autoloads file
  ✓ Skipping core autoloads, they are up-to-date
> Updating packages (this may take a while)...
  ! (113/231) Encountered error with rtags
    x (error Failed to run "git"; see buffer *straight-process*)
      - fatal: iconv_open(UTF-8,UTF-8-MAC) failed, but needed:
          precomposed unicode is not supported.
          If you want to use decomposed unicode, run
          "git config core.precomposeunicode false"

      fatal: 'git status --porcelain=2' failed in submodule src/rct

  x Encountered 1 error(s), the offending packages: rtags
  ✓ All 231 packages are up-to-date
✓ Finished! (88.2163s)

Additional details:

config.el ```elisp ;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- ;; Place your private configuration here! Remember, you do not need to run 'doom ;; refresh' after modifying this file! ;; These are used for a number of things, particularly for GPG configuration, ;; some email clients, file templates and snippets. (setq user-full-name "Brandon Gomes" user-mail-address "bhgomes.code@gmail.com") ;; Doom exposes five (optional) variables for controlling fonts in Doom. Here ;; are the three important ones: ;; ;; + `doom-font' ;; + `doom-variable-pitch-font' ;; + `doom-big-font' -- used for `doom-big-font-mode' ;; ;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd ;; font string. You generally only need these two: ;; test (setq doom-font (font-spec :family "Fira Code" :size 11) doom-variable-pitch-font (font-spec :family "Fira Code")) ;; There are two ways to load a theme. Both assume the theme is installed and ;; available. You can either set `doom-theme' or manually load a theme with the ;; `load-theme' function. These are the defaults. (setq doom-theme 'doom-one) ;; If you intend to use org, it is recommended you change this! (setq org-directory "~/.org/") ;; If you want to change the style of line numbers, change this to `relative' or ;; `nil' to disable it: (setq display-line-numbers-type 'relative) ;; Here are some additional functions/macros that could help you configure Doom: ;; ;; - `load!' for loading external *.el files relative to this one ;; - `use-package' for configuring packages ;; - `after!' for running code after a package has loaded ;; - `add-load-path!' for adding directories to the `load-path', where Emacs ;; looks when you load packages with `require' or `use-package'. ;; - `map!' for binding new keys ;; ;; To get information about any of these functions/macros, move the cursor over ;; the highlighted symbol at press 'K' (non-evil users must press 'C-c g k'). ;; This will open documentation for it, including demos of how they are used. ;; ;; You can also try 'gd' (or 'C-c g d') to jump to their definition and see how ;; they are implemented. ```
init.el ```elisp ;;; init.el -*- lexical-binding: t; -*- ;; This file controls what Doom modules are enabled and what order they load in. ;; Remember to run 'doom sync' after modifying it! ;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's ;; documentation. There you'll find information about all of Doom's modules ;; and what flags they support. ;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or ;; 'C-c g k' for non-vim users) to view its documentation. This works on ;; flags as well (those symbols that start with a plus). ;; ;; Alternatively, press 'gd' (or 'C-c g d') on a module to browse its ;; directory (for easy access to its source code). (doom! :input ;;chinese ;;japanese :completion company ; the ultimate code completion backend ;;helm ; the *other* search engine for love and life ;;ido ; the other *other* search engine... ivy ; a search engine for love and life :ui ;;deft ; notational velocity for Emacs doom ; what makes DOOM look the way it does doom-dashboard ; a nifty splash screen for Emacs doom-quit ; DOOM quit-message prompts when you quit Emacs ;;fill-column ; a `fill-column' indicator hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW ;;hydra ;;indent-guides ; highlighted indent columns modeline ; snazzy, Atom-inspired modeline, plus API nav-flash ; blink the current line after jumping ;;neotree ; a project drawer, like NERDTree for vim ophints ; highlight the region an operation acts on (popup ; tame sudden yet inevitable temporary windows +all ; catch all popups that start with an asterix +defaults) ; default popup rules ;;pretty-code ; replace bits of code with pretty symbols ;;tabs ; an tab bar for Emacs ;;treemacs ; a project drawer, like neotree but cooler ;;unicode ; extended unicode support for various languages vc-gutter ; vcs diff in the fringe vi-tilde-fringe ; fringe tildes to mark beyond EOB window-select ; visually switch windows workspaces ; tab emulation, persistence & separate workspaces ;;zen ; distraction-free coding or writing :editor (evil +everywhere); come to the dark side, we have cookies file-templates ; auto-snippets for empty files fold ; (nigh) universal code folding ;;(format +onsave) ; automated prettiness ;;god ; run Emacs commands without modifier keys ;;lispy ; vim for lisp, for people who don't like vim multiple-cursors ; editing in many places at once ;;objed ; text object editing for the innocent ;;parinfer ; turn lisp into python, sort of rotate-text ; cycle region at point between text candidates snippets ; my elves. They type so I don't have to word-wrap ; soft wrapping with language-aware indent :emacs dired ; making dired pretty [functional] electric ; smarter, keyword-based electric-indent ibuffer ; interactive buffer management vc ; version-control and Emacs, sitting in a tree :term ;;eshell ; a consistent, cross-platform shell (WIP) ;;shell ; a terminal REPL for Emacs ;;term ; terminals in Emacs ;;vterm ; another terminals in Emacs :tools ;;ansible ;;debugger ; FIXME stepping through code, to help you add bugs ;;direnv ;;docker ;;editorconfig ; let someone else argue about tabs vs spaces ;;ein ; tame Jupyter notebooks with emacs (eval +overlay) ; run code, run (also, repls) flycheck ; tasing you for every semicolon you forget ;;flyspell ; tasing you for misspelling mispelling ;;gist ; interacting with github gists (lookup ; helps you navigate your code and documentation +docsets) ; ...or in Dash docsets locally ;;lsp macos ; MacOS-specific commands magit ; a git porcelain for Emacs ;;make ; run make tasks from Emacs ;;pass ; password manager for nerds pdf ; pdf enhancements ;;prodigy ; FIXME managing external services & code builders ;;rgb ; creating color strings ;;terraform ; infrastructure as code tmux ; an API for interacting with tmux ;;upload ; map local to remote projects via ssh/ftp :lang ;;agda ; types of types of types of types... assembly ; assembly for fun or debugging cc ; C/C++/Obj-C madness ;;clojure ; java with a lisp common-lisp ; if you've seen one lisp, you've seen them all coq ; proofs-as-programs ;;crystal ; ruby at the speed of c ;;csharp ; unity, .NET, and mono shenanigans data ; config/data formats ;;elixir ; erlang done right ;;elm ; care for a cup of TEA? emacs-lisp ; drown in parentheses ;;erlang ; an elegant language for a more civilized age ;;ess ; emacs speaks statistics ;;faust ; dsp, but you get to keep your soul ;;fsharp ; ML stands for Microsoft's Language go ; the hipster dialect (haskell +dante) ; a language that's lazier than I am ;;hy ; readability of scheme w/ speed of python ;;idris ; ;;(java +meghanada) ; the poster child for carpal tunnel syndrome ;;javascript ; all(hope(abandon(ye(who(enter(here)))))) julia ; a better, faster MATLAB ;;kotlin ; a better, slicker Java(Script) latex ; writing papers in Emacs has never been so fun lean ;;factor ;;ledger ; an accounting system in Emacs ;;lua ; one-based indices? one-based indices markdown ; writing docs for people to ignore ;;nim ; python + lisp at the speed of c ;;nix ; I hereby declare "nix geht mehr!" ;;ocaml ; an objective camel (org ; organize your plain life in plain text +dragndrop ; drag & drop files/images into org buffers ;;+hugo ; use Emacs for hugo blogging ;;+jupyter ; ipython/jupyter support for babel ;;+pandoc ; export-with-pandoc support ;;+pomodoro ; be fruitful with the tomato technique +present) ; using org-mode for presentations ;;perl ; write code no one else can comprehend ;;php ; perl's insecure younger brother ;;plantuml ; diagrams for confusing people more ;;purescript ; javascript, but functional python ; beautiful is better than ugly ;;qt ; the 'cutest' gui framework ever ;;racket ; a DSL for DSLs ;;rest ; Emacs as a REST client ;;rst ; ReST in peace ;;ruby ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap() ;;scala ; java, but good ;;scheme ; a fully conniving family of lisps sh ; she sells {ba,z,fi}sh shells on the C xor ;;solidity ; do you need a blockchain? No. ;;swift ; who asked for emoji variables? ;;terra ; Earth and Moon in alignment for performance. ;;web ; the tubes :email ;;(mu4e +gmail) ;;notmuch ;;(wanderlust +gmail) :app ;;calendar ;;irc ; how neckbeards socialize ;;(rss +org) ; emacs as an RSS reader ;;twitter ; twitter client https://twitter.com/vnought ;;write ; emacs for writers (fiction, notes, papers, etc.) :config ;;literate (default +bindings +smartparens)) ```
packages.el ```elisp ;; -*- no-byte-compile: t; -*- ;;; $DOOMDIR/packages.el ;; This is where you install packages, by declaring them with the `package!' ;; macro, then running 'doom refresh' on the command line. You'll need to ;; restart Emacs for your changes to take effect! Or at least, run M-x ;; `doom/reload'. ;; ;; WARNING: Don't disable core packages listed in ~/.emacs.d/core/packages.el. ;; Doom requires these, and disabling them may have terrible side effects. ;; ;; Here are a couple examples: ;; All of Doom's packages are pnned to a specific commit, and updated from ;; release to release. To un-pin all packages and live on the edge, do: ;(setq doom-pinned-packages nil) ;; ...but to unpin a single package: ;(package! pinned-package :pin nil) ;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror: ;(package! some-package) ;; To install a package directly from a particular repo, you'll need to specify ;; a `:recipe'. You'll find documentation on what `:recipe' accepts here: ;; https://github.com/raxod502/straight.el#the-recipe-format ;(package! another-package ; :recipe (:host github :repo "username/repo")) ;; If the package you are trying to install does not contain a PACKAGENAME.el ;; file, or is located in a subdirectory of the repo, you'll need to specify ;; `:files' in the `:recipe': ;(package! this-package ; :recipe (:host github :repo "username/repo" ; :files ("some-file.el" "src/lisp/*.el"))) ;; If you'd like to disable a package included with Doom, for whatever reason, ;; you can do so here with the `:disable' property: ;(package! builtin-package :disable t) ;; You can override the recipe of a built in package without having to specify ;; all the properties for `:recipe'. These will inherit the rest of its recipe ;; from Doom or MELPA/ELPA/Emacsmirror: ;(package! builtin-package :recipe (:nonrecursive t)) ;(package! builtin-package-2 :recipe (:repo "myfork/package")) ;; Specify a `:branch' to install a package from a particular branch or tag. ;; This is required for some packages whose default branch isn't 'master' (which ;; our package manager can't deal with; see raxod502/straight.el#279) ;(package! builtin-package :recipe (:branch "develop")) ```

Steps to reproduce:

  1. Run doom emacs

System information:

((emacs
  (version . "26.3")
  (features . "JPEG DBUS NOTIFY ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS THREADS")
  (build . "Nov 30, 2019")
  (buildopts "--prefix=/Users/brandongomes/miniconda 'CFLAGS=-march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fPIE -fstack-protector-strong -O2 -pipe -isystem /Users/brandongomes/miniconda/include -fdebug-prefix-map=/usr/local/miniconda/conda-bld/emacs_1575159137421/work=/usr/local/src/conda/emacs-26.3 -fdebug-prefix-map=/Users/brandongomes/miniconda=/usr/local/src/conda-prefix' 'CPPFLAGS=-D_FORTIFY_SOURCE=2 -mmacosx-version-min=10.9 -isystem /Users/brandongomes/miniconda/include' 'LDFLAGS=-Wl,-pie -Wl,-headerpad_max_install_names -Wl,-dead_strip_dylibs -Wl,-rpath,/Users/brandongomes/miniconda/lib -L/Users/brandongomes/miniconda/lib -ltinfo'")
  (windowsys . batch)
  (daemonp))
 (doom
  (version . "2.0.9")
  (build . "HEAD -> develop, origin/develop, origin/HEAD 8d3954257 2019-12-28 14:02:07 -0500")
  (dir . "~/.doom.d/"))
 (system
  (type . darwin)
  (config . "x86_64-apple-darwin17.7.0")
  (shell . "/bin/zsh")
  (uname . "Darwin 19.2.0 Darwin Kernel Version 19.2.0: Sat Nov  9 03:47:04 PST 2019; root:xnu-6153.61.1~20/RELEASE_X86_64 x86_64")
  (path "~/.opam/default/bin" "~/miniconda/bin" "~/miniconda/condabin" "/bin/xc-avoidance" "~/.local/bin" "/usr/local/bin" "~/.cargo/bin" "~/.elan/bin" "/usr/local/bin" "/usr/bin" "/bin" "/usr/sbin" "/sbin" "/usr/local/Cellar" "~/anaconda/bin" "$HOME/Library/Haskell/bin" "/opt/local/bin" "/opt/local/sbin" "//anaconda/bin" "/Library/TeX/texbin" "/opt/X11/bin" "~/miniconda/Emacs.app/Contents/MacOS/libexec" "~/miniconda/Emacs.app/Contents/MacOS/bin"))
 (config
  (envfile . envvar-file)
  (elc-files . 0)
  (modules :completion company ivy :ui doom doom-dashboard doom-quit hl-todo modeline nav-flash ophints (popup +all +defaults) vc-gutter vi-tilde-fringe window-select workspaces :editor (evil +everywhere) file-templates fold multiple-cursors rotate-text snippets word-wrap :emacs dired electric ibuffer vc :tools (eval +overlay) flycheck (lookup +docsets) macos magit pdf tmux :lang assembly cc common-lisp coq data emacs-lisp go (haskell +dante) julia latex lean markdown (org +dragndrop +present) python rust sh :config (default +bindings +smartparens))
  (packages "n/a")
  (elpa "n/a")))
hlissner commented 4 years ago

This appears to be an issue with how git handles unicode in filenames on macOS (where it enables core.precomposeunicode by default, in some repos). The quick fix would be to run git config core.precomposeunicode false.

Unfortunately, I'm not sure what I can do from my end, or where on the stack this ought to be addressed: on macOS (for mangling decomposed unicode)? Git (for not doing-what-I-mean and failing inelegantly)? Straight (for allowing arbitrary git configuration to impact its operation)? The rtags repo (for possessing incompatible unicode in its filenames)?

I have absolutely no clue.

bhgomes commented 4 years ago

Thanks for your input. For now, I've disabled the rtags package and ran git config --global core.precomposeunicode false. I'm looking at how other projects handle this issue with their external dependencies.

bhgomes commented 4 years ago

For Reference: I looked at all the other packages in the doom ecosystem and found these to be offending packages:

hlissner commented 3 years ago

Do you still experience these issues? I've yet to reproduce it or encounter anyone else with the same issue.

bhgomes commented 3 years ago

I haven't seen this error anymore. Closing for now.