# NextCloud OCC

`occ` (ownCloud/Nextcloud Console) is Nextcloud's command-line interface for configuration, maintenance, user administration, and system upgrades.

In this environment, Nextcloud runs inside rootless Podman (`docker-data`, `UID 1100`) as the `nextcloud` container (`nextcloud.container` systemd user Quadlet). All `occ` commands must be executed as the web server user (`www-data`) inside the container.

---

## Running `occ` in Rootless Podman

### Standard Command Pattern

```bash
(cd /tmp && sudo -u docker-data podman exec -u www-data nextcloud php occ <command>)
```

### Shell Alias

To simplify running commands across your terminal sessions, define an alias:

```bash
alias occ='(cd /tmp && sudo -u docker-data podman exec -u www-data nextcloud php occ)'
```

*(All commands below assume this alias is active.)*

---

## Getting Started: Status and Help

```bash
# Check Nextcloud version, installation status, and maintenance state
occ status

# List all available commands
occ list

# Get detailed help for any specific command
occ help config:system:set
```

---

## Practical Example: Redirecting Root `/` to Files

By default, Nextcloud directs authenticated users to the Dashboard app (`/apps/dashboard/`). You can customize the landing page using `config:system:set` and `config:app:set`:

```bash
# Set the default application to Files
occ config:system:set defaultapp --value="files"

# Configure core default page to redirect root / directly to user files
occ config:app:set core defaultpage --value="/apps/files/files"
```

To verify the current values:

```bash
occ config:system:get defaultapp
occ config:app:get core defaultpage
```

---

## System Configuration (`config:system:*`)

System configurations directly inspect or modify `config/config.php`.

### Reading & Writing Settings

```bash
# Get a configuration value
occ config:system:get trusted_domains

# Set a scalar string or boolean value
occ config:system:set defaultapp --value="files"
occ config:system:set htaccess.IgnoreFrontController --value="true" --type=bool

# Set array elements by index
occ config:system:set trusted_domains 2 --value="cloud.drheck.dev"

# Remove a setting
occ config:system:delete defaultapp
```

---

## App Configuration & Management (`config:app:*` & `app:*`)

### Managing App Settings

```bash
# List all config keys for an app
occ config:app:get core

# Get a single key
occ config:app:get core defaultpage

# Set a key value
occ config:app:set core defaultpage --value="/apps/files/files"

# Delete a setting
occ config:app:delete core defaultpage
```

### Enabling, Disabling, and Updating Apps

```bash
# List installed, enabled, and disabled apps
occ app:list

# Enable or disable an app
occ app:enable files_rightclick
occ app:disable dashboard

# Update all installed apps
occ app:update --all
```

---

## Filesystem Operations (`files:*`)

Useful when files are added, modified, or deleted externally on disk (e.g. through local mounts or background syncing).

```bash
# Rescan files for all users
occ files:scan --all

# Rescan files for a single user
occ files:scan luke

# Rescan a specific subdirectory for a user
occ files:scan --path="/luke/files/Documents"

# Clean up stale file cache entries
occ files:cleanup
```

---

## Maintenance & Database Tasks

### Maintenance Mode

```bash
# Enable maintenance mode (blocks user web access)
occ maintenance:mode --on

# Disable maintenance mode
occ maintenance:mode --off
```

### Database Optimization & Missing Indices

Nextcloud updates occasionally recommend adding missing indices or columns:

```bash
# Add missing database indices
occ db:add-missing-indices

# Add missing columns
occ db:add-missing-columns

# Add missing primary keys
occ db:add-missing-primary-keys
```

### Post-Upgrade Migration

After pulling a newer container image:

```bash
occ upgrade
```

---

## User Management (`user:*`)

```bash
# List all registered users
occ user:list

# View details for a user
occ user:info luke

# Reset user password interactively
occ user:resetpassword luke

# Enable or disable a user account
occ user:disable username
occ user:enable username
```
