2017-06-27 6 views
3

J'essaie d'utiliser nix sur Ubuntu, avec XMonad en tant que mon gestionnaire de fenêtres. J'ai ceci fonctionne bien sur un hôte utilisant nixOS, mais j'ai un deuxième appareil qui n'est pas encore prêt pour nixOS. nix sur Ubuntu fonctionne généralement bien là-bas, mais xmonad ne peut pas trouver de bibliothèques contributives.XMonad sur Nix - ne peut pas trouver xmonad-contrib

Les paquets concernés sont installés:

$ nix-env -q | grep xmonad 
xmonad-0.13 
xmonad-contrib-0.13 
xmonad-extras-0.12.1 

Mais recompiler mes xmonad.hs, il ne peut pas trouver les contrib libs:

$ 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. 

Les fichiers concernés sont installés:

$ 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 

En ajoutant xmonad-contrib à mon config.nix de nixpkgs, j'ai ajouté ces libs au paquet ghc reg tère:

$ 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 
$ 

avec cela, ce GHC (i) fonctionne bien:

$ /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 ... 

Mais la version de xmonad dans ce répertoire ne peut pas trouver les libs:

$ /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. 

je peux contournez ceci en compilant en utilisant le ghc comme ci-dessus, et en déplaçant la sortie à la main vers ~/.xmonad/xmonad-x86_64-linux, et en l'exécutant. Mais c'est un petit peu hacky, et ne devrait sûrement pas être nécessaire?

+0

Ce n'est pas une partie spécifique de votre configuration 'xmonad.hs' qui devrait donc être compilée" dans "nix (du point de vue de la gestion de la configuration)? – Zeta

+0

Je ne suis pas un utilisateur xmonad moi-même mais voici le fichier de configuration xmonad de @Ptival sur NixOS: https://github.com/Ptival/config/blob/master/xmonad.nix –

+0

Peut-être que xmonad.hs serait mieux géré "dedans" nix, mais je ne suis pas encore compétent pour y parvenir, et comme montré avec nixOS, il devrait être possible de choisir de ne pas travailler mais encore travailler (que ce soit sage ou non). – user3416536

Répondre

1

Un ami a résolu ceci pour moi hors ligne, je le reproduis ici pour d'autres avec le même problème. Essentiellement, nous devons utiliser xmonad-with-packages et lister les paquets plutôt que ghc-with-packages.

Pour ce faire, nous fournissons notre propre xmonad, référencés dans ~/.nixpkgs/config.nix:

{ 
    packageOverrides = pkgs_: with pkgs_; { 
    xmonad   = import ./xmonad { nixpkgs = pkgs_; }; 
    }; 
} 

et remplir ~/.nixpkgs/xmonad/default.nix ainsi:

{ nixpkgs ? import <nixpkgs> {} }: 

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

Cela installe un xmonad qui sait où trouver ses bibliothèques et tout va bien!