# ============================================================================= # OliveTin example configuration — macOS (Apple Silicon & Intel) # ============================================================================= # # This is a macOS-flavoured version of the stock `example.config.yaml`. Every # action that differs from the Linux example carries a `# Linux equivalent:` # comment so you can see exactly what was changed and why. # # All commands here are tested against macOS with /bin/zsh (the default login # shell since macOS Catalina) and also work under /bin/bash. OliveTin runs the # `shell:` string with `sh -c` by default, so these are written to be portable # POSIX/zsh/bash one-liners. # # To use this file, copy it next to the OliveTin binary as `config.yaml`: # cp ./var/macos/config.yaml config.yaml # ./OliveTin # # Docs: https://docs.olivetin.app/ # ============================================================================= # The built-in micro proxy hosts the WebUI and REST API on a single port. # Listen on all addresses, port 1337. Open http://localhost:1337 after start. listenAddressSingleHTTPFrontend: 0.0.0.0:1337 # Choose from INFO (default), WARN and DEBUG. # Docs: https://docs.olivetin.app/advanced_configuration/logs.html logLevel: "INFO" # Actions are commands that OliveTin executes, normally shown as buttons. # Docs: https://docs.olivetin.app/action_execution/create_your_first.html actions: # The simplest possible action: run a command, flash the button for status. # `ping` works identically on macOS and Linux. - title: Ping the Internet shell: ping -c 3 1.1.1.1 icon: ping popupOnStart: execution-dialog-stdout-only execOnStartup: true # Show just the command output in a popup. # # Linux equivalent: shell: df -h /media # macOS has no /media mountpoint. The root volume is `/`; external/USB disks # mount under /Volumes. `df -h /` shows the boot disk; drop the path to list # every mounted volume. - title: Check disk space icon: disk shell: df -h / popupOnStart: execution-dialog-stdout-only # Show a fuller dialog with details about the command that ran. # # Linux equivalent: shell: dmesg | tail # macOS `dmesg` requires root and is rarely useful. The unified logging # system is the macOS way to read kernel/system messages. This shows the # last 2 minutes of high-level system log entries. - title: Recent system log shell: log show --last 2m --style compact | tail -n 40 icon: logs popupOnStart: execution-dialog # A mini button that links to the logs, with rate limiting and an hourly cron. # `date` is identical across platforms. - title: date shell: date id: date timeout: 6 icon: clock popupOnStart: execution-button maxRate: - limit: 3 duration: 1m execOnCron: - "@hourly" # --------------------------------------------------------------------------- # macOS-native actions (no Linux equivalent — these showcase the platform) # --------------------------------------------------------------------------- # Send a real macOS Notification Center banner via AppleScript. - title: Send a notification icon: '🔔' # bell shell: osascript -e 'display notification "Triggered from OliveTin" with title "OliveTin" sound name "Glass"' popupOnStart: execution-button # Stop the Mac from sleeping for 1 hour (handy during long jobs/downloads). # `caffeinate` is a built-in macOS utility. `-t` is seconds. - title: Keep awake for 1 hour icon: '☕' # hot beverage shell: caffeinate -d -i -t 3600 & popupOnStart: execution-button # Put the displays to sleep immediately (the Mac stays running). - title: Sleep the displays icon: '💤' # zzz shell: pmset displaysleepnow popupOnStart: execution-button # Battery / power summary using the built-in `pmset`. - title: Power & battery status icon: '🔋' # battery shell: pmset -g batt popupOnStart: execution-dialog-stdout-only # --------------------------------------------------------------------------- # Prompt the user for input with `arguments`. `ping` again works as-is. # Docs: https://docs.olivetin.app/action_examples/ping.html - title: Ping host id: ping_host shell: ping {{ host }} -c {{ count }} icon: ping timeout: 100 popupOnStart: execution-dialog-stdout-only arguments: - name: host title: Host type: ascii_identifier default: example.com description: The host that you want to ping - name: count title: Count type: int default: 3 description: How many times do you want to ping? # OliveTin can control Docker containers — `docker` is just a CLI app. # On macOS this requires Docker Desktop (or colima/podman) to be installed # and running. The command itself is identical to Linux. # Docs: https://docs.olivetin.app/solutions/container-control-panel/index.html - title: Restart Docker Container icon: restart shell: docker restart {{ container }} arguments: - name: container title: Container name choices: - value: plex - value: traefik - value: grafana # The special `confirmation` argument guards against accidental clicks. # Docs: https://docs.olivetin.app/args/input_confirmation.html # # Linux equivalent: shell: rm -rf /opt/oldBackups/ # Using a path under the user's home is more natural on macOS. - title: Delete old backups icon: ashtonished justification: true shell: rm -rf "$HOME/Backups/old/" arguments: - name: confirm type: confirmation title: Are you sure?! # Run your own scripts, not just OS commands. `maxConcurrent` prevents # parallel runs; `timeout` kills a command that runs too long. # # Linux equivalent: shell: /opt/backupScript.sh # macOS convention is to keep personal scripts under your home directory. - title: Run backup script shell: "$HOME/bin/backupScript.sh" shellAfterCompleted: "osascript -e 'display notification \"Backup finished with code {{ exitCode }}\" with title \"OliveTin\"'" maxConcurrent: 1 timeout: 10 icon: backup popupOnStart: execution-dialog # Download themes using a script bundled with OliveTin. You still need to set # `themeName` in this config to actually use the theme. # Docs: https://docs.olivetin.app/reference/reference_themes_for_users.html - title: Get OliveTin Theme exec: - "olivetin-get-theme" - "{{ themeGitRepo }}" - "{{ themeFolderName }}" icon: theme arguments: - name: themeGitRepo title: Theme's Git Repository description: Find new themes at https://olivetin.app/themes type: url - name: themeFolderName title: Theme's Folder Name type: ascii_identifier # Run actions on other servers over SSH. macOS ships with an OpenSSH client, # so this works out of the box. The helper below is optional. # Docs: https://docs.olivetin.app/action_examples/ssh-easy.html - title: "Setup easy SSH" icon: ssh shell: olivetin-setup-easy-ssh popupOnStart: execution-dialog # Entities let you generate actions dynamically from "things" (servers, # containers, VMs) loaded from files on disk. # Docs: https://docs.olivetin.app/entities/intro.html # # entities: # - file: entities/servers.yaml # name: server # Dashboards organise actions into folders and fieldsets. # Docs: https://docs.olivetin.app/dashboards/intro.html # # dashboards: # - title: My Mac # contents: # - title: Power & battery status # - title: Sleep the displays # ============================================================================= # Security - Authentication # ============================================================================= # If "true", users must log in before doing anything. authRequireGuestsToLogin: false # The simplest auth: define users/passwords in this config. OliveTin also # supports header-based auth, OAuth2 and JWT (documented separately). # Docs: https://docs.olivetin.app/security/local.html # # Generating an argon2id hash on macOS: # brew install argon2 # echo -n 'yourPassword' | argon2 "$(openssl rand -base64 16)" -id -e # (Linux equivalent typically uses the distro's `argon2` package directly.) authLocalUsers: enabled: true # users: # - username: alice # usergroup: admins # password: "$argon2id$v=19$m=65536,t=4,p=2$puyxA0s555TSFx7hnFLCXA$PyhLGpZtvpMMvc2DgMWkM8OJMKO55euwV5gm//1iwx4" # ============================================================================= # Security - Access Control # ============================================================================= # Policies affect the whole app (eg: ability to view the log list). # Docs: https://docs.olivetin.app/security/acl.html defaultPolicy: showDiagnostics: true showLogList: true # Permissions affect individual actions. defaultPermissions: view: true exec: true logs: true # ACLs match policy/permissions to users. accessControlLists: - name: admin_acl matchUsergroups: ["admins"] policy: showDiagnostics: true permissions: view: true exec: true logs: true # OliveTin has many more options not shown here. See docs.olivetin.app.