Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
5e2f84d
Create codeql.yml
Lennoard Aug 18, 2025
1ccb8bb
refactor: updated build scripts + version catalog
Lennoard Aug 11, 2025
956751a
refactor: [WIP] updated domain layer
Lennoard Aug 11, 2025
40a95b6
refactor: [WIP] updated data layer
Lennoard Aug 12, 2025
20c84f7
refactor: [WIP] updated presentation layer
Lennoard Aug 12, 2025
857e588
bugfix: search screen v3
Lennoard Aug 14, 2025
6b872b3
bugfix: browse screen back button v3
Lennoard Aug 14, 2025
5509aea
bugfix: main viewModel instance
Lennoard Aug 14, 2025
fb69141
bugfix: edit param screen
Lennoard Aug 15, 2025
076aca2
bugfix: favorites screen v3
Lennoard Aug 15, 2025
628c9c9
bugfix: import presets
Lennoard Aug 15, 2025
996e543
bugfix: fixed favorites widget
Lennoard Aug 16, 2025
1b9ffbe
feature: added new string resources
Lennoard Aug 17, 2025
bb30156
bugfix: react to changed theme settings
Lennoard Aug 17, 2025
0d3d102
bugfix: removed unused resources
Lennoard Aug 17, 2025
3f89925
refactor: updated app icon
Lennoard Aug 17, 2025
1d6f2e9
feature: added support for landscape orientation
Lennoard Aug 17, 2025
f3ae909
feature: added "about" headers
Lennoard Aug 18, 2025
384f750
release: [3.0.0] versionCode 17
Aug 18, 2025
70d704f
chore: created community standard files
Lennoard Aug 19, 2025
ae4abf5
bugfix: database name
Lennoard Aug 19, 2025
40eb941
docs: update README with Tasker integration and new screenshots
Lennoard Aug 19, 2025
9fe927d
docs: update README with Tasker integration and new screenshots
Lennoard Aug 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
46 changes: 46 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: "CodeQL Advanced"

on:
push:
branches: [ "develop", "master" ]
pull_request:
branches: [ "develop", "master" ]
schedule:
- cron: '16 0 * * 2'

jobs:
analyze:
name: Analyze (${{ matrix.language }})
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
security-events: write
packages: read
actions: read
contents: read

strategy:
fail-fast: false
matrix:
include:
- language: java-kotlin
build-mode: manual
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
queries: security-extended,security-and-quality

- if: matrix.build-mode == 'manual'
shell: bash
run: |
./gradlew assembleDebug testDebug

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
49 changes: 49 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Contributing to SysctlGUI

First off, thank you for considering contributing to SysctlGUI! Your help is greatly appreciated. Whether it's reporting a bug, discussing improvements, or contributing code, every bit of effort makes this project better.

This document provides a set of guidelines for contributing to SysctlGUI. These are mostly guidelines, not strict rules. Use your best judgment, and feel free to propose changes to this document in a pull request.

## How Can I Contribute?

There are many ways to contribute, and we welcome them all!

### Reporting Bugs

If you find a bug, please make sure it hasn't already been reported by searching the [GitHub Issues](https://github.com/Lennoard/SysctlGUI/issues).

When you are creating a bug report, please include as many details as possible:

* **A clear and descriptive title** for the issue
* **Steps to reproduce the bug** in a clear, step-by-step list
* **Describe the expected behavior** and what you observed instead
* **Provide details about your environment:**
* App version
* Android version and ROM (e.g., Android 13, LineageOS 20)
* Device model
* Root solution (e.g., Magisk, KernelSU)
* **Include logs** (like a Logcat) or screenshots if they are relevant

### Suggesting Enhancements

If you have an idea for a new feature or an improvement to an existing one, please open an issue to start a discussion.

* **Use a clear and descriptive title** for the issue
* **Provide a detailed description** of the enhancement and why it would be useful
* **Explain the problem it solves** or the workflow it improves
* **Include mockups or screenshots** if they help illustrate your idea


### Pull Requests

Code contributions are always welcome. If you can contribute with code, please do so.


