An open API service indexing awesome lists of open source software.

https://github.com/dstushar7/sticky-notes

Minimalist sticky notes app built in Python using PyQt6
https://github.com/dstushar7/sticky-notes

desktop-app linux pyqt6 python qt6 snap sticky-notes

Last synced: 16 days ago
JSON representation

Minimalist sticky notes app built in Python using PyQt6

Awesome Lists containing this project

README

          

# ๐Ÿ—’๏ธ Sticky Notes

![Python](https://img.shields.io/badge/python-3.10+-blue?logo=python)
![PyQt6](https://img.shields.io/badge/PyQt6-GUI-green)
![License: MIT](https://img.shields.io/badge/license-MIT-yellow)
![Installed size](https://img.shields.io/badge/installed%20size-~26%20MB-brightgreen)

A desktop **Sticky Notes** app for Linux, built with **Python** and **PyQt6** โ€” frameless, glass-styled, outrageously pretty, and featherweight (~26 MB installed).
Jot down thoughts, ideas, and reminders right on your desktop with rich text, 7 color themes, and a one-click collapse-to-pill UI.
Notes save locally and are restored exactly where you left them between sessions.

---

## ๐Ÿš€ Features

- ๐Ÿ–Š๏ธ Create multiple sticky notes effortlessly via the `+` button or tray menu
- ๐Ÿท๏ธ **Editable note titles** โ€” click the title pill to rename; a smart default auto-fills from the first body line until you set a custom name
- ๐Ÿ’พ Auto-saves note content, title, position, size, theme, and last-edited time every 5 seconds
- ๐ŸŽจ **7 color themes** โ€” Yellow, Green, Pink, Purple, Blue, Gray, Charcoal
- โœ๏ธ **Rich text formatting** โ€” Bold (`Ctrl+B`), Italic (`Ctrl+I`), Underline (`Ctrl+U`), Strikethrough (`Ctrl+Shift+S`)
- ๐Ÿ“‹ **Bullet lists with nested sublists** โ€” Toggle with `Ctrl+Shift+L`; `Tab` indents to a sublist (style cycles โ—โ†’โ—‹โ†’โ– ), `Shift+Tab` outdents; `Enter` continues, `Shift+Enter` breaks out
- ๐Ÿช„ **Collapse / expand** โ€” double-click anywhere on the title bar outside the title to collapse a note to just its header
- ๐Ÿ–ฑ๏ธ **Resizable from all 8 edges and corners** โ€” no OS chrome needed
- ๐Ÿงฉ System tray integration with a **Show Note โ–ถ** submenu listing open notes, sorted by most recently edited
- ๐Ÿ‘๏ธ "Show All Notes" support to bring all notes to the front
- ๐Ÿš€ **Launch on system startup** โ€” on by default for new installs; toggle in Settings to disable. The app auto-launches quietly to your tray on login, restores your saved notes, and never pops a blank window at you when there's nothing to show
- ๐ŸŸข Packaged as a **Snap app** for easy Linux installation

---

## โš™๏ธ Installation

### ๐Ÿงฉ Option 1 โ€“ From the Snap Store (Recommended)

```bash
sudo snap install stickynotes-dabobroto
```

---

### ๐Ÿ’ป Option 2 โ€“ Run from Source (Development Mode)

1. Clone the repository:

```bash
git clone https://github.com/dstushar7/sticky-notes.git
cd sticky-notes
```

2. Create a virtual environment and install dependencies:

```bash
python3 -m venv stickyenv
source stickyenv/bin/activate
pip install -r requirements.txt
```

3. Run the app:

```bash
python3 run_stickynotes.py
```

---

## ๐Ÿƒ Usage

Once launched, a sticky notes icon appears in your **system tray**.
Right-click the tray icon to:

- ๐Ÿ“ **New Note** โ€” creates a note in the default Yellow theme
- ๐Ÿ‘๏ธ **Show All Notes** โ€” brings every note to the front
- ๐Ÿ“‚ **Show Note โ–ถ** โ€” submenu listing each open note by title, most recently edited first; click an entry to jump straight to that note
- โš™๏ธ **Settings** โ€” toggle "Launch on system startup"
- โ„น๏ธ **About Sticky Notes** โ€” version, license, source links, and contact
- โŒ **Quit the Application**

### Inside each note

| Action | How |
|--------|-----|
| **New note (same color)** | Click the `+` button in the title bar |
| **Rename note** | Click the title text in the title bar; press Enter to commit, Escape to cancel, or click away |
| **Color / delete** | Click the `โ€ขโ€ขโ€ข` button โ†’ options panel |
| **Bold** | `Ctrl+B` |
| **Italic** | `Ctrl+I` |
| **Underline** | `Ctrl+U` |
| **Strikethrough** | `Ctrl+Shift+S` |
| **Bullet list on/off** | `Ctrl+Shift+L` |
| **Continue list item** | `Enter` |
| **Break out of list** | `Shift+Enter` |
| **Indent (sublist)** | `Tab` while in a list |
| **Outdent** | `Shift+Tab` while in a list |
| **Collapse / expand** | Double-click the title bar outside the title (disabled while collapsed) |
| **Drag window** | Click and drag the title bar outside the title |
| **Resize window** | Drag any edge or corner (16 px grab zone) |

---

## ๐ŸชŸ UI Overview

Each note is a frameless, rounded-corner window with a drop shadow. The
`+` / `โ€ขโ€ขโ€ข` buttons render as floating glass chips on top of the title
bar; the title itself is a click-to-edit pill, and the empty space
between is the drag / collapse target.

```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ [+] โ•ญ Title โ•ฎ drag area [โ€ขโ€ขโ€ข] โ”‚ โ† title bar (theme color)
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ”‚
โ”‚ Your note text hereโ€ฆ โ”‚ โ† text area (body color)
โ”‚ โ”‚
โ”‚ [B] [I] [U] [S] [โ‰ฃ] โ”‚ โ† format bar (theme color)
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```

Clicking `โ€ขโ€ขโ€ข` opens a floating options panel:

```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๐ŸŸก ๐ŸŸข ๐Ÿฉท ๐ŸŸฃ ๐Ÿ”ต โฌœ โฌ› โ”‚ โ† color swatches (circle buttons)
โ”‚ ๐Ÿ—‘ Delete Note โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```

---

## ๐Ÿงฑ Project Structure

```
sticky-notes/
โ”‚
โ”œโ”€โ”€ snap/
โ”‚ โ””โ”€โ”€ snapcraft.yaml # Snap packaging configuration
โ”‚
โ”œโ”€โ”€ stickynotes/ # Main Python package
โ”‚ โ”œโ”€โ”€ __init__.py
โ”‚ โ”œโ”€โ”€ config.py # App constants, THEMES dict, sizing constants
โ”‚ โ”œโ”€โ”€ note_window.py # NoteTextEdit, EditableTitleLabel, DragHandle, TitleBar, FormatBar, OptionsPanel, StickyNote, AboutDialog, SettingsDialog
โ”‚ โ”œโ”€โ”€ widgets.py # FloatingButton โ€” reusable glass-pill push button
โ”‚ โ”œโ”€โ”€ tray_manager.py # Tray icon, note lifecycle, dynamic "Show Note" submenu
โ”‚ โ”œโ”€โ”€ autostart.py # XDG autostart entry management
โ”‚ โ””โ”€โ”€ utils.py # Icon creation, get_theme(), apply_theme_to_window()
โ”‚
โ”œโ”€โ”€ run_stickynotes.py # Entry script to launch the app
โ”œโ”€โ”€ requirements.txt # Dependency list
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ LICENSE
โ””โ”€โ”€ README.md
```

---

## ๐Ÿงฉ Requirements

- ๐Ÿ Python **3.10+**
- ๐ŸชŸ PyQt6 **6.5+**

```bash
pip install -r requirements.txt
```

---

## โŒจ๏ธ Keyboard Shortcuts

| Shortcut | Action |
|----------|--------|
| `Ctrl+B` | Bold |
| `Ctrl+I` | Italic |
| `Ctrl+U` | Underline |
| `Ctrl+Shift+S` | Strikethrough |
| `Ctrl+Shift+L` | Toggle bullet list |
| `Tab` | Indent (sublist) inside a list |
| `Shift+Tab` | Outdent inside a list |
| `Ctrl+Z` | Undo |
| `Ctrl+Y` | Redo |
| `Ctrl+A` | Select all |

All formatting actions are also available via the **bottom toolbar** on each note: `B` `I` `U` `S` `โ€ข`. Buttons highlight when the cursor is in already-formatted text.

---

## ๐ŸŽจ Themes

| Name | Background | Title Bar |
|------|-----------|-----------|
| Yellow *(default)* | `#FFF176` | `#F9E44A` |
| Green | `#B5EBBF` | `#8FD9A0` |
| Pink | `#F9B8C6` | `#F48FAA` |
| Purple | `#D8B8F9` | `#BC8FF5` |
| Blue | `#B3E5FC` | `#80D0F5` |
| Gray | `#E0E0E0` | `#BDBDBD` |
| Charcoal | `#4A4A4A` | `#333333` |

Charcoal uses light text (`#f0f0f0`); all other themes use dark text (`#1a1a1a`).

---

## ๐Ÿงฐ Technologies Used

- **[Python 3.10+](https://www.python.org/)**
- **[PyQt6](https://www.riverbankcomputing.com/software/pyqt/)** for GUI
- **[Snapcraft](https://snapcraft.io/)** for packaging and distribution

---

## ๐Ÿ› ๏ธ Local Development

```bash
git checkout -b feature/your-feature
# make changes
git add .
git commit -m "feat: describe your change"
git push origin feature/your-feature
# open a pull request
```

---

## ๐Ÿ“œ License

This project is licensed under the **MIT License**.
See the [LICENSE](./LICENSE) file for details.

> License ยฉ 2025 **Tushar D. (@dstushar7)** โ€” Open for community contributions.

---

## ๐Ÿ‘จโ€๐Ÿ’ป Author

**Tushar D. (@dstushar7)**
๐Ÿ”— [GitHub Profile](https://github.com/dstushar7)

---

**Feedback and pull requests are always welcome โ€” let's build together!**