Compare commits

..

6 Commits

129 changed files with 9597 additions and 77 deletions

View File

@ -1,22 +1,25 @@
# Alacritty Configuration
# Window settings
[window]
opacity = 1
dynamic_padding = true
dynamic_padding = false
decorations = "Buttonless"
blur = true
title = "Terminal"
decorations_theme_variant = "Dark"
resize_increments = true
resize_increments = false
option_as_alt = "OnlyRight"
[terminal]
shell = "/opt/homebrew/bin/fish"
# Font settings
[font]
normal = { family = "JetBrainsMono Nerd Font", style = "Regular" }
bold = { family = "JetBrainsMono Nerd Font", style = "Bold" }
italic = { family = "JetBrainsMono Nerd Font", style = "Italic" }
size = 16.0
size = 13.0
[font.offset]
x = 0
@ -28,24 +31,24 @@ y = 0
# Cursor settings
[cursor]
style = { shape = "Beam", blinking = "Always" }
style = { shape = "Block", blinking = "Always" }
vi_mode_style = { shape = "Beam", blinking = "Always" }
blink_interval = 500
thickness = 0.3
thickness = 0.1
unfocused_hollow = true
# Colors
[colors.primary]
background = "#080808"
foreground = "#CECECE"
# background = "#090909"
# background = "#ffffff"
foreground = "#ffffff"
[colors.cursor]
text = "#0E1415"
cursor = "#CECECE"
cursor = "#ffffff"
[colors.selection]
text = "#CECECE"
text = "#ffffff"
background = "#DDF0FF"
[colors.normal]
@ -56,7 +59,7 @@ yellow = "#e9bf57"
blue = "#4a88e4"
magenta = "#915caf"
cyan = "#23acdd"
white = "#cecece"
white = "#ffffff"
[colors.bright]
black = "#777777"
@ -66,7 +69,7 @@ yellow = "#f0bf7a"
blue = "#6f8fdb"
magenta = "#e987e9"
cyan = "#4ac9e2"
white = "#FFFFFF"
white = "#F2CECE"
[colors.search]
@ -76,9 +79,8 @@ focused_match.background = "#DDFFDD"
focused_match.foreground = "#bbbbbb"
[colors.vi_mode_cursor]
text = "#0E1415"
cursor = "#CECECE"
text = "#ffffff"
cursor = "#ffffff"
# Padding (to complement dynamic padding)
[window.padding]

1
dmenu Submodule

@ -0,0 +1 @@
Subproject commit 8b48986f4c730725367e2865e5ea24931855018f

38
dwm-6.5/LICENSE Normal file
View File

@ -0,0 +1,38 @@
MIT/X Consortium License
© 2006-2019 Anselm R Garbe <anselm@garbe.ca>
© 2006-2009 Jukka Salmi <jukka at salmi dot ch>
© 2006-2007 Sander van Dijk <a dot h dot vandijk at gmail dot com>
© 2007-2011 Peter Hartlich <sgkkr at hartlich dot com>
© 2007-2009 Szabolcs Nagy <nszabolcs at gmail dot com>
© 2007-2009 Christof Musik <christof at sendfax dot de>
© 2007-2009 Premysl Hruby <dfenze at gmail dot com>
© 2007-2008 Enno Gottox Boland <gottox at s01 dot de>
© 2008 Martin Hurton <martin dot hurton at gmail dot com>
© 2008 Neale Pickett <neale dot woozle dot org>
© 2009 Mate Nagy <mnagy at port70 dot net>
© 2010-2016 Hiltjo Posthuma <hiltjo@codemadness.org>
© 2010-2012 Connor Lane Smith <cls@lubutu.com>
© 2011 Christoph Lohmann <20h@r-36.net>
© 2015-2016 Quentin Rameau <quinq@fifth.space>
© 2015-2016 Eric Pruitt <eric.pruitt@gmail.com>
© 2016-2017 Markus Teich <markus.teich@stusta.mhn.de>
© 2020-2022 Chris Down <chris@chrisdown.name>
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

45
dwm-6.5/Makefile Normal file
View File

@ -0,0 +1,45 @@
# dwm - dynamic window manager
# See LICENSE file for copyright and license details.
include config.mk
SRC = drw.c dwm.c util.c
OBJ = ${SRC:.c=.o}
all: dwm
.c.o:
${CC} -c ${CFLAGS} $<
${OBJ}: config.h config.mk
config.h:
cp config.def.h $@
dwm: ${OBJ}
${CC} -o $@ ${OBJ} ${LDFLAGS}
clean:
rm -f dwm ${OBJ} dwm-${VERSION}.tar.gz
dist: clean
mkdir -p dwm-${VERSION}
cp -R LICENSE Makefile README config.def.h config.mk\
dwm.1 drw.h util.h ${SRC} dwm.png transient.c dwm-${VERSION}
tar -cf dwm-${VERSION}.tar dwm-${VERSION}
gzip dwm-${VERSION}.tar
rm -rf dwm-${VERSION}
install: all
mkdir -p ${DESTDIR}${PREFIX}/bin
cp -f dwm ${DESTDIR}${PREFIX}/bin
chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
mkdir -p ${DESTDIR}${MANPREFIX}/man1
sed "s/VERSION/${VERSION}/g" < dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1
chmod 644 ${DESTDIR}${MANPREFIX}/man1/dwm.1
uninstall:
rm -f ${DESTDIR}${PREFIX}/bin/dwm\
${DESTDIR}${MANPREFIX}/man1/dwm.1
.PHONY: all clean dist install uninstall

48
dwm-6.5/README Normal file
View File

@ -0,0 +1,48 @@
dwm - dynamic window manager
============================
dwm is an extremely fast, small, and dynamic window manager for X.
Requirements
------------
In order to build dwm you need the Xlib header files.
Installation
------------
Edit config.mk to match your local setup (dwm is installed into
the /usr/local namespace by default).
Afterwards enter the following command to build and install dwm (if
necessary as root):
make clean install
Running dwm
-----------
Add the following line to your .xinitrc to start dwm using startx:
exec dwm
In order to connect dwm to a specific display, make sure that
the DISPLAY environment variable is set correctly, e.g.:
DISPLAY=foo.bar:1 exec dwm
(This will start dwm on display :1 of the host foo.bar.)
In order to display status info in the bar, you can do something
like this in your .xinitrc:
while xsetroot -name "`date` `uptime | sed 's/.*,//'`"
do
sleep 1
done &
exec dwm
Configuration
-------------
The configuration of dwm is done by creating a custom config.h
and (re)compiling the source code.

132
dwm-6.5/config.def.h Normal file
View File

@ -0,0 +1,132 @@
/* See LICENSE file for copyright and license details. */
/* appearance */
static const unsigned int borderpx = 1; /* border pixel of windows */
static const unsigned int gappx = 5; /* gaps between windows */
static const unsigned int snap = 32; /* snap pixel */
static const int showbar = 1; /* 0 means no bar */
static const int topbar = 1; /* 0 means bottom bar */
static const int vertpad = 10; /* vertical padding of bar */
static const int sidepad = 10; /* horizontal padding of bar */
static const int vertpad = 10; /* vertical padding of bar */
static const int sidepad = 10; /* horizontal padding of bar */
static const char *fonts[] = { "monospace:size=10" };
static const char dmenufont[] = "monospace:size=10";
static const char col_gray1[] = "#222222";
static const char col_gray2[] = "#444444";
static const char col_gray3[] = "#bbbbbb";
static const char col_gray4[] = "#eeeeee";
static const char col_cyan[] = "#005577";
static const char *colors[][3] = {
/* fg bg border */
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
[SchemeSel] = { col_gray4, col_cyan, col_cyan },
};
/* tagging */
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
/* appicons */
/* NOTE: set to 0 to set to default (whitespace) */
static char outer_separator_beg = '[';
static char outer_separator_end = ']';
static char inner_separator = ' ';
static unsigned truncate_icons_after = 2; /* will default to 1, that is the min */
static char truncate_symbol[] = "...";
static const Rule rules[] = {
/* xprop(1):
* WM_CLASS(STRING) = instance, class
* WM_NAME(STRING) = title
*/
/* class instance title tags mask isfloating monitor appicon*/
{ "Gimp", NULL, NULL, 0, 1, -1, NULL },
{ "Firefox", NULL, NULL, 1 << 8, 0, -1, "󰈹" },
};
/* layout(s) */
static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
static const int nmaster = 1; /* number of clients in master area */
static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
static const Layout layouts[] = {
/* symbol arrange function */
{ "[]=", tile }, /* first entry is default */
{ "><>", NULL }, /* no layout function means floating behavior */
{ "[M]", monocle },
};
/* key definitions */
#define MODKEY Mod1Mask
#define TAGKEYS(KEY,TAG) \
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* commands */
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
static const char *termcmd[] = { "st", NULL };
static const Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
{ MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } },
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
{ MODKEY, XK_Return, zoom, {0} },
{ MODKEY, XK_Tab, view, {0} },
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
{ MODKEY, XK_space, setlayout, {0} },
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
{ MODKEY, XK_0, view, {.ui = ~0 } },
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
{ MODKEY, XK_comma, focusmon, {.i = -1 } },
{ MODKEY, XK_period, focusmon, {.i = +1 } },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
{ MODKEY, XK_minus, setgaps, {.i = -1 } },
{ MODKEY, XK_equal, setgaps, {.i = +1 } },
{ MODKEY|ShiftMask, XK_equal, setgaps, {.i = 0 } },
TAGKEYS( XK_1, 0)
TAGKEYS( XK_2, 1)
TAGKEYS( XK_3, 2)
TAGKEYS( XK_4, 3)
TAGKEYS( XK_5, 4)
TAGKEYS( XK_6, 5)
TAGKEYS( XK_7, 6)
TAGKEYS( XK_8, 7)
TAGKEYS( XK_9, 8)
{ MODKEY|ShiftMask, XK_q, quit, {0} },
};
/* button definitions */
/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
static const Button buttons[] = {
/* click event mask button function argument */
{ ClkLtSymbol, 0, Button1, setlayout, {0} },
{ ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
{ ClkWinTitle, 0, Button2, zoom, {0} },
{ ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
{ ClkTagBar, 0, Button1, view, {0} },
{ ClkTagBar, 0, Button3, toggleview, {0} },
{ ClkTagBar, MODKEY, Button1, tag, {0} },
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
};

10
dwm-6.5/config.def.h.rej Normal file
View File

@ -0,0 +1,10 @@
diff a/config.def.h b/config.def.h (rejected hunks)
@@ -5,6 +5,8 @@ static const unsigned int borderpx = 1;
static const unsigned int snap = 32; /* snap pixel */
static const int showbar = 1; /* 0 means no bar */
static const int topbar = 1; /* 0 means bottom bar */
+static const int vertpad = 10; /* vertical padding of bar */
+static const int sidepad = 10; /* horizontal padding of bar */
static const char *fonts[] = { "monospace:size=10" };
static const char dmenufont[] = "monospace:size=10";
static const char col_gray1[] = "#222222";

103
dwm-6.5/config.h Normal file
View File

@ -0,0 +1,103 @@
/* appearance */
static const unsigned int borderpx = 1; /* border pixel of windows */
static const unsigned int snap = 8; /* snap pixel */
static const int showbar = 1; /* 0 means no bar */
static const int topbar = 0; /* 0 means bottom bar */
static const char *fonts[] = { "monospace:size=10" };
static const char dmenufont[] = "monospace:size=10";
static const char col_gray1[] = "#222222";
static const char col_gray2[] = "#444444";
static const char col_gray3[] = "#bbbbbb";
static const char col_gray4[] = "#eeeeee";
static const char col_cyan[] = "#005577";
static const char col_navy[] = "#12171a";
static const char *colors[2][3] = {
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
[SchemeSel] = { col_gray4, col_navy, col_navy },
};
static const char *tags[] = {"Terminal", "IDE", "Browser", "Applications"};
static Rule rules[] = {
/* class instance title tags mask isfloating monitor */
{ "st", NULL, NULL, 1, 0, -1 },
{ "chromium", NULL, NULL, 2, 0, -1 },
{ "code", NULL, NULL, 3, 0, 0 }
};
static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
static const int nmaster = 1; /* number of clients in master area */
static const int resizehints = 0; /* 1 means respect size hints in tiled resizals */
static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
static const int refreshrate = 120; /* refresh rate (per second) for client move/resize */
static const Layout layouts[] = {
{ "[]=", tile },
{ "><>", NULL },
{ "[M]", monocle },
};
/* key definitions */
#define MODKEY Mod4Mask
#define TAGKEYS(KEY,TAG) \
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* commands */
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
static const char *termcmd[] = { "st", NULL };
static const Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
{ MODKEY, XK_Return, spawn, {.v = termcmd } },
{ MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } },
{ MODKEY|ShiftMask, XK_i, incnmaster, {.i = +1 } },
{ MODKEY|ShiftMask, XK_d, incnmaster, {.i = -1 } },
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
{ MODKEY, XK_Tab, view, {0} },
{ MODKEY, XK_q, killclient, {0} },
{ MODKEY, XK_space, setlayout, {0} },
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
{ MODKEY, XK_0, view, {.ui = ~0 } },
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
{ MODKEY, XK_comma, focusmon, {.i = -1 } },
{ MODKEY, XK_period, focusmon, {.i = +1 } },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
TAGKEYS( XK_1, 0)
TAGKEYS( XK_2, 1)
TAGKEYS( XK_3, 2)
TAGKEYS( XK_4, 3)
TAGKEYS( XK_5, 4)
TAGKEYS( XK_6, 5)
TAGKEYS( XK_7, 6)
TAGKEYS( XK_8, 7)
TAGKEYS( XK_9, 8)
{ MODKEY|ShiftMask, XK_q, quit, {0} },
};
static const Button buttons[] = {
/* click event mask button function argument */
{ ClkLtSymbol, 0, Button1, setlayout, {0} },
{ ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
{ ClkWinTitle, 0, Button2, zoom, {0} },
{ ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
{ ClkTagBar, 0, Button1, view, {0} },
{ ClkTagBar, 0, Button3, toggleview, {0} },
{ ClkTagBar, MODKEY, Button1, tag, {0} },
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
};

39
dwm-6.5/config.mk Normal file
View File

@ -0,0 +1,39 @@
# dwm version
VERSION = 6.5
# Customize below to fit your system
# paths
PREFIX = /usr/local
MANPREFIX = ${PREFIX}/share/man
X11INC = /usr/X11R6/include
X11LIB = /usr/X11R6/lib
# Xinerama, comment if you don't want it
XINERAMALIBS = -lXinerama
XINERAMAFLAGS = -DXINERAMA
# freetype
FREETYPELIBS = -lfontconfig -lXft
FREETYPEINC = /usr/include/freetype2
# OpenBSD (uncomment)
#FREETYPEINC = ${X11INC}/freetype2
#MANPREFIX = ${PREFIX}/man
# includes and libs
INCS = -I${X11INC} -I${FREETYPEINC}
LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS}
# flags
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
#CFLAGS = -g -std=c99 -pedantic -Wall -O0 ${INCS} ${CPPFLAGS}
CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os ${INCS} ${CPPFLAGS}
LDFLAGS = ${LIBS}
# Solaris
#CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\"
#LDFLAGS = ${LIBS}
# compiler and linker
CC = cc

463
dwm-6.5/drw.c Normal file
View File

@ -0,0 +1,463 @@
/* See LICENSE file for copyright and license details. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/Xft/Xft.h>
#include "drw.h"
#include "util.h"
#define UTF_INVALID 0xFFFD
#define UTF_SIZ 4
static const unsigned char utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0xE0, 0xF0};
static const unsigned char utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8};
static const long utfmin[UTF_SIZ + 1] = { 0, 0, 0x80, 0x800, 0x10000};
static const long utfmax[UTF_SIZ + 1] = {0x10FFFF, 0x7F, 0x7FF, 0xFFFF, 0x10FFFF};
static long
utf8decodebyte(const char c, size_t *i)
{
for (*i = 0; *i < (UTF_SIZ + 1); ++(*i))
if (((unsigned char)c & utfmask[*i]) == utfbyte[*i])
return (unsigned char)c & ~utfmask[*i];
return 0;
}
static size_t
utf8validate(long *u, size_t i)
{
if (!BETWEEN(*u, utfmin[i], utfmax[i]) || BETWEEN(*u, 0xD800, 0xDFFF))
*u = UTF_INVALID;
for (i = 1; *u > utfmax[i]; ++i)
;
return i;
}
static size_t
utf8decode(const char *c, long *u, size_t clen)
{
size_t i, j, len, type;
long udecoded;
*u = UTF_INVALID;
if (!clen)
return 0;
udecoded = utf8decodebyte(c[0], &len);
if (!BETWEEN(len, 1, UTF_SIZ))
return 1;
for (i = 1, j = 1; i < clen && j < len; ++i, ++j) {
udecoded = (udecoded << 6) | utf8decodebyte(c[i], &type);
if (type)
return j;
}
if (j < len)
return 0;
*u = udecoded;
utf8validate(u, len);
return len;
}
Drw *
drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h)
{
Drw *drw = ecalloc(1, sizeof(Drw));
drw->dpy = dpy;
drw->screen = screen;
drw->root = root;
drw->w = w;
drw->h = h;
drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen));
drw->gc = XCreateGC(dpy, root, 0, NULL);
XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
return drw;
}
void
drw_resize(Drw *drw, unsigned int w, unsigned int h)
{
if (!drw)
return;
drw->w = w;
drw->h = h;
if (drw->drawable)
XFreePixmap(drw->dpy, drw->drawable);
drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen));
}
void
drw_free(Drw *drw)
{
XFreePixmap(drw->dpy, drw->drawable);
XFreeGC(drw->dpy, drw->gc);
drw_fontset_free(drw->fonts);
free(drw);
}
/* This function is an implementation detail. Library users should use
* drw_fontset_create instead.
*/
static Fnt *
xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
{
Fnt *font;
XftFont *xfont = NULL;
FcPattern *pattern = NULL;
if (fontname) {
/* Using the pattern found at font->xfont->pattern does not yield the
* same substitution results as using the pattern returned by
* FcNameParse; using the latter results in the desired fallback
* behaviour whereas the former just results in missing-character
* rectangles being drawn, at least with some fonts. */
if (!(xfont = XftFontOpenName(drw->dpy, drw->screen, fontname))) {
fprintf(stderr, "error, cannot load font from name: '%s'\n", fontname);
return NULL;
}
if (!(pattern = FcNameParse((FcChar8 *) fontname))) {
fprintf(stderr, "error, cannot parse font name to pattern: '%s'\n", fontname);
XftFontClose(drw->dpy, xfont);
return NULL;
}
} else if (fontpattern) {
if (!(xfont = XftFontOpenPattern(drw->dpy, fontpattern))) {
fprintf(stderr, "error, cannot load font from pattern.\n");
return NULL;
}
} else {
die("no font specified.");
}
font = ecalloc(1, sizeof(Fnt));
font->xfont = xfont;
font->pattern = pattern;
font->h = xfont->ascent + xfont->descent;
font->dpy = drw->dpy;
return font;
}
static void
xfont_free(Fnt *font)
{
if (!font)
return;
if (font->pattern)
FcPatternDestroy(font->pattern);
XftFontClose(font->dpy, font->xfont);
free(font);
}
Fnt*
drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount)
{
Fnt *cur, *ret = NULL;
size_t i;
if (!drw || !fonts)
return NULL;
for (i = 1; i <= fontcount; i++) {
if ((cur = xfont_create(drw, fonts[fontcount - i], NULL))) {
cur->next = ret;
ret = cur;
}
}
return (drw->fonts = ret);
}
void
drw_fontset_free(Fnt *font)
{
if (font) {
drw_fontset_free(font->next);
xfont_free(font);
}
}
void
drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
{
if (!drw || !dest || !clrname)
return;
if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen),
clrname, dest))
die("error, cannot allocate color '%s'", clrname);
}
/* Wrapper to create color schemes. The caller has to call free(3) on the
* returned color scheme when done using it. */
Clr *
drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
{
size_t i;
Clr *ret;
/* need at least two colors for a scheme */
if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor))))
return NULL;
for (i = 0; i < clrcount; i++)
drw_clr_create(drw, &ret[i], clrnames[i]);
return ret;
}
void
drw_clr_free(Drw *drw, Clr *c)
{
if (!drw || !c)
return;
/* c is typedef XftColor Clr */
XftColorFree(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen), c);
}
void
drw_setfontset(Drw *drw, Fnt *set)
{
if (drw)
drw->fonts = set;
}
void
drw_setscheme(Drw *drw, Clr *scm)
{
if (drw)
drw->scheme = scm;
}
void
drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert)
{
if (!drw || !drw->scheme)
return;
XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme[ColBg].pixel : drw->scheme[ColFg].pixel);
if (filled)
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
else
XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1);
}
int
drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert)
{
int i, ty, ellipsis_x = 0;
unsigned int tmpw, ew, ellipsis_w = 0, ellipsis_len;
XftDraw *d = NULL;
Fnt *usedfont, *curfont, *nextfont;
int utf8strlen, utf8charlen, render = x || y || w || h;
long utf8codepoint = 0;
const char *utf8str;
FcCharSet *fccharset;
FcPattern *fcpattern;
FcPattern *match;
XftResult result;
int charexists = 0, overflow = 0;
/* keep track of a couple codepoints for which we have no match. */
enum { nomatches_len = 64 };
static struct { long codepoint[nomatches_len]; unsigned int idx; } nomatches;
static unsigned int ellipsis_width = 0;
if (!drw || (render && (!drw->scheme || !w)) || !text || !drw->fonts)
return 0;
if (!render) {
w = invert ? invert : ~invert;
} else {
XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
d = XftDrawCreate(drw->dpy, drw->drawable,
DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen));
x += lpad;
w -= lpad;
}
usedfont = drw->fonts;
if (!ellipsis_width && render)
ellipsis_width = drw_fontset_getwidth(drw, "...");
while (1) {
ew = ellipsis_len = utf8strlen = 0;
utf8str = text;
nextfont = NULL;
while (*text) {
utf8charlen = utf8decode(text, &utf8codepoint, UTF_SIZ);
for (curfont = drw->fonts; curfont; curfont = curfont->next) {
charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint);
if (charexists) {
drw_font_getexts(curfont, text, utf8charlen, &tmpw, NULL);
if (ew + ellipsis_width <= w) {
/* keep track where the ellipsis still fits */
ellipsis_x = x + ew;
ellipsis_w = w - ew;
ellipsis_len = utf8strlen;
}
if (ew + tmpw > w) {
overflow = 1;
/* called from drw_fontset_getwidth_clamp():
* it wants the width AFTER the overflow
*/
if (!render)
x += tmpw;
else
utf8strlen = ellipsis_len;
} else if (curfont == usedfont) {
utf8strlen += utf8charlen;
text += utf8charlen;
ew += tmpw;
} else {
nextfont = curfont;
}
break;
}
}
if (overflow || !charexists || nextfont)
break;
else
charexists = 0;
}
if (utf8strlen) {
if (render) {
ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent;
XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg],
usedfont->xfont, x, ty, (XftChar8 *)utf8str, utf8strlen);
}
x += ew;
w -= ew;
}
if (render && overflow)
drw_text(drw, ellipsis_x, y, ellipsis_w, h, 0, "...", invert);
if (!*text || overflow) {
break;
} else if (nextfont) {
charexists = 0;
usedfont = nextfont;
} else {
/* Regardless of whether or not a fallback font is found, the
* character must be drawn. */
charexists = 1;
for (i = 0; i < nomatches_len; ++i) {
/* avoid calling XftFontMatch if we know we won't find a match */
if (utf8codepoint == nomatches.codepoint[i])
goto no_match;
}
fccharset = FcCharSetCreate();
FcCharSetAddChar(fccharset, utf8codepoint);
if (!drw->fonts->pattern) {
/* Refer to the comment in xfont_create for more information. */
die("the first font in the cache must be loaded from a font string.");
}
fcpattern = FcPatternDuplicate(drw->fonts->pattern);
FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset);
FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue);
FcConfigSubstitute(NULL, fcpattern, FcMatchPattern);
FcDefaultSubstitute(fcpattern);
match = XftFontMatch(drw->dpy, drw->screen, fcpattern, &result);
FcCharSetDestroy(fccharset);
FcPatternDestroy(fcpattern);
if (match) {
usedfont = xfont_create(drw, NULL, match);
if (usedfont && XftCharExists(drw->dpy, usedfont->xfont, utf8codepoint)) {
for (curfont = drw->fonts; curfont->next; curfont = curfont->next)
; /* NOP */
curfont->next = usedfont;
} else {
xfont_free(usedfont);
nomatches.codepoint[++nomatches.idx % nomatches_len] = utf8codepoint;
no_match:
usedfont = drw->fonts;
}
}
}
}
if (d)
XftDrawDestroy(d);
return x + (render ? w : 0);
}
void
drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h)
{
if (!drw)
return;
XCopyArea(drw->dpy, drw->drawable, win, drw->gc, x, y, w, h, x, y);
XSync(drw->dpy, False);
}
unsigned int
drw_fontset_getwidth(Drw *drw, const char *text)
{
if (!drw || !drw->fonts || !text)
return 0;
return drw_text(drw, 0, 0, 0, 0, 0, text, 0);
}
unsigned int
drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n)
{
unsigned int tmp = 0;
if (drw && drw->fonts && text && n)
tmp = drw_text(drw, 0, 0, 0, 0, 0, text, n);
return MIN(n, tmp);
}
void
drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h)
{
XGlyphInfo ext;
if (!font || !text)
return;
XftTextExtentsUtf8(font->dpy, font->xfont, (XftChar8 *)text, len, &ext);
if (w)
*w = ext.xOff;
if (h)
*h = font->h;
}
Cur *
drw_cur_create(Drw *drw, int shape)
{
Cur *cur;
if (!drw || !(cur = ecalloc(1, sizeof(Cur))))
return NULL;
cur->cursor = XCreateFontCursor(drw->dpy, shape);
return cur;
}
void
drw_cur_free(Drw *drw, Cur *cursor)
{
if (!cursor)
return;
XFreeCursor(drw->dpy, cursor->cursor);
free(cursor);
}

