sticks 0.3.1

A tool for managing C and C++ projects
Documentation

Features

  • 🚀 Quick Project Setup - Create new C/C++ projects with a single command
  • 📁 Multiple Build Systems - Support for both Makefile and CMake
  • 🔨 Smart Structure - Auto-generates organized project structure with source files and build configs
  • 📦 Dependency Management - Easily add/remove dependencies in your Makefile
  • 🔧 Multi-Source Support - Add multiple source files with automatic build integration
  • 📝 Auto-Generated Config - Creates .gitignore, .editorconfig, Clang-format config, VSCode settings
  • 🔄 Self-Updating - Built-in update mechanism that downloads from GitHub releases
  • 🎯 Zero Runtime Dependencies - Just needs GCC; no Rust/Cargo required after installation
  • Quality Assured - Comprehensive test suite with 18 automated tests
  • 🔐 CI/CD Pipeline - Automated testing, building, and releases on every change

Installation

Choose the installation method that works best for you:

📦 Package Managers (Recommended)

Package Name: sticks-aur

# Using an AUR helper (recommended)

yay -S sticks-aur

# or

paru -S sticks-aur


# Or manually clone from AUR

git clone https://aur.archlinux.org/sticks-aur.git

cd sticks-aur

makepkg -si

See sticks-aur repository for packaging details.

# Download the latest .deb package

wget https://github.com/mAmineChniti/sticks/releases/latest/download/sticks_0.3.0-1_amd64.deb

sudo dpkg -i sticks_*.deb

🚀 Pre-built Binaries

wget https://github.com/mAmineChniti/sticks/releases/latest/download/sticks-linux-x86_64

chmod +x sticks-linux-x86_64

sudo mv sticks-linux-x86_64 /usr/local/bin/sticks

🦀 From Cargo

cargo install sticks

Requires Rust toolchain from rustup.rs.

🔨 Build from Source

# Clone the repository

git clone --recurse-submodules https://github.com/mAmineChniti/sticks.git

cd sticks


# Build release binary

cargo build --release


# Install (choose one)

sudo cp target/release/sticks /usr/local/bin/  # System-wide

# or

cp target/release/sticks ~/.local/bin/         # User only

Quick Start

# Create a new C++ project with Makefile (default)

sticks cpp my-project

cd my-project


# Or with CMake build system

sticks cpp my-project --build cmake

cd my-project


# Add a dependency

sticks add libcurl


# Add more source files

sticks src utils network


# Build and run

make

./my-project

Usage

Creating Projects

Create a new project in a subdirectory:

sticks c my-c-project       # New C project with Makefile

sticks cpp my-cpp-project   # New C++ project with Makefile

Create with CMake build system:

sticks c my-project --build cmake       # C project with CMake

sticks cpp my-project --build cmake     # C++ project with CMake

Initialize in current directory:

sticks init c               # Initialize C project here

sticks init cpp --build cmake  # Initialize C++ project with CMake

Managing Dependencies

Add dependencies:

sticks add libcurl              # Single dependency

sticks add openssl libpq zlib   # Multiple dependencies

Automatically updates your Makefile's install-deps target.

Remove dependencies:

sticks remove libcurl           # Remove single dependency

sticks remove openssl libpq     # Remove multiple dependencies

Cleans up the install-deps rule automatically when empty.

Adding Source Files

sticks src utils               # Adds src/utils.cpp (or .c) and header

sticks src network database    # Add multiple source files

Sticks will:

  • Create source files in src/
  • Create corresponding headers
  • Update build file (Makefile or CMakeLists.txt) automatically

Generated Configuration Files

When you create a project, Sticks automatically generates:

  • Build System Files: Makefile or CMakeLists.txt (your choice)
  • Git: .gitignore, .gitattributes (pre-configured for C/C++)
  • Code Style: .editorconfig, .clang-format (consistent formatting)
  • IDE: VSCode .vscode/settings.json, launch.json, tasks.json
  • Documentation: README.md (project-specific template)

This gives you a professional, production-ready project structure out of the box!

Getting Help

sticks --help           # Show all commands

sticks <command> --help # Help for specific command

sticks --version        # Show version

Updating

Sticks can update itself without requiring Rust/Cargo:

sticks update

This downloads the latest binary from GitHub releases and replaces your installation.

Alternative update methods:

# Arch Linux (using AUR package manager)

# Package name: sticks-aur

sudo pacman -Syu  # Update package database first

yay -Syu sticks-aur

# or

paru -Syu sticks-aur


# Debian/Ubuntu (download new .deb)

wget https://github.com/mAmineChniti/sticks/releases/latest/download/sticks_0.3.0-1_amd64.deb

sudo dpkg -i sticks_*.deb


# Cargo installation

cargo install sticks --force

Uninstallation

# Cargo installation

cargo uninstall sticks


# Arch Linux (AUR package name: sticks-aur)

yay -R sticks-aur

# or

paru -R sticks-aur


# Debian/Ubuntu

sudo apt remove sticks


# Manual installation

sudo rm /usr/local/bin/sticks

# or

rm ~/.local/bin/sticks

Project Structure

A typical sticks-managed project looks like:

my-project/
├── src/
│   ├── main.cpp        # Entry point
│   ├── utils.cpp       # Additional sources
│   └── network.cpp
├── include/
│   ├── utils.h         # Headers
│   └── network.h
├── build/              # Build artifacts (gitignored)
│   ├── debug/
│   └── release/
└── Makefile            # Auto-generated, customizable

Technical Details

  • Language: Rust 2021 edition
  • Dependencies: clap 4, anyhow (build-time only)
  • Dev Dependencies: serial_test (for isolated test execution)
  • Runtime Requirements: GCC (for compiling your C/C++ projects)
  • Supported Architectures: x86_64
  • Supported Platforms: Linux (Arch, Debian, Ubuntu, others)
  • Test Coverage: 18 comprehensive tests covering all core functionality
  • CI/CD: Automated testing, building, and releases via GitHub Actions

Contributing

We welcome contributions! Here's how to get involved:

  1. Report Issues: Found a bug? Open an issue
  2. Submit PRs: Fork the repo and submit pull requests
  3. Improve Docs: Help us make documentation better

See CONTRIBUTING.md for detailed guidelines.

Roadmap

  • Implement dependency removal with sticks remove
  • Auto-cleanup of empty install-deps rule
  • Modularized codebase
  • Batch dependency operations
  • CI/CD pipeline with automated releases
  • Self-update mechanism without Cargo dependency
  • Multi-architecture support (x86_64)
  • Comprehensive test suite with automated testing
  • Quality gates in CI/CD (tests run before releases)
  • CMake support alongside Makefile
  • Auto-generated .gitignore, .editorconfig, .clang-format
  • VSCode integration (settings, launch config, tasks)
  • Auto-generated README templates
  • Integration tests for end-to-end workflows
  • Template system for custom project structures
  • Package manager integration (conan, vcpkg)
  • Plugin system for extending functionality
  • Code coverage reporting

License

This project is licensed under the MIT License. See the LICENSE file for details.

Contact

Maintainer: mAmineChniti
Email: emin.chniti@esprit.tn
Repository: github.com/mAmineChniti/sticks
AUR Package: github.com/mAmineChniti/sticks-aur