add udev rule to run ldattach
[KenyonWiki.git] / xmobar_on_Debian.mdwn
1 * 20090105 update: I'm running [[Debian]] on my main desktop machine now. Here's what I did this time. I was running Ubuntu, and the notes I wrote for that still exist below.
2 * 20100315 update: Probably none of these instructions are necessary anymore, since a recent version of [[!debpkg xmobar]] is in the Debian repositories. Just `sudo aptitude install xmobar` should be sufficient.
3
4 How to install [[!hackage xmobar]] on Debian.
5
6 I already had [[!debpkg zlib1g-dev]] and [[!debpkg libxft-dev]] installed. zlib1g-dev would be pulled in by [[!debpkg libghc6-zlib-dev]] anyway. Also already used aptitude to install [[!debpkg xmonad]], so that might have pulled in some dependencies necessary for the following steps.
7
8 [[!toc levels=2]]
9
10 ## Debian instructions
11
12 ### stm
13 1. `sudo aptitude install libghc6-stm-dev` # dependency of xmobar
14
15 ### cabal
16 Since Debian sid doesn't have the Haskell X11-xft package, I want to install it with cabal-install, which Debian also does not have.
17
18 1. `darcs get --partial http://darcs.haskell.org/cabal-branches/cabal-1.6/` # (Per <http://www.haskell.org/cabal/code.html>.) Due to [cabal-install's](http://hackage.haskell.org/trac/hackage/wiki/CabalInstall) dependence on Cabal >=1.6 && <1.7, but Debian sid has Cabal-1.2.3.0 at the moment, which is part of [[!debpkg ghc6]].
19 1. `cd cabal-1.6`
20 1. `ghc --make Setup && ./Setup configure --user && ./Setup build && ./Setup install`
21 1. `cd ..`
22
23 ### HTTP and zlib
24 [[!hackage HTTP]] and [[!hackage zlib]] are dependencies of cabal-install.
25
26 1. `sudo aptitude install libghc6-http-dev libghc6-zlib-dev` # pulls in [[!debpkg libghc6-network-dev]] and [[!debpkg libghc6-parsec-dev]]
27
28 Debian squeeze currently doesn't have the required version of [[!debpkg libghc6-http-dev]], so following <http://projects.haskell.org/http/> (or what used to be there):
29
30 1. `git clone git://code.galois.com/HTTPbis.git`
31 1. `runhaskell Setup configure --user && runhaskell Setup build && runhaskell Setup install`
32
33 ### cabal-install
34 1. `darcs get --partial http://darcs.haskell.org/cabal-install/`
35 1. `cd cabal-install`
36 1. `runhaskell Setup configure --user && runhaskell Setup build && runhaskell Setup install`
37 1. `cd ..`
38
39 cabal binary is now installed as `~/.cabal/bin/cabal`. I've added `~/.cabal/bin` to my `PATH`.
40
41 ### X11-xft
42 1. `cabal update`
43 1. `cabal install X11-xft`
44
45 ### xmobar
46 1. `darcs get --partial http://code.haskell.org/xmobar/`
47 1. `cd xmobar`
48 1. `runhaskell Setup configure --user --flags="with_xft" && runhaskell Setup build && runhaskell Setup install`
49
50 Now the xmobar binary is installed as `~/.cabal/bin/xmobar`.
51
52 At first, `Setup configure` could not find [[!hackage X11-xft]], even though ghc-pkg list showed X11-xft as being installed in my home directory. This was because I forgot the "`--user`" option to `Setup configure`.
53
54 ### Notes
55 * [PROTIP](http://ohinternet.com/PROTIP): After doing any `runhaskell Setup configure --user && runhaskell Setup build && runhaskell Setup install`, that package is registered under ~/.ghc and visible to ghc-pkg. If you `rm -rf ~/.cabal` without ghc-pkg unregistering the package, then subsequent builds will fail.
56 * runhaskell is equivalent to runghc. I suppose runhaskell is more generic, so that compilers other than ghc can be run.
57 * [Haskell Package Version Tracker](http://people.debian.org/~nomeata/hackagevsdebian.html) - Debian versus Hackage
58 * I had to add `lowerOnStart = True` to my xmobarrc to get it to work this time. Otherwise it's the same as shown at the bottom of this page.
59
60 ----------
61
62 ## Old Ubuntu instructions
63
64 (December 2008) I use [xmonad](http://xmonad.org/) on [[Ubuntu]]. I use the [[!hackage xmobar]] status bar with it. Ubuntu doesn't have a package for xmobar, nor for many of its dependencies. So to build xmobar I had to build and install a bunch of dependencies. Also, in order to make installing Haskell packages easier, I installed [[!haskellwiki cabal-install]], which had its own dependencies.
65
66 ### Dependencies with Ubuntu packages
67 First some dependencies can be installed using aptitude. These are [[!ubupkg libxft-dev]] (for [[!wikipedia xft]] support in xmobar), and [[!ubupkg zlib1g-dev]] for building cabal-install.
68
69 ### Building cabal-install dependencies
70 Building [[!hackage parsec]], [[!hackage stm]], [[!hackage network]], [[!hackage http]], and [[!hackage zlib]] should now work with the command `runhaskell Setup configure --user && runhaskell Setup build && runhaskell Setup install` for each. Or you could use the bootstrap.sh included with cabal-install.
71
72 I think those are all of the dependencies.
73
74 ### Building cabal-install
75 Now cabal-install should install into your home directory with the standard Haskell configure, build, and install commands:
76
77     runhaskell Setup configure --user && runhaskell Setup build && runhaskell Setup install
78
79 ### Installing X11-xft
80 With cabal installed, a simple `cabal install X11-xft` should work.
81
82 ### Building xmobar
83 Finally, I was able to build xmobar. I'm using the version pulled directly from the [[!haskellwiki darcs]] repository.
84
85 ### xmobar.config
86 Here is my `~/.xmonad/xmobar.config`:
87
88     Config { font = "-*-fixed-medium-r-normal-*-13-*-*-*-*-*-*-*"
89            , bgColor = "black"
90            , fgColor = "grey"
91            , position = TopW L 90
92            , commands = [ Run Weather "KNKX" ["-t","<station>: <tempC>C","-L","18","-H","25","--normal","green","--high","red","--low","lightblue"] 36000
93                         , Run Network "eth0" ["-L","0","-H","32","--normal","green","--high","red"] 10
94                         , Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
95                         , Run Memory ["-t","Mem: <usedratio>%"] 10
96                         , Run Swap [] 10
97                         , Run Com "uname" ["-s","-r"] "" 36000
98                         , Run Date "%a %b %_d %Y %H:%M:%S" "date" 10
99                         , Run StdinReader
100                         ]
101            , sepChar = "%"
102            , alignSep = "}{"
103            , template = "%StdinReader% }{ %cpu% | %memory% * %swap% | %eth0% <fc=#ee9a00>%date%</fc>| %KNKX% | %uname%"
104            }
105
106 ### External links
107 * This blog post was helpful: <http://gimbo.org.uk/blog/2007/04/27/haskell-packages-gotcha-global-vs-per-user-package-databases/>
108 * Help make Ubuntu packages for Haskell stuff: <https://wiki.ubuntu.com/MOTU/Teams/UncommonProgrammingLanguages/Haskell>
109 * This thread helped figure out why zlib wasn't building: <http://www.nabble.com/zlib,-missing-zlib.h-td17547823.html>
110
111 [[!tag Ubuntu Debian]]