├── .github └── renovate.json ├── .gitignore ├── README.md ├── babel.config.js ├── docs ├── contributors │ ├── _category_.json │ ├── finding-things-to-do.md │ └── index.md ├── intro.md ├── maintainers │ ├── _category_.json │ ├── index.md │ ├── labelling.md │ └── releasing.md └── users │ ├── _category_.json │ ├── autofill.md │ ├── background-killing-bugs.md │ ├── build-types.md │ ├── common-issues.md │ ├── importing.md │ ├── index.md │ ├── invalid-gpg-key-id.md │ ├── release-channels.md │ └── reporting-bugs.md ├── docusaurus.config.js ├── package.json ├── shell.nix ├── sidebars.js ├── src ├── css │ └── custom.css └── pages │ ├── APS.mdx │ ├── index.js │ └── index.module.css ├── static ├── .nojekyll └── img │ ├── favicon.ico │ ├── logo.svg │ ├── undraw_docusaurus_mountain.svg │ ├── undraw_docusaurus_react.svg │ └── undraw_docusaurus_tree.svg └── yarn.lock /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:base", 5 | "github>msfjarvis/shared-workflows//renovate/automerge" 6 | ], 7 | "dependencyDashboard": false 8 | } 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | 7 | # Generated files 8 | .docusaurus 9 | .cache-loader 10 | 11 | # Misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Website 2 | 3 | This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. 4 | 5 | ### Installation 6 | 7 | ``` 8 | $ yarn 9 | ``` 10 | 11 | ### Local Development 12 | 13 | ``` 14 | $ yarn start 15 | ``` 16 | 17 | This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. 18 | 19 | ### Build 20 | 21 | ``` 22 | $ yarn build 23 | ``` 24 | 25 | This command generates static content into the `build` directory and can be served using any static contents hosting service. 26 | 27 | ### Deployment 28 | 29 | Using SSH: 30 | 31 | ``` 32 | $ USE_SSH=true yarn deploy 33 | ``` 34 | 35 | Not using SSH: 36 | 37 | ``` 38 | $ GIT_USER= yarn deploy 39 | ``` 40 | 41 | If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. 42 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /docs/contributors/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Contributors", 3 | "position": 2 4 | } 5 | -------------------------------------------------------------------------------- /docs/contributors/finding-things-to-do.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 6 3 | --- 4 | 5 | # Finding ways to contribute 6 | 7 | As a newcomer to the APS repository, it can be daunting to make your first contribution. Fret not, we're here to help! 8 | 9 | Thanks to an extensive [labelling system] used in the repository, you can filter things relevant to your interests based on parameters like what part of the app they affect or how much effort fixing a particular issue is expected to take. 10 | 11 | If you're still unable to find something, ask us! We have a [discussions] section in the repository where you can post any such questions and we'd be happy to show you around the source code and find something you'd like to work on. 12 | 13 | If you don't want to write code, that's even better! Password Store's documentation is in a rather sad state, and user contributed documentation will go a long way in fixing that. Send a PR to the [docs] repository adding a new page on a topic that's not already covered and we'd be more than happy to accept your contribution. 14 | 15 | [labelling system]: /docs/maintainers/labelling 16 | [discussions]: https://github.com/android-password-store/Android-Password-Store/discussions 17 | [docs]: https://github.com/android-password-store/docs -------------------------------------------------------------------------------- /docs/contributors/index.md: -------------------------------------------------------------------------------- 1 | # Contributor documentation 2 | 3 | 4 | - [Finding ways to contribute] : In an unfamiliar project, it can be hard to get started contributing. Thankfully, we have you covered! 5 | 6 | [Finding ways to contribute]: finding-things-to-do 7 | -------------------------------------------------------------------------------- /docs/intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 1 3 | --- 4 | 5 | # Introduction 6 | 7 | Check the sidebar on the left for the currently available pages. 8 | 9 | ## Licensing 10 | 11 | This repository’s contents are licensed under the Creative Commons CC0-1.0 license. 12 | -------------------------------------------------------------------------------- /docs/maintainers/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Maintainers", 3 | "position": 3 4 | } 5 | -------------------------------------------------------------------------------- /docs/maintainers/index.md: -------------------------------------------------------------------------------- 1 | # Maintainer documentation 2 | 3 | - [Releasing new versions] : How to release a new version of APS or the open-source libraries we branched off from it 4 | - [Labelling] : How we use labels to embed meaningful information in issues and pull requests 5 | 6 | [releasing new versions]: releasing 7 | [labelling]: labelling 8 | -------------------------------------------------------------------------------- /docs/maintainers/labelling.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 1 3 | --- 4 | 5 | # Labels in the APS repository 6 | 7 | The APS repository liberally uses GitHub's labelling functionalities to sort issues and pull requests. Our labels enumerate the following properties: 8 | 9 | - Area 10 | - Category 11 | - Effort 12 | - Priority 13 | - Status 14 | 15 | ### Area 16 | 17 | This refers to the part of the app that is affected by the issue or pull request. New entries keep getting added here as and when issues for them are field. These labels are of the format `A-`, like `A-Git` or `A-autofill`. All issues and pull requests must apply these. 18 | 19 | ### Category 20 | 21 | This pertains to the type of issue/pull request. Whether this is a bug, or a feature, a regression from the previous stable release, or a RFC. These labels are mandatory for all issues and pull requests, and have the `C-` prefix (`C-bug`, `C-rfc`, `C-regression`, and so on). 22 | 23 | ### Effort 24 | 25 | Indicator of the expected effort required to resolve an issue. This is not mandatory, and is a easy way to flag issues that are easy for new contributors to triage and fix. Denoted by the `E-` prefix, and can be one of `E-easy`, `E-medium` or `E-hard`. It is not mandatory, and is only applicable to issues or draft pull requests. 26 | 27 | ### Priority 28 | 29 | Indicates the priority of an issue or pull request. Issues marked with `P-high` are to be considered critical and new stable releases should ideally not go out with a high priority issue still open. As evident, the group prefix is `P-`, and it follows the same `P-low`, `P-medium`, and `P-high` pattern as effort. Necessary label for issues, and optional but recommended for pull requests. 30 | 31 | ### Status 32 | 33 | Shows the current status of the issue or pull request. This is a fairly involved group and embodies the different states of issues and pull requests. 34 | 35 | - `S-automerge`: Automated pull requests that will merge themselves without human intervention 36 | - `S-awaiting-triage`: New issues that need to be assessed by a maintainer. 37 | - `S-blocked`: Issues or pull requests that have external dependencies and cannot move forward until they're resolved. 38 | - `S-design`: Issues or PRs that are stumped on a technical challenge where no solution exists or current options are not satisfactory. 39 | - `S-invalid`: Invalid issues such as ones that do not follow the issue template or 40 | - `S-needs-reproduction-steps`: Maintainers have been unable to reproduce the bug in their environments. 41 | - `S-waiting-for-comment`: Applied to RFCs that need to arrive at a consensus from other maintainers. 42 | - `S-waiting-on-author`: Pull requests that have been reviewed and now need the author to make changes. 43 | - `S-waiting-on-reporter`: Issues where the reporter of the bug has been asked for additional information. 44 | - `S-waiting-on-review`: Applied to pull requests that are currently unreviewed. 45 | - `S-wontfix`: Issues that contain rejected proposals or contain a bug description that is intended behavior. 46 | - `S-unactionable`: There is not enough information to act on this problem 47 | -------------------------------------------------------------------------------- /docs/maintainers/releasing.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 2 3 | --- 4 | 5 | # Releasing new versions 6 | 7 | The central [Android-Password-Store] repository houses three subprojects that are released separately from each other and with different methods. 8 | 9 | ## Library modules 10 | 11 | The `autofill-parser` and `openpgp-ktx` libraries are available on the [MavenCentral] repository. The process for creating a new release is as follows: 12 | 13 | 1. Bump the version number for the library in `$projectDir/gradle.properties` 14 | 15 | 2. Push a new tag following the format `$projectDir-v$version`, for example, `v4.0.0` for `autofill-parser` needs a `autofill-parser-v4.0.0` tag. 16 | 17 | ## Password Store app 18 | 19 | Releasing a new major version of the app is a slightly more involved process. 20 | 21 | 1. Each release is accompanied by a [milestone], so go ahead and close it. This will set off a GitHub Action that will generate a pull request with the changelog and the version updated. 22 | 23 | 2. Merge the pull request, and note the target branch against which it was created. 24 | 25 | 3. Tag the new state of the aforementioned branch following the exact semantic version as in the milestone. This means the tag should be `v1.2.0`, not `1.2.0` or `1.2` or `v1.2`. 26 | 27 | 4. Push the tag to GitHub, and allow CI to generate artifacts and a draft release that can then be reviewed and made public. 28 | 29 | 5. The maintainer in charge of Play Store deployment then takes the generated binaries from this GitHub release and uploads them to Play Store. In the future this manual step should be eliminated in favour of a Gradle-backed automatic deployment setup, using tools like [Gradle-Play-Publisher]. 30 | 31 | [android-password-store]: https://github.com/android-password-store/Android-Password-Store 32 | [mavencentral]: https://search.maven.org/search?q=g:%22com.github.android-password-store%22 33 | [gradle-play-publisher]: https://github.com/Triple-T/gradle-play-publisher 34 | [milestone]: https://github.com/android-password-store/Android-Password-Store/milestones -------------------------------------------------------------------------------- /docs/users/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Users", 3 | "position": 3 4 | } 5 | -------------------------------------------------------------------------------- /docs/users/autofill.md: -------------------------------------------------------------------------------- 1 | # Autofill 2 | 3 | Password Store supports autofill for apps on Android 8 and above. To enable it, go to the app's settings page, then turn on the Autofill switch. 4 | 5 | Autofill is supported in legacy browsers only on Android 9 and above, and the list of browsers that *do* support Autofill on Android 8 can be found [here](https://github.com/android-password-store/Android-Password-Store/blob/24d9e492899b0ab156b1e85aeb914ecec6e4e818/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/FeatureAndTrustDetection.kt#L61-L92) 6 | 7 | -------------------------------------------------------------------------------- /docs/users/background-killing-bugs.md: -------------------------------------------------------------------------------- 1 | # Bugs related to OpenKeychain not launching 2 | 3 | If you clicked a password entry but the screen did not show its contents or ask for your GPG key's passphrase, you might be facing an operating system bug that's common with XiaoMi and Nokia devices. 4 | 5 | Following the steps for XiaoMi from [here](https://dontkillmyapp.com/xiaomi), or for Nokia from [here](https://dontkillmyapp.com/nokia) should alleviate the problem. The steps for XiaoMi devices are reproduced here because it appears to be the overwhelming majority of users facing this bug. 6 | 7 | - Enable the `Display pop-up windows while running in the background` permission for OpenKeychain from the Settings app 8 | - Enable the 'Autostart' permission from the same screen if it's shown 9 | 10 | On some devices the screen may be hidden deep in the Settings app, the navigation path in that case is ` Settings -> Apps -> Permissions -> Other Permissions -> OpenKeychain`. 11 | 12 | -------------------------------------------------------------------------------- /docs/users/build-types.md: -------------------------------------------------------------------------------- 1 | # Build types 2 | 3 | APS can optionally bundle additional code that is either proprietary or typically frowned upon within the FOSS community (like telemetry) to provide user-facing features and assist development efforts through anonymized usage data. 4 | 5 | To counter that, and continue providing FOSS-only binaries through F-Droid, APS implements the `free` and `nonFree` (free as in freedom) build types to allow the same codebase to be able to generate both FOSS-friendly binaries as well as ones with optional proprietary code that enables extra features. 6 | 7 | Below are the feature differences between the `free` and `nonFree` build variants. Any features not mentioned below are available to both build types. 8 | 9 | Feature | `free` | `nonFree` 10 | ----------------------|--------|---------- 11 | [Autofill OTPs from SMSes](https://msfjarvis.dev/aps/pr/900) | ❌ | ✅ 12 | Error reporting via [Sentry](https://sentry.io/) | ❌ | ✅ 13 | 14 | ## Building 15 | 16 | For more information on how to build these variants, see the [contribution guidelines](https://github.com/android-password-store/Android-Password-Store/blob/develop/CONTRIBUTING.md#building-the-project) -------------------------------------------------------------------------------- /docs/users/common-issues.md: -------------------------------------------------------------------------------- 1 | # Common issues 2 | 3 | When you are installing APS you can encounter some issues based on your setup, the most common of them are given below with their fixes. 4 | 5 | ## OpenKeychain failed to launch 6 | 7 | Many OEMs create excessive limitations on background apps to "improve" battery life by breaking normal functionality, the workarounds for those are described [here](./background-killing-bugs.md). 8 | 9 | 10 | # "Error reading input data" [#2653](https://github.com/android-password-store/android-password-store/issues/2653), [#2179](https://github.com/android-password-store/android-password-store/issues/2179) 11 | 12 | OpenKeychain doesn't support AEAD encryption (default in gpg 2.3+). Dropping the OCB option from the key's preference string fixes the issue 13 | 14 | ```plaintext 15 | $ gpg --edit-key 16 | 17 | gpg> showpref 18 | [ultimate] (1).name 19 | Cipher: AES256, AES192, AES, 3DES 20 | AEAD: OCB 21 | Digest: SHA512, SHA384, SHA256, SHA224, SHA1 22 | Compression: ZLIB, BZIP2, ZIP, Uncompressed 23 | Features: MDC, AEAD, Keyserver no-modify 24 | gpg> setpref AES256 AES192 AES 3DES SHA512 SHA384 SHA256 SHA224 SHA1 ZLIB BZIP2 ZIP 25 | Set preference list to: Cipher: AES256, AES192, AES, 3DES AEAD: Digest: SHA512, SHA384, SHA256, SHA224, SHA1 Compression: ZLIB, BZIP2, ZIP, Uncompressed Features: MDC, Keyserver no-modify 26 | Really update the preferences? (y/N) y 27 | gpg> save 28 | 29 | $ pass init 30 | ``` 31 | 32 | ## "No encrypted data with known key found in stream with newer gopass secrets" [#1530](https://github.com/android-password-store/android-password-store/issues/1530), [#173](https://github.com/android-password-store/android-password-store/issues/173) 33 | 34 | This issue caused by option "throw-keyids" which isn't supported by OpenKeychain. To resolve this, you can disable it in two ways: 35 | 1. Reinit your password storage by command with disabling option "throw-keyids" `PASSWORD_STORE_GPG_OPTS="--no-throw-keyids" pass init $KEYID` 36 | 2. Edit your gpg config and set `--no-throw-keyids` in it. 37 | 38 | ## GnuPG AEAD encryption [#2974](https://github.com/android-password-store/android-password-store/issues/2974) [#2963](https://github.com/android-password-store/android-password-store/issues/2963) [#2921](https://github.com/android-password-store/android-password-store/issues/2921) [#2924](https://github.com/android-password-store/android-password-store/issues/2924) [#2653](https://github.com/android-password-store/android-password-store/issues/2653) [#2461](https://github.com/android-password-store/android-password-store/issues/2461) [#2586](https://github.com/android-password-store/android-password-store/issues/2586) [#2179](https://github.com/android-password-store/android-password-store/issues/2179) 39 | 40 | The developers of GnuPG introduced a non-standard modification to OpenPGP which results in keys generated with recent versions of GnuPG not being compatible with other OpenPGP implementations, including the one used by Android Password Store. The app will attempt to detect this both in your PGP key as well as password files and warn about this incompatibility. To fix this, you can edit your key to remove the non-standard AEAD feature and re-encrypt the store. 41 | 42 | 1. Run `gpg --edit-key `, followed by `setpref SHA512 SHA384 SHA256 SHA224 SHA1 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed` and `quit` to fix your key. 43 | 2. Run `pass init ` to re-encrypt your password store and fix your password files. To force re-encryption of password files, you may need to run `pass init` with a different key and then `pass init` with the original key. 44 | -------------------------------------------------------------------------------- /docs/users/importing.md: -------------------------------------------------------------------------------- 1 | # Importing from other password managers 2 | 3 | Requests for adding an import mechanism inside of APS itself have come up every so often, but we've refrained from considering it for multiple reasons. If you find yourself in a situation where you do require the ability to import passwords from a different password manager such as Google Passwords or KeePassXC, take a look at [pass-import]. It supports **way** more password managers than we ever could, just needs Python to run, and is actively maintained. 4 | 5 | [pass-import]: https://github.com/roddhjav/pass-import 6 | -------------------------------------------------------------------------------- /docs/users/index.md: -------------------------------------------------------------------------------- 1 | # User documentation 2 | 3 | This is a work-in-progress effort to document things relevant to Password Store users. The currently available topics are listed below. 4 | 5 | - [Autofill] : How to use and enable autofill in APS 6 | - [Background killing bugs] : Bugs in XiaoMi and Nokia phones resulting from shoddy manufacturer 'optimisations' 7 | - [Build types] : Explains the differences between the `free` and `nonFree` build types of APS 8 | - [Importing from other password managers] : How to migrate to `pass` 9 | - [Invalid GPG key ID] : Why this error happens and how you can fix it 10 | - [Release channels] : Different ways to get prebuilt binaries of APS 11 | - [Reporting bugs] : Helpful information on how to craft good bug reports 12 | 13 | [Autofill]: autofill 14 | [build types]: build-types 15 | [release channels]: release-channels 16 | [invalid gpg key id]: invalid-gpg-key-id 17 | [importing from other password managers]: importing 18 | [background killing bugs]: background-killing-bugs 19 | [reporting bugs]: reporting-bugs 20 | -------------------------------------------------------------------------------- /docs/users/invalid-gpg-key-id.md: -------------------------------------------------------------------------------- 1 | # What is an invalid GPG key ID and how to fix it? 2 | 3 | The `pass` CLI uses the `.gpg-id` file as a way to identify which GPG key to use for creating new passwords. For a while we didn't use this, and instead asked users to manually select a key to encrypt with. As noted in the changelog [here](https://msfjarvis.dev/posts/aps-july-release/#proper-support-for-per-directory-keys), this made it impossible to support per-directory keys. 4 | 5 | However, because of that change we now rely on being able to parse the myriad formats of GPG key IDs into formats that OpenKeychain can understand. This succeeds for most people, but if you're among the few unlucky ones where it fails with "Found .gpg-id, but it contains an invalid key ID, fingerprint or user ID"; it is easy to fix that. 6 | 7 | Make sure you are on v1.13.2 or newer of APS, then go to Settings > "Show hidden files and folders" and enable it. Go back to the password list, and delete the `.gpg-id` file. You can now go back and disable the "Show hidden files and folders" option. When you next create a password, you will be taken to OpenKeychain to select a GPG key which will then be written into the `.gpg-id` file in a format that both OpenKeychain and GPG can understand. 8 | -------------------------------------------------------------------------------- /docs/users/release-channels.md: -------------------------------------------------------------------------------- 1 | # Release Channels 2 | 3 | Official binary releases of Android Password Store are available through 4 different channels, each serving their own purpose. 4 | 5 | - [Play Store] 6 | - [GitHub Releases] 7 | 8 | Play Store and GitHub Releases always contain the latest stable release as built by our CI infrastructure. GitHub Releases contains both the `free` and `nonFree` variants, of which the `nonFree` variant then gets uploaded to the Play Store (refer to [build types] for what `free` and `nonFree` mean for you). 9 | 10 | - [F-Droid] 11 | 12 | F-Droid is a FOSS-only store that takes our open source code and generates their own builds from it. F-Droid usually lags behind our primary release channels, and a subset of functionality might be missing due to the requirement that binaries only contain FOSS code (refer to [build types]). 13 | 14 | - [Snapshot builds] 15 | 16 | These are builds that are generated on each push to the development branch of APS and may contain unfinished and broken features, or more often, early access to bugfixes. These also ship with additional debugging code that simplify reporting of issues to us. 17 | 18 | 19 | [play store]: https://play.google.com/store/apps/details?id=dev.msfjarvis.aps 20 | [github releases]: https://github.com/Android-Password-Store/Android-Password-Store/releases 21 | [f-droid]: https://f-droid.org/en/packages/dev.msfjarvis.aps 22 | [build types]: /docs/users/build-types 23 | [snapshot builds]: https://github.com/android-password-store/Android-Password-Store/releases/tag/latest 24 | -------------------------------------------------------------------------------- /docs/users/reporting-bugs.md: -------------------------------------------------------------------------------- 1 | # Reporting bugs 2 | 3 | When submitting a bug report, it is often helpful to include a log. The following steps can be followed on any Linux machine to capture the logs for Password Store in a text file that you can attach to a GitHub issue. 4 | 5 | - Determine the version of Password Store you are running 6 | - If it is 1.13.5 or below, replace `PKG` in the commands below with `dev.msfjarvis.aps` 7 | - If it is 2.0.0-SNAPSHOT, replace `PKG` with `app.passwordstore` 8 | - Download the Android Platform Tools from [here](https://developer.android.com/studio/releases/platform-tools) and extract them into a directory 9 | - Enable developer options on your device and turn on USB debugging by following [these steps](https://developer.android.com/studio/debug/dev-options) 10 | - Enable debug logging for Password Store by going to Settings > Misc (or scrolling to the bottom of the Settings page on version 1.13.5) 11 | - Open a new terminal in the directory where you extracted the platform tools 12 | - Run `./adb shell am force-stop PKG` to close the app 13 | - Launch the app again and replicate the issue 14 | - Run `./adb logcat --pid=$(./adb shell pidof -s PKG) -d > log.txt` to capture the logs up till that point 15 | - Upload `log.txt` either to the GitHub issue or email it to `googleplay@passwordstore.app` with the issue link 16 | -------------------------------------------------------------------------------- /docusaurus.config.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | // Note: type annotations allow type checking and IDEs autocompletion 3 | 4 | const lightCodeTheme = require('prism-react-renderer/themes/github'); 5 | const darkCodeTheme = require('prism-react-renderer/themes/dracula'); 6 | 7 | /** @type {import('@docusaurus/types').Config} */ 8 | const config = { 9 | title: 'Android Password Store Documentation', 10 | url: 'https://docs.passwordstore.app/', 11 | baseUrl: '/', 12 | onBrokenLinks: 'throw', 13 | onBrokenMarkdownLinks: 'warn', 14 | favicon: 'img/favicon.ico', 15 | organizationName: 'android-password-store', // Usually your GitHub org/user name. 16 | projectName: 'docs', // Usually your repo name. 17 | 18 | presets: [ 19 | [ 20 | 'classic', 21 | /** @type {import('@docusaurus/preset-classic').Options} */ 22 | ({ 23 | docs: { 24 | sidebarPath: require.resolve('./sidebars.js'), 25 | // Please change this to your repo. 26 | editUrl: 'https://github.com/android-password-store/docs/tree/main/', 27 | }, 28 | theme: { 29 | customCss: require.resolve('./src/css/custom.css'), 30 | }, 31 | }), 32 | ], 33 | ], 34 | 35 | themeConfig: 36 | /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ 37 | ({ 38 | navbar: { 39 | title: 'Android Password Store Docs', 40 | logo: { 41 | alt: 'My Site Logo', 42 | src: 'img/logo.svg', 43 | }, 44 | items: [ 45 | { 46 | type: 'doc', 47 | docId: 'intro', 48 | position: 'left', 49 | label: 'Docs', 50 | }, 51 | { 52 | href: 'https://github.com/android-password-store', 53 | label: 'GitHub', 54 | position: 'right', 55 | }, 56 | ], 57 | }, 58 | footer: { 59 | style: 'dark', 60 | links: [ 61 | { 62 | title: 'Documentation', 63 | items: [ 64 | { 65 | label: 'Contributors', 66 | to: '/docs/contributors/', 67 | }, 68 | { 69 | label: 'Maintainers', 70 | to: '/docs/maintainers/', 71 | }, 72 | { 73 | label: 'Users', 74 | to: '/docs/users/', 75 | }, 76 | ], 77 | }, 78 | { 79 | title: 'Community', 80 | items: [ 81 | { 82 | label: 'Github Discussions', 83 | href: 'https://github.com/android-password-store/Android-Password-Store/discussions', 84 | }, 85 | ], 86 | }, 87 | ], 88 | copyright: `Copyright © ${new Date().getFullYear()} Android Password Store. Built with Docusaurus.`, 89 | }, 90 | prism: { 91 | theme: lightCodeTheme, 92 | darkTheme: darkCodeTheme, 93 | }, 94 | }), 95 | }; 96 | 97 | module.exports = config; 98 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aps-docs", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "docusaurus": "docusaurus", 7 | "start": "docusaurus start", 8 | "build": "docusaurus build", 9 | "swizzle": "docusaurus swizzle", 10 | "deploy": "docusaurus deploy", 11 | "clear": "docusaurus clear", 12 | "serve": "docusaurus serve", 13 | "write-translations": "docusaurus write-translations", 14 | "write-heading-ids": "docusaurus write-heading-ids" 15 | }, 16 | "dependencies": { 17 | "@docusaurus/core": "^3.0.0", 18 | "@docusaurus/preset-classic": "^3.0.0", 19 | "@mdx-js/react": "^1.6.22", 20 | "clsx": "^2.0.0", 21 | "prism-react-renderer": "^1.2.1", 22 | "react": "^19.0.0", 23 | "react-dom": "^19.0.0" 24 | }, 25 | "browserslist": { 26 | "production": [ 27 | ">0.5%", 28 | "not dead", 29 | "not op_mini all" 30 | ], 31 | "development": [ 32 | "last 1 chrome version", 33 | "last 1 firefox version", 34 | "last 1 safari version" 35 | ] 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /shell.nix: -------------------------------------------------------------------------------- 1 | { pkgs ? import { } }: 2 | 3 | pkgs.mkShell { buildInputs = with pkgs; [ nodejs-16_x yarn ]; } 4 | -------------------------------------------------------------------------------- /sidebars.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Creating a sidebar enables you to: 3 | - create an ordered group of docs 4 | - render a sidebar for each doc of that group 5 | - provide next/previous navigation 6 | 7 | The sidebars can be generated from the filesystem, or explicitly defined here. 8 | 9 | Create as many sidebars as you want. 10 | */ 11 | 12 | // @ts-check 13 | 14 | /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ 15 | const sidebars = { 16 | // By default, Docusaurus generates a sidebar from the docs folder structure 17 | tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], 18 | 19 | // But you can create a sidebar manually 20 | /* 21 | tutorialSidebar: [ 22 | { 23 | type: 'category', 24 | label: 'Tutorial', 25 | items: ['hello'], 26 | }, 27 | ], 28 | */ 29 | }; 30 | 31 | module.exports = sidebars; 32 | -------------------------------------------------------------------------------- /src/css/custom.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Any CSS included here will be global. The classic template 3 | * bundles Infima by default. Infima is a CSS framework designed to 4 | * work well for content-centric websites. 5 | */ 6 | 7 | /* You can override the default Infima variables here. */ 8 | :root { 9 | --ifm-color-primary: #1f3a7a; 10 | --ifm-color-primary-dark: #1c346e; 11 | --ifm-color-primary-darker: #1a3168; 12 | --ifm-color-primary-darkest: #162955; 13 | --ifm-color-primary-light: #224086; 14 | --ifm-color-primary-lighter: #24438c; 15 | --ifm-color-primary-lightest: #284b9f; 16 | --ifm-code-font-size: 95%; 17 | } 18 | 19 | /* For readability concerns, you should choose a lighter palette in dark mode. */ 20 | [data-theme='dark'] { 21 | --ifm-color-primary: #919dcf; 22 | --ifm-color-primary-dark: #7887c4; 23 | --ifm-color-primary-darker: #7887c4; 24 | --ifm-color-primary-darkest: #7d8cc6; 25 | --ifm-color-primary-light: #aab3da; 26 | --ifm-color-primary-lighter: #b6bedf; 27 | --ifm-color-primary-lightest: #dbdeef; 28 | } 29 | 30 | .docusaurus-highlight-code-line { 31 | background-color: rgba(0, 0, 0, 0.1); 32 | display: block; 33 | margin: 0 calc(-1 * var(--ifm-pre-padding)); 34 | padding: 0 var(--ifm-pre-padding); 35 | } 36 | 37 | [data-theme='dark'] .docusaurus-highlight-code-line { 38 | background-color: rgba(0, 0, 0, 0.3); 39 | } -------------------------------------------------------------------------------- /src/pages/APS.mdx: -------------------------------------------------------------------------------- 1 | Android Password Store is an Android:tm: client for [pass](https://passwordstore.org/), the standard unix password manager. 2 | 3 | This site hosts documentation related to the project, which can be accessed by pressing the 'Get started' button above. 4 | 5 | ## Licensing 6 | 7 | This website’s contents are licensed under the Creative Commons CC0-1.0 license. 8 | -------------------------------------------------------------------------------- /src/pages/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import clsx from 'clsx'; 3 | import Layout from '@theme/Layout'; 4 | import Link from '@docusaurus/Link'; 5 | import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; 6 | import styles from './index.module.css'; 7 | import APS from './APS.mdx'; 8 | 9 | function HomepageHeader() { 10 | const { siteConfig } = useDocusaurusContext(); 11 | return ( 12 |
13 |
14 |

