Contributing to Nyxian
Getting Started
Prerequisites
- A mac with Xcode and Theos
- A iPhone/iPad with iOS 16+
- A free or paid apple developer account
- The certificate used to sign Nyxian (you can get that from keychain after installing nyxian over Xcode).
Setup
- Before you open Nyxian in Xcode you have to run the Makefile first!, otherwise you end up breaking project internal dependency configurations:
git clone --recursive https://github.com/ProjectNyxian/Nyxian.git
cd Nyxian
make jailed
- Open it in Xcode (Now you can enjoyyy)
Ways to contribute
Good First Issues
You can find beginner friendly issues they are tagged with good-first-issue, they are beginner friendly.
Documentation
Improvements to docs, examples, comments are always warmly welcomed.
Bug Reports
Open an issue with:
- What you expected
- What happened
- Steps to reproduce
- Your environment (OS, version, etc)
Feature Requests
Open an issue describing the use case before writing code.
Submiting changes
- Fork the repo
- Create a branch (
git checkout -b fix/thing) - Make your change
- Run tests
- Commit with clear message
- Push and open a PR
Code Style
Swift
// Use [weak self] + guard in closures
someAsyncThing { [weak self] result in
guard let self = self else { return }
self.doThing(result)
}
// Inline closures for computed values
let key = {
switch type {
case .app: return "applications"
case .utility: return "utilities"
default: return "unknown"
}
}()
// Use self. prefix
self.tableView.reloadData()
// K&R braces
func doThing() {
// ...
}
C / ObjC
/* Allman braces for functions */
void do_thing(int arg)
{
/* comment style */
/* null check before use */
/* there is no space between if and brace in my code! */
if(ptr == NULL)
{
return;
}
/* lock/unlock clearly commented and the reason */
os_unfair_lock_lock(&lock);
/* operation here */
os_unfair_lock_unlock(&lock);
}
/* snake_case for C functions */
TaskPortObject *get_tpo_for_pid(pid_t pid);
General
- GPL v3 header on all new files
- Minimal comments - code should be self-documenting
- Defensive programming - check validity before operations (otherwise I will never ever again accept a PR from you)
- No force unwraps in Swift unless provably safe
License Header
All files must include:
/*
Copyright (C) 2025 cr4zyengineer
This file is part of Nyxian.
Nyxian is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Nyxian is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Nyxian. If not, see <https://www.gnu.org/licenses/>.
*/
You have to add your name undernethe the names of other people that have contributed in-case youre not in that list already. If you're the original creator of a new file in Nyxian then your name is the first instead of mine, I add mine underneath yours in that case when I add or change something of your code!
Questions?
Open an issue. Please search existing issues first.