59
dwm-6.5/drw.h Normal file
View File

@ -0,0 +1,59 @@
/* See LICENSE file for copyright and license details. */
typedef struct {
Cursor cursor;
} Cur;
typedef struct Fnt {
Display *dpy;
unsigned int h;
XftFont *xfont;
FcPattern *pattern;
struct Fnt *next;
} Fnt;
enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */
typedef XftColor Clr;
typedef struct {
unsigned int w, h;
Display *dpy;
int screen;
Window root;
Drawable drawable;
GC gc;
Clr *scheme;
Fnt *fonts;
} Drw;
/* Drawable abstraction */
Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h);
void drw_resize(Drw *drw, unsigned int w, unsigned int h);
void drw_free(Drw *drw);
/* Fnt abstraction */
Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount);
void drw_fontset_free(Fnt* set);
unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
unsigned int drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n);
void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h);
void drw_clr_free(Drw *drw, Clr *clr);
/* Colorscheme abstraction */
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
/* Cursor abstraction */
Cur *drw_cur_create(Drw *drw, int shape);
void drw_cur_free(Drw *drw, Cur *cursor);
/* Drawing context manipulation */
void drw_setfontset(Drw *drw, Fnt *set);
void drw_setscheme(Drw *drw, Clr *scm);
/* Drawing functions */
void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert);
int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert);
/* Map functions */
void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h);

BIN
dwm-6.5/drw.o Normal file

Binary file not shown.

BIN
dwm-6.5/dwm Executable file

Binary file not shown.

176
dwm-6.5/dwm.1 Normal file
View File

@ -0,0 +1,176 @@
.TH DWM 1 dwm\-VERSION
.SH NAME
dwm \- dynamic window manager
.SH SYNOPSIS
.B dwm
.RB [ \-v ]
.SH DESCRIPTION
dwm is a dynamic window manager for X. It manages windows in tiled, monocle
and floating layouts. Either layout can be applied dynamically, optimising the
environment for the application in use and the task performed.
.P
In tiled layouts windows are managed in a master and stacking area. The master
area on the left contains one window by default, and the stacking area on the
right contains all other windows. The number of master area windows can be
adjusted from zero to an arbitrary number. In monocle layout all windows are
maximised to the screen size. In floating layout windows can be resized and
moved freely. Dialog windows are always managed floating, regardless of the
layout applied.
.P
Windows are grouped by tags. Each window can be tagged with one or multiple
tags. Selecting certain tags displays all windows with these tags.
.P
Each screen contains a small status bar which displays all available tags, the
layout, the title of the focused window, and the text read from the root window
name property, if the screen is focused. A floating window is indicated with an
empty square and a maximised floating window is indicated with a filled square
before the windows title. The selected tags are indicated with a different
color. The tags of the focused window are indicated with a filled square in the
top left corner. The tags which are applied to one or more windows are
indicated with an empty square in the top left corner.
.P
dwm draws a small border around windows to indicate the focus state.
.SH OPTIONS
.TP
.B \-v
prints version information to stderr, then exits.
.SH USAGE
.SS Status bar
.TP
.B X root window name
is read and displayed in the status text area. It can be set with the
.BR xsetroot (1)
command.
.TP
.B Button1
click on a tag label to display all windows with that tag, click on the layout
label toggles between tiled and floating layout.
.TP
.B Button3
click on a tag label adds/removes all windows with that tag to/from the view.
.TP
.B Mod1\-Button1
click on a tag label applies that tag to the focused window.
.TP
.B Mod1\-Button3
click on a tag label adds/removes that tag to/from the focused window.
.SS Keyboard commands
.TP
.B Mod1\-Shift\-Return
Start
.BR st(1).
.TP
.B Mod1\-p
Spawn
.BR dmenu(1)
for launching other programs.
.TP
.B Mod1\-,
Focus previous screen, if any.
.TP
.B Mod1\-.
Focus next screen, if any.
.TP
.B Mod1\-Shift\-,
Send focused window to previous screen, if any.
.TP
.B Mod1\-Shift\-.
Send focused window to next screen, if any.
.TP
.B Mod1\-b
Toggles bar on and off.
.TP
.B Mod1\-t
Sets tiled layout.
.TP
.B Mod1\-f
Sets floating layout.
.TP
.B Mod1\-m
Sets monocle layout.
.TP
.B Mod1\-space
Toggles between current and previous layout.
.TP
.B Mod1\-j
Focus next window.
.TP
.B Mod1\-k
Focus previous window.
.TP
.B Mod1\-i
Increase number of windows in master area.
.TP
.B Mod1\-d
Decrease number of windows in master area.
.TP
.B Mod1\-l
Increase master area size.
.TP
.B Mod1\-h
Decrease master area size.
.TP
.B Mod1\-Return
Zooms/cycles focused window to/from master area (tiled layouts only).
.TP
.B Mod1\-Shift\-c
Close focused window.
.TP
.B Mod1\-Shift\-space
Toggle focused window between tiled and floating state.
.TP
.B Mod1\-Tab
Toggles to the previously selected tags.
.TP
.B Mod1\-Shift\-[1..n]
Apply nth tag to focused window.
.TP
.B Mod1\-Shift\-0
Apply all tags to focused window.
.TP
.B Mod1\-Control\-Shift\-[1..n]
Add/remove nth tag to/from focused window.
.TP
.B Mod1\-[1..n]
View all windows with nth tag.
.TP
.B Mod1\-0
View all windows with any tag.
.TP
.B Mod1\-Control\-[1..n]
Add/remove all windows with nth tag to/from the view.
.TP
.B Mod1\-Shift\-q
Quit dwm.
.SS Mouse commands
.TP
.B Mod1\-Button1
Move focused window while dragging. Tiled windows will be toggled to the floating state.
.TP
.B Mod1\-Button2
Toggles focused window between floating and tiled state.
.TP
.B Mod1\-Button3
Resize focused window while dragging. Tiled windows will be toggled to the floating state.
.SH CUSTOMIZATION
dwm is customized by creating a custom config.h and (re)compiling the source
code. This keeps it fast, secure and simple.
.SH SEE ALSO
.BR dmenu (1),
.BR st (1)
.SH ISSUES
Java applications which use the XToolkit/XAWT backend may draw grey windows
only. The XToolkit/XAWT backend breaks ICCCM-compliance in recent JDK 1.5 and early
JDK 1.6 versions, because it assumes a reparenting window manager. Possible workarounds
are using JDK 1.4 (which doesn't contain the XToolkit/XAWT backend) or setting the
environment variable
.BR AWT_TOOLKIT=MToolkit
(to use the older Motif backend instead) or running
.B xprop -root -f _NET_WM_NAME 32a -set _NET_WM_NAME LG3D
or
.B wmname LG3D
(to pretend that a non-reparenting window manager is running that the
XToolkit/XAWT backend can recognize) or when using OpenJDK setting the environment variable
.BR _JAVA_AWT_WM_NONREPARENTING=1 .
.SH BUGS
Send all bug reports with a patch to hackers@suckless.org.

2175
dwm-6.5/dwm.c Normal file

File diff suppressed because it is too large Load Diff

2163
dwm-6.5/dwm.c.orig Normal file

File diff suppressed because it is too large Load Diff

222
dwm-6.5/dwm.c.rej Normal file
View File

@ -0,0 +1,222 @@
diff a/dwm.c b/dwm.c (rejected hunks)
@@ -85,6 +85,7 @@ typedef struct Monitor Monitor;
typedef struct Client Client;
struct Client {
char name[256];
+ char *appicon;
float mina, maxa;
int x, y, w, h;
int oldx, oldy, oldw, oldh;
@@ -121,6 +122,7 @@ struct Monitor {
unsigned int seltags;
unsigned int sellt;
unsigned int tagset[2];
+ char **tag_icons;
int showbar;
int topbar;
Client *clients;
@@ -138,6 +140,7 @@ typedef struct {
unsigned int tags;
int isfloating;
int monitor;
+ const char *appicon;
} Rule;
/* function declarations */
@@ -283,7 +289,13 @@ applyrules(Client *c)
Monitor *m;
XClassHint ch = { NULL, NULL };
+ outer_separator_beg = outer_separator_beg ? outer_separator_beg : ' ';
+ outer_separator_end = outer_separator_end ? outer_separator_end : ' ';
+ inner_separator = inner_separator ? inner_separator : ' ';
+ truncate_icons_after = truncate_icons_after > 0 ? truncate_icons_after : 1;
+
/* rule matching */
+ c->appicon = NULL;
c->isfloating = 0;
c->tags = 0;
XGetClassHint(dpy, c->win, &ch);
@@ -296,6 +308,8 @@ applyrules(Client *c)
&& (!r->class || strstr(class, r->class))
&& (!r->instance || strstr(instance, r->instance)))
{
+ /* r->appicon is static, so lifetime is sufficient */
+ c->appicon = (char*) r->appicon;
c->isfloating = r->isfloating;
c->tags |= r->tags;
for (m = mons; m && m->num != r->monitor; m = m->next);
@@ -433,7 +447,7 @@ buttonpress(XEvent *e)
if (ev->window == selmon->barwin) {
i = x = 0;
do
- x += TEXTW(tags[i]);
+ x += TEXTW(m->tag_icons[i]);
while (ev->x >= x && ++i < LENGTH(tags));
if (i < LENGTH(tags)) {
click = ClkTagBar;
@@ -508,6 +522,14 @@ cleanupmon(Monitor *mon)
}
XUnmapWindow(dpy, mon->barwin);
XDestroyWindow(dpy, mon->barwin);
+
+ for (int i = 0; i < LENGTH(tags); i++) {
+ if (mon->tag_icons[i]) free(mon->tag_icons[i]);
+ mon->tag_icons[i] = NULL;
+ }
+
+ if (mon->tag_icons) free(mon->tag_icons);
+
free(mon);
}
@@ -643,6 +665,13 @@ createmon(void)
m->lt[0] = &layouts[0];
m->lt[1] = &layouts[1 % LENGTH(layouts)];
strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
+
+ m->tag_icons = (char**) malloc(LENGTH(tags) * sizeof(char*));
+ if (m->tag_icons == NULL) perror("dwm: malloc()");
+ for (int i = 0; i < LENGTH(tags); i++) {
+ m->tag_icons[i] = NULL;
+ }
+
return m;
}
@@ -694,6 +723,96 @@ dirtomon(int dir)
return m;
}
+void
+remove_outer_separators(char **str)
+{
+ size_t clean_tag_name_len = strlen(*str) - 2;
+
+ char *temp_tag_name = (char*)
+ malloc(clean_tag_name_len + 1);
+
+ if (temp_tag_name == NULL) perror("dwm: malloc()");
+
+ memset(temp_tag_name, 0, clean_tag_name_len + 1);
+
+ char *clean_tag_name_beg = *str + 1;
+ strncpy(temp_tag_name,
+ clean_tag_name_beg,
+ clean_tag_name_len);
+
+ if (*str) free(*str);
+ *str = temp_tag_name;
+}
+
+void
+appiconsappend(char **str, const char *appicon, size_t new_size)
+{
+ char *temp_tag_name = (char*) malloc(new_size);
+ if (temp_tag_name == NULL) perror("dwm: malloc()");
+
+ /* NOTE: Example format of temp_tag_name (with two appicons):
+ * <outer_sep_beg><appicon><inner_sep><appicon><outer_sep_end>
+ */
+ temp_tag_name = memset(temp_tag_name, 0, new_size);
+
+ temp_tag_name[0] = outer_separator_beg;
+ temp_tag_name[new_size - 2] = outer_separator_end;
+
+ strncpy(temp_tag_name + 1, *str, strlen(*str));
+ temp_tag_name[strlen(temp_tag_name)] = inner_separator;
+
+ strncpy(temp_tag_name + strlen(temp_tag_name),
+ appicon, strlen(appicon));
+
+ if (*str) free(*str);
+ *str = temp_tag_name;
+}
+
+void
+applyappicon(char *tag_icons[], int *icons_per_tag, const Client *c)
+{
+ for (unsigned t = 1, i = 0;
+ i < LENGTH(tags);
+ t <<= 1, i++)
+ {
+ if (c->tags & t) {
+ if (icons_per_tag[i] == 0) {
+ if (tag_icons[i]) free(tag_icons[i]);
+ tag_icons[i] = strndup(c->appicon, strlen(c->appicon));
+ } else {
+ char *icon = NULL;
+ if (icons_per_tag[i] < truncate_icons_after)
+ icon = c->appicon;
+ else if (icons_per_tag[i] == truncate_icons_after)
+ icon = truncate_symbol;
+ else {
+ icons_per_tag[i]++;
+ continue;
+ }
+
+ /* remove outer separators from previous iterations
+ * otherwise they get applied recursively */
+ if (icons_per_tag[i] > 1) {
+ remove_outer_separators(&tag_icons[i]);
+ }
+
+ size_t outer_separators_size = 2;
+ size_t inner_separator_size = 1;
+
+ size_t new_size = strlen(tag_icons[i])
+ + outer_separators_size
+ + inner_separator_size
+ + strlen(icon)
+ + 1;
+
+ appiconsappend(&tag_icons[i], icon, new_size);
+ }
+
+ icons_per_tag[i]++;
+ }
+ }
+}
+
void
drawbar(Monitor *m)
{
@@ -713,22 +832,35 @@ drawbar(Monitor *m)
drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
}
+ int icons_per_tag[LENGTH(tags)];
+ memset(icons_per_tag, 0, LENGTH(tags) * sizeof(int));
+
+ for (int i = 0; i < LENGTH(tags); i++) {
+ /* set each tag to default value */
+ m->tag_icons[i] = strndup(tags[i], strlen(tags[i]));
+ }
+
for (c = m->clients; c; c = c->next) {
+ if (c->appicon && strlen(c->appicon) > 0) {
+ applyappicon(m->tag_icons, icons_per_tag, c);
+ }
+
occ |= c->tags;
if (c->isurgent)
urg |= c->tags;
}
x = 0;
for (i = 0; i < LENGTH(tags); i++) {
- w = TEXTW(tags[i]);
+ w = TEXTW(m->tag_icons[i]);
drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
- drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);
- if (occ & 1 << i)
+ drw_text(drw, x, 0, w, bh, lrpad / 2, m->tag_icons[i], urg & 1 << i);
+ if (occ & 1 << i && icons_per_tag[i] == 0)
drw_rect(drw, x + boxs, boxs, boxw, boxw,
m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
urg & 1 << i);
x += w;
}
+
w = TEXTW(m->ltsymbol);
drw_setscheme(drw, scheme[SchemeNorm]);
x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);

