Darktile is a GPU rendered terminal emulator designed for tiling window managers.

Darktile

Darktile is a GPU rendered terminal emulator designed for tiling window managers.

Demo

Features

  • GPU rendering
  • Unicode support
  • Variety of themes available (or build your own!)
  • Compiled-in powerline font
  • Works with your favourite monospaced TTF/OTF fonts
  • Font ligatures (turn it off if you're not a ligature fan)
  • Hints: Context-aware overlays e.g. hex colour viewer, octal permission annotation
  • Take screenshots with a single key-binding
  • Sixels
  • Window transparency (0-100%)
  • Customisable cursor (most popular image formats supported)

Installation

Install dependencies:

  • xorg-dev
  • libgl1-mesa-dev

Grab a binary from the latest release, chmod +x it and place it in your $PATH.

If you're too lazy to do the above and you like to live life on the edge, you can pipe this script to sudo:

curl -s "https://raw.githubusercontent.com/liamg/darktile/main/scripts/install.sh" | sudo bash

Configuration

Configuration files should be created in $XDG_CONFIG_HOME/darktile/ if the variable is defined, otherwise in $HOME/.config/darktile/.

If you wish, you can create an example config file as a starting point using darktile --rewrite-config.

Darktile will use sensible defaults if no config/theme files are available. The same applies when you omit settings from config/theme files, meaning it is perfectly valid to start with empty config/theme files and add to them as required to override the default behaviour.

Config File

Found in the config directory (see above) inside config.yaml.

opacity: 1.0       # Window opacity: 0.0 is fully transparent, 1.0 is fully opaque
font:
  family: ""       # Font family. Find possible values for this by running 'darktile list-fonts'
  size: 16         # Font size
  dpi: 72          # DPI
  ligatures: true  # Enable font ligatures e.g. render '≡' instead of '==='
cursor:
  image: ""        # Path to an image to render as your cursor (defaults to standard rectangular cursor)

Example Theme

Found in the config directory (see above) inside theme.yaml. You can replace this file with a symlink or any theme file from darktile-themes.

black: '#1d1f21'
red: '#cc6666'
green: '#b5bd68'
yellow: '#f0c674'
blue: '#81a2be'
magenta: '#b294bb'
cyan: '#8abeb7'
white: '#c5c8c6'
brightblack: '#666666'
brightred: '#d54e53'
brightgreen: '#b9ca4a'
brightyellow: '#e7c547'
brightblue: '#7aa6da'
brightmagenta: '#c397d8'
brightcyan: '#70c0b1'
brightwhite: '#eaeaea'
background: '#1d1f21'
foreground: '#c5c8c6'
selectionbackground: '#aa8800'
selectionforeground: '#ffffff'
cursorforeground: '#1d1f21'
cursorbackground: '#c5c8c6'

Key Bindings

Action Binding
Copy ctrl + shift + C
Paste ctrl + shift + V
Decrease font size ctrl + -
Increase font size ctrl + =
Take screenshot ctrl + shift + [
Open URL ctrl + click

FAQ

What happened to Aminal?

The name changed as a result of a near-complete rewrite of Aminal. Also, Google's "did you mean animal?" was getting pretty annoying.

Did Darktile drop Windows/OSX support?

While the project likely won't need much work to build on Windows/OSX, the focus is to develop Darktile for tiling window managers under Linux. If you'd like to get Darktile working for other environments, pull requests are always very welcome, especially when preceded by issues/discussion.

Owner
Liam Galvin
Open Source at @aquasecurity
Liam Galvin
Comments
  • Render error: Failed to create window: Failed to create window: VersionUnavailable: GLX: Failed to create context: GLXBadFBConfig

    Render error: Failed to create window: Failed to create window: VersionUnavailable: GLX: Failed to create context: GLXBadFBConfig

    Just tried to run aminal-linux-amd64 from releases, and got:

    1.543406135031648e+09 info aminal/main.go:28 Allocating pty... 1.5434061350458617e+09 info aminal/main.go:56 Creating terminal... 1.5434061356787918e+09 fatal aminal/main.go:64 Render error: Failed to create window: Failed to create window: VersionUnavailable: GLX: Failed to create context: GLXBadFBConfig main.main /go/src/github.com/liamg/aminal/main.go:64 runtime.main /usr/local/go/src/runtime/proc.go:201

    On Fedora 29, xorg+radeon. Is something wrong with my system?

    Thank you.

  • make sure keybindings are configurable

    make sure keybindings are configurable

    Is your feature request related to a problem? Please describe. Every user will have their own keybinding wants and needs.

    Describe the solution you'd like Minimum: ability to configure key bindings in a config file, using AutoHotKey's syntax would be familiar to some of this. Would be nice to configure these through a GUI, PyCharm and the other JetBrains editors have done this really nicely and if we could mimic their methods, that would be fantastic.

    Describe alternatives you've considered I'd use AutoHotKey to work around stuff, but that becomes trickier if the keybindings Aminal has chosen don't line up with those of other Windows apps that I'm working around.

    Additional context See the following tickets that rely on keybindings which would need to be configurable: https://github.com/liamg/aminal/issues/196 https://github.com/liamg/aminal/issues/217 https://github.com/liamg/aminal/issues/195

  • Implementation of the vertical scrollbar

    Implementation of the vertical scrollbar

    Description

    This PR adds a vertical scrollbar to the Aminal window. Also, there is a new configuration parameter, show_vertical_scrollbar, which is true by default. The scrollbar supports common functions:

    • clicking on top and bottom arrows scrolls one line up or down, correspondingly
    • clicking on space between the thumb and top or bottom arrows scrolls one page up or down, correspondingly
    • dragging the thumb with the left mouse button scrolls the screen

    Notes

    • On hi-res displays it should scale accordingly (but needs to test because I don't have one).
    • Also this PR changes Travis settings so that now gofmt checks are performed for Go1.11.x (most recent version) builds.

    Fixes #89 and #154

    Type of change

    • [X] New feature (non-breaking change which adds functionality)
  • Support iTerm2 Proprietary Escape Codes

    Support iTerm2 Proprietary Escape Codes

    Describe the bug On running aminal, i recieve the following error:

    1.540306868124171e+09   error   terminal/output.go:96   Error handling escape sequence: Unknown OSC control sequence: 1;../liamg/aminal
    github.com/liamg/aminal/terminal.(*Terminal).processInput
    

    To Reproduce Steps to reproduce the behavior:

    1. run ./aminal
    2. See error

    Expected behavior There should be no errors on running

    Environment (please complete the following information):

    • macOS Mojave 10.14
    • go version go1.11 darwin/amd64
  • ctrl+C not working well with lots of output

    ctrl+C not working well with lots of output

    Describe the bug ctrl+C often does not interrupt a long running command that produces output

    To Reproduce Steps to reproduce the behavior:

    1. SSH to a box. Boxes that are further away (e.g. across an Ocean, ~100ms) will make this more obvious
    2. Run a command that generates a lot of output (ls -l a directory with many files, cat a file, etc.)
    3. Type Ctrl+C
    4. Observe that it does not quickly stop printing output. (Compare with something like putty)

    Expected behavior Pressing ctrl+C should interrupt the output

  • Please support

    Please support "real" buffer clearing, bound to a key, on Windows

    Is your feature request related to a problem? Please describe. A really valuable feature for me on macOS Terminal is using Apple-k to clear the terminal and its scrollback buffer. This is particularly helpful for repeated runs of commands that generate a lot of output, to avoid getting confused between the output of two or more runs.

    Describe the solution you'd like Windows-k (but configurably bound) to totally clear the window and buffer and leave me with a fresh prompt.

    Describe alternatives you've considered

    None, really.

    Additional context

    None.

  • Should send 0x7f instead of 0x08 for backspace (in some cases)

    Should send 0x7f instead of 0x08 for backspace (in some cases)

    Describe the bug

    Backspace doesn't work when zsh is in use.

    To Reproduce Steps to reproduce the behavior:

    1. Run aminal with the shell set to zsh.
    2. Type some text.
    3. Hit backspace.
    4. Text is not removed.
    5. Close aminal.
    6. Run aminal with the shell set to bash.
    7. Type some text.
    8. Hit backspace.
    9. Text is removed.

    Backspace in zsh works fine with gnome-terminal on the same machine.

    Expected behavior

    Text to should be removed when backspace is used with zsh.

    Environment (please complete the following information):

    • OS + Version: Ubuntu 16.04
    • Go Version - 1.11.5
    • Shell - zsh 5.1.1

    Logs

    aminal --debug produces logs but there are no logs generated when backspace is pressed.

  • Add another workaround for darwin SDL blank window bug

    Add another workaround for darwin SDL blank window bug

    Pull Request Template

    Description

    As for me it's much better then moving window at one pixel

    (Based on the https://github.com/Noofbiz/glfwMojaveFix)

    Fixes #108

    Type of change

    Please delete options that are not relevant.

    • [x] Bug fix (non-breaking change which fixes an issue)

    How Has This Been Tested?

    Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration

    • [x] Run aminal look at window content it should be appeared istead of black screen

    Test Configuration:

    • OS: macOS
    • OS version: 10.14.1
    • Go version: 1.11.2

    Checklist:

    • [x] My code follows the style guidelines of this project
    • [x] I have performed a self-review of my own code
    • [x] I have commented my code, particularly in hard-to-understand areas
    • [ ] I have made corresponding changes to the documentation
    • [ ] My changes generate no new warnings
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [x] New and existing unit tests pass locally with my changes
    • [ ] Any dependent changes have been merged and published in downstream modules
  • fix data races (#230)

    fix data races (#230)

    Description

    Prevents data races and does better cursor rendering on fast input (#223)

    Fixes # 230

    Type of change

    • [ ] Bug fix (non-breaking change which fixes an issue)

    How Has This Been Tested?

    Go's race detector will show the races in question. Run go test -race -v . in the root of the project source. There should be no data races.

    Test Configuration:

    • OS: Ubuntu
    • OS version: 18.04
    • Go version: 1.10.4
  • Vttest

    Vttest

    Pull Request Template

    Description

    Correctly handles most of the screens of vttest test 1

    Fixes #120

    Type of change

    Please delete options that are not relevant.

    • [ ] Bug fix (non-breaking change which fixes an issue)

    How Has This Been Tested?

    Run vttest. Run test 1 (cursor movements)

    Test Configuration:

    • OS: Ubuntu
    • OS version: 18.04
    • Go version: 1.11

    Checklist:

    • [ ] My code follows the style guidelines of this project
    • [ ] I have performed a self-review of my own code
    • [ ] I have commented my code, particularly in hard-to-understand areas
    • [ ] My changes generate no new warnings
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] New and existing unit tests pass locally with my changes
  • #217 rectangular select and copy

    #217 rectangular select and copy

    Description

    Pressing 'Alt' would make the selection region rectangular

    Fixes # 217

    Type of change

    • [ ] New feature (non-breaking change which adds functionality)

    How Has This Been Tested?

    Start selection with mouse. Press left 'Alt'. The selection region becomes rectangular

    Test Configuration:

    • OS: Windows
    • OS version: 1809
    • Go version: 1.10.4
  • Build fails on 32 bit architectures

    Build fails on 32 bit architectures

    When attempting to update darktile from 0.0.10 to 0.0.11, I discovered that it could no longer be built on 32 bit architectures. You can see the build failures in this PR: https://github.com/void-linux/void-packages/pull/37096. I couldn't actually determine where the error is coming from, and none of the code changes in between the versions seem like they'd cause the failure.

  • Special (Pos1, End, others) keys not working

    Special (Pos1, End, others) keys not working

    They Pos1 and End keys are not working. I would expect them to jump to the beginning and end of the line as any other terminal. Also common key combinations like Ctrl+d are missing

  • CVE-2022-24130 crashes darktile

    CVE-2022-24130 crashes darktile

    As reported by @dankamongmen here: https://nvd.nist.gov/vuln/detail/CVE-2022-24130 , a large repeat count within a sixel sequence can cause a crash, either from buffer under/overflow or out of memory. darktile version 0.0.10 instantly hangs trying to allocate memory until the oomkiller steps in.

    https://www.openwall.com/lists/oss-security/2022/01/30/3 has a nice test script:

    #!/bin/bash
    printf "\ePq"
    printf "#%hhu;2;%hhu;%hhu;%hhu" 0x41 100 100 100
    printf "#%hhu!%u@" 0x41 0x7fffffff
    printf "#%hhu!%u@" 0x41 0x7fffffff
    printf "\e\\"
    

    Some additional discussion with other terminals is here: https://gitlab.com/klamonte/jexer/-/issues/105

  • Crashes on high sixel output

    Crashes on high sixel output

    On the 0.0.10 release binary, cat'ing https://jexer.sourceforge.io/sixel/sixel_6x13.cap caused darktile to crash. There are a few sixel tests on that page at different resolutions, and also some sixels with transparency if you would like to test that.

    I also saw a pegged CPU and unresponsive output when trying an animation. I loaded up flame.gif, it ran for a bit, but then CPU started spiking and I eventually had to kill it from another terminal. Here is what it was supposed to behave like.

Windows API to hide console window by golang

Doge-Hide windows API to hide console window by golang ShowWindow ShowWindowAsy

Nov 7, 2022
A simple single-file executable to pull a git-ssh repository and serve the web app found to a self-contained browser window

go-git-serve A simple single-file executable to pull a git-ssh repository (using go-git library) and serve the web app found to a self-contained brows

Jan 19, 2022
Mimic - a eBPF virtual machine and emulator which runs in userspace

Mimic is a eBPF virtual machine and emulator which runs in userspace. Mimic attempts to 'mimic' the eBPF machinery we find in the Linux kernel, as well as other possible implementation/environments.

Dec 6, 2022
Stonks is a terminal based stock visualizer and tracker that displays realtime stocks in graph format in a terminal.
Stonks is a terminal based stock visualizer and tracker that displays realtime stocks in graph format in a terminal.

Stonks is a terminal based stock visualizer and tracker. Installation Requirements: golang >= 1.13 Manual Clone the repo Run make && make install Pack

Dec 16, 2022
Brigodier is a command parser & dispatcher, designed and developed for command lines such as for Discord bots or Minecraft chat commands. It is a complete port from Mojang's "brigadier" into Go.

brigodier Brigodier is a command parser & dispatcher, designed and developed to provide a simple and flexible command framework. It can be used in man

Dec 15, 2022
Another Go shellcode loader designed to work with Cobalt Strike raw binary payload.
Another Go shellcode loader designed to work with Cobalt Strike raw binary payload.

Bankai Another Go shellcode loader designed to work with Cobalt Strike raw binary payload. I created this project to mainly educate myself learning Go

Dec 29, 2022
The simple and easy-to-use program designed to watch user activity for Cloud Providers.

Cloud Agent The simple and easy-to-use program is designed to watch user activity and possible orphan clusters for Cloud Providers: Gardener GCP (work

Jun 6, 2022
Terminal client for SimpleNote

GoNote - Terminal client for SimpleNote GoNote is a simple utility for managing notes in your SimpleNote account. It allows basic operations like crea

Nov 22, 2022
gomerge is a tool to quickly bulk merge several pull requests from your terminal.
gomerge is a tool to quickly bulk merge several pull requests from your terminal.

Gomerge is a tool to quickly enable you to bulk merge Github pull requests from your terminal. The intention of this tool is to simplfy, and eventually automate the merging of github pull requests. This tool should be able to run on most systems.

Dec 28, 2022
`tmax` is a powerful tool to help you get terminal cmd directly.
`tmax`  is a powerful tool to help you get terminal cmd directly.

The positioning of tmax is a command line tool with a little artificial intelligence. If you frequently deal with the terminal daily, tmax will greatly improve your work efficiency.

Oct 15, 2022
YouTube client on your terminal

MeowTube YouTube client on your terminal Table of Contents About Getting Started Usage Contributing About MeowTube is a CLI (Command Line Interface) t

Jul 29, 2022
🎄 A Christmas tree right from your terminal!
🎄 A Christmas tree right from your terminal!

ctree ?? A Christmas tree right from your terminal! ?? Demo ⌛ No Refresh Don't want the tree to refresh every 2 seconds? Easy! Just add the --no-refre

Dec 20, 2022
progress_bar creates a single customizable progress bar for Linux terminal.
progress_bar creates a single customizable progress bar for Linux terminal.

progress_bar Go Progress Bar Features progress_bar creates a single customizable progress bar for Linux terminal. Installation go get -u github.com/er

Aug 12, 2022
A terminal based typing test.
A terminal based typing test.

What A terminal based typing test. Installation Linux sudo curl -L https://github.com/lemnos/tt/releases/download/v0.4.0/tt-linux -o /usr/local/bin/tt

Dec 28, 2022
Raspberry Pi terminal based activity monitor
Raspberry Pi terminal based activity monitor

pitop Raspberry Pi terminal based activity monitor Yes I know there are plenty of solutions already available, but I wanted to build my own terminal b

Dec 11, 2022
❓🖼 Find the anime scene by image using your terminal
❓🖼 Find the anime scene by image using your terminal

What Anime CLI ❓ ?? > This application is basically a ?? wrapper around trace.moe PREVIEW Usage ?? Get Anime By Image File ?? what-anime file anime.jp

Jan 2, 2023
Terminal stock ticker with live updates and position tracking
Terminal stock ticker with live updates and position tracking

Ticker Terminal stock watcher and stock position tracker Features Live stock price quotes Track value of your stock positions Support for multiple cos

Jan 8, 2023
lazyhub - Terminal UI Client for GitHub using gocui.
lazyhub - Terminal UI Client for GitHub using gocui.

lazyhub - Terminal UI Client for GitHub using gocui.

Dec 14, 2022
A modern and intuitive terminal-based text editor
A modern and intuitive terminal-based text editor

micro is a terminal-based text editor that aims to be easy to use and intuitive, while also taking advantage of the capabilities of modern terminals

Jan 7, 2023