diff --git a/TODO.md b/TODO.md
new file mode 100644
index 0000000..cb01c79
--- /dev/null
+++ b/TODO.md
@@ -0,0 +1,4 @@
+# TODO
+- [ ] finish the standard library
+- [ ] EAX
+- [ ] automake configure alternative / package manager ?
diff --git a/chad.h b/chad.h
index fe68a52..6815876 100644
--- a/chad.h
+++ b/chad.h
@@ -1,32 +1,90 @@
-#ifndef	CHAD_H
-#define	CHAD_H
+tree chad/
+    file chad.h {
+        #ifndef CHAD_H
+        #define CHAD_H
 
-#define	UNUSED(x)	((void)x)
+        #include <stdbool.h>
+        #include <iso646>
 
-// Terminal manipulation
-#define	TERMINAL_RESET				"\033[0m"
+        #define UNUSED(x)   ((void)x)
 
-#define	TERMINAL_COLOR_FG_BLACK		"\033[30m"
-#define	TERMINAL_COLOR_FG_RED		"\033[31m"
-#define	TERMINAL_COLOR_FG_GREEN		"\033[32m"
-#define	TERMINAL_COLOR_FG_YELLOW	"\033[33m"
-#define	TERMINAL_COLOR_FG_BLUE		"\033[34m"
-#define	TERMINAL_COLOR_FG_MAGENTA	"\033[35m"
-#define	TERMINAL_COLOR_FG_CYAN		"\033[36m"
-#define	TERMINAL_COLOR_FG_WHITE		"\033[37m"
+        #define MIN(x, y) (((x) < (y)) ? (x) : (y))
+        #define MAX(x, y) (((x) > (y)) ? (x) : (y))
 
-#define	TERMINAL_COLOR_BG_BLACK		"\033[40m"
-#define	TERMINAL_COLOR_BG_RED		"\033[41m"
-#define	TERMINAL_COLOR_BG_GREEN		"\033[42m"
-#define	TERMINAL_COLOR_BG_YELLOW	"\033[43m"
-#define	TERMINAL_COLOR_BG_BLUE		"\033[44m"
-#define	TERMINAL_COLOR_BG_MAGENTA	"\033[45m"
-#define	TERMINAL_COLOR_BG_CYAN		"\033[46m"
-#define	TERMINAL_COLOR_BG_WHITE		"\033[47m"
+        #endif
+    }
+    file terminal.h {
+        // XXX
+        #define VT100_RESET         "\033[0m"
 
-#define	TERMINAL_STYLE_BOLD			"\033[1m"
-#define	TERMINAL_STYLE_ITALICS		"\033[3m"
-#define	TERMINAL_STYLE_REVERSE		"\033[7m"
+        #define VT100_BOLD          "\033[1m"
+        #define VT100_ITALICS       "\033[3m"
+        #define VT100_REVERSE       "\033[7m"
 
+        #define VT100_FG_BLACK      "\033[30m"
+        #define VT100_FG_RED        "\033[31m"
+        #define VT100_FG_GREEN      "\033[32m"
+        #define VT100_FG_YELLOW     "\033[33m"
+        #define VT100_FG_BLUE       "\033[34m"
+        #define VT100_FG_MAGENTA    "\033[35m"
+        #define VT100_FG_CYAN       "\033[36m"
+        #define VT100_FG_WHITE      "\033[37m"
 
-#endif
+        #define VT100_BG_BLACK      "\033[40m"
+        #define VT100_BG_RED        "\033[41m"
+        #define VT100_BG_GREEN      "\033[42m"
+        #define VT100_BG_YELLOW     "\033[43m"
+        #define VT100_BG_BLUE       "\033[44m"
+        #define VT100_BG_MAGENTA    "\033[45m"
+        #define VT100_BG_CYAN       "\033[46m"
+        #define VT100_BG_WHITE      "\033[47m"
+
+        #define VT100_SAVE_CUR      "\033[s"
+        #define VT100_RESTORE_CUR   "\033[u"
+    }
+    link ${INC}/dictate.h -> dictate.h # add debug_* to dictate (using just macros)
+    file path.h {
+        char * basename(char * p);
+        char * dirname(char * p);
+        char * realpath(char * p); // XXX
+    }
+    file filesystem.h {
+        int touch_file(const char * p);
+        int touch_directory(const char * p);
+        int touch(const char * p);  // wrapper based on whether the last char is '/'
+
+        int copy_file(const char * s, const char * d);
+        int copy(const char * s, const char * d);
+        int copy_ex(const char * s, const char * d, int flags);
+
+        int remove(const char * p);
+        int remove_all(const char * p);
+
+        int rename(const char * s, const char * d);
+    }
+    file arena.h {
+        arena_t new_arena(size_t n_bytes);
+        void * arenaloc(arena_t * a, size_t n_bytes);
+        int free_arena(arena_t * a);
+    }
+    link ${INC}/kvec.h -> vec.h
+    link ${INC}/sds.h  -> sds.h
+    link ${INC}/narg.h -> narg.h # the vararg hack
+    file nargs.h { // for narg hack functions?
+        #define coalesce_env() // char * _coalesce_env(char * mydefault, size_t argc, ...)
+        // maybe just coalesce()? that means every argument is eval-ed; maybe both
+        #define max()
+        #define min()
+        // all(), any() 
+        // ?! i cant think of a single instance where its preferable over plain logic,
+        //  but it would be consistent
+    }
+    # something addressing math.h
+    #  gcd(), lcm()
+    # something for printing an array?
+    # ino map()
+    # n-dimensional array using a single arena
+    #  and the "head" containing pointers inside the area,
+    #  so that a[h][i] works
+    # trim() even tho its a meme
+    # something mimicing perl's qx()
diff --git a/gigachad.h b/gigachad.h
new file mode 100644
index 0000000..c69e6eb
--- /dev/null
+++ b/gigachad.h
@@ -0,0 +1,7 @@
+tree gigachad/
+    link ${INC}/ministach.h -> ministach.h
+    link ${INC}/caret.h     -> caret.h
+    link ${INC}/dyrect.h    -> dyrect.h
+    file sun.h {
+        // planned A* library
+    }