XMonad on Nix - 无法找到xmonad-contrib
问题描述:
我想在ubuntu上使用nix,并将XMonad作为我的窗口管理器。 我在一台使用nixOS的主机上可以很好地工作,但是我有另一台尚未准备好nixOS的设备。 Ubuntu上的nix大多在那里工作得很好,但xmonad无法找到有贡献的库。XMonad on Nix - 无法找到xmonad-contrib
相关的软件包安装:
$ 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包reg伊士莱:
$ 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并运行它,解决此问题。但是这有点不好意思,肯定不需要?
答
一位朋友为我脱机解决了这个问题,我在这里为其他人解决了同样的问题。基本上,我们需要使用xmonad-with-packages,并列出软件包,而不是ghc-with-packages。
为了实现这一目标,我们提供我们自己的xmonad,从引用内~/.nixpkgs/config.nix
:
{
packageOverrides = pkgs_: with pkgs_; {
xmonad = import ./xmonad { nixpkgs = pkgs_; };
};
}
并由此填写~/.nixpkgs/xmonad/default.nix
:
{ nixpkgs ? import <nixpkgs> {} }:
nixpkgs.xmonad-with-packages.override {
packages = hPkgs: with hPkgs; [ xmonad-contrib ];
}
这将安装知道的xmonad在哪里可以找到它的库,一切都很好!
是不是你的配置中特别的'xmonad.hs'部分,因此应该在nix中(从配置管理的角度来看)进行编译? – Zeta
我自己并不是xmonad用户,但是这里是在NixOS上@Ptival的xmonad配置文件:https://github.com/Ptival/config/blob/master/xmonad.nix –
可能xmonad.hs会更好地管理“在nix之内”,但我还没有能力实现这个目标,并且如nixOS所示,应该可以选择不运行,但仍然可以运行(不管它是否明智)。 – user3416536