Skip to content

Instantly share code, notes, and snippets.

@peti
Last active January 29, 2024 00:21
Show Gist options
  • Save peti/2c818d6cb49b0b0f2fd7c300f8386bc3 to your computer and use it in GitHub Desktop.
Save peti/2c818d6cb49b0b0f2fd7c300f8386bc3 to your computer and use it in GitHub Desktop.
Make NixOS provide version-specific LOCALE_ARCHIVE environment variables

This NixOS code ensures that the system provide version-specific $LOCALE_ARCHIVE environment variables to mitigate the effects of NixOS/nixpkgs#38991.

To deploy it, copy the file into your /etc/nixos folder using a file name like multi-glibc-locale-paths.nix. Then edit your configuration.nix file to contain the attribute:

imports = [ ./multi-glibc-locale-paths.nix ];

If you are running Nix on a host system other than NixOS, you'll have to configure those environment variables manually:

  • Set $LOCALE_ARCHIVE_2_27 to the path "${glibcLocales}/lib/locale/locale-archive". You can find out what glibcLocales is by running:

      $ nix-build --no-out-link "<nixpkgs>" -A glibcLocales
      /nix/store/m53mq2077pfxhqf37gdbj7fkkdc1c8hc-glibc-locales-2.27
    
  • Set $LOCALE_ARCHIVE_2_11 to the path of your system's locale.

{ config, pkgs, ... }: # multi-glibc-locale-paths.nix
/*
* Provide version-specific LOCALE_ARCHIVE environment variables to mitigate
* the effects of https://github.com/NixOS/nixpkgs/issues/38991.
*/
let
# A random Nixpkgs revision *before* the default glibc
# was switched to version 2.27.x.
oldpkgsSrc = pkgs.fetchFromGitHub {
owner = "nixos";
repo = "nixpkgs";
rev = "0252e6ca31c98182e841df494e6c9c4fb022c676";
sha256 = "1sr5a11sb26rgs1hmlwv5bxynw2pl5w4h5ic0qv3p2ppcpmxwykz";
};
oldpkgs = import oldpkgsSrc {};
# A random Nixpkgs revision *after* the default glibc
# was switched to version 2.27.x.
newpkgsSrc = pkgs.fetchFromGitHub {
owner = "nixos";
repo = "nixpkgs";
rev = "1d0a71879dac0226272212df7a2463d8eeb8f75b";
sha256 = "0nh6wfw50lx6wkzyiscfqg6fl6rb17wmncj8jsdvbgmsd6rm95rg";
};
newpkgs = import newpkgsSrc {};
in
{
environment.sessionVariables = {
LOCALE_ARCHIVE_2_11 = "${oldpkgs.glibcLocales}/lib/locale/locale-archive";
LOCALE_ARCHIVE_2_27 = "${newpkgs.glibcLocales}/lib/locale/locale-archive";
};
}
@573
Copy link

573 commented Oct 8, 2020

Got entirely rid of related warnings (bash: warning: setlocale: LC_CTYPE: cannot change locale (de_DE.UTF-8): No such file or directory) by editing my nix hosts (arch linux) /etc/locale.gen file accordingly and running sudo -i locale-gen. Still have the LOCALE_ARCHIVE settings applied in my nix config though not sure if they're needed in my case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment