2017-06-27 32 views
3

我想在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並運行它,解決此問題。但是這有點不好意思,肯定不需要?

+0

是不是你的配置中特別的'xmonad.hs'部分,因此應該在nix中(從配置管理的角度來看)進行編譯? – Zeta

+0

我自己並不是xmonad用戶,但是這裏是在NixOS上@Ptival的xmonad配置文件:https://github.com/Ptival/config/blob/master/xmonad.nix –

+0

可能xmonad.hs會更好地管理「在nix之內」,但我還沒有能力實現這個目標,並且如nixOS所示,應該可以選擇不運行,但仍然可以運行(不管它是否明智)。 – user3416536

回答

1

一位朋友爲我脫機解決了這個問題,我在這裏爲其他人解決了同樣的問題。基本上,我們需要使用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在哪裏可以找到它的庫,一切都很好!