diff --git a/osbase/efivarfs/BUILD.bazel b/osbase/efivarfs/BUILD.bazel
index 7f7539f..95b1eca 100644
--- a/osbase/efivarfs/BUILD.bazel
+++ b/osbase/efivarfs/BUILD.bazel
@@ -6,6 +6,7 @@
         "boot.go",
         "devicepath.go",
         "efivarfs.go",
+        "osindications.go",
         "variables.go",
     ],
     importpath = "source.monogon.dev/osbase/efivarfs",
diff --git a/osbase/efivarfs/osindications.go b/osbase/efivarfs/osindications.go
new file mode 100644
index 0000000..a112163
--- /dev/null
+++ b/osbase/efivarfs/osindications.go
@@ -0,0 +1,94 @@
+package efivarfs
+
+import (
+	"encoding/binary"
+	"errors"
+	"fmt"
+	"os"
+	"sync"
+)
+
+// OSIndications is a bitset used to indicate firmware support for various
+// features as well as to trigger some of these features.
+// If a constant ends in Supported, it cannot be triggered, the others
+// can be.
+type OSIndications uint64
+
+const (
+	// Indicates that on next boot firmware should boot to a firmware-provided
+	// UI instead of the normal boot order.
+	BootToFirmwareUI = OSIndications(1 << iota)
+	// Indicates that firmware supports timestamp-based revocation and the
+	// "dbt" authorized timestamp database variable.
+	TimestampRevocationSupported
+	// Indicates that on next boot firmware should look for an EFI update
+	// capsule on an EFI system partition and try to install it.
+	FileCapsuleDelivery
+	// Indicates that firmware supports UEFI FMP update capsules.
+	FirmwareManagementProtocolCapsuleSupported
+	// Indicates that firmware supports reporting results of deferred (i.e.
+	// processed on next boot) capsule installs via variables.
+	CapsuleResultVarSupported
+	// Indicates that firmware should skip Boot# processing on next boot
+	// and instead use OsRecovery# for selecting a load option.
+	StartOSRecovery
+	// Indicates that firmware should skip Boot# processing on next boot
+	// and instead use PlatformRecovery# for selecting a load option.
+	StartPlatformRecovery
+	// Indicates that firmware should collect the current config and report
+	// the data to the EFI system configuration table on next boot.
+	JSONConfigDataRefresh
+)
+
+// osIndicationMutex protects against race conditions in read-modify-write
+// sequences on the OsIndications EFI variable.
+var osIndicationsMutex sync.Mutex
+
+// OSIndicationsSupported indicates which of the OS indication features and
+// actions that the firmware supports.
+func OSIndicationsSupported() (OSIndications, error) {
+	osIndicationsRaw, _, err := Read(ScopeGlobal, "OsIndicationsSupported")
+	if err != nil {
+		return 0, fmt.Errorf("unable to read OsIndicationsSupported: %w", err)
+	}
+	if len(osIndicationsRaw) != 8 {
+		return 0, fmt.Errorf("value of OsIndicationsSupported is not 8 bytes / 64 bits, is %d bytes", len(osIndicationsRaw))
+	}
+	return OSIndications(binary.LittleEndian.Uint64(osIndicationsRaw)), nil
+}
+
+// SetOSIndications sets all OS indication bits set in i in firmware. It does
+// not clear any already-set bits, use ClearOSIndications for that.
+func SetOSIndications(i OSIndications) error {
+	return modifyOSIndications(func(prev OSIndications) OSIndications {
+		return prev | i
+	})
+}
+
+// ClearOSIndications clears all OS indication bits set in i in firmware.
+// Note that this effectively inverts i, bits set in i will be cleared.
+func ClearOSIndications(i OSIndications) error {
+	return modifyOSIndications(func(prev OSIndications) OSIndications {
+		return prev & ^i
+	})
+}
+
+func modifyOSIndications(f func(prev OSIndications) OSIndications) error {
+	osIndicationsMutex.Lock()
+	defer osIndicationsMutex.Unlock()
+
+	var osIndications OSIndications
+	rawIn, _, err := Read(ScopeGlobal, "OsIndications")
+	if err == nil && len(rawIn) == 8 {
+		osIndications = OSIndications(binary.LittleEndian.Uint64(rawIn))
+	} else if err != nil && !errors.Is(err, os.ErrNotExist) {
+		return fmt.Errorf("unable to read OsIndications variable: %w", err)
+	}
+	osIndications = f(osIndications)
+	var raw [8]byte
+	binary.LittleEndian.PutUint64(raw[:], uint64(osIndications))
+	if err := Write(ScopeGlobal, "OsIndications", AttrNonVolatile|AttrRuntimeAccess, raw[:]); err != nil {
+		return fmt.Errorf("failed to write OSIndications variable: %w", err)
+	}
+	return nil
+}
