termonad

Terminal emulator configurable in Haskell

https://github.com/cdepillabout/termonad

Version on this page:0.2.0.0
LTS Haskell 22.14:4.5.0.0
Stackage Nightly 2024-03-28:4.6.0.0
Latest on Hackage:4.6.0.0

See all snapshots termonad appears in

BSD-3-Clause licensed by Dennis Gosnell
Maintained by [email protected]
This version can be pinned in stack with:termonad-0.2.0.0@sha256:d701e3c7ebddb6da46ab597099fd77048609346f03d4e165a58ae004b87297c3,5014

Termonad

Build Status Hackage Stackage LTS Stackage Nightly BSD3 license

Termonad is a terminal emulator configurable in Haskell. It is extremely customizable and provides hooks to modify the default behavior. It can be thought of as the “XMonad” of terminal emulators.

Table of Contents

Installation

Termonad can be able to be installed on any system as long as the necessary GTK libraries are installed. The following lists instructions for a few distributions. If the given steps don’t work for you, or you want to add instructions for an additional distribution, please send a pull request.

The following steps use the stack build tool to build Termonad, but cabal can be used as well. If cabal doesn’t work for you, please open an issue or send a pull request.

Arch Linux

First, you must install the required GTK system libraries:

$ pacman -S vte3

You must have stack to be able to build Termonad. Steps for installing stack can be found on this page.

In order to install Termonad, clone this repository and run stack install. This will install the termonad binary to ~/.local/bin/:

$ git clone https://github.com/cdepillabout/termonad
$ cd termonad/
$ stack install

Ubuntu / Debian

First, you must install the required GTK system libraries:

$ apt-get install gobject-introspection libgirepository1.0-dev libgtk-3-dev libvte-2.91-dev

You must have stack to be able to build Termonad. Steps for installing stack can be found on this page.

In order to install Termonad, clone this repository and run stack install. This will install the termonad binary to ~/.local/bin/:

$ git clone https://github.com/cdepillabout/termonad
$ cd termonad/
$ stack install

NixOS

There are two methods to build Termonad on NixOS.

The first is using stack. The following commands install stack for your user, clone this repository, and install the termonad binary to ~/.local/bin/:

$ nix-env -i stack
$ git clone https://github.com/cdepillabout/termonad
$ cd termonad/
$ stack --nix install

The second is using the normal nix-build machinery. The following commands clone this repository and build the termonad binary at ./result/bin/:

$ git clone https://github.com/cdepillabout/termonad
$ cd termonad/
$ nix-build

How to use Termonad

Termonad is similar to XMonad. The above steps will install a termonad binary somewhere on your system. If you have installed Termonad using stack, the termonad binary will be in ~/.local/bin/. This binary is a version of Termonad configured with default settings. You can try running it to get an idea of what Termonad is like:

$ ~/.local/bin/termonad

If you would like to configure termonad with your own settings, first you will need to create a Haskell file called ~/.config/termonad/termonad.hs. The next section gives an example configuration file.

If this file exists, when the ~/.local/bin/termonad binary launches, it will try to compile it. If it succeeds, it will create a separate binary file called something like ~/.cache/termonad/termonad-linux-x86_64. This binary file can be thought of as your own personal Termonad, configured with all your own settings.

When you run ~/.local/bin/termonad, it will re-exec ~/.cache/termonad/termonad-linux-x86_64 if it exists.

However, there is one difficulty with this setup. In order for the ~/.local/bin/termonad binary to be able to compile your ~/.config/termonad/termonad.hs file, it needs to know where GHC is, as well as where all your Haskell packages live. This presents some difficulties that will be discussed in a following section.

Configuring Termonad

The following is an example Termonad configuration file. You should save this to ~/.config/termonad/termonad.hs. You can find more information on the available configuration options within the Termonad.Config module.

{-# LANGUAGE OverloadedStrings #-}

module Main where

import Data.Colour.SRGB (Colour, sRGB24)
import Termonad.App (defaultMain)
import Termonad.Config
  ( FontConfig, ShowScrollbar(ShowScrollbarAlways), cursorColor
  , defaultFontConfig, defaultTMConfig, fontConfig, fontFamily
  , fontSize, showScrollbar
  )

-- | This sets the color of the cursor in the terminal.
--
-- This uses the "Data.Colour" module to define a dark-red color.
-- There are many default colors defined in "Data.Colour.Names".
cursColor :: Colour Double
cursColor = sRGB24 204 0 0

-- | This defines the font for the terminal.
fontConf :: FontConfig
fontConf =
  defaultFontConfig
    { fontFamily = "DejaVu Sans Mono"
    , fontSize = 13
    }

main :: IO ()
main = do
  let termonadConf =
        defaultTMConfig
          { cursorColor = cursColor
          , fontConfig = fontConf
          , showScrollbar = ShowScrollbarAlways
          }
  defaultMain termonadConf

Goals

Maintainers

Changes

0.2.0.0

  • Open dialog asking if you want to quit when you try to use your WM to quit.
  • Termonad will attempt to open up a new terminal in the working directory of the current terminal.
  • Make sure termonad won’t crash if dyre can’t find GHC.
  • Add a few more ways to compile on NixOS.
  • Add an icon for termonad.

0.1.0.0

  • Initial release.