{siteConfig.title}

15 | {/*

{siteConfig.tagline}

*/} 16 |
17 | 20 | Get started 21 | 22 |
23 |
24 |
25 | ); 26 | } 27 | 28 | export default function Home() { 29 | const { siteConfig } = useDocusaurusContext(); 30 | return ( 31 | 34 | 35 |
36 | 37 |
38 |
39 | ); 40 | } 41 | -------------------------------------------------------------------------------- /src/pages/index.module.css: -------------------------------------------------------------------------------- 1 | /** 2 | * CSS files with the .module.css suffix will be treated as CSS modules 3 | * and scoped locally. 4 | */ 5 | 6 | .heroBanner { 7 | padding: 4rem 0; 8 | text-align: center; 9 | position: relative; 10 | overflow: hidden; 11 | } 12 | 13 | @media screen and (max-width: 996px) { 14 | .heroBanner { 15 | padding: 2rem; 16 | } 17 | } 18 | 19 | .buttons { 20 | display: flex; 21 | align-items: center; 22 | justify-content: center; 23 | } 24 | 25 | .apsContainer { 26 | padding: 2rem; 27 | } -------------------------------------------------------------------------------- /static/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-password-store/docs/c0283b4e67ee870ffcd7802658c8351a25ced29c/static/.nojekyll -------------------------------------------------------------------------------- /static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-password-store/docs/c0283b4e67ee870ffcd7802658c8351a25ced29c/static/img/favicon.ico -------------------------------------------------------------------------------- /static/img/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | -------------------------------------------------------------------------------- /static/img/undraw_docusaurus_mountain.svg: -------------------------------------------------------------------------------- 1 | 2 | Easy to Use 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | -------------------------------------------------------------------------------- /static/img/undraw_docusaurus_react.svg: -------------------------------------------------------------------------------- 1 | 2 | Powered by React 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | -------------------------------------------------------------------------------- /static/img/undraw_docusaurus_tree.svg: -------------------------------------------------------------------------------- 1 | 2 | Focus on What Matters 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | --------------------------------------------------------------------------------