BIN
dwm-6.5/dwm.o Normal file

Binary file not shown.

BIN
dwm-6.5/dwm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

42
dwm-6.5/transient.c Normal file
View File

@ -0,0 +1,42 @@
/* cc transient.c -o transient -lX11 */
#include <stdlib.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
int main(void) {
Display *d;
Window r, f, t = None;
XSizeHints h;
XEvent e;
d = XOpenDisplay(NULL);
if (!d)
exit(1);
r = DefaultRootWindow(d);
f = XCreateSimpleWindow(d, r, 100, 100, 400, 400, 0, 0, 0);
h.min_width = h.max_width = h.min_height = h.max_height = 400;
h.flags = PMinSize | PMaxSize;
XSetWMNormalHints(d, f, &h);
XStoreName(d, f, "floating");
XMapWindow(d, f);
XSelectInput(d, f, ExposureMask);
while (1) {
XNextEvent(d, &e);
if (t == None) {
sleep(5);
t = XCreateSimpleWindow(d, r, 50, 50, 100, 100, 0, 0, 0);
XSetTransientForHint(d, t, f);
XStoreName(d, t, "transient");
XMapWindow(d, t);
XSelectInput(d, t, ExposureMask);
}
}
XCloseDisplay(d);
exit(0);
}

36
dwm-6.5/util.c Normal file
View File

@ -0,0 +1,36 @@
/* See LICENSE file for copyright and license details. */
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "util.h"
void
die(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
if (fmt[0] && fmt[strlen(fmt)-1] == ':') {
fputc(' ', stderr);
perror(NULL);
} else {
fputc('\n', stderr);
}
exit(1);
}
void *
ecalloc(size_t nmemb, size_t size)
{
void *p;
if (!(p = calloc(nmemb, size)))
die("calloc:");
return p;
}

8
dwm-6.5/util.h Normal file
View File

@ -0,0 +1,8 @@
/* See LICENSE file for copyright and license details. */
#define MAX(A, B) ((A) > (B) ? (A) : (B))
#define MIN(A, B) ((A) < (B) ? (A) : (B))
#define BETWEEN(X, A, B) ((A) <= (X) && (X) <= (B))
void die(const char *fmt, ...);
void *ecalloc(size_t nmemb, size_t size);

BIN
dwm-6.5/util.o Normal file

Binary file not shown.

1
dwmstatus Submodule

@ -0,0 +1 @@
Subproject commit ec01a84698346cca0b3d4e06202101982cda7de0

View File

@ -0,0 +1,7 @@
complete --command fisher --exclusive --long help --description "Print help"
complete --command fisher --exclusive --long version --description "Print version"
complete --command fisher --exclusive --condition __fish_use_subcommand --arguments install --description "Install plugins"
complete --command fisher --exclusive --condition __fish_use_subcommand --arguments update --description "Update installed plugins"
complete --command fisher --exclusive --condition __fish_use_subcommand --arguments remove --description "Remove installed plugins"
complete --command fisher --exclusive --condition __fish_use_subcommand --arguments list --description "List installed plugins matching regex"
complete --command fisher --exclusive --condition "__fish_seen_subcommand_from update remove" --arguments "(fisher list)"

View File

@ -0,0 +1,12 @@
complete tide --no-files
set -l subcommands bug-report configure
complete tide -x -n __fish_use_subcommand -a bug-report -d "Print info for use in bug reports"
complete tide -x -n __fish_use_subcommand -a configure -d "Run the configuration wizard"
complete tide -x -n "not __fish_seen_subcommand_from $subcommands" -s h -l help -d "Print help message"
complete tide -x -n "not __fish_seen_subcommand_from $subcommands" -s v -l version -d "Print tide version"
complete tide -x -n '__fish_seen_subcommand_from bug-report' -l clean -d "Run clean Fish instance and install Tide"
complete tide -x -n '__fish_seen_subcommand_from bug-report' -l verbose -d "Print full Tide configuration"

View File

@ -0,0 +1,41 @@
function _tide_init_install --on-event _tide_init_install
set -U VIRTUAL_ENV_DISABLE_PROMPT true
source (functions --details _tide_sub_configure)
_load_config lean
_tide_finish
if status is-interactive
tide bug-report --check || sleep 4
if contains ilancosman/tide (string lower $_fisher_plugins)
set_color bryellow
echo "ilancosman/tide is a development branch. Please install from a release tag:"
echo -ns "fisher install ilancosman/tide@v5" | fish_indent --ansi
sleep 3
end
switch (read --prompt-str="Configure tide prompt? [Y/n] " | string lower)
case y ye yes ''
tide configure
case '*'
echo -s \n 'Run ' (echo -ns "tide configure" | fish_indent --ansi) ' to customize your prompt.'
end
end
end
function _tide_init_update --on-event _tide_init_update
# Warn users who install from main branch
if contains ilancosman/tide (string lower $_fisher_plugins)
set_color bryellow
echo "ilancosman/tide is a development branch. Please install from a release tag:"
echo -ns "fisher install ilancosman/tide@v5" | fish_indent --ansi
sleep 3
end
end
function _tide_init_uninstall --on-event _tide_init_uninstall
set -e VIRTUAL_ENV_DISABLE_PROMPT
set -e (set -U --names | string match --entire -r '^_?tide')
functions --erase (functions --all | string match --entire -r '^_?tide')
end

81
fish/config.fish Normal file
View File

@ -0,0 +1,81 @@
# ------------------------------------------------------------
# Core environment
# ------------------------------------------------------------
set -x EDITOR nvim
set -x PATH "$HOME/.local/bin" $PATH
set fish_greeting
set -Ux PATH $PATH (go env GOPATH)/bin
# ------------------------------------------------------------
# Homebrew / Development paths
# ------------------------------------------------------------
set -x PKG_CONFIG_PATH "/opt/homebrew/lib/pkgconfig" $PKG_CONFIG_PATH
set -x PKG_CONFIG_PATH "/opt/homebrew/Cellar/raylib/5.5/lib/pkgconfig" $PKG_CONFIG_PATH
# -----------------------------
# Homebrew (Apple Silicon)
# -----------------------------
if test -d /opt/homebrew/bin
set -gx PATH /opt/homebrew/bin /opt/homebrew/sbin $PATH
end
# ------------------------------------------------------------
# Herd configuration (PHP / NVM)
# ------------------------------------------------------------
# set -x HERD_PHP_83_INI_SCAN_DIR "/Users/nasr/Library/Application Support/Herd/config/php/83/"
# set -x HERD_PHP_82_INI_SCAN_DIR "/Users/nasr/Library/Application Support/Herd/config/php/82/"
# set -x HERD_PHP_85_INI_SCAN_DIR "/Users/nasr/Library/Application Support/Herd/config/php/85/"
# set -x HERD_PHP_84_INI_SCAN_DIR "/Users/nasr/Library/Application Support/Herd/config/php/84/"
# set -x PATH "/Users/nasr/Library/Application Support/Herd/bin" $PATH
# set -x NVM_DIR "/Users/nasr/Library/Application Support/Herd/config/nvm"
# test -f "$NVM_DIR/nvm.sh"; and source "$NVM_DIR/nvm.sh"
# Load Herds shell hooks if they exist
# test -f "/Applications/Herd.app/Contents/Resources/config/shell/zshrc.zsh"; and source "/Applications/Herd.app/Contents/Resources/config/shell/zshrc.zsh"
# ------------------------------------------------------------
# Zoxide (navigation)
# ------------------------------------------------------------
zoxide init fish | source
alias cd "z"
alias zi "zoxide query -i"
alias zq "zoxide query"
# ------------------------------------------------------------
# Aliases
# ------------------------------------------------------------
alias vim "nvim"
alias vi "nvim"
alias ls "lsd"
alias attach "tmux attach-session -t"
alias new "tmux new-session -t"
alias list "tmux list-sessions"
alias nnd "~/nnd"
# ------------------------------------------------------------
# fzf-powered file selectors
# ------------------------------------------------------------
function edit
set file (find . -type f ! -path '*/.*' | fzf --preview 'bat --style=full --color=always {} 2>/dev/null')
test -n "$file"; and nvim "$file"
end
function cfg
set file (find ~/.config -type f | fzf --preview 'bat --style=full --color=always {} 2>/dev/null')
test -n "$file"; and nvim "$file"
end
# Optional: EMSDK support
# ------------------------------------------------------------
# source (~/emsdk/emsdk_env.sh | psub)
set -g fish_key_bindings fish_vi_key_bindings
set -U tide_left_prompt_items (string match -v kubectl $tide_left_prompt_items)
set -U tide_right_prompt_items (string match -v kubectl $tide_right_prompt_items)

2
fish/fish_plugins Normal file
View File

@ -0,0 +1,2 @@
jorgebucaran/fisher
ilancosman/tide@v5

208
fish/fish_variables Normal file
View File

