157 lines
4.2 KiB
Text
157 lines
4.2 KiB
Text
$TAKO_SETTINGS.show_traceback = True
|
|
$TAKO_SETTINGS.traceback_logfile = $HOME + '/tmp/tako.log'
|
|
|
|
import datetime
|
|
import re
|
|
import os
|
|
import os.path
|
|
|
|
def source_many(directory, predicate):
|
|
for filename in os.listdir(directory):
|
|
if not predicate(filename): continue
|
|
source @(os.path.join(directory, filename))
|
|
|
|
is_tako = (lambda re: lambda filename: re.match('^.*\.tako$', filename))(re)
|
|
source_many('/etc/profile.d', is_tako)
|
|
source_many($HOME + '/.config/tako/completers', is_tako)
|
|
|
|
$TAKO_SETTINGS.auto_pushd = True
|
|
|
|
$XDG_CONFIG_HOME = $HOME + '/.config'
|
|
$EDITOR = 'nvim'
|
|
$VISUAL = $EDITOR
|
|
|
|
for t in [
|
|
'termite',
|
|
'urxvt',
|
|
'xterm',
|
|
]:
|
|
if ?(which @(t)):
|
|
$TERMINAL = t
|
|
break
|
|
|
|
for path in [
|
|
$HOME + '/bin',
|
|
$HOME + '/.local/bin',
|
|
]:
|
|
if path not in $PATH:
|
|
$PATH.insert(0, path)
|
|
|
|
$LS_COLORS = $(dircolors @($HOME + '/.config/zsh/dircolors.256dark'))[len("LS_COLORS='"):-len("';\nexport LS_COLORS")]
|
|
|
|
def _sympy(args, stdin=None):
|
|
source @($HOME + '/.config/tako/sympy.tako')
|
|
|
|
def _reminder(args, stdin=None):
|
|
time, text = args
|
|
command = 'notify-send {} {}'.format(time, repr(text))
|
|
filename = $(mktemp)
|
|
with open(filename, 'w') as f: f.write(command)
|
|
at -M @(time) -f @(filename) all> /dev/null
|
|
atq
|
|
rm @(filename)
|
|
|
|
def _screenshot(args, stdin=None):
|
|
if not args:
|
|
timestamp = datetime.datetime.now().isoformat()
|
|
fname = '{}/images/screenshots/{}.png'.format($HOME, timestamp)
|
|
args = [fname]
|
|
print('Saving to {}'.format(fname))
|
|
|
|
/usr/bin/import @(args)
|
|
|
|
$TAKO_SETTINGS.aliases.update({
|
|
'startx': 'ssh-agent startx ; vlock',
|
|
'ls': 'ls --color=auto',
|
|
'la': 'ls -A',
|
|
'll': 'ls -l',
|
|
'units': 'units --verbose',
|
|
'trr': 'transmission-remote',
|
|
'vol': 'pulseaudio-ctl set',
|
|
'octave': 'octave-cli',
|
|
'bc': 'bc -l',
|
|
'sympy': _sympy,
|
|
'reminder': _reminder,
|
|
'enscript': 'enscript -M Letter',
|
|
'screenshot': _screenshot,
|
|
'g': 'git',
|
|
'rg': 'rg -S',
|
|
})
|
|
|
|
if 'TERM' in ${...}:
|
|
if 'COLORTERM' in ${...} and ('truecolor' in $COLORTERM or '24bit' in $COLORTERM):
|
|
colors = {
|
|
'blue': (95, 215, 255),
|
|
'orange': (215, 95, 0),
|
|
'purple': (175, 95, 255),
|
|
'red': (255, 0, 0),
|
|
'green': (135, 255, 0),
|
|
'gray': (98, 98, 98),
|
|
}
|
|
|
|
def colorize(color, text):
|
|
r, g, b = colors[color]
|
|
prefix = '\x1b[38;2;{};{};{}m'.format(r, g, b)
|
|
suffix = '\x1b[0m'
|
|
return prefix + text + suffix
|
|
|
|
elif '256color' in $TERM:
|
|
colors = {
|
|
'blue': 81,
|
|
'orange': 166,
|
|
'purple': 135,
|
|
'red': 196,
|
|
'green': 118,
|
|
'gray': 241,
|
|
}
|
|
|
|
def colorize(color, text):
|
|
prefix = '{COLOR_' + str(colors[color]) + '}'
|
|
suffix = '{NO_COLOR}'
|
|
return prefix + text + suffix
|
|
else:
|
|
colors = {
|
|
'blue': 'BLUE',
|
|
'orange': 'YELLOW',
|
|
'purple': 'PURPLE',
|
|
'red': 'RED',
|
|
'green': 'GREEN',
|
|
'gray': 'WHITE',
|
|
}
|
|
def colorize(color, text):
|
|
prefix = '{%s}' % colors[color]
|
|
suffix = '{NO_COLOR}'
|
|
return prefix + text + suffix
|
|
|
|
def git_branch():
|
|
import re
|
|
ref=$(git symbolic-ref HEAD err> /dev/null)
|
|
if not ref: return None
|
|
prefix = colorize('gray', ':')
|
|
branch = colorize('orange', re.sub('^refs/heads/', '', ref.strip()))
|
|
return prefix + branch
|
|
|
|
$TAKO_SETTINGS.prompt_fields['git_branch'] = git_branch
|
|
|
|
def make_prompt():
|
|
username = colorize('purple', '{user}')
|
|
host = colorize('blue', '{hostname}')
|
|
directory = colorize('green', '{cwd}')
|
|
lbrkt = colorize('gray', '[')
|
|
rbrkt = colorize('gray', ']')
|
|
colon = colorize('gray', ':')
|
|
|
|
return lbrkt + colon.join([
|
|
username,
|
|
host,
|
|
directory,
|
|
]) + '{git_branch}' + rbrkt + '\n{prompt_end} '
|
|
|
|
$TAKO_SETTINGS.prompt = make_prompt()
|
|
|
|
$TAKO_SETTINGS.case_sensitive_completions = False
|
|
|
|
completer bash enable out> /dev/null
|
|
|
|
if not ?(which bload).returncode:
|
|
bload
|