Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ Dart implementation of the protocol, and the terminal is
password.
- Customizable on-screen key row with modifiers, arrows, function keys, key
repeat, latching modifiers, and your own text snippets and control-key combos.
- Upload key: pick phone files, photos, or videos, stream them to the machine
over SFTP into `~/.conduit/uploads/<date>/`, and insert the shell-quoted
remote path into the terminal, with per-machine directory and optional
cleanup of Conduit's own old uploads.
- Saved global and per-machine snippets from the key row, with hidden snippets
for passwords or secrets and optional per-machine run-on-connect snippets.
- Optional device-auth app lock for protecting saved machines and credentials.
Expand Down
1 change: 1 addition & 0 deletions lib/core/presentation/theme_sheet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1078,6 +1078,7 @@ IconData _keyboardActionIcon(TerminalKeyboardAction action) {
TerminalKeyboardAction.tmuxMenu => Icons.view_quilt_rounded,
TerminalKeyboardAction.snippets => Icons.snippet_folder_rounded,
TerminalKeyboardAction.compose => Icons.edit_note_rounded,
TerminalKeyboardAction.upload => Icons.upload_file_rounded,
};
}

Expand Down
276 changes: 276 additions & 0 deletions lib/core/theme/app_palette.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ enum AppPalette {
palenight,
synthwave,
githubDark,
horizon,
iceberg,
sonokai,
zenburn,
carbonfox,
poimandres,
}