@ -0,0 +1,208 @@
# This file contains fish universal variable definitions.
# VERSION: 3.0
SETUVAR --export --path PATH:/home/nasr/\x2elocal/bin\x1e/home/nasr/\x2elocal/bin\x1e/usr/local/sbin\x1e/usr/local/bin\x1e/usr/bin\x1e/usr/lib/jvm/default/bin\x1e/usr/bin/site_perl\x1e/usr/bin/vendor_perl\x1e/usr/bin/core_perl\x1e/home/nasr/go/bin
SETUVAR VIRTUAL_ENV_DISABLE_PROMPT:true
SETUVAR __fish_initialized:3800
SETUVAR _fisher_ilancosman_2F_tide_40_v5_files:\x7e/\x2econfig/fish/functions/_tide_1_line_prompt\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_2_line_prompt\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_cache_variables\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_detect_os\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_find_and_remove\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_aws\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_character\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_chruby\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_cmd_duration\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_context\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_crystal\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_direnv\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_distrobox\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_docker\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_elixir\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_gcloud\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_git\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_go\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_java\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_jobs\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_kubectl\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_nix_shell\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_node\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_os\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_php\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_private_mode\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_pulumi\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_rustc\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_shlvl\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_status\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_terraform\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_time\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_toolbox\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_vi_mode\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_item_virtual_env\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_parent_dirs\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_print_item\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_pwd\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_remove_unusable_items\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_sub_bug\x2dreport\x2efish\x1e\x7e/\x2econfig/fish/functions/_tide_sub_configure\x2efish\x1e\x7e/\x2econfig/fish/functions/fish_mode_prompt\x2efish\x1e\x7e/\x2econfig/fish/functions/fish_prompt\x2efish\x1e\x7e/\x2econfig/fish/functions/tide\x1e\x7e/\x2econfig/fish/functions/tide\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/_tide_init\x2efish\x1e\x7e/\x2econfig/fish/completions/tide\x2efish
SETUVAR _fisher_jorgebucaran_2F_fisher_files:\x7e/\x2econfig/fish/functions/fisher\x2efish\x1e\x7e/\x2econfig/fish/completions/fisher\x2efish
SETUVAR _fisher_plugins:jorgebucaran/fisher\x1eilancosman/tide\x40v5
SETUVAR _fisher_upgraded_to_4_4:\x1d
SETUVAR _tide_left_items:vi_mode\x1epwd\x1egit
SETUVAR _tide_prompt_13442:\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0ba\x1b\x5b38\x3b2\x3b135\x3b175\x3b175m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20I\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x40PWD\x40\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x1b\x5b37m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0mtests\x2dand\x2dbuilds\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x20\x211\x1b\x5b38\x3b2\x3b0\x3b175\x3b255m\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2593\u2592\u2591\x1e\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2591\u2592\u2593\x1b\x5b38\x3b2\x3b95\x3b175\x3b0m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\u2714\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b38\x3b2\x3b95\x3b135\x3b135m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x2005\x3a14\x3a03\x20PM\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0bc
SETUVAR _tide_prompt_2871:\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0ba\x1b\x5b38\x3b2\x3b135\x3b175\x3b175m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20I\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x40PWD\x40\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x1b\x5b37m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0mmain\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x20\x212\x1b\x5b38\x3b2\x3b0\x3b175\x3b255m\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2593\u2592\u2591\x1e\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2591\u2592\u2593\x1b\x5b38\x3b2\x3b95\x3b175\x3b0m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\u2714\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b38\x3b2\x3b135\x3b135\x3b95m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x201h\x2032m\x2019s\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b38\x3b2\x3b95\x3b135\x3b135m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x2011\x3a30\x3a31\x20PM\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0bc
SETUVAR _tide_prompt_30987:\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0ba\x1b\x5b38\x3b2\x3b135\x3b175\x3b175m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20I\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x40PWD\x40\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x1b\x5b37m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0mmain\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x1b\x5b38\x3b2\x3b0\x3b175\x3b255m\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2593\u2592\u2591\x1e\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2591\u2592\u2593\x1b\x5b38\x3b2\x3b95\x3b175\x3b0m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\u2714\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b38\x3b2\x3b95\x3b135\x3b135m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x2005\x3a12\x3a02\x20PM\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0bc
SETUVAR _tide_prompt_31420:\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0ba\x1b\x5b38\x3b2\x3b135\x3b175\x3b175m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20I\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x40PWD\x40\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x1b\x5b37m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0mmain\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x20\x216\x1b\x5b38\x3b2\x3b0\x3b175\x3b255m\x20\x3f3\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2593\u2592\u2591\x1e\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2591\u2592\u2593\x1b\x5b38\x3b2\x3b95\x3b175\x3b0m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\u2714\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b38\x3b2\x3b95\x3b135\x3b135m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x2005\x3a55\x3a03\x20PM\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0bc
SETUVAR _tide_prompt_39400:\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0ba\x1b\x5b38\x3b2\x3b135\x3b175\x3b175m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20I\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x40PWD\x40\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2593\u2592\u2591\x1e\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2591\u2592\u2593\x1b\x5b38\x3b2\x3b95\x3b175\x3b0m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\u2714\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b38\x3b2\x3b95\x3b135\x3b135m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x2009\x3a06\x3a18\x20PM\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0bc
SETUVAR _tide_prompt_41909:\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0ba\x1b\x5b38\x3b2\x3b135\x3b175\x3b175m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20I\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x40PWD\x40\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2593\u2592\u2591\x1e\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2591\u2592\u2593\x1b\x5b38\x3b2\x3b215\x3b0\x3b0m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\u2718\x201\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b38\x3b2\x3b95\x3b135\x3b135m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x2009\x3a18\x3a02\x20PM\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0bc
SETUVAR _tide_prompt_42905:\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0ba\x1b\x5b38\x3b2\x3b135\x3b175\x3b175m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20I\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x40PWD\x40\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2593\u2592\u2591\x1e\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2591\u2592\u2593\x1b\x5b38\x3b2\x3b95\x3b175\x3b0m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\u2714\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b38\x3b2\x3b95\x3b135\x3b135m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x2012\x3a42\x3a50\x20AM\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0bc
SETUVAR _tide_prompt_42987:\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0ba\x1b\x5b38\x3b2\x3b135\x3b175\x3b175m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20I\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x40PWD\x40\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x1b\x5b37m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0mmain\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x1b\x5b38\x3b2\x3b0\x3b175\x3b255m\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2593\u2592\u2591\x1e\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2591\u2592\u2593\x1b\x5b38\x3b2\x3b95\x3b175\x3b0m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\u2714\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b38\x3b2\x3b95\x3b135\x3b135m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x2012\x3a47\x3a08\x20AM\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0bc
SETUVAR _tide_prompt_780:\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0ba\x1b\x5b38\x3b2\x3b135\x3b175\x3b175m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20I\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x40PWD\x40\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x1b\x5b37m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0mmain\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x20\x2a2\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x20\x214\x1b\x5b38\x3b2\x3b0\x3b175\x3b255m\x20\x3f12\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2593\u2592\u2591\x1e\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2591\u2592\u2593\x1b\x5b38\x3b2\x3b95\x3b175\x3b0m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\u2714\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b38\x3b2\x3b95\x3b135\x3b135m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x2012\x3a49\x3a59\x20AM\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0bc
SETUVAR _tide_prompt_915:\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0ba\x1b\x5b38\x3b2\x3b135\x3b175\x3b175m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20I\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x40PWD\x40\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\x1b\x5b37m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0mmain\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b95\x3b215\x3b0m\x1b\x5b38\x3b2\x3b255\x3b0\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x1b\x5b38\x3b2\x3b215\x3b175\x3b0m\x1b\x5b38\x3b2\x3b0\x3b175\x3b255m\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2593\u2592\u2591\x1e\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\u2591\u2592\u2593\x1b\x5b38\x3b2\x3b95\x3b175\x3b0m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x20\u2714\x20\x1b\x5b38\x3b2\x3b148\x3b148\x3b148m\u2502\x1b\x5b38\x3b2\x3b95\x3b135\x3b135m\x1b\x5b48\x3b2\x3b28\x3b28\x3b28m\x2012\x3a42\x3a03\x20AM\x20\x1b\x5b38\x3b2\x3b28\x3b28\x3b28m\x1b\x5b49m\ue0bc
SETUVAR _tide_right_items:status\x1ecmd_duration\x1econtext\x1ejobs\x1enode\x1evirtual_env\x1erustc\x1ejava\x1ephp\x1ego\x1etime
SETUVAR fish_color_autosuggestion:brblack
SETUVAR fish_color_cancel:\x2dr
SETUVAR fish_color_command:normal
SETUVAR fish_color_comment:red
SETUVAR fish_color_cwd:green
SETUVAR fish_color_cwd_root:red
SETUVAR fish_color_end:green
SETUVAR fish_color_error:brred
SETUVAR fish_color_escape:brcyan
SETUVAR fish_color_history_current:\x2d\x2dbold
SETUVAR fish_color_host:normal
SETUVAR fish_color_host_remote:yellow
SETUVAR fish_color_normal:normal
SETUVAR fish_color_operator:brcyan
SETUVAR fish_color_param:cyan
SETUVAR fish_color_quote:yellow
SETUVAR fish_color_redirection:cyan\x1e\x2d\x2dbold
SETUVAR fish_color_search_match:white\x1e\x2d\x2dbackground\x3dbrblack\x1e\x2d\x2dbold
SETUVAR fish_color_selection:white\x1e\x2d\x2dbackground\x3dbrblack\x1e\x2d\x2dbold
SETUVAR fish_color_status:red
SETUVAR fish_color_user:brgreen
SETUVAR fish_color_valid_path:\x2d\x2dunderline
SETUVAR fish_key_bindings:fish_default_key_bindings
SETUVAR fish_pager_color_background:\x1d
SETUVAR fish_pager_color_completion:normal
SETUVAR fish_pager_color_description:yellow\x1e\x2di
SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan\x1e\x2d\x2dbold
SETUVAR fish_pager_color_secondary_background:\x1d
SETUVAR fish_pager_color_secondary_completion:\x1d
SETUVAR fish_pager_color_secondary_description:\x1d
SETUVAR fish_pager_color_secondary_prefix:\x1d
SETUVAR fish_pager_color_selected_background:\x2dr
SETUVAR fish_pager_color_selected_completion:\x1d
SETUVAR fish_pager_color_selected_description:\x1d
SETUVAR fish_pager_color_selected_prefix:\x1d
SETUVAR tide_aws_bg_color:1C1C1C
SETUVAR tide_aws_color:FF9900
SETUVAR tide_aws_icon:\uf270
SETUVAR tide_character_color:5FD700
SETUVAR tide_character_color_failure:FF0000
SETUVAR tide_character_icon:\u276f
SETUVAR tide_character_vi_icon_default:\u276e
SETUVAR tide_character_vi_icon_replace:\u25b6
SETUVAR tide_character_vi_icon_visual:V
SETUVAR tide_chruby_bg_color:1C1C1C
SETUVAR tide_chruby_color:B31209
SETUVAR tide_chruby_icon:\ue23e
SETUVAR tide_cmd_duration_bg_color:1C1C1C
SETUVAR tide_cmd_duration_color:87875F
SETUVAR tide_cmd_duration_decimals:0
SETUVAR tide_cmd_duration_icon:\x1d
SETUVAR tide_cmd_duration_threshold:3000
SETUVAR tide_context_always_display:false
SETUVAR tide_context_bg_color:1C1C1C
SETUVAR tide_context_color_default:D7AF87
SETUVAR tide_context_color_root:D7AF00
SETUVAR tide_context_color_ssh:D7AF87
SETUVAR tide_context_hostname_parts:1
SETUVAR tide_crystal_bg_color:1C1C1C
SETUVAR tide_crystal_color:FFFFFF
SETUVAR tide_crystal_icon:\u2b22
SETUVAR tide_direnv_bg_color:1C1C1C
SETUVAR tide_direnv_bg_color_denied:1C1C1C
SETUVAR tide_direnv_color:D7AF00
SETUVAR tide_direnv_color_denied:FF0000
SETUVAR tide_direnv_icon:\u25bc
SETUVAR tide_distrobox_bg_color:1C1C1C
SETUVAR tide_distrobox_color:FF00FF
SETUVAR tide_distrobox_icon:\u2b22
SETUVAR tide_docker_bg_color:1C1C1C
SETUVAR tide_docker_color:2496ED
SETUVAR tide_docker_default_contexts:default\x1ecolima
SETUVAR tide_docker_icon:\uf308
SETUVAR tide_elixir_bg_color:1C1C1C
SETUVAR tide_elixir_color:4E2A8E
SETUVAR tide_elixir_icon:\ue62d
SETUVAR tide_gcloud_bg_color:1C1C1C
SETUVAR tide_gcloud_color:4285F4
SETUVAR tide_gcloud_icon:\uf7ac
SETUVAR tide_git_bg_color:1C1C1C
SETUVAR tide_git_bg_color_unstable:1C1C1C
SETUVAR tide_git_bg_color_urgent:1C1C1C
SETUVAR tide_git_color_branch:5FD700
SETUVAR tide_git_color_conflicted:FF0000
SETUVAR tide_git_color_dirty:D7AF00
SETUVAR tide_git_color_operation:FF0000
SETUVAR tide_git_color_staged:D7AF00
SETUVAR tide_git_color_stash:5FD700
SETUVAR tide_git_color_untracked:00AFFF
SETUVAR tide_git_color_upstream:5FD700
SETUVAR tide_git_icon:\x1d
SETUVAR tide_git_truncation_length:24
SETUVAR tide_git_truncation_strategy:\x1d
SETUVAR tide_go_bg_color:1C1C1C
SETUVAR tide_go_color:00ACD7
SETUVAR tide_go_icon:\ue627
SETUVAR tide_java_bg_color:1C1C1C
SETUVAR tide_java_color:ED8B00
SETUVAR tide_java_icon:\ue256
SETUVAR tide_jobs_bg_color:1C1C1C
SETUVAR tide_jobs_color:5FAF00
SETUVAR tide_jobs_icon:\uf013
SETUVAR tide_kubectl_bg_color:1C1C1C
SETUVAR tide_kubectl_color:326CE5
SETUVAR tide_kubectl_icon:\u2388
SETUVAR tide_left_prompt_frame_enabled:false
SETUVAR tide_left_prompt_items:vi_mode\x1epwd\x1egit
SETUVAR tide_left_prompt_prefix:\ue0ba
SETUVAR tide_left_prompt_separator_diff_color:\ue0b0
SETUVAR tide_left_prompt_separator_same_color:\u2502
SETUVAR tide_left_prompt_suffix:\u2593\u2592\u2591
SETUVAR tide_nix_shell_bg_color:1C1C1C
SETUVAR tide_nix_shell_color:7EBAE4
SETUVAR tide_nix_shell_icon:\uf313
SETUVAR tide_node_bg_color:1C1C1C
SETUVAR tide_node_color:44883E
SETUVAR tide_node_icon:\u2b22
SETUVAR tide_os_bg_color:1C1C1C
SETUVAR tide_os_color:EEEEEE
SETUVAR tide_os_icon:\uf179
SETUVAR tide_php_bg_color:1C1C1C
SETUVAR tide_php_color:617CBE
SETUVAR tide_php_icon:\ue608
SETUVAR tide_private_mode_bg_color:1C1C1C
SETUVAR tide_private_mode_color:FFFFFF
SETUVAR tide_private_mode_icon:\ufaf8
SETUVAR tide_prompt_add_newline_before:false
SETUVAR tide_prompt_color_frame_and_connection:6C6C6C
SETUVAR tide_prompt_color_separator_same_color:949494
SETUVAR tide_prompt_icon_connection:\x20
SETUVAR tide_prompt_min_cols:34
SETUVAR tide_prompt_pad_items:true
SETUVAR tide_pulumi_bg_color:1C1C1C
SETUVAR tide_pulumi_color:F7BF2A
SETUVAR tide_pulumi_icon:\uf1b2
SETUVAR tide_pwd_bg_color:1C1C1C
SETUVAR tide_pwd_color_anchors:00AFFF
SETUVAR tide_pwd_color_dirs:0087AF
SETUVAR tide_pwd_color_truncated_dirs:8787AF
SETUVAR tide_pwd_icon:\x1d
SETUVAR tide_pwd_icon_home:\x1d
SETUVAR tide_pwd_icon_unwritable:\uf023
SETUVAR tide_pwd_markers:\x2ebzr\x1e\x2ecitc\x1e\x2egit\x1e\x2ehg\x1e\x2enode\x2dversion\x1e\x2epython\x2dversion\x1e\x2eruby\x2dversion\x1e\x2eshorten_folder_marker\x1e\x2esvn\x1e\x2eterraform\x1eCargo\x2etoml\x1ecomposer\x2ejson\x1eCVS\x1ego\x2emod\x1epackage\x2ejson
SETUVAR tide_right_prompt_frame_enabled:false
SETUVAR tide_right_prompt_items:status\x1ecmd_duration\x1econtext\x1ejobs\x1edirenv\x1enode\x1evirtual_env\x1erustc\x1ejava\x1ephp\x1epulumi\x1echruby\x1ego\x1egcloud\x1edistrobox\x1etoolbox\x1eterraform\x1eaws\x1enix_shell\x1ecrystal\x1eelixir\x1etime
SETUVAR tide_right_prompt_prefix:\u2591\u2592\u2593
SETUVAR tide_right_prompt_separator_diff_color:\ue0b2
SETUVAR tide_right_prompt_separator_same_color:\u2502
SETUVAR tide_right_prompt_suffix:\ue0bc
SETUVAR tide_rustc_bg_color:1C1C1C
SETUVAR tide_rustc_color:F74C00
SETUVAR tide_rustc_icon:\ue7a8
SETUVAR tide_shlvl_bg_color:1C1C1C
SETUVAR tide_shlvl_color:d78700
SETUVAR tide_shlvl_icon:\uf120
SETUVAR tide_shlvl_threshold:1
SETUVAR tide_status_bg_color:1C1C1C
SETUVAR tide_status_bg_color_failure:1C1C1C
SETUVAR tide_status_color:5FAF00
SETUVAR tide_status_color_failure:D70000
SETUVAR tide_status_icon:\u2714
SETUVAR tide_status_icon_failure:\u2718
SETUVAR tide_terraform_bg_color:1C1C1C
SETUVAR tide_terraform_color:844FBA
SETUVAR tide_terraform_icon:\x1d
SETUVAR tide_time_bg_color:1C1C1C
SETUVAR tide_time_color:5F8787
SETUVAR tide_time_format:\x25r
SETUVAR tide_toolbox_bg_color:1C1C1C
SETUVAR tide_toolbox_color:613583
SETUVAR tide_toolbox_icon:\u2b22
SETUVAR tide_vi_mode_bg_color_default:1C1C1C
SETUVAR tide_vi_mode_bg_color_insert:1C1C1C
SETUVAR tide_vi_mode_bg_color_replace:1C1C1C
SETUVAR tide_vi_mode_bg_color_visual:1C1C1C
SETUVAR tide_vi_mode_color_default:949494
SETUVAR tide_vi_mode_color_insert:87AFAF
SETUVAR tide_vi_mode_color_replace:87AF87
SETUVAR tide_vi_mode_color_visual:FF8700
SETUVAR tide_vi_mode_icon_default:D
SETUVAR tide_vi_mode_icon_insert:I
SETUVAR tide_vi_mode_icon_replace:R
SETUVAR tide_vi_mode_icon_visual:V
SETUVAR tide_virtual_env_bg_color:1C1C1C
SETUVAR tide_virtual_env_color:00AFAF
SETUVAR tide_virtual_env_icon:\ue73c

View File

View File

@ -0,0 +1,19 @@
function _tide_1_line_prompt
set -g add_prefix
_tide_side=left for item in $_tide_left_items
_tide_item_$item
end
set_color $prev_bg_color -b normal
echo $tide_left_prompt_suffix
set -g add_prefix
_tide_side=right for item in $_tide_right_items
_tide_item_$item
end
set_color $prev_bg_color -b normal
echo $tide_right_prompt_suffix
end
function _tide_item_pwd
_tide_print_item pwd @PWD@
end

View File

@ -0,0 +1,31 @@
function _tide_2_line_prompt
set -g add_prefix
_tide_side=left for item in $_tide_left_items
_tide_item_$item
end
if not set -e add_prefix
set_color $prev_bg_color -b normal
echo $tide_left_prompt_suffix
end
echo
set -g add_prefix
_tide_side=right for item in $_tide_right_items
_tide_item_$item
end
if not set -e add_prefix
set_color $prev_bg_color -b normal
echo $tide_right_prompt_suffix
end
end
function _tide_item_pwd
_tide_print_item pwd @PWD@
end
function _tide_item_newline
set_color $prev_bg_color -b normal
v=tide_"$_tide_side"_prompt_suffix echo $$v
set -g add_prefix
end

View File

@ -0,0 +1,17 @@
function _tide_cache_variables
# Same-color-separator color
set_color $tide_prompt_color_separator_same_color | read -gx _tide_color_separator_same_color
# git
contains git $_tide_left_items $_tide_right_items && set_color $tide_git_color_branch | read -gx _tide_location_color
# private_mode
if contains private_mode $_tide_left_items $_tide_right_items && test -n "$fish_private_mode"
set -gx _tide_private_mode
else
set -e _tide_private_mode
end
# item padding
test "$tide_prompt_pad_items" = true && set -gx _tide_pad ' ' || set -e _tide_pad
end

View File

@ -0,0 +1,75 @@
# Outputs icon, color, bg_color
function _tide_detect_os
set -lx defaultColor 080808 CED7CF
switch (uname | string lower)
case darwin
printf %s\n  D6D6D6 333333 # from apple.com header
case freebsd openbsd dragonfly
printf %s\n  FFFFFF AB2B28 # https://freebsdfoundation.org/about-us/about-the-foundation/project/
case 'cygwin*' 'mingw*_nt*' 'msys_nt*'
printf %s\n  FFFFFF 00CCFF # https://answers.microsoft.com/en-us/windows/forum/all/what-is-the-official-windows-8-blue-rgb-or-hex/fd57144b-f69b-42d8-8c21-6ca911646e44
case linux
if test (uname -o) = Android
echo ﲎ # This character is evil and messes up code display, so it's put on its own line
# https://developer.android.com/distribute/marketing-tools/brand-guidelines
printf %s\n 3DDC84 3C3F41 # fg is from above link, bg is from Android Studio default dark theme
else
_tide_detect_os_linux_cases /etc/os-release ID ||
_tide_detect_os_linux_cases /etc/os-release ID_LIKE ||
_tide_detect_os_linux_cases /etc/lsb-release DISTRIB_ID ||
printf %s\n$defaultColor
end
case '*'
echo -ns '?'
end
end
function _tide_detect_os_linux_cases -a file key
test -e $file || return
set -l split_file (string split '=' <$file)
set -l key_index (contains --index $key $split_file) || return
set -l value (string trim --chars='"' $split_file[(math $key_index + 1)])
# Anything which would have pure white background has been changed to D4D4D4
# It was just too bright otherwise
switch (string lower $value)
case alpine
printf %s\n  FFFFFF 0D597F # from alpine logo
case arch
printf %s\n  1793D1 4D4D4D # from arch wiki header
case centos
printf %s\n000000 D4D4D4 # https://wiki.centos.org/ArtWork/Brand/Logo, monochromatic
case debian
printf %s\n  C70036 D4D4D4 # from debian logo https://www.debian.org/logos/openlogo-nd-100.png
case devuan
printf %s\n$defaultColor # logo is monochromatic
case elementary
printf %s\n000000 D4D4D4 # https://elementary.io/brand, encouraged to be monochromatic
case fedora
printf %s\n  FFFFFF 294172 # from logo https://fedoraproject.org/w/uploads/2/2d/Logo_fedoralogo.png
case gentoo
printf %s\n  FFFFFF 54487A # https://wiki.gentoo.org/wiki/Project:Artwork/Colors
case mageia
printf %s\n  FFFFFF 262F45 # https://wiki.mageia.org/en/Artwork_guidelines
case manjaro
printf %s\n  FFFFFF 35BF5C # from https://gitlab.manjaro.org/artwork/branding/logo/-/blob/master/logo.svg
case mint linuxmint
printf %s\n  FFFFFF 69B53F # extracted from https://linuxmint.com/web/img/favicon.ico
case nixos
printf %s\n  FFFFFF 5277C3 # https://github.com/NixOS/nixos-artwork/tree/master/logo
case opensuse-leap opensuse-tumbleweed opensuse-microos
printf %s\n  73BA25 173f4f # https://en.opensuse.org/openSUSE:Artwork_brand
case raspbian
printf %s\n  FFFFFF A22846 # https://static.raspberrypi.org/files/Raspberry_Pi_Visual_Guidelines_2020.pdf
case rhel
printf %s\n  EE0000 000000 # https://www.redhat.com/en/about/brand/standards/color
case sabayon
printf %s\n$defaultColor # Can't find colors, and they are rebranding anyway
case slackware
printf %s\n$defaultColor # Doesn't really have a logo, and the colors are too close to PWD blue anyway
case ubuntu
printf %s\n  E95420 D4D4D4 # https://design.ubuntu.com/brand/
case '*'
return 1
end
end

View File

@ -0,0 +1,3 @@
function _tide_find_and_remove -a name list --no-scope-shadowing
contains --index $name $$list | read -l index && set -e "$list"[$index]
end

View File

@ -0,0 +1,11 @@
function _tide_item_aws
# AWS_PROFILE overrides AWS_DEFAULT_PROFILE, AWS_REGION overrides AWS_DEFAULT_REGION
set -q AWS_PROFILE && set -l AWS_DEFAULT_PROFILE $AWS_PROFILE
set -q AWS_REGION && set -l AWS_DEFAULT_REGION $AWS_REGION
if test -n "$AWS_DEFAULT_PROFILE" && test -n "$AWS_DEFAULT_REGION"
_tide_print_item aws $tide_aws_icon' ' "$AWS_DEFAULT_PROFILE/$AWS_DEFAULT_REGION"
else if test -n "$AWS_DEFAULT_PROFILE$AWS_DEFAULT_REGION"
_tide_print_item aws $tide_aws_icon' ' "$AWS_DEFAULT_PROFILE$AWS_DEFAULT_REGION"
end
end

View File

@ -0,0 +1,17 @@
function _tide_item_character
test $_tide_status = 0 && set_color $tide_character_color || set_color $tide_character_color_failure
set -q add_prefix || echo -ns ' '
test "$fish_key_bindings" = fish_default_key_bindings && echo -ns $tide_character_icon ||
switch $fish_bind_mode
case insert
echo -ns $tide_character_icon
case default
echo -ns $tide_character_vi_icon_default
case replace replace_one
echo -ns $tide_character_vi_icon_replace
case visual
echo -ns $tide_character_vi_icon_visual
end
end

View File

@ -0,0 +1,3 @@
function _tide_item_chruby
test -n "$RUBY_VERSION" && _tide_print_item chruby $tide_chruby_icon' ' $RUBY_VERSION
end

View File

@ -0,0 +1,12 @@
function _tide_item_cmd_duration
test $CMD_DURATION -gt $tide_cmd_duration_threshold && t=(
math -s0 "$CMD_DURATION/3600000" # Hours
math -s0 "$CMD_DURATION/60000"%60 # Minutes
math -s$tide_cmd_duration_decimals "$CMD_DURATION/1000"%60) if test $t[1] != 0
_tide_print_item cmd_duration $tide_cmd_duration_icon' ' "$t[1]h $t[2]m $t[3]s"
else if test $t[2] != 0
_tide_print_item cmd_duration $tide_cmd_duration_icon' ' "$t[2]m $t[3]s"
else
_tide_print_item cmd_duration $tide_cmd_duration_icon' ' "$t[3]s"
end
end

View File

@ -0,0 +1,15 @@
function _tide_item_context
if set -q SSH_TTY
set -lx tide_context_color $tide_context_color_ssh
test "$tide_context_hostname_parts" = 0 && _tide_print_item context $USER ||
h=(string split . $hostname) _tide_print_item context $USER@(string join . $h[..$tide_context_hostname_parts])
else if test "$EUID" = 0
set -lx tide_context_color $tide_context_color_root
test "$tide_context_hostname_parts" = 0 && _tide_print_item context $USER ||
h=(string split . $hostname) _tide_print_item context $USER@(string join . $h[..$tide_context_hostname_parts])
else if test "$tide_context_always_display" = true
set -lx tide_context_color $tide_context_color_default
test "$tide_context_hostname_parts" = 0 && _tide_print_item context $USER ||
h=(string split . $hostname) _tide_print_item context $USER@(string join . $h[..$tide_context_hostname_parts])
end
end

View File

