nix-portable
nix-portable copied to clipboard
set LOCALE_ARCHIVE for nix-shell
in some environments LOCALE_ARCHIVE can be unset
and the default file can be "empty"
$ du -sh /usr/lib/locale/locale-archive
2.2M
$ du -sh ~/.nix-portable/nix/store/xx5an8dhxd4a5qxgdsk3xqz5zmngj4y2-glibc-locales-2.39-5/lib/locale/locale-archive
220M
this happens when /etc/locale.conf is missing or empty
and/or when /etc/locale.gen is read-only
$ ls /etc/locale.conf
ls: cannot access '/etc/locale.conf': No such file or directory
$ stat -c%a /etc/locale.gen
600
... in other words, no locales were generated
and only the default locale C.UTF-8 is available
$ ls /usr/lib/locale/
C.UTF-8 locale-archive
problem is, this breaks qt-based programs like qbittorrent
$ nix-shell -p qbittorrent-nox
$ qbittorrent-nox
Detected locale "C" with character encoding "ANSI_X3.4-1968", which is not UTF-8.
Qt depends on a UTF-8 locale, and has switched to "C.UTF-8" instead.
If this causes problems, reconfigure your locale. See the locale(1) manual
for more information.
the debian solution for this problem is
- add your locale (
en_US.UTF-8) to/etc/locale.conf - run
sudo locale-gen
in debian, the files in /usr/lib/locale/ are generated by locale-gen
https://packages.debian.org/sid/locales
This package contains tools to generate locale definitions from source files (included in this package). It allows you to customize which definitions actually get generated. This is a space-saver over how this package used to be, with all locales generated by default. This created a package that unpacked to an excess of 30 megs.
in nixos, LOCALE_ARCHIVE is set by the i18n module nixos/modules/config/i18n.nix
LOCALE_ARCHIVE = "${config.i18n.glibcLocales}/lib/locale/locale-archive";
quickfix: use this wrapper as nix-shell
#!/usr/bin/env bash
export LOCALE_ARCHIVE=$(nix-portable nix-build '<nixpkgs>' -A glibcLocales)/lib/locale/locale-archive
exec nix-portable nix-shell "$@"
edit:
this breaks qt-based programs
not really, this is just a warning