/// To add a palette: add a value to [AppPalette], then add its `PaletteSpec`
Expand Down Expand Up @@ -1094,5 +1100,275 @@ extension AppPaletteDetails on AppPalette {
),
terminalLight: _lightFallbackTerminal,
),
AppPalette.horizon => const PaletteSpec(
label: 'Horizon',
caption: 'Warm dusk pinks and teals',
accent: Color(0xFFE95678),
accentSecondary: Color(0xFF26BBD9),
canvas: Color(0xFF16161C),
panel: Color(0xFF1C1E26),
panelElevated: Color(0xFF232530),
hairline: Color(0xFF2E303E),
border: Color(0xFF3A3D4D),
foreground: Color(0xFFD5D8DA),
mutedForeground: Color(0xFF9DA0A2),
subtleForeground: Color(0xFF6C6F93),
success: Color(0xFF29D398),
warning: Color(0xFFFAB795),
danger: Color(0xFFE95678),
canvasLight: Color(0xFFFDF0ED),
foregroundLight: Color(0xFF1C1E26),
terminalDark: TerminalTheme(
cursor: Color(0xFFE95678),
selection: Color(0x662E303E),
foreground: Color(0xFFD5D8DA),
background: Color(0xFF16161C),
black: Color(0xFF16161C),
red: Color(0xFFE95678),
green: Color(0xFF29D398),
yellow: Color(0xFFFAB795),
blue: Color(0xFF26BBD9),
magenta: Color(0xFFEE64AC),
cyan: Color(0xFF59E1E3),
white: Color(0xFFD5D8DA),
brightBlack: Color(0xFF6C6F93),
brightRed: Color(0xFFEC6A88),
brightGreen: Color(0xFF3FDAA4),
brightYellow: Color(0xFFFBC3A7),
brightBlue: Color(0xFF3FC4DE),
brightMagenta: Color(0xFFF075B5),
brightCyan: Color(0xFF6BE4E6),
brightWhite: Color(0xFFE5E5E5),
searchHitBackground: Color(0xFFFAB795),
searchHitBackgroundCurrent: Color(0xFF29D398),
searchHitForeground: Color(0xFF16161C),
),
terminalLight: _lightFallbackTerminal,
),
AppPalette.iceberg => const PaletteSpec(
label: 'Iceberg',
caption: 'Cool bluish depths',
accent: Color(0xFF84A0C6),
accentSecondary: Color(0xFFA093C7),
canvas: Color(0xFF101219),
panel: Color(0xFF161821),
panelElevated: Color(0xFF1E2132),
hairline: Color(0xFF272C42),
border: Color(0xFF33374C),
foreground: Color(0xFFC6C8D1),
mutedForeground: Color(0xFF8389A3),
subtleForeground: Color(0xFF6B7089),
success: Color(0xFFB4BE82),
warning: Color(0xFFE2A478),
danger: Color(0xFFE27878),
canvasLight: Color(0xFFE8E9EC),
foregroundLight: Color(0xFF33374C),
terminalDark: TerminalTheme(
cursor: Color(0xFFC6C8D1),
selection: Color(0x661E2132),
foreground: Color(0xFFC6C8D1),
background: Color(0xFF101219),
black: Color(0xFF1E2132),
red: Color(0xFFE27878),
green: Color(0xFFB4BE82),
yellow: Color(0xFFE2A478),
blue: Color(0xFF84A0C6),
magenta: Color(0xFFA093C7),
cyan: Color(0xFF89B8C2),
white: Color(0xFFC6C8D1),
brightBlack: Color(0xFF6B7089),
brightRed: Color(0xFFE98989),
brightGreen: Color(0xFFC0CA8E),
brightYellow: Color(0xFFE9B189),
brightBlue: Color(0xFF91ACD1),
brightMagenta: Color(0xFFADA0D3),
brightCyan: Color(0xFF95C4CE),
brightWhite: Color(0xFFD2D4DE),
searchHitBackground: Color(0xFFE2A478),
searchHitBackgroundCurrent: Color(0xFF84A0C6),
searchHitForeground: Color(0xFF101219),
),
terminalLight: _lightFallbackTerminal,
),
AppPalette.sonokai => const PaletteSpec(
label: 'Sonokai',
caption: 'High-contrast vivid shades',
accent: Color(0xFF9ED072),
accentSecondary: Color(0xFFB39DF3),
canvas: Color(0xFF22242A),
panel: Color(0xFF2C2E34),
panelElevated: Color(0xFF33353F),
hairline: Color(0xFF3B3E48),
border: Color(0xFF45484F),
foreground: Color(0xFFE2E2E3),
mutedForeground: Color(0xFF9DA0A8),
subtleForeground: Color(0xFF7F8490),
success: Color(0xFF9ED072),
warning: Color(0xFFE7C664),
danger: Color(0xFFFC5D7C),
canvasLight: Color(0xFFF4F3F1),
foregroundLight: Color(0xFF33353F),
terminalDark: TerminalTheme(
cursor: Color(0xFFE2E2E3),
selection: Color(0x66414550),
foreground: Color(0xFFE2E2E3),
background: Color(0xFF22242A),
black: Color(0xFF181A1C),
red: Color(0xFFFC5D7C),
green: Color(0xFF9ED072),
yellow: Color(0xFFE7C664),
blue: Color(0xFF76CCE0),
magenta: Color(0xFFB39DF3),
cyan: Color(0xFF76CCE0),
white: Color(0xFFE2E2E3),
brightBlack: Color(0xFF7F8490),
brightRed: Color(0xFFFC5D7C),
brightGreen: Color(0xFF9ED072),
brightYellow: Color(0xFFE7C664),
brightBlue: Color(0xFF76CCE0),
brightMagenta: Color(0xFFB39DF3),
brightCyan: Color(0xFF76CCE0),
brightWhite: Color(0xFFF4F3F1),
searchHitBackground: Color(0xFFE7C664),
searchHitBackgroundCurrent: Color(0xFF9ED072),
searchHitForeground: Color(0xFF22242A),
),
terminalLight: _lightFallbackTerminal,
),
AppPalette.zenburn => const PaletteSpec(
label: 'Zenburn',
caption: 'Low-contrast classic calm',
accent: Color(0xFFF0DFAF),
accentSecondary: Color(0xFF8CD0D3),
canvas: Color(0xFF313131),
panel: Color(0xFF3F3F3F),
panelElevated: Color(0xFF494949),
hairline: Color(0xFF525252),
border: Color(0xFF5F5F5F),
foreground: Color(0xFFDCDCCC),
mutedForeground: Color(0xFFA8A897),
subtleForeground: Color(0xFF709080),
success: Color(0xFF60B48A),
warning: Color(0xFFF0DFAF),
danger: Color(0xFFDCA3A3),
canvasLight: Color(0xFFF2F1E9),
foregroundLight: Color(0xFF3F3F3F),
terminalDark: TerminalTheme(
cursor: Color(0xFFDCDCCC),
selection: Color(0x66709080),
foreground: Color(0xFFDCDCCC),
background: Color(0xFF313131),
black: Color(0xFF1E2320),
red: Color(0xFF705050),
green: Color(0xFF60B48A),
yellow: Color(0xFFDFAF8F),
blue: Color(0xFF506070),
magenta: Color(0xFFDC8CC3),
cyan: Color(0xFF8CD0D3),
white: Color(0xFFDCDCCC),
brightBlack: Color(0xFF709080),
brightRed: Color(0xFFDCA3A3),
brightGreen: Color(0xFFC3BF9F),
brightYellow: Color(0xFFF0DFAF),
brightBlue: Color(0xFF94BFF3),
brightMagenta: Color(0xFFEC93D3),
brightCyan: Color(0xFF93E0E3),
brightWhite: Color(0xFFFFFFFF),
searchHitBackground: Color(0xFFF0DFAF),
searchHitBackgroundCurrent: Color(0xFF93E0E3),
searchHitForeground: Color(0xFF313131),
),
terminalLight: _lightFallbackTerminal,
),
AppPalette.carbonfox => const PaletteSpec(
label: 'Carbonfox',
caption: 'Carbon black, neon glow',
accent: Color(0xFF78A9FF),
accentSecondary: Color(0xFFBE95FF),
canvas: Color(0xFF0C0C0C),
panel: Color(0xFF161616),
panelElevated: Color(0xFF252525),
hairline: Color(0xFF2A2A2A),
border: Color(0xFF3C3C3C),
foreground: Color(0xFFF2F4F8),
mutedForeground: Color(0xFFB6B8BB),
subtleForeground: Color(0xFF7B7C7E),
success: Color(0xFF25BE6A),
warning: Color(0xFF08BDBA),
danger: Color(0xFFEE5396),
canvasLight: Color(0xFFF4F4F5),
foregroundLight: Color(0xFF161616),
terminalDark: TerminalTheme(
cursor: Color(0xFFF2F4F8),
selection: Color(0x662A2A2A),
foreground: Color(0xFFF2F4F8),
background: Color(0xFF0C0C0C),
black: Color(0xFF282828),
red: Color(0xFFEE5396),
green: Color(0xFF25BE6A),
yellow: Color(0xFF08BDBA),
blue: Color(0xFF78A9FF),
magenta: Color(0xFFBE95FF),
cyan: Color(0xFF33B1FF),
white: Color(0xFFDFDFE0),
brightBlack: Color(0xFF484848),
brightRed: Color(0xFFF16DA6),
brightGreen: Color(0xFF46C880),
brightYellow: Color(0xFF2DC7C4),
brightBlue: Color(0xFF8CB6FF),
brightMagenta: Color(0xFFC8A5FF),
brightCyan: Color(0xFF52BDFF),
brightWhite: Color(0xFFE4E4E5),
searchHitBackground: Color(0xFF08BDBA),
searchHitBackgroundCurrent: Color(0xFF78A9FF),
searchHitForeground: Color(0xFF0C0C0C),
),
terminalLight: _lightFallbackTerminal,
),
AppPalette.poimandres => const PaletteSpec(
label: 'Poimandres',
caption: 'Minimal teal on deep slate',
accent: Color(0xFF5DE4C7),
accentSecondary: Color(0xFF89DDFF),
canvas: Color(0xFF171922),
panel: Color(0xFF1B1E28),
panelElevated: Color(0xFF252B37),
hairline: Color(0xFF2C3341),
border: Color(0xFF3A4150),
foreground: Color(0xFFE4F0FB),
mutedForeground: Color(0xFFA6ACCD),
subtleForeground: Color(0xFF767C9D),
success: Color(0xFF5DE4C7),
warning: Color(0xFFFFFAC2),
danger: Color(0xFFD0679D),
canvasLight: Color(0xFFEFF3F9),
foregroundLight: Color(0xFF1B1E28),
terminalDark: TerminalTheme(
cursor: Color(0xFF5DE4C7),
selection: Color(0x66303340),
foreground: Color(0xFFE4F0FB),
background: Color(0xFF171922),
black: Color(0xFF1B1E28),
red: Color(0xFFD0679D),
green: Color(0xFF5DE4C7),
yellow: Color(0xFFFFFAC2),
blue: Color(0xFF89DDFF),
magenta: Color(0xFFFCC5E9),
cyan: Color(0xFFADD7FF),
white: Color(0xFFFFFFFF),
brightBlack: Color(0xFF767C9D),
brightRed: Color(0xFFD0679D),
brightGreen: Color(0xFF5DE4C7),
brightYellow: Color(0xFFFFFAC2),
brightBlue: Color(0xFF89DDFF),
brightMagenta: Color(0xFFFCC5E9),
brightCyan: Color(0xFFADD7FF),
brightWhite: Color(0xFFFFFFFF),
searchHitBackground: Color(0xFFFFFAC2),
searchHitBackgroundCurrent: Color(0xFF5DE4C7),
searchHitForeground: Color(0xFF171922),
),
terminalLight: _lightFallbackTerminal,
),
};
}
4 changes: 4 additions & 0 deletions lib/core/theme/terminal_appearance.dart
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ enum TerminalKeyboardAction {
tmuxMenu,
snippets,
compose,
upload,
}

