function osprogram.customize()
	local color = {
		windowText = userColor.windowText,
		window = userColor.window,
		windowDark = userColor.windowDark,
		back = userColor.back,
		text = userColor.text,
		desk = userColor.desk,
		noFocus = userColor.noFocus
	}
	
	local function getColorCode(c)
		if c == colors.white then
			return "0"
		elseif c == colors.orange then
			return "1"
		elseif c == colors.magenta then
			return "2"
		elseif c == colors.lightBlue then
			return "3"
		elseif c == colors.yellow then
			return "4"
		elseif c == colors.lime then
			return "5"
		elseif c == colors.pink then
			return "6"
		elseif c == colors.gray then
			return "7"
		elseif c == colors.lightGray then
			return "8"
		elseif c == colors.cyan then
			return "9"
		elseif c == colors.purple then
			return "a"
		elseif c == colors.blue then
			return "b"
		elseif c == colors.brown then
			return "c"
		elseif c == colors.green then
			return "d"
		elseif c == colors.red then
			return "e"
		elseif c == colors.black then
			return "f"
		end
		
		return " "
	end
	
	local current = ""
	
	local function drawText(text, x, y, color, bColor)
		window.setCursorPos(x, y)
		window.setBackgroundColor(bColor)
		window.setTextColor(color)
		window.write(text)
	end

	while true do
		window.setBackgroundColor(userColor.back)
		window.clear()
	
		drawText("Preview:", 2, 2, userColor.text, userColor.back)
		
		for i = 1,5 do
			drawText("          ", 11, i, color.text, color.noFocus)
		end
		
		drawText("title", 12, 2, color.windowText, color.windowDark)
		window.setBackgroundColor(color.window)
		window.write("   ")
		
		drawText("text    ", 12, 3, color.text, color.back)
		window.setCursorPos(12, 4)
		window.write("        ")
		
		drawText("Click on a color to change it", 2, 6, userColor.text, userColor.back)
		drawText("Title Color:", 2, 7, userColor.text, userColor.back)
		drawText("  ", 15, 7, userColor.text, color.windowText)
		drawText("Title Back:", 2, 8, userColor.text, userColor.back)
		drawText("  ", 15, 8, userColor.text, color.windowDark)
		drawText("Window:", 2, 9, userColor.text, userColor.back)
		drawText("  ", 15, 9, userColor.text, color.window)
		drawText("Text Color:", 2, 10, userColor.text, userColor.back)
		drawText("  ", 15, 10, userColor.text, color.text)
		drawText("Background:", 2, 11, userColor.text, userColor.back)
		drawText("  ", 15, 11, userColor.text, color.back)
		drawText("Out of Focus:", 2, 12, userColor.text, userColor.back)
		drawText("  ", 15, 12, userColor.text, color.noFocus)
		drawText("Desktop:", 2, 13, userColor.text, userColor.back)
		drawText("  ", 15, 13, userColor.text, color.desk)
		
		drawText("Save", 2, 15, userColor.windowText, userColor.windowDark)
		drawText("edit desktop image", 14, 15, userColor.windowText, userColor.windowDark)
		
		if current ~= "" then
			drawText(" ", 18, 7, colors.white, colors.white)
			drawText(" ", 19, 7, colors.white, colors.orange)
			drawText(" ", 20, 7, colors.white, colors.magenta)
			drawText(" ", 21, 7, colors.white, colors.lightBlue)
			
			drawText(" ", 18, 8, colors.white, colors.yellow)
			drawText(" ", 19, 8, colors.white, colors.lime)
			drawText(" ", 20, 8, colors.white, colors.pink)
			drawText(" ", 21, 8, colors.white, colors.gray)
			
			drawText(" ", 18, 9, colors.white, colors.lightGray)
			drawText(" ", 19, 9, colors.white, colors.cyan)
			drawText(" ", 20, 9, colors.white, colors.purple)
			drawText(" ", 21, 9, colors.white, colors.blue)
			
			drawText(" ", 18, 10, colors.white, colors.brown)
			drawText(" ", 19, 10, colors.white, colors.green)
			drawText(" ", 20, 10, colors.white, colors.red)
			drawText(" ", 21, 10, colors.white, colors.black)
		end
		
		local event, b, x, y = os.pullEvent()
		
		if event == "mouse_click" then
			y = y - 1
			
			if x == 15 or x == 16 then
				if y == 7 then
					current = "windowText"
				elseif y == 8 then
					current = "windowDark"
				elseif y == 9 then
					current = "window"
				elseif y == 10 then
					current = "text"
				elseif y == 11 then
					current = "back"
				elseif y == 12 then
					current = "noFocus"
				elseif y == 13 then
					current = "desk"
				end
			elseif current ~= "" then
				if x == 18 and y == 7 then
					color[current] = colors.white
				elseif x == 19 and y == 7 then
					color[current] = colors.orange
				elseif x == 20 and y == 7 then
					color[current] = colors.magenta
				elseif x == 21 and y == 7 then
					color[current] = colors.lightBlue
				elseif x == 18 and y == 8 then
					color[current] = colors.yellow
				elseif x == 19 and y == 8 then
					color[current] = colors.lime
				elseif x == 20 and y == 8 then
					color[current] = colors.pink
				elseif x == 21 and y == 8 then
					color[current] = colors.gray
				elseif x == 18 and y == 9 then
					color[current] = colors.lightGray
				elseif x == 19 and y == 9 then
					color[current] = colors.cyan
				elseif x == 20 and y == 9 then
					color[current] = colors.purple
				elseif x == 21 and y == 9 then
					color[current] = colors.blue
				elseif x == 18 and y == 10 then
					color[current] = colors.brown
				elseif x == 19 and y == 10 then
					color[current] = colors.green
				elseif x == 20 and y == 10 then
					color[current] = colors.red
				elseif x == 21 and y == 10 then
					color[current] = colors.black
				end
			
				current = ""
			elseif x >= 2 and x <= 5 and y == 15 then
				local file = io.open("colors", "w")
				file:write("userColor = {\n")
				
				for k, v in pairs(color) do
					userColor[k] = v
					file:write(k .. " = \"" .. getColorCode(v) .. "\",\n")
				end
				
				file:write("}")
				file:close()
			elseif x >= 14 and x <= 31 and y == 15 then
				returnMode = "desk"
				return
			end
		end
	end
end