首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nix上的XMonad -找不到xmonad-contrib

Nix上的XMonad -找不到xmonad-contrib
EN

Stack Overflow用户
提问于 2017-06-27 18:48:24
回答 1查看 1.2K关注 0票数 5

我正尝试在ubuntu上使用nix,并使用XMonad作为我的窗口管理器。我在一台使用nixOS的主机上运行得很好,但我还有另一台设备还没有为nixOS做好准备。在Ubuntu之上的nix在那里工作得很好,但是xmonad找不到有贡献的库。

安装了相关的软件包:

代码语言:javascript
复制
$ nix-env -q | grep xmonad
xmonad-0.13
xmonad-contrib-0.13
xmonad-extras-0.12.1

但是重新编译我的xmonad.hs,它找不到contrib库:

代码语言:javascript
复制
$ 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.

安装了相关文件:

代码语言:javascript
复制
$ 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包注册表中:

代码语言:javascript
复制
$ 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)就能很好地工作:

代码语言:javascript
复制
$ /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版本也无法找到库:

代码语言:javascript
复制
$ /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,然后运行它来解决这个问题。但这有点老生常谈,当然不应该是必要的?

EN

回答 1

Stack Overflow用户

发布于 2017-06-28 02:51:19

一位朋友在线下为我解决了这个问题,我在这里为其他有同样问题的人重现了这个问题。

本质上,我们需要使用xmonad和包,并列出包,而不是ghc和包。

为了实现这一点,我们提供了我们自己的xmonad,从~/.nixpkgs/config.nix中引用

代码语言:javascript
复制
{
  packageOverrides = pkgs_: with pkgs_; {
    xmonad            = import ./xmonad { nixpkgs = pkgs_; };
  };
}

并这样填写~/.nixpkgs/xmonad/default.nix

代码语言:javascript
复制
{ nixpkgs ? import <nixpkgs> {} }:

nixpkgs.xmonad-with-packages.override {
  packages = hPkgs: with hPkgs; [ xmonad-contrib ];
}

它安装了一个xmonad,它知道在哪里可以找到它的库,一切都很好!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44778404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档