claude-den 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/detect/terminal.ts","../../src/detect/capabilities.ts","../../src/detect/os.ts","../../src/themes/catppuccin-mocha.ts","../../src/themes/nord.ts","../../src/themes/tokyo-night.ts","../../src/themes/dracula.ts","../../src/themes/gruvbox.ts","../../src/themes/index.ts","../../src/configs/ghostty/config.ts","../../src/configs/iterm2/profile.ts","../../src/configs/kitty/config.ts","../../src/configs/alacritty/config.ts","../../src/configs/starship/config.ts","../../src/configs/tmux/config.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { TerminalInfo, TerminalType } from \"../types.js\";\n\nconst TERMINAL_ENV_CHECKS: ReadonlyArray<{\n readonly env: string;\n readonly value?: string;\n readonly type: TerminalType;\n readonly name: string;\n}> = [\n { env: \"GHOSTTY_RESOURCES_DIR\", type: \"ghostty\", name: \"Ghostty\" },\n { env: \"TERM_PROGRAM\", value: \"iTerm.app\", type: \"iterm2\", name: \"iTerm2\" },\n { env: \"TERM_PROGRAM\", value: \"WarpTerminal\", type: \"warp\", name: \"Warp\" },\n { env: \"KITTY_PID\", type: \"kitty\", name: \"Kitty\" },\n { env: \"ALACRITTY_LOG\", type: \"alacritty\", name: \"Alacritty\" },\n {\n env: \"TERM_PROGRAM\",\n value: \"Apple_Terminal\",\n type: \"terminal.app\",\n name: \"Terminal.app\",\n },\n {\n env: \"WT_SESSION\",\n type: \"windows-terminal\",\n name: \"Windows Terminal\",\n },\n];\n\nconst CONFIG_PATHS: Readonly<Record<TerminalType, string | null>> = {\n ghostty: \"~/.config/ghostty/config\",\n iterm2: \"~/Library/Preferences/com.googlecode.iterm2.plist\",\n kitty: \"~/.config/kitty/kitty.conf\",\n alacritty: \"~/.config/alacritty/alacritty.toml\",\n warp: \"~/.warp/themes\",\n \"terminal.app\": null,\n \"windows-terminal\": null,\n unknown: null,\n};\n\nfunction expandHome(filepath: string): string {\n const home = process.env.HOME ?? process.env.USERPROFILE ?? \"\";\n return filepath.replace(/^~/, home);\n}\n\nfunction getVersion(type: TerminalType): string | null {\n const versionEnvMap: Partial<Record<TerminalType, string>> = {\n iterm2: \"TERM_PROGRAM_VERSION\",\n };\n const envKey = versionEnvMap[type];\n return envKey ? (process.env[envKey] ?? null) : null;\n}\n\nfunction getConfigPath(type: TerminalType): string | null {\n const template = CONFIG_PATHS[type];\n if (!template) return null;\n\n const expanded = expandHome(template);\n return expanded;\n}\n\nexport function detectTerminal(\n env: Record<string, string | undefined> = process.env,\n): TerminalInfo {\n for (const check of TERMINAL_ENV_CHECKS) {\n const envValue = env[check.env];\n if (envValue === undefined) continue;\n if (check.value && envValue !== check.value) continue;\n\n return {\n type: check.type,\n name: check.name,\n version: getVersion(check.type),\n configPath: getConfigPath(check.type),\n };\n }\n\n return {\n type: \"unknown\",\n name: \"Unknown Terminal\",\n version: null,\n configPath: null,\n };\n}\n\nexport function isTerminalInstalled(type: TerminalType): boolean {\n const appPaths: Partial<Record<TerminalType, string>> = {\n ghostty: \"/Applications/Ghostty.app\",\n iterm2: \"/Applications/iTerm.app\",\n warp: \"/Applications/Warp.app\",\n kitty: \"/Applications/kitty.app\",\n alacritty: \"/Applications/Alacritty.app\",\n };\n\n const appPath = appPaths[type];\n if (!appPath) return false;\n return existsSync(appPath);\n}\n\nexport function listInstalledTerminals(): ReadonlyArray<TerminalInfo> {\n const terminals: TerminalInfo[] = [];\n\n for (const check of TERMINAL_ENV_CHECKS) {\n if (\n check.type !== \"terminal.app\" &&\n check.type !== \"windows-terminal\" &&\n check.type !== \"unknown\"\n ) {\n if (isTerminalInstalled(check.type)) {\n terminals.push({\n type: check.type,\n name: check.name,\n version: null,\n configPath: getConfigPath(check.type),\n });\n }\n }\n }\n\n return terminals;\n}\n","import type { Capabilities } from \"../types.js\";\n\nexport function detectCapabilities(\n env: Record<string, string | undefined> = process.env,\n): Capabilities {\n const colorTerm = env.COLORTERM ?? \"\";\n const term = env.TERM ?? \"\";\n const termProgram = env.TERM_PROGRAM ?? \"\";\n\n const trueColor =\n colorTerm === \"truecolor\" ||\n colorTerm === \"24bit\" ||\n term.includes(\"256color\") ||\n termProgram === \"iTerm.app\" ||\n termProgram === \"WarpTerminal\" ||\n env.GHOSTTY_RESOURCES_DIR !== undefined;\n\n const color256 = trueColor || term.includes(\"256color\") || term === \"xterm\";\n\n const unicode = (() => {\n const lang = env.LANG ?? \"\";\n const lcAll = env.LC_ALL ?? \"\";\n return (\n lang.includes(\"UTF-8\") ||\n lang.includes(\"utf-8\") ||\n lcAll.includes(\"UTF-8\") ||\n lcAll.includes(\"utf-8\")\n );\n })();\n\n const mouseSupport =\n env.GHOSTTY_RESOURCES_DIR !== undefined ||\n termProgram === \"iTerm.app\" ||\n env.KITTY_PID !== undefined;\n\n const hyperlinks =\n env.GHOSTTY_RESOURCES_DIR !== undefined ||\n termProgram === \"iTerm.app\" ||\n env.KITTY_PID !== undefined ||\n termProgram === \"WarpTerminal\";\n\n const sixel = env.KITTY_PID !== undefined;\n\n return {\n trueColor,\n color256,\n unicode,\n mouseSupport,\n hyperlinks,\n sixel,\n };\n}\n","import { platform, arch, homedir } from \"node:os\";\nimport { existsSync } from \"node:fs\";\nimport type { OSInfo, OSType } from \"../types.js\";\n\nexport function detectOS(\n env: Record<string, string | undefined> = process.env,\n): OSInfo {\n const osType = resolveOSType(env);\n const shell = resolveShell(env);\n\n return {\n type: osType,\n arch: arch(),\n shell,\n homeDir: homedir(),\n };\n}\n\nfunction resolveOSType(\n env: Record<string, string | undefined>,\n): OSType {\n const p = platform();\n\n if (p === \"darwin\") return \"macos\";\n if (p === \"win32\") return \"windows\";\n\n if (p === \"linux\") {\n const isWSL =\n env.WSL_DISTRO_NAME !== undefined ||\n env.WSLENV !== undefined ||\n existsSync(\"/proc/sys/fs/binfmt_misc/WSLInterop\");\n return isWSL ? \"wsl\" : \"linux\";\n }\n\n return \"linux\";\n}\n\nfunction resolveShell(\n env: Record<string, string | undefined>,\n): string {\n const shell = env.SHELL ?? env.ComSpec ?? \"\";\n if (shell.includes(\"zsh\")) return \"zsh\";\n if (shell.includes(\"bash\")) return \"bash\";\n if (shell.includes(\"fish\")) return \"fish\";\n if (shell.includes(\"powershell\") || shell.includes(\"pwsh\")) return \"powershell\";\n return shell.split(\"/\").pop() ?? \"unknown\";\n}\n","import type { Theme } from \"../types.js\";\n\nexport const catppuccinMocha: Theme = {\n name: \"catppuccin-mocha\",\n displayName: \"Catppuccin Mocha\",\n description: \"Soothing pastel theme with warm purple tones\",\n author: \"Catppuccin\",\n variant: \"dark\",\n colors: {\n background: \"#1e1e2e\",\n foreground: \"#cdd6f4\",\n cursor: \"#f5e0dc\",\n selectionBackground: \"#585b70\",\n selectionForeground: \"#cdd6f4\",\n black: \"#45475a\",\n red: \"#f38ba8\",\n green: \"#a6e3a1\",\n yellow: \"#f9e2af\",\n blue: \"#89b4fa\",\n magenta: \"#f5c2e7\",\n cyan: \"#94e2d5\",\n white: \"#bac2de\",\n brightBlack: \"#585b70\",\n brightRed: \"#f38ba8\",\n brightGreen: \"#a6e3a1\",\n brightYellow: \"#f9e2af\",\n brightBlue: \"#89b4fa\",\n brightMagenta: \"#f5c2e7\",\n brightCyan: \"#94e2d5\",\n brightWhite: \"#a6adc8\",\n },\n appearance: {\n backgroundOpacity: 0.85,\n backgroundBlur: 30,\n cursorStyle: \"bar\",\n cursorBlink: true,\n },\n};\n","import type { Theme } from \"../types.js\";\n\nexport const nord: Theme = {\n name: \"nord\",\n displayName: \"Nord\",\n description: \"Arctic, north-bluish color palette\",\n author: \"Arctic Ice Studio\",\n variant: \"dark\",\n colors: {\n background: \"#2e3440\",\n foreground: \"#d8dee9\",\n cursor: \"#d8dee9\",\n selectionBackground: \"#434c5e\",\n selectionForeground: \"#d8dee9\",\n black: \"#3b4252\",\n red: \"#bf616a\",\n green: \"#a3be8c\",\n yellow: \"#ebcb8b\",\n blue: \"#81a1c1\",\n magenta: \"#b48ead\",\n cyan: \"#88c0d0\",\n white: \"#e5e9f0\",\n brightBlack: \"#4c566a\",\n brightRed: \"#bf616a\",\n brightGreen: \"#a3be8c\",\n brightYellow: \"#ebcb8b\",\n brightBlue: \"#81a1c1\",\n brightMagenta: \"#b48ead\",\n brightCyan: \"#8fbcbb\",\n brightWhite: \"#eceff4\",\n },\n appearance: {\n backgroundOpacity: 0.9,\n backgroundBlur: 20,\n cursorStyle: \"bar\",\n cursorBlink: true,\n },\n};\n","import type { Theme } from \"../types.js\";\n\nexport const tokyoNight: Theme = {\n name: \"tokyo-night\",\n displayName: \"Tokyo Night\",\n description: \"Clean dark theme inspired by Tokyo city lights\",\n author: \"Enkia\",\n variant: \"dark\",\n colors: {\n background: \"#1a1b26\",\n foreground: \"#c0caf5\",\n cursor: \"#c0caf5\",\n selectionBackground: \"#33467c\",\n selectionForeground: \"#c0caf5\",\n black: \"#15161e\",\n red: \"#f7768e\",\n green: \"#9ece6a\",\n yellow: \"#e0af68\",\n blue: \"#7aa2f7\",\n magenta: \"#bb9af7\",\n cyan: \"#7dcfff\",\n white: \"#a9b1d6\",\n brightBlack: \"#414868\",\n brightRed: \"#f7768e\",\n brightGreen: \"#9ece6a\",\n brightYellow: \"#e0af68\",\n brightBlue: \"#7aa2f7\",\n brightMagenta: \"#bb9af7\",\n brightCyan: \"#7dcfff\",\n brightWhite: \"#c0caf5\",\n },\n appearance: {\n backgroundOpacity: 0.88,\n backgroundBlur: 25,\n cursorStyle: \"bar\",\n cursorBlink: true,\n },\n};\n","import type { Theme } from \"../types.js\";\n\nexport const dracula: Theme = {\n name: \"dracula\",\n displayName: \"Dracula\",\n description: \"Dark theme with vibrant colors\",\n author: \"Dracula Theme\",\n variant: \"dark\",\n colors: {\n background: \"#282a36\",\n foreground: \"#f8f8f2\",\n cursor: \"#f8f8f2\",\n selectionBackground: \"#44475a\",\n selectionForeground: \"#f8f8f2\",\n black: \"#21222c\",\n red: \"#ff5555\",\n green: \"#50fa7b\",\n yellow: \"#f1fa8c\",\n blue: \"#bd93f9\",\n magenta: \"#ff79c6\",\n cyan: \"#8be9fd\",\n white: \"#f8f8f2\",\n brightBlack: \"#6272a4\",\n brightRed: \"#ff6e6e\",\n brightGreen: \"#69ff94\",\n brightYellow: \"#ffffa5\",\n brightBlue: \"#d6acff\",\n brightMagenta: \"#ff92df\",\n brightCyan: \"#a4ffff\",\n brightWhite: \"#ffffff\",\n },\n appearance: {\n backgroundOpacity: 0.9,\n backgroundBlur: 20,\n cursorStyle: \"bar\",\n cursorBlink: true,\n },\n};\n","import type { Theme } from \"../types.js\";\n\nexport const gruvbox: Theme = {\n name: \"gruvbox\",\n displayName: \"Gruvbox Dark\",\n description: \"Retro groove color scheme with warm earthy tones\",\n author: \"morhetz\",\n variant: \"dark\",\n colors: {\n background: \"#282828\",\n foreground: \"#ebdbb2\",\n cursor: \"#ebdbb2\",\n selectionBackground: \"#504945\",\n selectionForeground: \"#ebdbb2\",\n black: \"#282828\",\n red: \"#cc241d\",\n green: \"#98971a\",\n yellow: \"#d79921\",\n blue: \"#458588\",\n magenta: \"#b16286\",\n cyan: \"#689d6a\",\n white: \"#a89984\",\n brightBlack: \"#928374\",\n brightRed: \"#fb4934\",\n brightGreen: \"#b8bb26\",\n brightYellow: \"#fabd2f\",\n brightBlue: \"#83a598\",\n brightMagenta: \"#d3869b\",\n brightCyan: \"#8ec07c\",\n brightWhite: \"#ebdbb2\",\n },\n appearance: {\n backgroundOpacity: 0.92,\n backgroundBlur: 15,\n cursorStyle: \"block\",\n cursorBlink: false,\n },\n};\n","import type { Theme } from \"../types.js\";\nimport { catppuccinMocha } from \"./catppuccin-mocha.js\";\nimport { nord } from \"./nord.js\";\nimport { tokyoNight } from \"./tokyo-night.js\";\nimport { dracula } from \"./dracula.js\";\nimport { gruvbox } from \"./gruvbox.js\";\n\nconst THEMES: ReadonlyMap<string, Theme> = new Map([\n [catppuccinMocha.name, catppuccinMocha],\n [nord.name, nord],\n [tokyoNight.name, tokyoNight],\n [dracula.name, dracula],\n [gruvbox.name, gruvbox],\n]);\n\nexport const DEFAULT_THEME = \"catppuccin-mocha\";\n\nexport function getTheme(name: string): Theme | undefined {\n return THEMES.get(name);\n}\n\nexport function listThemes(): ReadonlyArray<Theme> {\n return Array.from(THEMES.values());\n}\n\nexport function getThemeOrDefault(name?: string): Theme {\n const theme = name ? THEMES.get(name) : undefined;\n return theme ?? THEMES.get(DEFAULT_THEME)!;\n}\n","import type { Theme } from \"../../types.js\";\n\nexport function generateGhosttyConfig(theme: Theme): string {\n const { colors, appearance } = theme;\n\n return `# ============================================\n# Claude Den - Ghostty Config\n# Theme: ${theme.displayName}\n# Generated by claude-den\n# Reload: Cmd + Shift + ,\n# ============================================\n\n# --- Typography ---\nfont-family = \"Maple Mono NF CN\"\nfont-size = 14\nadjust-cell-height = 2\n\n# --- Theme: ${theme.displayName} ---\nbackground = ${colors.background}\nforeground = ${colors.foreground}\ncursor-color = ${colors.cursor}\nselection-background = ${colors.selectionBackground}\nselection-foreground = ${colors.selectionForeground}\n\npalette = 0=${colors.black}\npalette = 1=${colors.red}\npalette = 2=${colors.green}\npalette = 3=${colors.yellow}\npalette = 4=${colors.blue}\npalette = 5=${colors.magenta}\npalette = 6=${colors.cyan}\npalette = 7=${colors.white}\npalette = 8=${colors.brightBlack}\npalette = 9=${colors.brightRed}\npalette = 10=${colors.brightGreen}\npalette = 11=${colors.brightYellow}\npalette = 12=${colors.brightBlue}\npalette = 13=${colors.brightMagenta}\npalette = 14=${colors.brightCyan}\npalette = 15=${colors.brightWhite}\n\n# --- Window and Appearance ---\nbackground-opacity = ${appearance.backgroundOpacity}\nbackground-blur-radius = ${appearance.backgroundBlur}\nmacos-titlebar-style = transparent\nwindow-padding-x = 10\nwindow-padding-y = 8\nwindow-save-state = always\nwindow-theme = auto\n\n# --- Cursor ---\ncursor-style = ${appearance.cursorStyle}\ncursor-style-blink = ${appearance.cursorBlink}\ncursor-opacity = 0.8\n\n# --- Mouse ---\nmouse-hide-while-typing = true\ncopy-on-select = clipboard\n\n# --- Quick Terminal ---\nquick-terminal-position = top\nquick-terminal-screen = mouse\nquick-terminal-autohide = true\nquick-terminal-animation-duration = 0.15\n\n# --- Security ---\nclipboard-paste-protection = true\nclipboard-paste-bracketed-safe = true\n\n# --- Shell Integration ---\nshell-integration = zsh\n\n# --- Claude Code Optimizations ---\ninitial-window = true\nquit-after-last-window-closed = true\nnotify-on-command-finish = always\n\n# --- Performance ---\nscrollback-limit = 25000000\n\n# --- Keybindings (Claude Code Workflow) ---\nkeybind = cmd+d=new_split:right\nkeybind = cmd+shift+enter=toggle_split_zoom\nkeybind = cmd+shift+f=toggle_split_zoom\n`;\n}\n","import type { Theme } from \"../../types.js\";\n\nfunction hexToRgbComponents(hex: string): {\n readonly r: number;\n readonly g: number;\n readonly b: number;\n} {\n const clean = hex.replace(\"#\", \"\");\n return {\n r: parseInt(clean.substring(0, 2), 16) / 255,\n g: parseInt(clean.substring(2, 4), 16) / 255,\n b: parseInt(clean.substring(4, 6), 16) / 255,\n };\n}\n\nfunction colorEntry(hex: string): Record<string, unknown> {\n const { r, g, b } = hexToRgbComponents(hex);\n return {\n \"Red Component\": r,\n \"Green Component\": g,\n \"Blue Component\": b,\n \"Alpha Component\": 1,\n \"Color Space\": \"sRGB\",\n };\n}\n\nexport function generateIterm2Profile(theme: Theme): string {\n const { colors, appearance } = theme;\n\n const profile = {\n \"Name\": `Den ${theme.displayName}`,\n \"Guid\": `den-${theme.name}`,\n \"Normal Font\": \"MapleMono-NF-CN-Regular 14\",\n \"Transparency\": 1 - appearance.backgroundOpacity,\n \"Blur\": appearance.backgroundBlur > 0,\n \"Blur Radius\": appearance.backgroundBlur / 3,\n \"Background Color\": colorEntry(colors.background),\n \"Foreground Color\": colorEntry(colors.foreground),\n \"Cursor Color\": colorEntry(colors.cursor),\n \"Selection Color\": colorEntry(colors.selectionBackground),\n \"Selected Text Color\": colorEntry(colors.selectionForeground),\n \"Ansi 0 Color\": colorEntry(colors.black),\n \"Ansi 1 Color\": colorEntry(colors.red),\n \"Ansi 2 Color\": colorEntry(colors.green),\n \"Ansi 3 Color\": colorEntry(colors.yellow),\n \"Ansi 4 Color\": colorEntry(colors.blue),\n \"Ansi 5 Color\": colorEntry(colors.magenta),\n \"Ansi 6 Color\": colorEntry(colors.cyan),\n \"Ansi 7 Color\": colorEntry(colors.white),\n \"Ansi 8 Color\": colorEntry(colors.brightBlack),\n \"Ansi 9 Color\": colorEntry(colors.brightRed),\n \"Ansi 10 Color\": colorEntry(colors.brightGreen),\n \"Ansi 11 Color\": colorEntry(colors.brightYellow),\n \"Ansi 12 Color\": colorEntry(colors.brightBlue),\n \"Ansi 13 Color\": colorEntry(colors.brightMagenta),\n \"Ansi 14 Color\": colorEntry(colors.brightCyan),\n \"Ansi 15 Color\": colorEntry(colors.brightWhite),\n \"Cursor Type\": appearance.cursorStyle === \"bar\" ? 1 : appearance.cursorStyle === \"underline\" ? 2 : 0,\n \"Blinking Cursor\": appearance.cursorBlink,\n \"Unlimited Scrollback\": true,\n \"Mouse Reporting\": true,\n \"Unicode Version\": 9,\n };\n\n return JSON.stringify(profile, null, 2);\n}\n","import type { Theme } from \"../../types.js\";\n\nexport function generateKittyConfig(theme: Theme): string {\n const { colors, appearance } = theme;\n\n const cursorShape =\n appearance.cursorStyle === \"bar\"\n ? \"beam\"\n : appearance.cursorStyle === \"underline\"\n ? \"underline\"\n : \"block\";\n\n return `# ============================================\n# Claude Den - Kitty Config\n# Theme: ${theme.displayName}\n# Generated by claude-den\n# ============================================\n\n# --- Typography ---\nfont_family Maple Mono NF CN\nfont_size 14.0\n\n# --- Theme: ${theme.displayName} ---\nbackground ${colors.background}\nforeground ${colors.foreground}\ncursor ${colors.cursor}\nselection_background ${colors.selectionBackground}\nselection_foreground ${colors.selectionForeground}\n\ncolor0 ${colors.black}\ncolor1 ${colors.red}\ncolor2 ${colors.green}\ncolor3 ${colors.yellow}\ncolor4 ${colors.blue}\ncolor5 ${colors.magenta}\ncolor6 ${colors.cyan}\ncolor7 ${colors.white}\ncolor8 ${colors.brightBlack}\ncolor9 ${colors.brightRed}\ncolor10 ${colors.brightGreen}\ncolor11 ${colors.brightYellow}\ncolor12 ${colors.brightBlue}\ncolor13 ${colors.brightMagenta}\ncolor14 ${colors.brightCyan}\ncolor15 ${colors.brightWhite}\n\n# --- Appearance ---\nbackground_opacity ${appearance.backgroundOpacity}\ncursor_shape ${cursorShape}\ncursor_blink_interval ${appearance.cursorBlink ? \"0.5\" : \"0\"}\nhide_window_decorations titlebar-only\nwindow_padding_width 8\n\n# --- Performance ---\nscrollback_lines 250000\n\n# --- Keybindings (Claude Code Workflow) ---\nmap cmd+d launch --location=vsplit --cwd=current\nmap cmd+shift+enter toggle_layout stack\nmap cmd+shift+f toggle_layout stack\n\n# --- Shell Integration ---\nshell_integration enabled\n`;\n}\n","import type { Theme } from \"../../types.js\";\n\ninterface AlacrittyConfig {\n readonly font: { readonly normal: { readonly family: string }; readonly size: number };\n readonly window: {\n readonly opacity: number;\n readonly blur: boolean;\n readonly padding: { readonly x: number; readonly y: number };\n readonly decorations: string;\n };\n readonly cursor: {\n readonly style: { readonly shape: string; readonly blinking: string };\n };\n readonly colors: {\n readonly primary: { readonly background: string; readonly foreground: string };\n readonly cursor: { readonly text: string; readonly cursor: string };\n readonly selection: { readonly text: string; readonly background: string };\n readonly normal: Record<string, string>;\n readonly bright: Record<string, string>;\n };\n readonly scrolling: { readonly history: number };\n}\n\nexport function generateAlacrittyConfig(theme: Theme): string {\n const { colors, appearance } = theme;\n\n const cursorShape =\n appearance.cursorStyle === \"bar\"\n ? \"Beam\"\n : appearance.cursorStyle === \"underline\"\n ? \"Underline\"\n : \"Block\";\n\n const config: AlacrittyConfig = {\n font: {\n normal: { family: \"Maple Mono NF CN\" },\n size: 14,\n },\n window: {\n opacity: appearance.backgroundOpacity,\n blur: appearance.backgroundBlur > 0,\n padding: { x: 10, y: 8 },\n decorations: \"Transparent\",\n },\n cursor: {\n style: {\n shape: cursorShape,\n blinking: appearance.cursorBlink ? \"On\" : \"Off\",\n },\n },\n colors: {\n primary: {\n background: colors.background,\n foreground: colors.foreground,\n },\n cursor: {\n text: colors.background,\n cursor: colors.cursor,\n },\n selection: {\n text: colors.selectionForeground,\n background: colors.selectionBackground,\n },\n normal: {\n black: colors.black,\n red: colors.red,\n green: colors.green,\n yellow: colors.yellow,\n blue: colors.blue,\n magenta: colors.magenta,\n cyan: colors.cyan,\n white: colors.white,\n },\n bright: {\n black: colors.brightBlack,\n red: colors.brightRed,\n green: colors.brightGreen,\n yellow: colors.brightYellow,\n blue: colors.brightBlue,\n magenta: colors.brightMagenta,\n cyan: colors.brightCyan,\n white: colors.brightWhite,\n },\n },\n scrolling: {\n history: 100000,\n },\n };\n\n return `# ============================================\n# Claude Den - Alacritty Config\n# Theme: ${theme.displayName}\n# Generated by claude-den\n# ============================================\n\n${toToml(config as unknown as Record<string, unknown>)}`;\n}\n\nfunction toToml(obj: Record<string, unknown> | object, prefix = \"\"): string {\n const lines: string[] = [];\n\n for (const [key, value] of Object.entries(obj)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n lines.push(`[${fullKey}]`);\n for (const [subKey, subValue] of Object.entries(value as Record<string, unknown>)) {\n if (typeof subValue === \"object\" && subValue !== null && !Array.isArray(subValue)) {\n lines.push(\"\");\n lines.push(...toToml({ [subKey]: subValue }, fullKey).split(\"\\n\"));\n } else {\n lines.push(`${subKey} = ${formatTomlValue(subValue)}`);\n }\n }\n lines.push(\"\");\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatTomlValue(value: unknown): string {\n if (typeof value === \"string\") return `\"${value}\"`;\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"boolean\") return String(value);\n return String(value);\n}\n","import type { Theme } from \"../../types.js\";\n\nexport function generateStarshipConfig(theme: Theme): string {\n const { colors } = theme;\n\n return `# ============================================\n# Claude Den - Starship Config\n# Theme: ${theme.displayName}\n# Generated by claude-den\n# Place at: ~/.config/starship.toml\n# ============================================\n\nformat = \"\"\"\n$directory\\\n$git_branch\\\n$git_status\\\n$nodejs\\\n$python\\\n$rust\\\n$golang\\\n$cmd_duration\\\n$line_break\\\n$character\"\"\"\n\n[character]\nsuccess_symbol = \"[❯](bold ${colors.green})\"\nerror_symbol = \"[❯](bold ${colors.red})\"\nvimcmd_symbol = \"[❮](bold ${colors.blue})\"\n\n[directory]\nstyle = \"bold ${colors.blue}\"\ntruncation_length = 3\ntruncate_to_repo = true\nformat = \"[$path]($style)[$read_only]($read_only_style) \"\n\n[git_branch]\nstyle = \"bold ${colors.magenta}\"\nformat = \"[$symbol$branch(:$remote_branch)]($style) \"\nsymbol = \" \"\n\n[git_status]\nstyle = \"bold ${colors.red}\"\nformat = '([$all_status$ahead_behind]($style) )'\nconflicted = \"=\"\nahead = \"⇡\\${count}\"\nbehind = \"⇣\\${count}\"\ndiverged = \"⇕⇡\\${ahead_count}⇣\\${behind_count}\"\nuntracked = \"?\\${count}\"\nstashed = \"\\\\$\\${count}\"\nmodified = \"!\\${count}\"\nstaged = \"+\\${count}\"\ndeleted = \"✘\\${count}\"\n\n[nodejs]\nstyle = \"bold ${colors.green}\"\nformat = \"[$symbol($version)]($style) \"\nsymbol = \" \"\n\n[python]\nstyle = \"bold ${colors.yellow}\"\nformat = '[$symbol\\${pyenv_prefix}(\\${version})]($style) '\nsymbol = \" \"\n\n[rust]\nstyle = \"bold ${colors.red}\"\nformat = \"[$symbol($version)]($style) \"\nsymbol = \" \"\n\n[golang]\nstyle = \"bold ${colors.cyan}\"\nformat = \"[$symbol($version)]($style) \"\nsymbol = \" \"\n\n[cmd_duration]\nstyle = \"bold ${colors.yellow}\"\nmin_time = 2_000\nformat = \"[$duration]($style) \"\nshow_milliseconds = false\n\n[line_break]\ndisabled = false\n`;\n}\n","import type { Theme, TmuxLayout } from \"../../types.js\";\n\nexport const LAYOUTS: ReadonlyMap<string, TmuxLayout> = new Map([\n [\n \"coding\",\n {\n name: \"coding\",\n description: \"Claude Code left, editor/shell right\",\n panes: [\n { command: \"claude\", split: \"horizontal\", size: \"60%\" },\n { command: \"$SHELL\", split: \"vertical\" },\n ],\n },\n ],\n [\n \"parallel\",\n {\n name: \"parallel\",\n description: \"2x2 grid for parallel Claude agents\",\n panes: [\n { command: \"claude\", split: \"horizontal\", size: \"50%\" },\n { command: \"claude\", split: \"vertical\", size: \"50%\" },\n { command: \"claude\", split: \"horizontal\", size: \"50%\" },\n { command: \"claude\", split: \"vertical\" },\n ],\n },\n ],\n [\n \"monitor\",\n {\n name: \"monitor\",\n description: \"Claude + logs + git + system monitor\",\n panes: [\n { command: \"claude\", split: \"horizontal\", size: \"60%\" },\n { command: \"lazygit 2>/dev/null || git log --oneline -20\", split: \"vertical\", size: \"50%\" },\n { command: \"btop 2>/dev/null || top\", split: \"vertical\" },\n ],\n },\n ],\n]);\n\nexport function generateTmuxConfig(theme: Theme): string {\n const { colors } = theme;\n\n return `# ============================================\n# Claude Den - tmux Config\n# Theme: ${theme.displayName}\n# Generated by claude-den\n# Place at: ~/.tmux.conf\n# ============================================\n\n# --- General ---\nset -g default-terminal \"tmux-256color\"\nset -ag terminal-overrides \",xterm-256color:RGB\"\nset -g mouse on\nset -g history-limit 250000\nset -g base-index 1\nsetw -g pane-base-index 1\nset -g renumber-windows on\nset -s escape-time 0\nset -g focus-events on\n\n# --- Theme: ${theme.displayName} ---\nset -g status-style \"bg=${colors.background},fg=${colors.foreground}\"\nset -g status-left \"#[bg=${colors.blue},fg=${colors.background},bold] #S #[default] \"\nset -g status-right \"#[fg=${colors.brightBlack}]%H:%M #[fg=${colors.magenta}]#h \"\nset -g status-left-length 30\nset -g status-right-length 50\n\nsetw -g window-status-format \"#[fg=${colors.brightBlack}] #I:#W \"\nsetw -g window-status-current-format \"#[bg=${colors.blue},fg=${colors.background},bold] #I:#W \"\n\nset -g pane-border-style \"fg=${colors.brightBlack}\"\nset -g pane-active-border-style \"fg=${colors.blue}\"\nset -g message-style \"bg=${colors.yellow},fg=${colors.background}\"\n\n# --- Keybindings ---\nset -g prefix C-a\nunbind C-b\nbind C-a send-prefix\n\n# Split panes (Claude Code workflow)\nbind | split-window -h -c \"#{pane_current_path}\"\nbind - split-window -v -c \"#{pane_current_path}\"\nunbind '\"'\nunbind %\n\n# Navigate panes with Alt+arrow\nbind -n M-Left select-pane -L\nbind -n M-Right select-pane -R\nbind -n M-Up select-pane -U\nbind -n M-Down select-pane -D\n\n# Resize panes\nbind -r H resize-pane -L 5\nbind -r J resize-pane -D 5\nbind -r K resize-pane -U 5\nbind -r L resize-pane -R 5\n\n# Reload config\nbind r source-file ~/.tmux.conf \\\\; display \"Config reloaded!\"\n\n# New window in current path\nbind c new-window -c \"#{pane_current_path}\"\n`;\n}\n\nexport function generateTmuxLayoutScript(layout: TmuxLayout): string {\n const sessionName = `den-${layout.name}`;\n const lines = [\n \"#!/usr/bin/env bash\",\n `# Claude Den Layout: ${layout.name} - ${layout.description}`,\n \"\",\n `SESSION=\"${sessionName}\"`,\n \"\",\n \"# Kill existing session if any\",\n `tmux has-session -t $SESSION 2>/dev/null && tmux kill-session -t $SESSION`,\n \"\",\n \"# Create new session\",\n `tmux new-session -d -s $SESSION -x $(tput cols) -y $(tput lines)`,\n \"\",\n ];\n\n for (let i = 0; i < layout.panes.length; i++) {\n const pane = layout.panes[i];\n if (i > 0) {\n const splitFlag = pane.split === \"horizontal\" ? \"-h\" : \"-v\";\n const sizeFlag = pane.size ? `-p ${parseInt(pane.size)}` : \"\";\n lines.push(`tmux split-window ${splitFlag} ${sizeFlag} -t $SESSION`);\n }\n lines.push(`tmux send-keys -t $SESSION '${pane.command}' Enter`);\n lines.push(\"\");\n }\n\n lines.push(\"# Select first pane\");\n lines.push(`tmux select-pane -t $SESSION:0.0`);\n lines.push(\"\");\n lines.push(\"# Attach to session\");\n lines.push(`tmux attach-session -t $SESSION`);\n\n return lines.join(\"\\n\");\n}\n"],"mappings":"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","names":["existsSync"]}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "claude-den",
3
+ "version": "0.1.0",
4
+ "description": "Your cozy terminal den for Claude Code",
5
+ "type": "module",
6
+ "bin": {
7
+ "den": "dist/bin/den.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsup",
11
+ "dev": "tsup --watch",
12
+ "test": "vitest run",
13
+ "test:watch": "vitest",
14
+ "test:coverage": "vitest run --coverage",
15
+ "lint": "eslint src/",
16
+ "typecheck": "tsc --noEmit"
17
+ },
18
+ "keywords": [
19
+ "claude",
20
+ "claude-code",
21
+ "terminal",
22
+ "ghostty",
23
+ "iterm2",
24
+ "kitty",
25
+ "alacritty",
26
+ "starship",
27
+ "tmux",
28
+ "theme",
29
+ "developer-experience"
30
+ ],
31
+ "author": "Eddie",
32
+ "license": "MIT",
33
+ "dependencies": {
34
+ "chalk": "^5.4.1",
35
+ "commander": "^13.1.0",
36
+ "inquirer": "^12.6.0"
37
+ },
38
+ "devDependencies": {
39
+ "@types/node": "^22.15.0",
40
+ "eslint": "^9.25.0",
41
+ "tsup": "^8.4.0",
42
+ "typescript": "^5.8.3",
43
+ "vitest": "^3.1.1"
44
+ },
45
+ "engines": {
46
+ "node": ">=18"
47
+ },
48
+ "files": [
49
+ "dist",
50
+ "templates"
51
+ ]
52
+ }