enum TerminalKeyboardItemKind { builtIn, customText, customControl }
Expand Down Expand Up @@ -170,6 +171,7 @@ const defaultTerminalKeyboardActions = [
TerminalKeyboardAction.tmuxScrollback,
TerminalKeyboardAction.tmuxMenu,
TerminalKeyboardAction.snippets,
TerminalKeyboardAction.upload,
TerminalKeyboardAction.fullscreen,
];

Expand Down Expand Up @@ -262,6 +264,7 @@ const defaultTerminalKeyboardItems = [
TerminalKeyboardItem.builtIn(TerminalKeyboardAction.tmuxScrollback),
TerminalKeyboardItem.builtIn(TerminalKeyboardAction.tmuxMenu),
TerminalKeyboardItem.builtIn(TerminalKeyboardAction.snippets),
TerminalKeyboardItem.builtIn(TerminalKeyboardAction.upload),
TerminalKeyboardItem.builtIn(TerminalKeyboardAction.fullscreen),
];

Expand Down Expand Up @@ -383,5 +386,6 @@ extension TerminalKeyboardActionDetails on TerminalKeyboardAction {
TerminalKeyboardAction.tmuxMenu => 'Tmux+',
TerminalKeyboardAction.snippets => 'Snip',
TerminalKeyboardAction.compose => 'Compose',
TerminalKeyboardAction.upload => 'Upload',
};
}
Loading