@ -0,0 +1,4 @@
function _tide_item_crystal
path is $_tide_parent_dirs/shard.yml &&
_tide_print_item crystal $tide_crystal_icon' ' (crystal --version | string match -r "[\d.]+")[1]
end

View File

@ -0,0 +1,7 @@
function _tide_item_direnv
set -q DIRENV_DIR || return
direnv status | string match -q 'Found RC allowed false' \
&& set -lx tide_direnv_color $tide_direnv_color_denied \
&& set -lx tide_direnv_bg_color $tide_direnv_bg_color_denied
_tide_print_item direnv $tide_direnv_icon
end

View File

@ -0,0 +1,4 @@
function _tide_item_distrobox
test -e /etc/profile.d/distrobox_profile.sh && test -e /run/.containerenv &&
_tide_print_item distrobox $tide_distrobox_icon' ' (string match -rg 'name="(.*)"' </run/.containerenv)
end

View File

@ -0,0 +1,5 @@
function _tide_item_docker
docker context inspect --format '{{.Name}}' | read -l context
contains -- "$context" $tide_docker_default_contexts ||
_tide_print_item docker $tide_docker_icon' ' $context
end

View File

@ -0,0 +1,4 @@
function _tide_item_elixir
path is $_tide_parent_dirs/mix.exs &&
_tide_print_item elixir $tide_elixir_icon' ' (elixir --short-version)
end

View File

@ -0,0 +1,8 @@
function _tide_item_gcloud
set -q CLOUDSDK_CONFIG || set -l CLOUDSDK_CONFIG ~/.config/gcloud
path is $CLOUDSDK_CONFIG/active_config \
&& read -l config <$CLOUDSDK_CONFIG/active_config \
&& path is $CLOUDSDK_CONFIG/configurations/config_$config \
&& string match -qr '^\s*project\s*=\s*(?<project>.*)' <$CLOUDSDK_CONFIG/configurations/config_$config \
&& _tide_print_item gcloud $tide_gcloud_icon' ' $project
end

View File

@ -0,0 +1,67 @@
function _tide_item_git
if git branch --show-current 2>/dev/null | string shorten -"$tide_git_truncation_strategy"m$tide_git_truncation_length | read -l location
git rev-parse --git-dir --is-inside-git-dir | read -fL gdir in_gdir
set location $_tide_location_color$location
else if test $pipestatus[1] != 0
return
else if git tag --points-at HEAD | string shorten -"$tide_git_truncation_strategy"m$tide_git_truncation_length | read location
git rev-parse --git-dir --is-inside-git-dir | read -fL gdir in_gdir
set location '#'$_tide_location_color$location
else
git rev-parse --git-dir --is-inside-git-dir --short HEAD | read -fL gdir in_gdir location
set location @$_tide_location_color$location
end
# Operation
if test -d $gdir/rebase-merge
read -f step <$gdir/rebase-merge/msgnum
read -f total_steps <$gdir/rebase-merge/end
test -f $gdir/rebase-merge/interactive && set -f operation rebase-i || set -f operation rebase-m
else if test -d $gdir/rebase-apply
read -f step <$gdir/rebase-apply/next
read -f total_steps <$gdir/rebase-apply/last
if test -f $gdir/rebase-apply/rebasing
set -f operation rebase
else if test -f $gdir/rebase-apply/applying
set -f operation am
else
set -f operation am/rebase
end
else if test -f $gdir/MERGE_HEAD
set -f operation merge
else if test -f $gdir/CHERRY_PICK_HEAD
set -f operation cherry-pick
else if test -f $gdir/REVERT_HEAD
set -f operation revert
else if test -f $gdir/BISECT_LOG
set -f operation bisect
end
# Git status/stash + Upstream behind/ahead
test $in_gdir = true && set -l _set_dir_opt -C $gdir/..
# Suppress errors in case we are in a bare repo or there is no upstream
set -l stat (git $_set_dir_opt --no-optional-locks status --porcelain 2>/dev/null)
string match -qr '(0|(?<stash>.*))\n(0|(?<conflicted>.*))\n(0|(?<staged>.*))
(0|(?<dirty>.*))\n(0|(?<untracked>.*))(\n(0|(?<behind>.*))\t(0|(?<ahead>.*)))?' \
"$(git $_set_dir_opt stash list 2>/dev/null | count
string match -r ^UU $stat | count
string match -r ^[ADMR]. $stat | count
string match -r ^.[ADMR] $stat | count
string match -r '^\?\?' $stat | count
git rev-list --count --left-right @{upstream}...HEAD 2>/dev/null)"
if test -n "$operation$conflicted"
set -g tide_git_bg_color $tide_git_bg_color_urgent
else if test -n "$staged$dirty$untracked"
set -g tide_git_bg_color $tide_git_bg_color_unstable
end
_tide_print_item git $_tide_location_color$tide_git_icon' ' (set_color white; echo -ns $location
set_color $tide_git_color_operation; echo -ns ' '$operation ' '$step/$total_steps
set_color $tide_git_color_upstream; echo -ns ' ⇣'$behind ' ⇡'$ahead
set_color $tide_git_color_stash; echo -ns ' *'$stash
set_color $tide_git_color_conflicted; echo -ns ' ~'$conflicted
set_color $tide_git_color_staged; echo -ns ' +'$staged
set_color $tide_git_color_dirty; echo -ns ' !'$dirty
set_color $tide_git_color_untracked; echo -ns ' ?'$untracked)
end

View File

@ -0,0 +1,4 @@
function _tide_item_go
path is $_tide_parent_dirs/go.mod &&
_tide_print_item go $tide_go_icon' ' (go version | string match -r "[\d.]+")
end

View File

@ -0,0 +1,4 @@
function _tide_item_java
path is $_tide_parent_dirs/pom.xml &&
_tide_print_item java $tide_java_icon' ' (java -version &| string match -r "[\d.]+")[1]
end

View File

@ -0,0 +1,3 @@
function _tide_item_jobs
set -q _tide_jobs && _tide_print_item jobs $tide_jobs_icon
end

View File

@ -0,0 +1,4 @@
function _tide_item_kubectl
kubectl config view --minify --output 'jsonpath={.current-context}/{..namespace}' 2>/dev/null | read -l context &&
_tide_print_item kubectl $tide_kubectl_icon' ' (string replace -r '/(|default)$' '' $context)
end

View File

@ -0,0 +1,3 @@
function _tide_item_nix_shell
set -q IN_NIX_SHELL && _tide_print_item nix_shell $tide_nix_shell_icon' ' $IN_NIX_SHELL
end

View File

@ -0,0 +1,4 @@
function _tide_item_node
path is $_tide_parent_dirs/package.json &&
_tide_print_item node $tide_node_icon' ' (node --version | string trim --chars=v)
end

View File

@ -0,0 +1,3 @@
function _tide_item_os
_tide_print_item os $tide_os_icon
end

View File

@ -0,0 +1,4 @@
function _tide_item_php
path is $_tide_parent_dirs/composer.json &&
_tide_print_item php $tide_php_icon' ' (php --version | string match -r 'PHP ([\d.]+)')[2]
end

View File

@ -0,0 +1,3 @@
function _tide_item_private_mode
set -q _tide_private_mode && _tide_print_item private_mode $tide_private_mode_icon
end

View File

@ -0,0 +1,19 @@
function _tide_item_pulumi
if path filter $_tide_parent_dirs/Pulumi.yaml | read -l yaml_path
if command -q sha1sum
echo -n "$yaml_path" | sha1sum | string sub -e40 | read -f path_hash
else if command -q shasum
echo -n "$yaml_path" | shasum | string sub -e40 | read -f path_hash
end
if test -n "$path_hash"
string match -rg 'name: *(.*)' <$yaml_path | read -l project_name
set -l workspace_file "$HOME/.pulumi/workspaces/$project_name-$path_hash-workspace.json"
if test -e $workspace_file
string match -rg '"stack": *"(.*)"' <$workspace_file | read -l stack
_tide_print_item pulumi $tide_pulumi_icon' ' $stack
end
end
end
end

View File

@ -0,0 +1,4 @@
function _tide_item_rustc
path is $_tide_parent_dirs/Cargo.toml &&
_tide_print_item rustc $tide_rustc_icon' ' (rustc --version | string split ' ')[2]
end

View File

@ -0,0 +1,4 @@
function _tide_item_shlvl
# Non-interactive shells do not increment SHLVL, so we don't need to subtract 1
test $SHLVL -gt $tide_shlvl_threshold && _tide_print_item shlvl $tide_shlvl_icon' ' $SHLVL
end

View File

@ -0,0 +1,15 @@
function _tide_item_status
if string match -qv 0 $_tide_pipestatus # If there is a failure anywhere in the pipestatus
if test "$_tide_pipestatus" = 1 # If simple failure
contains character $_tide_left_items || tide_status_bg_color=$tide_status_bg_color_failure \
tide_status_color=$tide_status_color_failure _tide_print_item status $tide_status_icon_failure' ' 1
else
fish_status_to_signal $_tide_pipestatus | string replace SIG '' | string join '|' | read -l out
test $_tide_status = 0 && _tide_print_item status $tide_status_icon' ' $out ||
tide_status_bg_color=$tide_status_bg_color_failure tide_status_color=$tide_status_color_failure \
_tide_print_item status $tide_status_icon_failure' ' $out
end
else if not contains character $_tide_left_items
_tide_print_item status $tide_status_icon
end
end

View File

@ -0,0 +1,6 @@
function _tide_item_terraform
if path is $_tide_parent_dirs/.terraform
terraform workspace show | read -l workspace
test $workspace != default && _tide_print_item terraform $tide_terraform_icon' ' $workspace
end
end

View File

@ -0,0 +1,3 @@
function _tide_item_time
_tide_print_item time (date +$tide_time_format)
end

View File

@ -0,0 +1,4 @@
function _tide_item_toolbox
test -e /run/.toolboxenv &&
_tide_print_item toolbox $tide_toolbox_icon' ' (string match -rg 'name="(.*)"' </run/.containerenv)
end

View File

@ -0,0 +1,16 @@
function _tide_item_vi_mode
test "$fish_key_bindings" != fish_default_key_bindings && switch $fish_bind_mode
case default
tide_vi_mode_bg_color=$tide_vi_mode_bg_color_default tide_vi_mode_color=$tide_vi_mode_color_default \
_tide_print_item vi_mode $tide_vi_mode_icon_default
case insert
tide_vi_mode_bg_color=$tide_vi_mode_bg_color_insert tide_vi_mode_color=$tide_vi_mode_color_insert \
_tide_print_item vi_mode $tide_vi_mode_icon_insert
case replace replace_one
tide_vi_mode_bg_color=$tide_vi_mode_bg_color_replace tide_vi_mode_color=$tide_vi_mode_color_replace \
_tide_print_item vi_mode $tide_vi_mode_icon_replace
case visual
tide_vi_mode_bg_color=$tide_vi_mode_bg_color_visual tide_vi_mode_color=$tide_vi_mode_color_visual \
_tide_print_item vi_mode $tide_vi_mode_icon_visual
end
end

View File

@ -0,0 +1,11 @@
function _tide_item_virtual_env
test -n "$VIRTUAL_ENV" && split_virtual_env=(string split / "$VIRTUAL_ENV") if test $split_virtual_env[-2] = virtualenvs
# pipenv $VIRTUAL_ENV looks like /home/ilan/.local/share/virtualenvs/pipenv_project-EwRYuc3l
# Detect whether we are using pipenv by looking for virtualenvs. If so, remove the hash at the end.
_tide_print_item virtual_env $tide_virtual_env_icon' ' (string split -r -m1 - "$split_virtual_env[-1]")[1]
else if contains -- $split_virtual_env[-1] virtualenv venv .venv env # avoid generic names
_tide_print_item virtual_env $tide_virtual_env_icon' ' $split_virtual_env[-2]
else
_tide_print_item virtual_env $tide_virtual_env_icon' ' $split_virtual_env[-1]
end
end

View File

@ -0,0 +1,7 @@
function _tide_parent_dirs --on-variable PWD
set -g _tide_parent_dirs (string escape (
for dir in (string split / -- $PWD)
set -la parts $dir
string join / -- $parts
end))
end

View File

@ -0,0 +1,22 @@
function _tide_print_item -a item
v=tide_"$item"_bg_color set -f item_bg_color $$v
if set -e add_prefix
set_color $item_bg_color -b normal
v=tide_"$_tide_side"_prompt_prefix echo -ns $$v
else if test "$item_bg_color" = "$prev_bg_color"
v=tide_"$_tide_side"_prompt_separator_same_color echo -ns $_tide_color_separator_same_color$$v
else if test $_tide_side = left
set_color $prev_bg_color -b $item_bg_color
echo -ns $tide_left_prompt_separator_diff_color
else
set_color $item_bg_color -b $prev_bg_color
echo -ns $tide_right_prompt_separator_diff_color
end
v=tide_"$item"_color set_color $$v -b $item_bg_color
echo -ns $_tide_pad $argv[2..] $_tide_pad
set -g prev_bg_color $item_bg_color
end

View File

@ -0,0 +1,38 @@
set_color -o $tide_pwd_color_anchors | read -l color_anchors
set_color $tide_pwd_color_truncated_dirs | read -l color_truncated
set -l reset_to_color_dirs (set_color normal -b $tide_pwd_bg_color; set_color $tide_pwd_color_dirs)
set -l unwritable_icon $tide_pwd_icon_unwritable' '
set -l home_icon $tide_pwd_icon_home' '
set -l pwd_icon $tide_pwd_icon' '
eval "function _tide_pwd
if set -l split_pwd (string replace -r '^$HOME' '~' -- \$PWD | string split /)
test -w . && set -f split_output \"$pwd_icon\$split_pwd[1]\" \$split_pwd[2..] ||
set -f split_output \"$unwritable_icon\$split_pwd[1]\" \$split_pwd[2..]
set split_output[-1] \"$color_anchors\$split_output[-1]$reset_to_color_dirs\"
else
set -f split_output \"$home_icon$color_anchors~\"
end
string join / -- \$split_output | string length -V | read -g _tide_pwd_len
i=1 for dir_section in \$split_pwd[2..-2]
string join -- / \$split_pwd[..\$i] | string replace '~' $HOME | read -l parent_dir # Uses i before increment
math \$i+1 | read i
if path is \$parent_dir/\$dir_section/\$tide_pwd_markers
set split_output[\$i] \"$color_anchors\$dir_section$reset_to_color_dirs\"
else if test \$_tide_pwd_len -gt \$dist_btwn_sides
set -l trunc
string match -qr \"(?<trunc>\..|.)\" \$dir_section
while v=\$parent_dir/\$trunc*/ set -q v[2] && string match -qr \"(?<trunc>\$trunc.)\" \$dir_section
end
test -n \"\$trunc\" && set split_output[\$i] \"$color_truncated\$trunc$reset_to_color_dirs\" &&
string join / \$split_output | string length -V | read _tide_pwd_len
end
end
string join -- / \"$reset_to_color_dirs\$split_output[1]\" \$split_output[2..]
end"

View File

@ -0,0 +1,25 @@
function _tide_remove_unusable_items
# Remove tool-specific items for tools the machine doesn't have installed
set -l removed_items
for item in aws chruby crystal direnv distrobox docker elixir gcloud git go java kubectl nix_shell node php pulumi rustc terraform toolbox virtual_env
contains $item $tide_left_prompt_items $tide_right_prompt_items || continue
set -l cli_names $item
switch $item
case distrobox # there is no 'distrobox' command inside the container
set cli_names distrobox-export # 'distrobox-export' and 'distrobox-host-exec' are available
case virtual_env
set cli_names python python3
case nix_shell
set cli_names nix nix-shell
end
type --query $cli_names || set -a removed_items $item
end
set -U _tide_left_items (for item in $tide_left_prompt_items
contains $item $removed_items || echo $item
end)
set -U _tide_right_items (for item in $tide_right_prompt_items
contains $item $removed_items || echo $item
end)
end

View File

@ -0,0 +1,73 @@
function _tide_sub_bug-report
argparse c/clean v/verbose check -- $argv
set -l fish_path (status fish-path)
if set -q _flag_clean
HOME=(mktemp -d) $fish_path --init-command "curl --silent \
https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish |
source && fisher install ilancosman/tide@v5"
else if set -q _flag_verbose
set --long | string match -r "^_?tide.*" | # Get only tide variables
string match -r --invert "^_tide_prompt_var.*" # Remove _tide_prompt_var
else
set -l fish_version ($fish_path --version | string match -r "fish, version (\d\.\d\.\d)")[2]
_tide_check_version Fish fish-shell/fish-shell "(\d\.\d\.\d)" $fish_version || return
set -l tide_version (tide --version | string match -r "tide, version (\d\.\d\.\d)")[2]
_tide_check_version Tide IlanCosman/tide "v(\d\.\d\.\d)" $tide_version || return
if command --query git
test (git --version | string match -r "git version ([\d\.]*)" | string replace --all . '')[2] -gt 2220
_tide_check_condition \
"Your git version is too old." \
"Tide requires at least version 2.22." \
"Please update before submitting a bug report." || return
end
# Check that omf is not installed
not functions --query omf
_tide_check_condition \
"Tide does not work with oh-my-fish installed." \
"Please uninstall it before submitting a bug report." || return
if not set -q _flag_check
set -l fish_startup_time ($fish_path -ic "time $fish_path -c exit" 2>|
string match -r "Executed in(.*)fish" | string trim)[2]
read --local --prompt-str "What operating system are you using? (e.g Ubuntu 20.04): " os
read --local --prompt-str "What terminal emulator are you using? (e.g Kitty): " terminal_emulator
printf '%b\n' "\nPlease copy the following information into the issue:\n" \
"fish version: $fish_version" \
"tide version: $tide_version" \
"term: $TERM" \
"os: $os" \
"terminal emulator: $terminal_emulator" \
"fish startup: $fish_startup_time" \
"fisher plugins: $_fisher_plugins"
end
end
end
function _tide_check_version -a program_name repo_name regex_to_get_version current_version
curl --silent https://github.com/$repo_name/releases/latest |
string match -r ".*$repo_name/releases/tag/$regex_to_get_version.*" |
read --local --line __ latestVersion
string match --quiet -r "^$latestVersion" "$current_version"
_tide_check_condition \
"Your $program_name version is out of date." \
"The latest is $latestVersion. You have $current_version." \
"Please update before submitting a bug report."
end
function _tide_check_condition
if test "$status" != 0
set_color red
printf '%s\n' $argv
set_color normal
return 1
end
return 0
end

View File

