【发布时间】:2017-06-27 10:48:23
【问题描述】:
我正在尝试在 ubuntu 上使用 nix,并将 XMonad 作为我的窗口管理器。 我在一台使用 nixOS 的主机上运行良好,但我有第二台设备还没有为 nixOS 做好准备。 Ubuntu 之上的 nix 在那里大部分运行良好,但 xmonad 找不到贡献库。
相关包已安装:
$ nix-env -q | grep xmonad
xmonad-0.13
xmonad-contrib-0.13
xmonad-extras-0.12.1
但是重新编译我的 xmonad.hs,它找不到 contrib 库:
$ xmonad --recompile
Error detected while loading xmonad configuration file: /home/martyn/.xmonad/xmonad.hs
xmonad.hs:32:1: error:
Failed to load interface for ‘XMonad.Layout.NoBorders’
Use -v to see a list of the files searched for.
...
Please check the file for errors.
相关文件已安装:
$ ls /nix/store/*xmonad-contrib*/lib/**/NoBorders*
/nix/store/4xrrwsm6362xkn9jn1b17kd891kv9z3a-xmonad-contrib-0.13/lib/ghc-8.0.2/xmonad-contrib-0.13/XMonad/Actions/NoBorders.dyn_hi
/nix/store/4xrrwsm6362xkn9jn1b17kd891kv9z3a-xmonad-contrib-0.13/lib/ghc-8.0.2/xmonad-contrib-0.13/XMonad/Actions/NoBorders.hi
/nix/store/4xrrwsm6362xkn9jn1b17kd891kv9z3a-xmonad-contrib-0.13/lib/ghc-8.0.2/xmonad-contrib-0.13/XMonad/Layout/NoBorders.dyn_hi
/nix/store/4xrrwsm6362xkn9jn1b17kd891kv9z3a-xmonad-contrib-0.13/lib/ghc-8.0.2/xmonad-contrib-0.13/XMonad/Layout/NoBorders.hi
通过将 xmonad-contrib 添加到我的 nixpkgs config.nix,我已将这些库添加到 ghc 包注册表中:
$ cat ~/.config/nixpkgs/config.nix
with (import <nixpkgs> {});
{
packageOverrides = pkgs: with pkgs; {
myHaskellEnv = pkgs.haskellPackages.ghcWithPackages (haskellPackages: with haskellPackages; [ xmonad-contrib ]);
};
}
$ nix-env -iA nixpkgs.myHaskellEnv
$ ghc-pkg list | grep xmonad
xmonad-0.13
xmonad-contrib-0.13
$
有了这个,这个 ghc(i) 效果很好:
$ /nix/store/7mkxsq7ydqcgnjbs59v1v47wfxpwrav5-ghc-8.0.2-with-packages/bin/ghc ~/.xmonad/xmonad.hs
[1 of 1] Compiling Main ( /home/martyn/.xmonad/xmonad.hs, /home/martyn/.xmonad/xmonad.o ) [flags changed]
Linking /home/martyn/.xmonad/xmonad ...
但即使是该目录中的 xmonad 版本也找不到库:
$ /nix/store/7mkxsq7ydqcgnjbs59v1v47wfxpwrav5-ghc-8.0.2-with-packages/bin/xmonad --recompile
Error detected while loading xmonad configuration file: /home/martyn/.xmonad/xmonad.hs
xmonad.hs:32:1: error:
Failed to load interface for ‘XMonad.Layout.NoBorders’
Use -v to see a list of the files searched for.
我可以通过使用上面的 ghc 进行编译来解决这个问题,然后手动将输出移动到 ~/.xmonad/xmonad-x86_64-linux,然后运行它。但这有点 hacky,当然没有必要?
【问题讨论】:
-
那不是您的配置中特定的
xmonad.hs部分,因此应该在“内部”nix 中编译(从配置管理的角度来看)? -
我自己不是 xmonad 用户,但这里是 NixOS 上 @Ptival 的 xmonad 配置文件:github.com/Ptival/config/blob/master/xmonad.nix
-
可能 xmonad.hs 会在“内部”nix 中得到更好的管理,但我还没有能力实现这一点,并且如 nixOS 所示,应该可以选择不这样做但仍然可以工作(是否明智)。
-
感谢您的链接 - 但该配置是用于 nixOS 安装,而不是 ubuntu 之上的 nix。