### Translations
If you are fluent in another language, your help with translations would be invaluable.
Please see the [translation guide](https://github.com/Lennoard/SysctlGUI/blob/develop/TRANSLATING.md) for detailed instructions on how to contribute translations.



# License
By contributing to SysctlGUI, you agree that your contributions will be licensed under the [License](https://github.com/Lennoard/SysctlGUI/blob/develop/LICENSE) that covers the project.
89 changes: 61 additions & 28 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,75 @@
<p align="center">
<img width="108" height="108" src="https://i.imgur.com/TPKCbg6.png"/>
</p>

<p align="center">
<img height="360" src="https://lh3.googleusercontent.com/vmi_rXs0nfqfAh3woDLDRxDW0tx_UM1nx8zCda7nY4FoO6ebmvSQJaHT-GENzEOp34o"/>
<img height="360" src="https://lh3.googleusercontent.com/DXaSIdkmBzUsQzPOkkIbY5YdKVsohcTb4IeSq9q70PPdG07yovHCD7X6XPebtesM0L0"/>
<img height="360" src="https://lh3.googleusercontent.com/zrIdQ1jGiaDb_kfnxAPqd8bJwejjJzvq7whU-kGXvT0G86l3RHzuseAnZZpP7r3RaV0"/>
<img height="360" src="https://lh3.googleusercontent.com/fpWBqB-qTRp1zfw6r7aBm6auQD7cdw-3vQbKsqwVVo5lcPHvQq96XKVdO1gRTydF8qU"/>
<img width="192" height="192" src="img/icon.png"/>
</p>

# SysctlGUI

SysctlGUI is a Android application designed for power users, developers, and enthusiasts who want to
fine-tune their device's performance by directly editing kernel parameters.
It provides a user interface for the <code>sysctl</code> command-line utility,
making advanced kernel tweaking accessible and manageable.

***Important: This app requires root access to work.***

[![Codacy Badge](https://app.codacy.com/project/badge/Grade/d91bf38325aa4bb6b6cb67136f72f1f1)](https://www.codacy.com/gh/Lennoard/SysctlGUI/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=Lennoard/SysctlGUI&amp;utm_campaign=Badge_Grade)
![](https://img.shields.io/github/languages/top/Lennoard/SysctlGUI)
![](https://img.shields.io/github/contributors/Lennoard/SysctlGUI)
![](https://img.shields.io/github/downloads/Lennoard/SysctlGUI/total)
![](https://img.shields.io/github/v/release/Lennoard/SysctlGUI)
![GitHub commits since latest release (by date)](https://img.shields.io/github/commits-since/Lennoard/SysctlGUI/latest/master)
[![CodeQL Advanced](https://github.com/Lennoard/SysctlGUI/actions/workflows/codeql.yml/badge.svg)](https://github.com/Lennoard/SysctlGUI/actions/workflows/codeql.yml)
[![Build Status](https://app.bitrise.io/app/03e8fa82-8168-4a7f-9005-b8e5d056417f/status.svg?token=3qlQfgAkEgxvr0JnvyzT_Q&branch=develop)](https://app.bitrise.io/app/03e8fa82-8168-4a7f-9005-b8e5d056417f)

A GUI application for Android <code>sysctl</code> to edit kernel variables
![](https://img.shields.io/github/contributors/Lennoard/SysctlGUI)
![](https://img.shields.io/github/downloads/Lennoard/SysctlGUI/total)
![](https://img.shields.io/github/v/release/Lennoard/SysctlGUI)
![GitHub commits since latest release (by date)](https://img.shields.io/github/commits-since/Lennoard/SysctlGUI/latest/develop)

## Features
- Browse filesystem for specific kernel parameters
- Select parameters from a searchable list
- Information about known parameters
- Load parameters from a configuration file
- Reapply parameters at startup
- Mark parameters as favorite for easy access
- **Parameter Management:** Easily browse the filesystem or search a comprehensive list to find kernel parameters, with in-app documentation to help you understand their impact.
- **Persistent Tweaks:** Automatically reapply your chosen settings on every boot.
- **Configuration Profiles:** Save and load sets of parameters from configuration files, making it simple to switch between different performance profiles or share your setup.
- **Favorites System:** Mark frequently used parameters for quick and easy access.
- **Tasker Integration:** Automate the application of kernel parameters in response to specific events using [Tasker](https://tasker.joaoapps.com/). SysctlGUI provides a Tasker plugin, allowing you to trigger parameter application based on a wide range of conditions/states.

## Technologies

- MVI / MVVM for user params
- [Jetpack Compose](https://developer.android.com/jetpack/compose) Material 3 UI
- [Jetpack Data Binding](https://developer.android.com/topic/libraries/data-binding)
- [Jetpack View Binding](https://developer.android.com/topic/libraries/view-binding)
- Lifecycle-aware Kotlin Coroutines
- Kotlin Flows
- Dependency injection with [Koin](https://insert-koin.io/)
This project utilizes a modern Android development stack, leveraging a comprehensive suite of libraries and tools:

- **Core & Architecture:**
- Architectural Patterns: MVI, reactive and maintainable.
- [Kotlin](https://kotlinlang.org/): For modern, concise, and safe programming.
- Android Jetpack:
- [Lifecycle](https://developer.android.com/jetpack/androidx/releases/lifecycle)
- [ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel)
- [Navigation Component](https://developer.android.com/guide/navigation)
- [Room](https://developer.android.com/training/data-storage/room): For local data persistence.
- [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager): For deferrable, asynchronous tasks.
- **UI Development:**
- [Jetpack Compose](https://developer.android.com/jetpack/compose): For building native UIs with a declarative approach.
- Compose Material 3 & Material Components
- [Jetpack Glance](https://developer.android.com/develop/ui/compose/glance): For creating App Widgets with Jetpack Compose.
- **Asynchronous Programming:**
- [Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) & [Flows](https://kotlinlang.org/docs/flow.html): For efficient and structured background tasks and reactive data streams.
- **Utilities:**
- [Koin](https://insert-koin.io/): Dependency injection framework for Kotlin.
- [Ktor Client](https://ktor.io/docs/client-reference.html): For making HTTP requests (used for parameter documentation).
- [Libsu](https://github.com/topjohnwu/libsu): For interacting with root services.
- [Jsoup](https://jsoup.org/): For parsing HTML (used for parameter documentation).
- [Kotlinx Serialization](https://github.com/Kotlin/kotlinx.serialization): For JSON serialization/deserialization.

## Contributing

Contributions are always welcomed. Please see the [contributing guide](CONTRIBUTING.md) for more details on how to contribute with this project.

### Translations
If you'd like to help translate the app into other languages, please see the [translation guide](TRANSLATING.md) for instructions on how to get started. Your contributions will help make SysctlGUI accessible to a wider audience.


## Screenshots
<div align="center">

| | | | |
|:------------------------------------------------------:|:------------------------------------------------------:|:------------------------------------------------------:|:-------------------------------------------------------:|
|<img src="img/ss01.png" alt="Screenshot 1" width="200"> |<img src="img/ss02.png" alt="Screenshot 2" width="200"> |<img src="img/ss03.png" alt="Screenshot 3" width="200"> | <img src="img/ss04.png" alt="Screenshot 4" width="200"> |

</div>


## Download

Expand All @@ -47,7 +80,7 @@ A GUI application for Android <code>sysctl</code> to edit kernel variables

This project is licensed under the terms of the MIT license.

> Copyright (c) 2019-2024 Lennoard.
> Copyright (c) 2019-2025 Lennoard.
>
> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
>
Expand Down
62 changes: 62 additions & 0 deletions TRANSLATING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Translating SysctlGUI

Thank you for your interest in translating SysctlGUI! Your contributions help make the app accessible to a wider audience.

## How to Contribute

1. **Fork the Repository:** Start by forking the [SysctlGUI repository](https://github.com/your-github-username/SysctlGUI) (replace `your-github-username/SysctlGUI` with the actual repository URL) to your own GitHub account.
2. **Clone Your Fork:** Clone your forked repository to your local machine.
```bash
git clone https://github.com/YOUR_USERNAME/SysctlGUI.git
cd SysctlGUI
```
3. **Create a New Branch:** Create a new branch for your translation.
```bash
git checkout -b translate-yourlanguage
```
4. **Translate the Files:**
* **String Resources:** These are the primary files for translation.
* `app/src/main/res/values/strings.xml`
* `app/src/main/res/values/params_info.xml`
* `data/src/main/res/values/strings.xml`

To translate these files, create a new `values-xx` directory in the same `res` folder, where `xx` is the ISO 639-1 code for the language you are translating to (e.g., `values-es` for Spanish, `values-de` for German). Then, copy the original `strings.xml` or `params_info.xml` into this new directory and translate the string values within the XML tags.

**Example (strings.xml for Spanish):**
Create `app/src/main/res/values-es/strings.xml` and translate the content, preserving special format tags (%s, %1$s, etc)
```xml
<resources>
<string name="app_name">SysctlGUI</string>
<!-- Translate this -->
<string name="undo">Undo</string>
<string name="selected_file_format">Selected file: %s</string>
<!-- To this -->
<string name="undo">Deshacer</string>
<string name="selected_file_format">Archivo seleccionado: %s</string>
</resources>
```

* **Raw Text Files (Optional):** If you feel brave, you can also translate the `.txt` files located in `data/src/main/res/raw/`.
* When translating these files, it is **crucial** to respect their original format. These files often have a specific structure that the app relies on.
* Translate the text content, but leave any special characters, newlines, or formatting intact.
* Place the translated `.txt` files in a new `raw-xx` directory within `data/src/main/res/` (e.g., `data/src/main/res/raw-es/` for Spanish).

5. **Commit Your Changes:** Commit your translated files with a clear commit message.
```bash
git add .
git commit -m "Add translation to [Your Language]"
```
6. **Push to Your Fork:** Push your changes to your forked repository.
```bash
git push origin translate-yourlanguage
```
7. **Create a Pull Request:** Go to the original SysctlGUI repository on GitHub and create a new Pull Request from your forked branch. Provide a clear description of your changes.

## Important Notes

* Ensure your translations are accurate and natural-sounding in the target language.
* Do not translate resource names (e.g., `app_name` in `<string name="app_name">`). Only translate the text content between the XML tags.
* For `.txt` files, preserving the exact original formatting is critical for the app to function correctly with the translated content.
* If you are unsure about any part of the translation process, feel free to open an issue on the main repository to ask for clarification.

Thank you for your contribution!
Loading
Loading