Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

set LOCALE_ARCHIVE for nix-shell #119

Open
milahu opened this issue Jun 7, 2024 · 0 comments
Open

set LOCALE_ARCHIVE for nix-shell #119

milahu opened this issue Jun 7, 2024 · 0 comments

Comments

@milahu
Copy link

milahu commented Jun 7, 2024

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

  1. add your locale (en_US.UTF-8) to /etc/locale.conf
  2. 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant