Thank you for your interest in contributing.
git clone https://github.com/Nerds489/ultimate-linux-suite.git
cd ultimate-linux-suite
make test # Verify syntax- Fork and clone the repository
- Create a feature branch:
git checkout -b feature/your-feature - Make changes and test on at least one supported distribution
- Run
make testto verify shell syntax - Commit and push
- Open a pull request
- Use
bashshebang:#!/usr/bin/env bash - Prevent multiple sourcing with guard variables
- Use
localfor function variables - Quote all variable expansions:
"$var"not$var - Use
[[ ]]for tests, not[ ] - Add error handling for critical operations
- Log using
log_info,log_success,log_warn,log_error
#!/usr/bin/env bash
# mymodule.sh - Description
[[ -n "${_MYMODULE_LOADED:-}" ]] && return 0
readonly _MYMODULE_LOADED=1
mymodule_init() {
log_debug "Module initialized"
}
mymodule_main() {
# Module logic here
}Add to apps/database.sh:
"appname|category|Description|apt-pkg|dnf-pkg|pacman-pkg|zypper-pkg|flatpak-id|check-cmd"
- Create
modules/modulename.sh - Implement
modulename_init()andmodulename_main()functions - Source in
ultimate.sh - Add menu entry in
menus/main_menu.sh
- Create
backends/distroname.sh - Implement package name mappings
- Add detection in
lib/os_detect.sh
- Never use
evalwith user input - Validate all inputs before use
- Use whitelists for system operations (sysctl keys, service names)
- Prefer safe helpers over raw shell commands
- Quote all variables to prevent word splitting
Before submitting:
-
make testpasses (shellcheck) - Tested on target distribution
- No hardcoded paths (use variables)
- Error handling for critical operations
- Logging for user visibility
- Queue integration for system changes
- Describe changes clearly
- Reference any related issues
- Include testing details (which distro, what was tested)
- Wait for review
Open an issue at https://github.com/Nerds489/ultimate-linux-suite/issues