@ -0,0 +1,95 @@
set -g _tide_color_dark_blue 0087AF
set -g _tide_color_dark_green 5FAF00
set -g _tide_color_gold D7AF00
set -g _tide_color_green 5FD700
set -g _tide_color_light_blue 00AFFF
# Create an empty fake function for each item
for func in _fake(functions --all | string match --entire _tide_item)
function $func
end
end
for file in (status dirname)/tide/configure/{choices, functions}/**.fish
source $file
end
function _tide_sub_configure
if test $COLUMNS -lt 55 -o $LINES -lt 21
echo 'Terminal size too small; must be at least 55 x 21'
return 1
end
_tide_detect_os | read -g --line os_branding_icon os_branding_color os_branding_bg_color
set -g fake_columns $COLUMNS
test $fake_columns -gt 90 && set fake_columns 90
set -g fake_lines $LINES
set -g _tide_selected_option
_next_choice all/style
end
function _next_choice -a nextChoice
set -q _tide_selected_option || return 0
set -l cmd (string split '/' $nextChoice)[2]
$cmd
end
function _tide_title -a text
command -q clear && clear
set_color -o
string pad --width (math --scale=0 "$fake_columns/2" + (string length $text)/2) $text
set_color normal
end
function _tide_option -a symbol text
set -ga _tide_option_list $symbol
set_color -o
echo "($symbol) $text"
set_color normal
end
function _tide_menu
set -l list_with_slashes (string join '/' $_tide_option_list)
echo '(r) Restart from the beginning'
echo '(q) Quit and do nothing'\n
while true
set_color -o
read --nchars 1 --prompt-str "Choice [$list_with_slashes/r/q] " input
set_color normal
switch $input
case r
set -e _tide_option_list
_next_choice all/style
break
case q
set -e _tide_selected_option # Skip through all the _next_choices
set -e _tide_option_list
command -q clear && clear
break
case $_tide_option_list
set -e _tide_option_list
set -g _tide_selected_option $input
break
end
end
end
function _tide_display_prompt -a var_name var_value
test -n "$var_name" && set -g $var_name $var_value
_fake_tide_cache_variables
set -l prompt (_fake_tide_prompt)
set -l bottom_left_prompt_string_length (string length --visible $prompt[-1])
set -l right_prompt_string (string pad --width (math $fake_columns-$bottom_left_prompt_string_length) $prompt[1])
set -l prompt[-1] "$prompt[-1]$right_prompt_string"
string unescape $prompt[2..]
set_color normal
echo
end

View File

@ -0,0 +1 @@
# Disable default vi prompt

View File

@ -0,0 +1,90 @@
function fish_prompt
end # In case this file gets loaded non-interactively, e.g by conda
status is-interactive || exit
_tide_remove_unusable_items
_tide_cache_variables
_tide_parent_dirs
source (functions --details _tide_pwd)
set -l prompt_var _tide_prompt_$fish_pid
set -U $prompt_var # Set var here so if we erase $prompt_var, bg job won't set a uvar
set_color normal | read -l color_normal
status fish-path | read -l fish_path
# _tide_repaint prevents us from creating a second background job
function _tide_refresh_prompt --on-variable $prompt_var --on-variable COLUMNS
set -g _tide_repaint
commandline -f repaint
end
if contains newline $_tide_left_items # two line prompt initialization
test "$tide_prompt_add_newline_before" = true && set -l add_newline '\n'
set_color $tide_prompt_color_frame_and_connection -b normal | read -l prompt_and_frame_color
set -l column_offset 5
test "$tide_left_prompt_frame_enabled" = true &&
set -l top_left_frame "$prompt_and_frame_color╭─" &&
set -l bot_left_frame "$prompt_and_frame_color╰─" &&
set column_offset (math $column_offset-2)
test "$tide_right_prompt_frame_enabled" = true &&
set -l top_right_frame "$prompt_and_frame_color─╮" &&
set -l bot_right_frame "$prompt_and_frame_color─╯" &&
set column_offset (math $column_offset-2)
eval "
function fish_prompt
_tide_status=\$status _tide_pipestatus=\$pipestatus if not set -e _tide_repaint
jobs -q && set -lx _tide_jobs
$fish_path -c \"set _tide_pipestatus \$_tide_pipestatus
set _tide_parent_dirs \$_tide_parent_dirs
PATH=\$(string escape \"\$PATH\") CMD_DURATION=\$CMD_DURATION fish_bind_mode=\$fish_bind_mode set $prompt_var (_tide_2_line_prompt)\" &
builtin disown
command kill \$_tide_last_pid 2>/dev/null
set -g _tide_last_pid \$last_pid
end
math \$COLUMNS-(string length -V \"\$$prompt_var[1][1]\$$prompt_var[1][3]\")+$column_offset | read -lx dist_btwn_sides
echo -ns $add_newline'$top_left_frame'(string replace @PWD@ (_tide_pwd) \"\$$prompt_var[1][1]\")'$prompt_and_frame_color'
string repeat -Nm(math max 0, \$dist_btwn_sides-\$_tide_pwd_len) '$tide_prompt_icon_connection'
echo -ns \"\$$prompt_var[1][3]$top_right_frame\"\n\"$bot_left_frame\$$prompt_var[1][2]$color_normal \"
end
function fish_right_prompt
string unescape \"\$$prompt_var[1][4]$bot_right_frame$color_normal\"
end"
else # one line prompt initialization
test "$tide_prompt_add_newline_before" = true && set -l add_newline '\0'
math 5 -$tide_prompt_min_cols | read -l column_offset
test $column_offset -ge 0 && set column_offset "+$column_offset"
eval "
function fish_prompt
_tide_status=\$status _tide_pipestatus=\$pipestatus if not set -e _tide_repaint
jobs -q && set -lx _tide_jobs
$fish_path -c \"set _tide_pipestatus \$_tide_pipestatus
set _tide_parent_dirs \$_tide_parent_dirs
PATH=\$(string escape \"\$PATH\") CMD_DURATION=\$CMD_DURATION fish_bind_mode=\$fish_bind_mode set $prompt_var (_tide_1_line_prompt)\" &
builtin disown
command kill \$_tide_last_pid 2>/dev/null
set -g _tide_last_pid \$last_pid
end
math \$COLUMNS-(string length -V \"\$$prompt_var[1][1]\$$prompt_var[1][2]\")$column_offset | read -lx dist_btwn_sides
string replace @PWD@ (_tide_pwd) $add_newline \$$prompt_var[1][1]'$color_normal '
end
function fish_right_prompt
string unescape \"\$$prompt_var[1][2]$color_normal\"
end"
end
eval "function _tide_on_fish_exit --on-event fish_exit
set -e $prompt_var
end"

240
fish/functions/fisher.fish Normal file
View File

@ -0,0 +1,240 @@
function fisher --argument-names cmd --description "A plugin manager for Fish"
set --query fisher_path || set --local fisher_path $__fish_config_dir
set --local fisher_version 4.4.5
set --local fish_plugins $__fish_config_dir/fish_plugins
switch "$cmd"
case -v --version
echo "fisher, version $fisher_version"
case "" -h --help
echo "Usage: fisher install <plugins...> Install plugins"
echo " fisher remove <plugins...> Remove installed plugins"
echo " fisher update <plugins...> Update installed plugins"
echo " fisher update Update all installed plugins"
echo " fisher list [<regex>] List installed plugins matching regex"
echo "Options:"
echo " -v, --version Print version"
echo " -h, --help Print this help message"
echo "Variables:"
echo " \$fisher_path Plugin installation path. Default: $__fish_config_dir" | string replace --regex -- $HOME \~
case ls list
string match --entire --regex -- "$argv[2]" $_fisher_plugins
case install update remove
isatty || read --local --null --array stdin && set --append argv $stdin
set --local install_plugins
set --local update_plugins
set --local remove_plugins
set --local arg_plugins $argv[2..-1]
set --local old_plugins $_fisher_plugins
set --local new_plugins
test -e $fish_plugins && set --local file_plugins (string match --regex -- '^[^\s]+$' <$fish_plugins | string replace -- \~ ~)
if ! set --query argv[2]
if test "$cmd" != update
echo "fisher: Not enough arguments for command: \"$cmd\"" >&2 && return 1
else if ! set --query file_plugins
echo "fisher: \"$fish_plugins\" file not found: \"$cmd\"" >&2 && return 1
end
set arg_plugins $file_plugins
end
for plugin in $arg_plugins
set plugin (test -e "$plugin" && realpath $plugin || string lower -- $plugin)
contains -- "$plugin" $new_plugins || set --append new_plugins $plugin
end
if set --query argv[2]
for plugin in $new_plugins
if contains -- "$plugin" $old_plugins
test "$cmd" = remove &&
set --append remove_plugins $plugin ||
set --append update_plugins $plugin
else if test "$cmd" = install
set --append install_plugins $plugin
else
echo "fisher: Plugin not installed: \"$plugin\"" >&2 && return 1
end
end
else
for plugin in $new_plugins
contains -- "$plugin" $old_plugins &&
set --append update_plugins $plugin ||
set --append install_plugins $plugin
end
for plugin in $old_plugins
contains -- "$plugin" $new_plugins || set --append remove_plugins $plugin
end
end
set --local pid_list
set --local source_plugins
set --local fetch_plugins $update_plugins $install_plugins
set --local fish_path (status fish-path)
echo (set_color --bold)fisher $cmd version $fisher_version(set_color normal)
for plugin in $fetch_plugins
set --local source (command mktemp -d)
set --append source_plugins $source
command mkdir -p $source/{completions,conf.d,themes,functions}
$fish_path --command "
if test -e $plugin
command cp -Rf $plugin/* $source
else
set temp (command mktemp -d)
set repo (string split -- \@ $plugin) || set repo[2] HEAD
if set path (string replace --regex -- '^(https://)?gitlab.com/' '' \$repo[1])
set name (string split -- / \$path)[-1]
set url https://gitlab.com/\$path/-/archive/\$repo[2]/\$name-\$repo[2].tar.gz
else
set url https://api.github.com/repos/\$repo[1]/tarball/\$repo[2]
end
echo Fetching (set_color --underline)\$url(set_color normal)
if command curl -q --silent -L \$url | command tar -xzC \$temp -f - 2>/dev/null
command cp -Rf \$temp/*/* $source
else
echo fisher: Invalid plugin name or host unavailable: \\\"$plugin\\\" >&2
command rm -rf $source
end
command rm -rf \$temp
end
set files $source/* && string match --quiet --regex -- .+\.fish\\\$ \$files
" &
set --append pid_list (jobs --last --pid)
end
wait $pid_list 2>/dev/null
for plugin in $fetch_plugins
if set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] && test ! -e $source
if set --local index (contains --index -- "$plugin" $install_plugins)
set --erase install_plugins[$index]
else
set --erase update_plugins[(contains --index -- "$plugin" $update_plugins)]
end
end
end
for plugin in $update_plugins $remove_plugins
if set --local index (contains --index -- "$plugin" $_fisher_plugins)
set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files
if contains -- "$plugin" $remove_plugins
for name in (string replace --filter --regex -- '.+/conf\.d/([^/]+)\.fish$' '$1' $$plugin_files_var)
emit {$name}_uninstall
end
printf "%s\n" Removing\ (set_color red --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~
set --erase _fisher_plugins[$index]
end
command rm -rf (string replace -- \~ ~ $$plugin_files_var)
functions --erase (string replace --filter --regex -- '.+/functions/([^/]+)\.fish$' '$1' $$plugin_files_var)
for name in (string replace --filter --regex -- '.+/completions/([^/]+)\.fish$' '$1' $$plugin_files_var)
complete --erase --command $name
end
set --erase $plugin_files_var
end
end
if set --query update_plugins[1] || set --query install_plugins[1]
command mkdir -p $fisher_path/{functions,themes,conf.d,completions}
end
for plugin in $update_plugins $install_plugins
set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)]
set --local files $source/{functions,themes,conf.d,completions}/*
if set --local index (contains --index -- $plugin $install_plugins)
set --local user_files $fisher_path/{functions,themes,conf.d,completions}/*
set --local conflict_files
for file in (string replace -- $source/ $fisher_path/ $files)
contains -- $file $user_files && set --append conflict_files $file
end
if set --query conflict_files[1] && set --erase install_plugins[$index]
echo -s "fisher: Cannot install \"$plugin\": please remove or move conflicting files first:" \n" "$conflict_files >&2
continue
end
end
for file in (string replace -- $source/ "" $files)
command cp -RLf $source/$file $fisher_path/$file
end
set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files
set --query files[1] && set --universal $plugin_files_var (string replace -- $source $fisher_path $files | string replace -- ~ \~)
contains -- $plugin $_fisher_plugins || set --universal --append _fisher_plugins $plugin
contains -- $plugin $install_plugins && set --local event install || set --local event update
printf "%s\n" Installing\ (set_color --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~
for file in (string match --regex -- '.+/[^/]+\.fish$' $$plugin_files_var | string replace -- \~ ~)
source $file
if set --local name (string replace --regex -- '.+conf\.d/([^/]+)\.fish$' '$1' $file)
emit {$name}_$event
end
end
end
command rm -rf $source_plugins
if set --query _fisher_plugins[1]
set --local commit_plugins
for plugin in $file_plugins
contains -- (string lower -- $plugin) (string lower -- $_fisher_plugins) && set --append commit_plugins $plugin
end
for plugin in $_fisher_plugins
contains -- (string lower -- $plugin) (string lower -- $commit_plugins) || set --append commit_plugins $plugin
end
string replace --regex -- $HOME \~ $commit_plugins >$fish_plugins
else
set --erase _fisher_plugins
command rm -f $fish_plugins
end
set --local total (count $install_plugins) (count $update_plugins) (count $remove_plugins)
test "$total" != "0 0 0" && echo (string join ", " (
test $total[1] = 0 || echo "Installed $total[1]") (
test $total[2] = 0 || echo "Updated $total[2]") (
test $total[3] = 0 || echo "Removed $total[3]")
) plugin/s
case \*
echo "fisher: Unknown command: \"$cmd\"" >&2 && return 1
end
end
if ! set --query _fisher_upgraded_to_4_4
set --universal _fisher_upgraded_to_4_4
if functions --query _fisher_list
set --query XDG_DATA_HOME[1] || set --local XDG_DATA_HOME ~/.local/share
command rm -rf $XDG_DATA_HOME/fisher
functions --erase _fisher_{list,plugin_parse}
fisher update >/dev/null 2>/dev/null
else
for var in (set --names | string match --entire --regex '^_fisher_.+_files$')
set $var (string replace -- ~ \~ $$var)
end
functions --erase _fisher_fish_postexec
end
end

27
fish/functions/tide.fish Normal file
View File

@ -0,0 +1,27 @@
function tide --description 'Manage your Tide prompt'
argparse --stop-nonopt v/version h/help -- $argv
if set -q _flag_version
echo 'tide, version 5.6.0'
else if set -q _flag_help
_tide_help
else if functions --query _tide_sub_$argv[1]
_tide_sub_$argv[1] $argv[2..]
else
_tide_help
return 1
end
end
function _tide_help
printf %s\n \
'Usage: tide [options] subcommand [options]' \
'' \
'Options:' \
' -v or --version print tide version number' \
' -h or --help print this help message' \
'' \
'Subcommands:' \
' configure run interactive configuration wizard' \
' bug-report print info for use in bug reports'
end

View File

@ -0,0 +1,33 @@
function finish
set_color red
_tide_title 'Overwrite tide config?'
set_color normal
_tide_option y Yes
echo
_tide_menu
switch $_tide_selected_option
case y
_tide_finish
command -q clear && clear
end
end
function _tide_finish
set -e _tide_selected_option # Skip through all the _next_choices
# Deal with prompt char/vi mode
contains character $fake_tide_left_prompt_items || set -p fake_tide_left_prompt_items vi_mode
# Set the real variables
for fakeVar in (set --names | string match -r "^fake_tide.*")
set -U (string replace 'fake_' '' $fakeVar) $$fakeVar
end
# Make sure old prompt won't display
set -e $_tide_prompt_var 2>/dev/null
# Re-initialize the prompt
source (functions --details fish_prompt)
end

View File

@ -0,0 +1,33 @@
function icons
_tide_title Icons
_tide_option 1 'Few icons'
_tide_display_prompt
_tide_option 2 'Many icons'
_enable_icons
_tide_display_prompt
_tide_menu
switch $_tide_selected_option
case 1
_disable_icons
end
_next_choice all/finish
end
function _enable_icons
set -p fake_tide_left_prompt_items os
set -g fake_tide_pwd_icon
set -g fake_tide_pwd_icon_home
set -g fake_tide_cmd_duration_icon
set -g fake_tide_git_icon
end
function _disable_icons
_tide_find_and_remove os fake_tide_left_prompt_items
set fake_tide_pwd_icon
set fake_tide_pwd_icon_home
set fake_tide_cmd_duration_icon
set fake_tide_git_icon
end

View File

@ -0,0 +1,26 @@
function prompt_colors
_tide_title 'Prompt Colors'
_tide_option 1 'True color'
_tide_display_prompt
_tide_option 2 '16 colors'
_load_config "$_tide_configure_style"_16color
set -g _tide_16color true
_tide_display_prompt
_tide_menu
switch $_tide_selected_option
case 1
_load_config "$_tide_configure_style"
set -e _tide_16color
switch $_tide_configure_style
case lean rainbow
_next_choice all/show_time
case classic
_next_choice classic/classic_prompt_color
end
case 2
_next_choice all/show_time
end
end

View File

@ -0,0 +1,28 @@
function prompt_connection
_tide_title 'Prompt Connection'
_tide_option 1 Disconnected
_tide_display_prompt fake_tide_prompt_icon_connection ' '
_tide_option 2 Dotted
_tide_display_prompt fake_tide_prompt_icon_connection '·'
_tide_option 3 Solid
_tide_display_prompt fake_tide_prompt_icon_connection '─'
_tide_menu
switch $_tide_selected_option
case 1
set -g fake_tide_prompt_icon_connection ' '
case 2
set -g fake_tide_prompt_icon_connection '·'
case 3
set -g fake_tide_prompt_icon_connection '─'
end
switch $_tide_configure_style
case lean
_next_choice all/prompt_connection_andor_frame_color
case classic rainbow
_next_choice powerline/powerline_prompt_frame
end
end

View File

@ -0,0 +1,36 @@
function prompt_connection_andor_frame_color
if test "$_tide_16color" = true ||
test "$fake_tide_left_prompt_frame_enabled" = false -a \
"$fake_tide_right_prompt_frame_enabled" = false -a \
"$fake_tide_prompt_icon_connection" = ' '
_next_choice all/prompt_spacing
return 0
end
_tide_title "Connection & Frame Color"
_tide_option 1 Lightest
_tide_display_prompt fake_tide_prompt_color_frame_and_connection 808080
_tide_option 2 Light
_tide_display_prompt fake_tide_prompt_color_frame_and_connection 6C6C6C
_tide_option 3 Dark
_tide_display_prompt fake_tide_prompt_color_frame_and_connection 585858
_tide_option 4 Darkest
_tide_display_prompt fake_tide_prompt_color_frame_and_connection 444444
_tide_menu
switch $_tide_selected_option
case 1
set -g fake_tide_prompt_color_frame_and_connection 808080
case 2
set -g fake_tide_prompt_color_frame_and_connection 6C6C6C
case 3
set -g fake_tide_prompt_color_frame_and_connection 585858
case 4
set -g fake_tide_prompt_color_frame_and_connection 444444
end
_next_choice all/prompt_spacing
end

View File

@ -0,0 +1,21 @@
function prompt_spacing
_tide_title 'Prompt Spacing'
_tide_option 1 Compact
_tide_display_prompt
printf \e\[1A # Move cursor up 1 row
_tide_display_prompt
_tide_option 2 Sparse
_tide_display_prompt
_tide_display_prompt
_tide_menu
switch $_tide_selected_option
case 1
set -g fake_tide_prompt_add_newline_before false
case 2
set -g fake_tide_prompt_add_newline_before true
end
_next_choice all/icons
end

View File

@ -0,0 +1,31 @@
function show_time
_tide_title 'Show current time?'
_tide_option 1 No
_tide_display_prompt
set -a fake_tide_right_prompt_items time
_tide_option 2 '24-hour format'
_tide_display_prompt fake_tide_time_format %T
_tide_option 3 '12-hour format'
_tide_display_prompt fake_tide_time_format '%r'
_tide_menu
switch $_tide_selected_option
case 1
set -g fake_tide_time_format ''
set -e fake_tide_right_prompt_items[-1]
case 2
set -g fake_tide_time_format %T
case 3
set -g fake_tide_time_format '%r'
end
switch $_tide_configure_style
case lean
_next_choice "$_tide_configure_style"/"$_tide_configure_style"_prompt_height
case classic rainbow
_next_choice "$_tide_configure_style"/"$_tide_configure_style"_prompt_separators
end
end

View File

@ -0,0 +1,57 @@
function style
_tide_title 'Prompt Style'
_tide_option 1 Lean
_load_config lean
_tide_display_prompt
_tide_option 2 Classic
_load_config classic
_tide_display_prompt
_tide_option 3 Rainbow
_load_config rainbow
_tide_display_prompt
_tide_style_menu
switch $_tide_selected_option
case 1
_load_config lean
set -g _tide_configure_style lean
case 2
_load_config classic
set -g _tide_configure_style classic
case 3
_load_config rainbow
set -g _tide_configure_style rainbow
end
_next_choice all/prompt_colors
end
function _load_config -a name
string replace -r '^' 'set -g fake_' <(status dirname)/../../configs/$name.fish | source
end
function _tide_style_menu # Exactly like _tide_menu except that it doesn't have (r) option
set -l list_with_slashes (string join '/' $_tide_option_list)
echo '(q) Quit and do nothing'\n
while true
set_color -o
read --nchars 1 --prompt-str "Choice [$list_with_slashes/q] " input
set_color normal
switch $input
case q
set -e _tide_selected_option # Skip through all the _next_choices
set -e _tide_option_list
command -q clear && clear
break
case $_tide_option_list
set -e _tide_option_list
set -g _tide_selected_option $input
break
end
end
end

View File

@ -0,0 +1,38 @@
function classic_prompt_color
_tide_title 'Prompt Color'
_tide_option 1 Lightest
_set_all_items_bg_color 585858
_tide_display_prompt
_tide_option 2 Light
_set_all_items_bg_color 444444
_tide_display_prompt
_tide_option 3 Dark
_set_all_items_bg_color 303030
_tide_display_prompt
_tide_option 4 Darkest
_set_all_items_bg_color 1C1C1C
_tide_display_prompt
_tide_menu
switch $_tide_selected_option
case 1
_set_all_items_bg_color 585858
case 2
_set_all_items_bg_color 444444
case 3
_set_all_items_bg_color 303030
case 4
_set_all_items_bg_color 1C1C1C
end
_next_choice all/show_time
end
function _set_all_items_bg_color -a color
for var in (set --names | string match -r "fake_.*_bg_color.*")
set $var $color
end
end

View File

@ -0,0 +1,40 @@
function classic_prompt_separators
_tide_title 'Prompt Separators'
_tide_option 1 Angled
set -g fake_tide_left_prompt_separator_same_color
set -g fake_tide_right_prompt_separator_same_color
_tide_display_prompt
_tide_option 2 Vertical
set -g fake_tide_left_prompt_separator_same_color '│'
set -g fake_tide_right_prompt_separator_same_color '│'
_tide_display_prompt
_tide_option 3 Slanted
set -g fake_tide_left_prompt_separator_same_color ''
set -g fake_tide_right_prompt_separator_same_color ''
_tide_display_prompt
_tide_option 4 Round
set -g fake_tide_left_prompt_separator_same_color ''
set -g fake_tide_right_prompt_separator_same_color ''
_tide_display_prompt
_tide_menu
switch $_tide_selected_option
case 1
set -g fake_tide_left_prompt_separator_same_color
set -g fake_tide_right_prompt_separator_same_color
case 2
set -g fake_tide_left_prompt_separator_same_color '│'
set -g fake_tide_right_prompt_separator_same_color '│'
case 3
set -g fake_tide_left_prompt_separator_same_color ''
set -g fake_tide_right_prompt_separator_same_color ''
case 4
set -g fake_tide_left_prompt_separator_same_color ''
set -g fake_tide_right_prompt_separator_same_color ''
end
_next_choice powerline/powerline_prompt_heads
end

View File

@ -0,0 +1,26 @@
function lean_prompt_height
_tide_title 'Prompt Height'
_tide_option 1 'One line'
_tide_find_and_remove newline fake_tide_left_prompt_items
set -g fake_tide_left_prompt_suffix ''
_tide_display_prompt
_tide_option 2 'Two lines'
set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items[1..-2] newline $fake_tide_left_prompt_items[-1]
set -g fake_tide_left_prompt_suffix ' '
_tide_display_prompt
_tide_menu
switch $_tide_selected_option
case 1
_tide_find_and_remove newline fake_tide_left_prompt_items
set fake_tide_left_prompt_suffix ''
_next_choice all/prompt_connection_andor_frame_color
case 2
_tide_find_and_remove newline fake_tide_left_prompt_items
set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items[1..-2] newline $fake_tide_left_prompt_items[-1]
set -g fake_tide_left_prompt_suffix ' '
_next_choice all/prompt_connection
end
end

View File

@ -0,0 +1,46 @@
function powerline_prompt_frame
_tide_title 'Prompt Frame'
_tide_option 1 'No frame'
set fake_tide_left_prompt_frame_enabled false
set fake_tide_right_prompt_frame_enabled false
set -a fake_tide_left_prompt_items character
_tide_display_prompt
set -e fake_tide_left_prompt_items[-1]
_tide_option 2 Left
set fake_tide_left_prompt_frame_enabled true
set fake_tide_right_prompt_frame_enabled false
_tide_display_prompt
_tide_option 3 Right
set fake_tide_left_prompt_frame_enabled false
set fake_tide_right_prompt_frame_enabled true
set -a fake_tide_left_prompt_items character
_tide_display_prompt
set -e fake_tide_left_prompt_items[-1]
_tide_option 4 Full
set fake_tide_left_prompt_frame_enabled true
set fake_tide_right_prompt_frame_enabled true
_tide_display_prompt
_tide_menu
switch $_tide_selected_option
case 1
set fake_tide_left_prompt_frame_enabled false
set fake_tide_right_prompt_frame_enabled false
set -a fake_tide_left_prompt_items character
case 2
set fake_tide_left_prompt_frame_enabled true
set fake_tide_right_prompt_frame_enabled false
case 3
set fake_tide_left_prompt_frame_enabled false
set fake_tide_right_prompt_frame_enabled true
set -a fake_tide_left_prompt_items character
case 4
set fake_tide_left_prompt_frame_enabled true
set fake_tide_right_prompt_frame_enabled true
end
_next_choice all/prompt_connection_andor_frame_color
end

View File

@ -0,0 +1,40 @@
function powerline_prompt_heads
_tide_title 'Prompt Heads'
_tide_option 1 Sharp
set -g fake_tide_left_prompt_suffix
set -g fake_tide_right_prompt_prefix
_tide_display_prompt
_tide_option 2 Blurred
set -g fake_tide_left_prompt_suffix '▓▒░'
set -g fake_tide_right_prompt_prefix '░▒▓'
_tide_display_prompt
_tide_option 3 Slanted
set -g fake_tide_left_prompt_suffix ''
set -g fake_tide_right_prompt_prefix ''
_tide_display_prompt
_tide_option 4 Round
set -g fake_tide_left_prompt_suffix ''
set -g fake_tide_right_prompt_prefix ''
_tide_display_prompt
_tide_menu
switch $_tide_selected_option
case 1
set -g fake_tide_left_prompt_suffix
set -g fake_tide_right_prompt_prefix
case 2
set -g fake_tide_left_prompt_suffix '▓▒░'
set -g fake_tide_right_prompt_prefix '░▒▓'
case 3
set -g fake_tide_left_prompt_suffix ''
set -g fake_tide_right_prompt_prefix ''
case 4
set -g fake_tide_left_prompt_suffix ''
set -g fake_tide_right_prompt_prefix ''
end
_next_choice powerline/powerline_prompt_tails
end

View File

@ -0,0 +1,30 @@
function powerline_prompt_height
_tide_title 'Prompt Height'
_tide_option 1 'One line'
_tide_find_and_remove newline fake_tide_left_prompt_items
set fake_tide_left_prompt_frame_enabled false
set fake_tide_right_prompt_frame_enabled false
_tide_display_prompt
_tide_option 2 'Two lines'
set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items newline
set fake_tide_left_prompt_frame_enabled true
set fake_tide_right_prompt_frame_enabled true
_tide_display_prompt
_tide_menu
switch $_tide_selected_option
case 1
_tide_find_and_remove newline fake_tide_left_prompt_items
set fake_tide_left_prompt_frame_enabled false
set fake_tide_right_prompt_frame_enabled false
_next_choice all/prompt_connection_andor_frame_color
case 2
_tide_find_and_remove newline fake_tide_left_prompt_items
set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items newline
set fake_tide_left_prompt_frame_enabled true
set fake_tide_right_prompt_frame_enabled true
_next_choice all/prompt_connection
end
end

View File

@ -0,0 +1,48 @@
function powerline_prompt_tails
_tide_title 'Prompt Tails'
_tide_option 1 Flat
set -g fake_tide_left_prompt_prefix ''
set -g fake_tide_right_prompt_suffix ''
_tide_display_prompt
_tide_option 2 Blurred
set -g fake_tide_left_prompt_prefix '░▒▓'
set -g fake_tide_right_prompt_suffix '▓▒░'
_tide_display_prompt
_tide_option 3 Sharp
set -g fake_tide_left_prompt_prefix
set -g fake_tide_right_prompt_suffix
_tide_display_prompt
_tide_option 4 Slanted
set -g fake_tide_left_prompt_prefix ''
set -g fake_tide_right_prompt_suffix ''
_tide_display_prompt
_tide_option 5 Round
set -g fake_tide_left_prompt_prefix ''
set -g fake_tide_right_prompt_suffix ''
_tide_display_prompt
_tide_menu
switch $_tide_selected_option
case 1
set -g fake_tide_left_prompt_prefix ''
set -g fake_tide_right_prompt_suffix ''
case 2
set -g fake_tide_left_prompt_prefix '░▒▓'
set -g fake_tide_right_prompt_suffix '▓▒░'
case 3
set -g fake_tide_left_prompt_prefix
set -g fake_tide_right_prompt_suffix
case 4
set -g fake_tide_left_prompt_prefix ''
set -g fake_tide_right_prompt_suffix ''
case 5
set -g fake_tide_left_prompt_prefix ''
set -g fake_tide_right_prompt_suffix ''
end
_next_choice powerline/powerline_prompt_height
end

View File

@ -0,0 +1,40 @@
function rainbow_prompt_separators
_tide_title 'Prompt Separators'
_tide_option 1 Angled
set -g fake_tide_left_prompt_separator_diff_color
set -g fake_tide_right_prompt_separator_diff_color
_tide_display_prompt
_tide_option 2 Vertical
set -g fake_tide_left_prompt_separator_diff_color ''
set -g fake_tide_right_prompt_separator_diff_color ''
_tide_display_prompt
_tide_option 3 Slanted
set -g fake_tide_left_prompt_separator_diff_color ''
set -g fake_tide_right_prompt_separator_diff_color ''
_tide_display_prompt
_tide_option 4 Round
set -g fake_tide_left_prompt_separator_diff_color ''
set -g fake_tide_right_prompt_separator_diff_color ''
_tide_display_prompt
_tide_menu
switch $_tide_selected_option
case 1
set -g fake_tide_left_prompt_separator_diff_color
set -g fake_tide_right_prompt_separator_diff_color
case 2
set -g fake_tide_left_prompt_separator_diff_color ''
set -g fake_tide_right_prompt_separator_diff_color ''
case 3
set -g fake_tide_left_prompt_separator_diff_color ''
set -g fake_tide_right_prompt_separator_diff_color ''
case 4
set -g fake_tide_left_prompt_separator_diff_color ''
set -g fake_tide_right_prompt_separator_diff_color ''
end
_next_choice powerline/powerline_prompt_heads
end

View File

@ -0,0 +1,151 @@
tide_aws_bg_color 444444
tide_aws_color FF9900
tide_aws_icon
tide_character_color $_tide_color_green
tide_character_color_failure FF0000
tide_character_icon
tide_character_vi_icon_default
tide_character_vi_icon_replace
tide_character_vi_icon_visual V
tide_chruby_bg_color 444444
tide_chruby_color B31209
tide_chruby_icon
tide_cmd_duration_bg_color 444444
tide_cmd_duration_color 87875F
tide_cmd_duration_decimals 0
tide_cmd_duration_icon
tide_cmd_duration_threshold 3000
tide_context_always_display false
tide_context_bg_color 444444
tide_context_color_default D7AF87
tide_context_color_root $_tide_color_gold
tide_context_color_ssh D7AF87
tide_context_hostname_parts 1
tide_crystal_bg_color 444444
tide_crystal_color FFFFFF
tide_crystal_icon
tide_direnv_bg_color 444444
tide_direnv_bg_color_denied 444444
tide_direnv_color $_tide_color_gold
tide_direnv_color_denied FF0000
tide_direnv_icon
tide_distrobox_bg_color 444444
tide_distrobox_color FF00FF
tide_distrobox_icon
tide_docker_bg_color 444444
tide_docker_color 2496ED
tide_docker_default_contexts default colima
tide_docker_icon
tide_elixir_bg_color 444444
tide_elixir_color 4E2A8E
tide_elixir_icon
tide_gcloud_bg_color 444444
tide_gcloud_color 4285F4
tide_gcloud_icon
tide_git_bg_color 444444
tide_git_bg_color_unstable 444444
tide_git_bg_color_urgent 444444
tide_git_color_branch $_tide_color_green
tide_git_color_conflicted FF0000
tide_git_color_dirty $_tide_color_gold
tide_git_color_operation FF0000
tide_git_color_staged $_tide_color_gold
tide_git_color_stash $_tide_color_green
tide_git_color_untracked $_tide_color_light_blue
tide_git_color_upstream $_tide_color_green
tide_git_icon
tide_git_truncation_length 24
tide_git_truncation_strategy
tide_go_bg_color 444444
tide_go_color 00ACD7
tide_go_icon
tide_java_bg_color 444444
tide_java_color ED8B00
tide_java_icon
tide_jobs_bg_color 444444
tide_jobs_color $_tide_color_dark_green
tide_jobs_icon
tide_kubectl_bg_color 444444
tide_kubectl_color 326CE5
tide_kubectl_icon
tide_left_prompt_frame_enabled true
tide_left_prompt_items pwd git newline
tide_left_prompt_prefix ''
tide_left_prompt_separator_diff_color
tide_left_prompt_separator_same_color
tide_left_prompt_suffix
tide_nix_shell_bg_color 444444
tide_nix_shell_color 7EBAE4
tide_nix_shell_icon
tide_node_bg_color 444444
tide_node_color 44883E
tide_node_icon
tide_os_bg_color 444444
tide_os_color EEEEEE
tide_os_icon $os_branding_icon
tide_php_bg_color 444444
tide_php_color 617CBE
tide_php_icon
tide_private_mode_bg_color 444444
tide_private_mode_color FFFFFF
tide_private_mode_icon
tide_prompt_add_newline_before true
tide_prompt_color_frame_and_connection 6C6C6C
tide_prompt_color_separator_same_color 949494
tide_prompt_icon_connection ' '
tide_prompt_min_cols 34
tide_prompt_pad_items true
tide_pulumi_bg_color 444444
tide_pulumi_color F7BF2A
tide_pulumi_icon ''
tide_pwd_bg_color 444444
tide_pwd_color_anchors $_tide_color_light_blue
tide_pwd_color_dirs $_tide_color_dark_blue
tide_pwd_color_truncated_dirs 8787AF
tide_pwd_icon
tide_pwd_icon_home
tide_pwd_icon_unwritable
tide_pwd_markers .bzr .citc .git .hg .node-version .python-version .ruby-version .shorten_folder_marker .svn .terraform Cargo.toml composer.json CVS go.mod package.json
tide_right_prompt_frame_enabled true
tide_right_prompt_items status cmd_duration context jobs direnv node virtual_env rustc java php pulumi chruby go gcloud kubectl distrobox toolbox terraform aws nix_shell crystal elixir
tide_right_prompt_prefix
tide_right_prompt_separator_diff_color
tide_right_prompt_separator_same_color
tide_right_prompt_suffix ''
tide_rustc_bg_color 444444
tide_rustc_color F74C00
tide_rustc_icon
tide_shlvl_bg_color 444444
tide_shlvl_color d78700
tide_shlvl_icon
tide_shlvl_threshold 1
tide_status_bg_color 444444
tide_status_bg_color_failure 444444
tide_status_color $_tide_color_dark_green
tide_status_color_failure D70000
tide_status_icon
tide_status_icon_failure
tide_terraform_bg_color 444444
tide_terraform_color 844FBA
tide_terraform_icon
tide_time_bg_color 444444
tide_time_color 5F8787
tide_time_format %T
tide_toolbox_bg_color 444444
tide_toolbox_color 613583
tide_toolbox_icon
tide_vi_mode_bg_color_default 444444
tide_vi_mode_bg_color_insert 444444
tide_vi_mode_bg_color_replace 444444
tide_vi_mode_bg_color_visual 444444
tide_vi_mode_color_default 949494
tide_vi_mode_color_insert 87AFAF
tide_vi_mode_color_replace 87AF87
tide_vi_mode_color_visual FF8700
tide_vi_mode_icon_default D
tide_vi_mode_icon_insert I
tide_vi_mode_icon_replace R
tide_vi_mode_icon_visual V
tide_virtual_env_bg_color 444444
tide_virtual_env_color 00AFAF
tide_virtual_env_icon

View File

@ -0,0 +1,87 @@
tide_aws_bg_color black
tide_aws_color yellow
tide_character_color brgreen
tide_character_color_failure brred
tide_chruby_bg_color black
tide_chruby_color red
tide_cmd_duration_bg_color black
tide_cmd_duration_color brblack
tide_context_bg_color black
tide_context_color_default yellow
tide_context_color_root bryellow
tide_context_color_ssh yellow
tide_crystal_bg_color black
tide_crystal_color brwhite
tide_direnv_bg_color black
tide_direnv_bg_color_denied black
tide_direnv_color bryellow
tide_direnv_color_denied brred
tide_distrobox_bg_color black
tide_distrobox_color brmagenta
tide_docker_bg_color black
tide_docker_color blue
tide_elixir_bg_color black
tide_elixir_color magenta
tide_gcloud_bg_color black
tide_gcloud_color blue
tide_git_bg_color black
tide_git_bg_color_unstable black
tide_git_bg_color_urgent black
tide_git_color_branch brgreen
tide_git_color_conflicted brred
tide_git_color_dirty bryellow
tide_git_color_operation brred
tide_git_color_staged bryellow
tide_git_color_stash brgreen
tide_git_color_untracked brblue
tide_git_color_upstream brgreen
tide_go_bg_color black
tide_go_color brcyan
tide_java_bg_color black
tide_java_color yellow
tide_jobs_bg_color black
tide_jobs_color green
tide_kubectl_bg_color black
tide_kubectl_color blue
tide_nix_shell_bg_color black
tide_nix_shell_color brblue
tide_node_bg_color black
tide_node_color green
tide_os_bg_color black
tide_os_color brwhite
tide_php_bg_color black
tide_php_color blue
tide_private_mode_bg_color black
tide_private_mode_color brwhite
tide_prompt_color_frame_and_connection brblack
tide_prompt_color_separator_same_color brblack
tide_pulumi_bg_color black
tide_pulumi_color yellow
tide_pwd_bg_color black
tide_pwd_color_anchors brcyan
tide_pwd_color_dirs cyan
tide_pwd_color_truncated_dirs magenta
tide_rustc_bg_color black
tide_rustc_color red
tide_shlvl_bg_color black
tide_shlvl_color yellow
tide_status_bg_color black
tide_status_bg_color_failure black
tide_status_color green
tide_status_color_failure red
tide_terraform_bg_color black
tide_terraform_color magenta
tide_time_bg_color black
tide_time_color brblack
tide_toolbox_bg_color black
tide_toolbox_color magenta
tide_vi_mode_bg_color_default black
tide_vi_mode_bg_color_insert black
tide_vi_mode_bg_color_replace black
tide_vi_mode_bg_color_visual black
tide_vi_mode_color_default white
tide_vi_mode_color_insert cyan
tide_vi_mode_color_replace green
tide_vi_mode_color_visual yellow
tide_virtual_env_bg_color black
tide_virtual_env_color cyan

View File

@ -0,0 +1,151 @@
tide_aws_bg_color normal
tide_aws_color FF9900
tide_aws_icon
tide_character_color $_tide_color_green
tide_character_color_failure FF0000
tide_character_icon
tide_character_vi_icon_default
tide_character_vi_icon_replace
tide_character_vi_icon_visual V
tide_chruby_bg_color normal
tide_chruby_color B31209
tide_chruby_icon
tide_cmd_duration_bg_color normal
tide_cmd_duration_color 87875F
tide_cmd_duration_decimals 0
tide_cmd_duration_icon
tide_cmd_duration_threshold 3000
tide_context_always_display false
tide_context_bg_color normal
tide_context_color_default D7AF87
tide_context_color_root $_tide_color_gold
tide_context_color_ssh D7AF87
tide_context_hostname_parts 1
tide_crystal_bg_color normal
tide_crystal_color FFFFFF
tide_crystal_icon
tide_direnv_bg_color normal
tide_direnv_bg_color_denied normal
tide_direnv_color $_tide_color_gold
tide_direnv_color_denied FF0000
tide_direnv_icon
tide_distrobox_bg_color normal
tide_distrobox_color FF00FF
tide_distrobox_icon
tide_docker_bg_color normal
tide_docker_color 2496ED
tide_docker_default_contexts default colima
tide_docker_icon
tide_elixir_bg_color normal
tide_elixir_color 4E2A8E
tide_elixir_icon
tide_gcloud_bg_color normal
tide_gcloud_color 4285F4
tide_gcloud_icon
tide_git_bg_color normal
tide_git_bg_color_unstable normal
tide_git_bg_color_urgent normal
tide_git_color_branch $_tide_color_green
tide_git_color_conflicted FF0000
tide_git_color_dirty $_tide_color_gold
tide_git_color_operation FF0000
tide_git_color_staged $_tide_color_gold
tide_git_color_stash $_tide_color_green
tide_git_color_untracked $_tide_color_light_blue
tide_git_color_upstream $_tide_color_green
tide_git_icon
tide_git_truncation_length 24
tide_git_truncation_strategy
tide_go_bg_color normal
tide_go_color 00ACD7
tide_go_icon
tide_java_bg_color normal
tide_java_color ED8B00
tide_java_icon
tide_jobs_bg_color normal
tide_jobs_color $_tide_color_dark_green
tide_jobs_icon
tide_kubectl_bg_color normal
tide_kubectl_color 326CE5
tide_kubectl_icon
tide_left_prompt_frame_enabled false
tide_left_prompt_items pwd git newline character
tide_left_prompt_prefix ''
tide_left_prompt_separator_diff_color ' '
tide_left_prompt_separator_same_color ' '
tide_left_prompt_suffix ' '
tide_nix_shell_bg_color normal
tide_nix_shell_color 7EBAE4
tide_nix_shell_icon
tide_node_bg_color normal
tide_node_color 44883E
tide_node_icon
tide_os_bg_color normal
tide_os_color normal
tide_os_icon $os_branding_icon
tide_php_bg_color normal
tide_php_color 617CBE
tide_php_icon
tide_private_mode_bg_color normal
tide_private_mode_color FFFFFF
tide_private_mode_icon
tide_prompt_add_newline_before true
tide_prompt_color_frame_and_connection 6C6C6C
tide_prompt_color_separator_same_color 949494
tide_prompt_icon_connection ' '
tide_prompt_min_cols 34
tide_prompt_pad_items false
tide_pulumi_bg_color normal
tide_pulumi_color F7BF2A
tide_pulumi_icon ''
tide_pwd_bg_color normal
tide_pwd_color_anchors $_tide_color_light_blue
tide_pwd_color_dirs $_tide_color_dark_blue
tide_pwd_color_truncated_dirs 8787AF
tide_pwd_icon
tide_pwd_icon_home
tide_pwd_icon_unwritable
tide_pwd_markers .bzr .citc .git .hg .node-version .python-version .ruby-version .shorten_folder_marker .svn .terraform Cargo.toml composer.json CVS go.mod package.json
tide_right_prompt_frame_enabled false
tide_right_prompt_items status cmd_duration context jobs direnv node virtual_env rustc java php pulumi chruby go gcloud kubectl distrobox toolbox terraform aws nix_shell crystal elixir
tide_right_prompt_prefix ' '
tide_right_prompt_separator_diff_color ' '
tide_right_prompt_separator_same_color ' '
tide_right_prompt_suffix ''
tide_rustc_bg_color normal
tide_rustc_color F74C00
tide_rustc_icon
tide_shlvl_bg_color normal
tide_shlvl_color d78700
tide_shlvl_icon
tide_shlvl_threshold 1
tide_status_bg_color normal
tide_status_bg_color_failure normal
tide_status_color $_tide_color_dark_green
tide_status_color_failure D70000
tide_status_icon
tide_status_icon_failure
tide_terraform_bg_color normal
tide_terraform_color 844FBA
tide_terraform_icon
tide_time_bg_color normal
tide_time_color 5F8787
tide_time_format %T
tide_toolbox_bg_color normal
tide_toolbox_color 613583
tide_toolbox_icon
tide_vi_mode_bg_color_default normal
tide_vi_mode_bg_color_insert normal
tide_vi_mode_bg_color_replace normal
tide_vi_mode_bg_color_visual normal
tide_vi_mode_color_default 949494
tide_vi_mode_color_insert 87AFAF
tide_vi_mode_color_replace 87AF87
tide_vi_mode_color_visual FF8700
tide_vi_mode_icon_default D
tide_vi_mode_icon_insert I
tide_vi_mode_icon_replace R
tide_vi_mode_icon_visual V
tide_virtual_env_bg_color normal
tide_virtual_env_color 00AFAF
tide_virtual_env_icon

View File

@ -0,0 +1,87 @@
tide_aws_bg_color normal
tide_aws_color yellow
tide_character_color brgreen
tide_character_color_failure brred
tide_chruby_bg_color normal
tide_chruby_color red
tide_cmd_duration_bg_color normal
tide_cmd_duration_color brblack
tide_context_bg_color normal
tide_context_color_default yellow
tide_context_color_root bryellow
tide_context_color_ssh yellow
tide_crystal_bg_color normal
tide_crystal_color brwhite
tide_direnv_bg_color normal
tide_direnv_bg_color_denied normal
tide_direnv_color bryellow
tide_direnv_color_denied brred
tide_distrobox_bg_color normal
tide_distrobox_color brmagenta
tide_docker_bg_color normal
tide_docker_color blue
tide_elixir_bg_color normal
tide_elixir_color magenta
tide_gcloud_bg_color normal
tide_gcloud_color blue
tide_git_bg_color normal
tide_git_bg_color_unstable normal
tide_git_bg_color_urgent normal
tide_git_color_branch brgreen
tide_git_color_conflicted brred
tide_git_color_dirty bryellow
tide_git_color_operation brred
tide_git_color_staged bryellow
tide_git_color_stash brgreen
tide_git_color_untracked brblue
tide_git_color_upstream brgreen
tide_go_bg_color normal
tide_go_color brcyan
tide_java_bg_color normal
tide_java_color yellow
tide_jobs_bg_color normal
tide_jobs_color green
tide_kubectl_bg_color normal
tide_kubectl_color blue
tide_nix_shell_bg_color normal
tide_nix_shell_color brblue
tide_node_bg_color normal
tide_node_color green
tide_os_bg_color normal
tide_os_color brwhite
tide_php_bg_color normal
tide_php_color blue
tide_private_mode_bg_color normal
tide_private_mode_color brwhite
tide_prompt_color_frame_and_connection brblack
tide_prompt_color_separator_same_color brblack
tide_pulumi_bg_color normal
tide_pulumi_color yellow
tide_pwd_bg_color normal
tide_pwd_color_anchors brcyan
tide_pwd_color_dirs cyan
tide_pwd_color_truncated_dirs magenta
tide_rustc_bg_color normal
tide_rustc_color red
tide_shlvl_bg_color normal
tide_shlvl_color yellow
tide_status_bg_color normal
tide_status_bg_color_failure normal
tide_status_color green
tide_status_color_failure red
tide_terraform_bg_color normal
tide_terraform_color magenta
tide_time_bg_color normal
tide_time_color brblack
tide_toolbox_bg_color normal
tide_toolbox_color magenta
tide_vi_mode_bg_color_default normal
tide_vi_mode_bg_color_insert normal
tide_vi_mode_bg_color_replace normal
tide_vi_mode_bg_color_visual normal
tide_vi_mode_color_default white
tide_vi_mode_color_insert cyan
tide_vi_mode_color_replace green
tide_vi_mode_color_visual yellow
tide_virtual_env_bg_color normal
tide_virtual_env_color cyan

View File

@ -0,0 +1,151 @@
tide_aws_bg_color FF9900
tide_aws_color 232F3E
tide_aws_icon
tide_character_color $_tide_color_green
tide_character_color_failure FF0000
tide_character_icon
tide_character_vi_icon_default
tide_character_vi_icon_replace
tide_character_vi_icon_visual V
tide_chruby_bg_color B31209
tide_chruby_color 000000
tide_chruby_icon
tide_cmd_duration_bg_color C4A000
tide_cmd_duration_color 000000
tide_cmd_duration_decimals 0
tide_cmd_duration_icon
tide_cmd_duration_threshold 3000
tide_context_always_display false
tide_context_bg_color 444444
tide_context_color_default D7AF87
tide_context_color_root $_tide_color_gold
tide_context_color_ssh D7AF87
tide_context_hostname_parts 1
tide_crystal_bg_color FFFFFF
tide_crystal_color 000000
tide_crystal_icon
tide_direnv_bg_color $_tide_color_gold
tide_direnv_bg_color_denied FF0000
tide_direnv_color 000000
tide_direnv_color_denied 000000
tide_direnv_icon
tide_distrobox_bg_color FF00FF
tide_distrobox_color 000000
tide_distrobox_icon
tide_docker_bg_color 2496ED
tide_docker_color 000000
tide_docker_default_contexts default colima
tide_docker_icon
tide_elixir_bg_color 4E2A8E
tide_elixir_color 000000
tide_elixir_icon
tide_gcloud_bg_color 4285F4
tide_gcloud_color 000000
tide_gcloud_icon
tide_git_bg_color 4E9A06
tide_git_bg_color_unstable C4A000
tide_git_bg_color_urgent CC0000
tide_git_color_branch 000000
tide_git_color_conflicted 000000
tide_git_color_dirty 000000
tide_git_color_operation 000000
tide_git_color_staged 000000
tide_git_color_stash 000000
tide_git_color_untracked 000000
tide_git_color_upstream 000000
tide_git_icon
tide_git_truncation_length 24
tide_git_truncation_strategy
tide_go_bg_color 00ACD7
tide_go_color 000000
tide_go_icon
tide_java_bg_color ED8B00
tide_java_color 000000
tide_java_icon
tide_jobs_bg_color 444444
tide_jobs_color 4E9A06
tide_jobs_icon
tide_kubectl_bg_color 326CE5
tide_kubectl_color 000000
tide_kubectl_icon
tide_left_prompt_frame_enabled true
tide_left_prompt_items pwd git newline
tide_left_prompt_prefix ''
tide_left_prompt_separator_diff_color
tide_left_prompt_separator_same_color
tide_left_prompt_suffix
tide_nix_shell_bg_color 7EBAE4
tide_nix_shell_color 000000
tide_nix_shell_icon
tide_node_bg_color 44883E
tide_node_color 000000
tide_node_icon
tide_os_bg_color $os_branding_bg_color
tide_os_color $os_branding_color
tide_os_icon $os_branding_icon
tide_php_bg_color 617CBE
tide_php_color 000000
tide_php_icon
tide_private_mode_bg_color F1F3F4
tide_private_mode_color 000000
tide_private_mode_icon
tide_prompt_add_newline_before true
tide_prompt_color_frame_and_connection 6C6C6C
tide_prompt_color_separator_same_color 949494
tide_prompt_icon_connection ' '
tide_prompt_min_cols 34
tide_prompt_pad_items true
tide_pulumi_bg_color F7BF2A
tide_pulumi_color 000000
tide_pulumi_icon ''
tide_pwd_bg_color 3465A4
tide_pwd_color_anchors E4E4E4
tide_pwd_color_dirs E4E4E4
tide_pwd_color_truncated_dirs BCBCBC
tide_pwd_icon
tide_pwd_icon_home
tide_pwd_icon_unwritable
tide_pwd_markers .bzr .citc .git .hg .node-version .python-version .ruby-version .shorten_folder_marker .svn .terraform Cargo.toml composer.json CVS go.mod package.json
tide_right_prompt_frame_enabled true
tide_right_prompt_items status cmd_duration context jobs direnv node virtual_env rustc java php pulumi chruby go gcloud kubectl distrobox toolbox terraform aws nix_shell crystal elixir
tide_right_prompt_prefix
tide_right_prompt_separator_diff_color
tide_right_prompt_separator_same_color
tide_right_prompt_suffix ''
tide_rustc_bg_color F74C00
tide_rustc_color 000000
tide_rustc_icon
tide_shlvl_bg_color 808000
tide_shlvl_color 000000
tide_shlvl_icon
tide_shlvl_threshold 1
tide_status_bg_color 2E3436
tide_status_bg_color_failure CC0000
tide_status_color 4E9A06
tide_status_color_failure FFFF00
tide_status_icon
tide_status_icon_failure
tide_terraform_bg_color 800080
tide_terraform_color 000000
tide_terraform_icon
tide_time_bg_color D3D7CF
tide_time_color 000000
tide_time_format %T
tide_toolbox_bg_color 613583
tide_toolbox_color 000000
tide_toolbox_icon
tide_vi_mode_bg_color_default 949494
tide_vi_mode_bg_color_insert 87AFAF
tide_vi_mode_bg_color_replace 87AF87
tide_vi_mode_bg_color_visual FF8700
tide_vi_mode_color_default 000000
tide_vi_mode_color_insert 000000
tide_vi_mode_color_replace 000000
tide_vi_mode_color_visual 000000
tide_vi_mode_icon_default D
tide_vi_mode_icon_insert I
tide_vi_mode_icon_replace R
tide_vi_mode_icon_visual V
tide_virtual_env_bg_color 444444
tide_virtual_env_color 00AFAF
tide_virtual_env_icon

View File

@ -0,0 +1,91 @@
tide_aws_bg_color yellow
tide_aws_color brblack
tide_character_color brgreen
tide_character_color_failure brred
tide_chruby_bg_color red
tide_chruby_color black
tide_cmd_duration_bg_color yellow
tide_cmd_duration_color black
tide_context_bg_color brblack
tide_context_color_default yellow
tide_context_color_root yellow
tide_context_color_ssh yellow
tide_crystal_bg_color brwhite
tide_crystal_color black
tide_direnv_bg_color bryellow
tide_direnv_bg_color_denied brred
tide_direnv_color black
tide_direnv_color_denied black
tide_distrobox_bg_color brmagenta
tide_distrobox_color black
tide_docker_bg_color blue
tide_docker_color black
tide_elixir_bg_color magenta
tide_elixir_color black
tide_gcloud_bg_color blue
tide_gcloud_color black
tide_git_bg_color green
tide_git_bg_color_unstable yellow
tide_git_bg_color_urgent red
tide_git_color_branch black
tide_git_color_conflicted black
tide_git_color_dirty black
tide_git_color_operation black
tide_git_color_staged black
tide_git_color_stash black
tide_git_color_untracked black
tide_git_color_upstream black
tide_go_bg_color brcyan
tide_go_color black
tide_java_bg_color yellow
tide_java_color black
tide_jobs_bg_color brblack
tide_jobs_color green
tide_kubectl_bg_color blue
tide_kubectl_color black
tide_nix_shell_bg_color brblue
tide_nix_shell_color black
tide_node_bg_color green
tide_node_color black
tide_os_bg_color white
tide_os_color black
tide_php_bg_color blue
tide_php_color black
tide_private_mode_bg_color brwhite
tide_private_mode_color black
tide_prompt_color_frame_and_connection brblack
tide_prompt_color_separator_same_color brblack
tide_pulumi_bg_color yellow
tide_pulumi_color black
tide_pwd_bg_color blue
tide_pwd_color_anchors brwhite
tide_pwd_color_dirs brwhite
tide_pwd_color_truncated_dirs white
tide_rustc_bg_color red
tide_rustc_color black
tide_shlvl_bg_color yellow
tide_shlvl_color black
tide_status_bg_color black
tide_status_bg_color_failure red
tide_status_color green
tide_status_color_failure bryellow
tide_terraform_bg_color magenta
tide_terraform_color black
tide_time_bg_color white
tide_time_color black
tide_toolbox_bg_color magenta
tide_toolbox_color black
tide_vi_mode_bg_color_default white
tide_vi_mode_bg_color_insert cyan
tide_vi_mode_bg_color_replace green
tide_vi_mode_bg_color_visual yellow
tide_vi_mode_color_default black
tide_vi_mode_color_insert black
tide_vi_mode_color_replace black
tide_vi_mode_color_visual black
tide_vi_mode_icon_default D
tide_vi_mode_icon_insert I
tide_vi_mode_icon_replace R
tide_vi_mode_icon_visual V
tide_virtual_env_bg_color brblack
tide_virtual_env_color cyan

View File

@ -0,0 +1,41 @@
function _fake_tide_cache_variables
# pwd
set_color -o $fake_tide_pwd_color_anchors | read -gx _fake_tide_color_anchors
set -gx _fake_tide_color_truncated_dirs "$(set_color $fake_tide_pwd_color_truncated_dirs)"
set -gx _fake_tide_reset_to_color_dirs (set_color normal -b $fake_tide_pwd_bg_color; set_color $fake_tide_pwd_color_dirs)
# git
contains git $fake_tide_left_prompt_items $fake_tide_right_prompt_items &&
set -gx _fake_tide_location_color "$(set_color $fake_tide_git_color_branch)"
# private_mode
if contains private_mode $fake_tide_left_prompt_items $fake_tide_right_prompt_items && test -n "$fish_private_mode"
set -gx _fake_tide_private_mode
else
set -e _fake_tide_private_mode
end
# Same-color-separator color
set -gx _fake_tide_color_separator_same_color "$(set_color $fake_tide_prompt_color_separator_same_color)"
# two line prompt
if contains newline $fake_tide_left_prompt_items
set_color $fake_tide_prompt_color_frame_and_connection -b normal | read -gx _fake_tide_prompt_and_frame_color
else
set -e _fake_tide_prompt_and_frame_color
end
# newline before
if test "$fake_tide_prompt_add_newline_before" = true
set -g _fake_tide_add_newline ''
else
set -e _fake_tide_add_newline
end
# item padding
if test "$fake_tide_prompt_pad_items" = true
set -gx _fake_tide_pad ' '
else
set -e _fake_tide_pad
end
end

View File

@ -0,0 +1,5 @@
function _fake_tide_item_character
set_color $fake_tide_character_color
contains newline $fake_tide_left_prompt_items || echo -ns ' '
echo -ns $fake_tide_character_icon
end

Some files were not shown because too many files have changed in this diff Show More