#+title: Compiling xmobar * Getting the source If you don't have =cabal-install= installed, you can get xmobar's source code in a variety of ways: - From [[http://hackage.haskell.org/package/xmobar/][Hackage]]. Just download the latest release from xmobar's hackage page. - From [[http://codeberg.org/xmobar/xmobar/][Codeberg]]. There are also tarballs available for every tagged release on [[https://codeberg.org/xmobar/xmobar/releases][Codeberg's releases page]] - From the bleeding edge repo. If you prefer to live dangerously, just get the latest and greatest (and buggiest, I guess) using git: #+begin_src shell git clone git://codeberg.org/xmobar/xmobar #+end_src * C library dependencies :PROPERTIES: :CUSTOM_ID: c-libraries :END: To build xmobar you will need the Xorg and Pango/Cairo C-libraries and headers installed in your system. In Debian and derivatives that's easily accomplished via #+begin_src shell apt-get install -y xorg-dev libxrandr-dev libpango1.0-dev #+end_src and, optionally, in order to be able to build all available extensions and plugins: #+begin_src shell apt-get install -y libasound2-dev libxpm-dev libmpd-dev #+end_src * Compilation using cabal If you have cabal installed, you can now use it from within xmobar's source tree: #+begin_src shell cabal install --flags="all_extensions" #+end_src * Compilation using stack There is also a =stack.yaml= file that will allow you to install the xmobar executable with #+begin_src shell stack install #+end_src See the =stack.yaml= file for the enabled extensions. You can also pass them to =stack= directly: #+begin_src shell stack install --flag xmobar:all_extensions #+end_src * Compilation flags :PROPERTIES: :CUSTOM_ID: optional-features :END: You can configure xmobar to include some optional plugins and features, which are not compiled by default. To that end, you need to add one or more flags to either the cabal install command or the configure setup step. Extensions need additional Haskell packages (listed below) that will be automatically downloaded and installed if you're using cabal install. Otherwise, you'll need to install them yourself. ** Optional features - =with_dbus= Enables support for DBUS by making xmobar to publish a service on the session bus. Requires the [[http://hackage.haskell.org/package/dbus][dbus]] package. - =with_threaded= Uses GHC's threaded runtime. Use this option if xmobar enters a high-CPU regime right after starting. - =with_xrender= Enables the main bar background alpha parameter. Requires the [[http://hackage.haskell.org/package/X11-xft/][X11-xft]] package. The Xrender extension is not compatible with 10-bit colour modes, i.e., setting ~DefaultDepth~ to 30 in your Xorg configuration. See discussion in [[https://codeberg.org/xmobar/xmobar/issues/651][issue 651]] for details. - =with_xpm= Support for xpm image file format. This will allow loading .xpm files in ==. Requires the [[http://cgit.freedesktop.org/xorg/lib/libXpm][libXpm]] C library. ** Optional plugins The following plugins and monitors are optional. You can enable them all at once using the flag ~all_extensions~, or one by one with the following flags: - =with_mpd= Enables support for the [[http://mpd.wikia.com/][MPD]] daemon. Requires the [[http://hackage.haskell.org/package/libmpd/][libmpd]] package. - =with_mpris= Enables support for MPRIS v1/v2 protocol used by the plugins of the same name. Requires the [[http://hackage.haskell.org/package/dbus][dbus]] and [[http://hackage.haskell.org/package/text][text]] packages. - =with_inotify= Support for inotify in modern Linux kernels. This option is needed for the ~MBox~ and ~Mail~ plugins to work. Requires the [[http://hackage.haskell.org/package/hinotify/][hinotify]] package. - =with_nl80211= Support for wireless cards on Linux via nl80211 (all upstream drivers). Enables the ~Wireless~ plugin. Requires [[http://hackage.haskell.org/package/netlink][netlink]] and [[http://hackage.haskell.org/package/cereal/][cereal]] packages. - =with_alsa= Support for ALSA sound cards. Enables the Volume plugin. Requires the [[http://hackage.haskell.org/package/alsa-mixer][alsa-mixer]] package. To install the latter, you'll need the [[http://packages.debian.org/stable/libasound2-dev][libasound]] C library and headers in your system (e.g., install =libasound2-dev= in Debian-based systems). - =with_datezone= Support for other timezones. Enables the DateZone plugin. Requires [[http://hackage.haskell.org/package/timezone-olson][timezone-olson]] and [[http://hackage.haskell.org/package/timezone-series][timezone-series]] package. - =with_weather= Support to display weather information. Enables Weather plugin. Finally, the following flags enable plugins not included by ~all_extensions~: - =with_uvmeter= Enables the ~UVMeter~ plugin. The plugin shows UV data for Australia. - =with_kraken= Enables the ~Kraken~ plugin. - =with_iwlib= Support for wireless cards via Wext ioctls (deprecated). Enables the ~Wireless~ plugin. You will need the [[http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html][iwlib]] C library and headers in your system (e.g., install =libiw-dev= in Debian-based systems or =wireless_tools= on Arch Linux). Conflicts with =with_nl80211=.