🚀 Getting Started
Welcome to Single File Menu Apps! This guide will help you get up and running with our collection of elegant macOS menu bar utilities.
📋 Prerequisites
Before you begin, ensure you have:
- macOS 10.15+ (Catalina or later)
- Xcode Command Line Tools - Install with:
xcode-select --install - Git (for cloning the repository)
🔧 Installation
Step 1: Clone the Repository (or Download a Prebuilt .app)
Download a prebuilt universal .app from GitHub Releases (and run xattr -dr com.apple.quarantine /Applications/<App>.app once after moving to /Applications), or clone from source:
git clone https://github.com/The-Focus-AI/singlefilemenuapps.git
cd singlefilemenuappsStep 2: Make Apps Executable
# Make all Swift files executable
find . -name "*.swift" -exec chmod +x {} \;Step 3: Choose Your App
Each app is self-contained in its own directory. Browse the available apps:
- 📄 PdfBar (
ai.thefocus.pdfbar) - PDF and EPUB file monitoring - 🛰️ Starlink Status (
ai.thefocus.starlinkstatus) - Starlink connection monitoring - 🌐 NetCheck & NetCheck Geo (
ai.thefocus.netcheck,ai.thefocus.netcheck-geo) - Network availability and GPS coverage atlas - 🌡️ AranetBar (
ai.thefocus.aranetbar) - Bluetooth LE CO₂ & air quality monitor (The-Focus-AI/aranet4-bluetooth)
🎯 Quick Start Examples
Running Pdfbar
# Navigate to the pdfbar directory
cd pdfbar
# Run the app
./pdfbar.swift
# Or run with debug mode
./pdfbar.swift --debugRunning Starlink Status
# Install required dependency
brew install grpcurl
# Navigate to the starlinkstatus directory
cd starlinkstatus
# Run the app
./starlinkstatus.swift
# Or run with verbose logging
./starlinkstatus.swift --verbose🖥️ Using Menu Bar Apps
What to Expect
- Menu Bar Icon - Each app appears as an icon in your menu bar
- Click to Expand - Click the icon to see the app's interface
- Quit Option - Use the "Quit" option in the menu to exit
Pdfbar Interface
- Shows your 15 most recent PDF/EPUB files
- Click any file to open it
- Hold Option (⌥) + Click to send to ChatGPT
- Monitors Downloads, Desktop, and iCloud reading folders
Starlink Status Interface
- Displays connection status and performance metrics
- Shows download/upload speeds and latency
- Provides device information and uptime
- Updates every 5 seconds with real-time data
🔍 Troubleshooting
Common Issues
"Permission denied" errors
# Make sure the file is executable
chmod +x your-app.swift"Command not found: swift"
# Install Xcode Command Line Tools
xcode-select --installApp doesn't appear in menu bar
- Check if the app is running:
ps aux | grep appname - Try running from terminal to see error messages
- Ensure you have the required dependencies
Debug Mode
Most apps support debug/verbose modes:
# Pdfbar debug mode
./pdfbar.swift --debug
# Starlink Status verbose mode
./starlinkstatus.swift --verbose🛠️ Customization
Modifying Apps
Since each app is a single Swift file, customization is straightforward:
- Open the Swift file in your preferred editor
- Make your changes - all code is in one place
- Save and run - no compilation needed
Example: Changing Menu Bar Icon
// In the Swift file, look for the statusItem creation
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
statusItem.button?.title = "📄" // Change this to your preferred iconExample: Adding New Features
// Add new menu items
let newMenuItem = NSMenuItem(title: "New Feature", action: #selector(newFeature), keyEquivalent: "")
menu.addItem(newMenuItem)
// Add the corresponding method
@objc func newFeature() {
// Your new functionality here
}📚 Learning Resources
Swift Basics
Menu Bar App Development
🤝 Contributing
Want to create your own single-file menu app? Check out our contributing guide for guidelines and best practices.
Getting Help
- GitHub Issues - Report bugs or request features
- Documentation - Each app has detailed documentation
- Community - Join discussions in our GitHub repository
📄 License
All apps are released under the MIT License. See the LICENSE file for details.
Ready to get started? Choose an app from the Available Apps page and begin exploring!