Initial commit: Shelly Manager with Textual CLI, Streamlit UI, and comprehensive .gitignore
Shelly device management app with mDNS/subnet discovery, inventory, configuration, and mass operations for Gen1/Gen2+ devices. Includes .gitignore excluding runtime data (device DB, user config), AI conversation history, build artifacts, and common Python/OS patterns.
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
# Streamlit theme templates
|
||||
|
||||
Ready-to-use theme templates for Streamlit apps.
|
||||
|
||||
## Available themes
|
||||
|
||||
| Theme | Base | Primary color | Fonts |
|
||||
|-------|------|---------------|-------|
|
||||
| **snowflake** | Light | `#29B5E8` (cyan) | Inter, JetBrains Mono |
|
||||
| **dracula** | Dark | `#BD93F9` (purple) | Fira Sans, JetBrains Mono |
|
||||
| **nord** | Dark | `#88C0D0` (frost blue) | Inter, JetBrains Mono |
|
||||
| **stripe** | Light | `#635BFF` (indigo) | Inter, Source Code Pro |
|
||||
| **solarized-light** | Light | `#268BD2` (blue) | Source Sans 3, Source Code Pro |
|
||||
| **spotify** | Dark | `#1DB954` (green) | Inter, Fira Code |
|
||||
| **github** | Light | `#0969DA` (blue) | Inter, JetBrains Mono |
|
||||
| **minimal** | Dark | `#6366f1` (indigo) | Inter, JetBrains Mono |
|
||||
|
||||
## Quick start
|
||||
|
||||
```bash
|
||||
# Run a theme locally
|
||||
cd templates/themes/spotify
|
||||
uv sync
|
||||
uv run streamlit run streamlit_app.py
|
||||
```
|
||||
|
||||
## Deploying to Snowflake
|
||||
|
||||
Before deploying, update `snowflake.yml` with your account-specific resources:
|
||||
|
||||
```yaml
|
||||
# Find available compute pools
|
||||
SHOW COMPUTE POOLS;
|
||||
|
||||
# Find available external access integrations
|
||||
SHOW EXTERNAL ACCESS INTEGRATIONS;
|
||||
```
|
||||
|
||||
Then edit `snowflake.yml` to replace the placeholders:
|
||||
- `<YOUR_COMPUTE_POOL>` → e.g., `STREAMLIT_DEDICATED_POOL`
|
||||
- `<YOUR_PYPI_INTEGRATION>` → e.g., `PYPI_ACCESS_INTEGRATION`
|
||||
- `<FROM_CONNECTION>` values are filled from your active connection
|
||||
|
||||
Deploy with:
|
||||
```bash
|
||||
snow streamlit deploy --replace
|
||||
```
|
||||
|
||||
## How Streamlit theming works
|
||||
|
||||
A custom theme requires two things:
|
||||
|
||||
### 1. Theme configuration in `.streamlit/config.toml`
|
||||
|
||||
```toml
|
||||
[theme]
|
||||
base = "dark" # "dark" or "light"
|
||||
primaryColor = "#1DB954" # Buttons, links, highlights
|
||||
backgroundColor = "#121212" # Main background
|
||||
secondaryBackgroundColor = "#181818" # Sidebar, cards
|
||||
textColor = "#FFFFFF" # Main text color
|
||||
font = "Inter" # Body font
|
||||
codeFont = "FiraCode" # Code blocks
|
||||
```
|
||||
|
||||
### 2. For Snowflake deployment: local font files
|
||||
|
||||
Snowflake doesn't allow remote URL fetches, so fonts must be bundled locally:
|
||||
|
||||
```toml
|
||||
[server]
|
||||
enableStaticServing = true # Required for static files
|
||||
|
||||
[[theme.fontFaces]]
|
||||
family = "Inter"
|
||||
url = "app/static/Inter-Regular.ttf" # Note: app/ prefix required
|
||||
weight = 400
|
||||
|
||||
[[theme.fontFaces]]
|
||||
family = "Inter"
|
||||
url = "app/static/Inter-Bold.ttf"
|
||||
weight = 700
|
||||
```
|
||||
|
||||
Font files go in `static/` directory and are referenced with `app/static/` prefix.
|
||||
|
||||
### Sidebar theming (optional)
|
||||
|
||||
```toml
|
||||
[theme.sidebar]
|
||||
backgroundColor = "#181818"
|
||||
secondaryBackgroundColor = "#121212"
|
||||
borderColor = "#282828"
|
||||
```
|
||||
|
||||
## Theme file structure
|
||||
|
||||
Each theme directory contains:
|
||||
|
||||
```
|
||||
{theme}/
|
||||
├── .streamlit/config.toml # Theme colors and fonts
|
||||
├── streamlit_app.py # Demo app showing the theme
|
||||
├── pyproject.toml # Dependencies
|
||||
├── snowflake.yml # Snowflake deployment config
|
||||
└── static/ # Bundled font files (*.ttf)
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
All themes require Python >=3.11 and use:
|
||||
- `snowflake-connector-python>=3.3.0` (required — `streamlit[snowflake]` silently skips this on Python 3.12+)
|
||||
- `streamlit[snowflake]>=1.54.0`
|
||||
- `altair>=5.5.0`
|
||||
- `pandas>=2.2.3`
|
||||
|
||||
## Font licensing
|
||||
|
||||
All bundled fonts are licensed under the [SIL Open Font License 1.1](https://openfontlicense.org/), which permits free use, redistribution, and modification:
|
||||
|
||||
| Font | Used by | Source |
|
||||
|------|---------|--------|
|
||||
| Inter | snowflake, nord, spotify, github, minimal, stripe | [github.com/rsms/inter](https://github.com/rsms/inter) |
|
||||
| JetBrains Mono | snowflake, dracula, nord, github, minimal | [github.com/JetBrains/JetBrainsMono](https://github.com/JetBrains/JetBrainsMono) |
|
||||
| Fira Sans | dracula | [github.com/mozilla/Fira](https://github.com/mozilla/Fira) |
|
||||
| Fira Code | spotify | [github.com/tonsky/FiraCode](https://github.com/tonsky/FiraCode) |
|
||||
| Source Sans 3 | solarized-light | [github.com/adobe-fonts/source-sans](https://github.com/adobe-fonts/source-sans) |
|
||||
| Source Code Pro | solarized-light, stripe | [github.com/adobe-fonts/source-code-pro](https://github.com/adobe-fonts/source-code-pro) |
|
||||
Reference in New Issue
Block a user