Wednesday, February 12, 2025

Life of Fred Rwigyema

Rwigema was born in Gitarama, in southern Rwanda. Considered a Tutsi, in 1960 he and his family fled to Uganda and settled in a refugee camp in Nshungerezi, Ankole following the Rwandan Revolution of 1959 and the ouster of King Kigeli V.  


After finishing high school in 1976, he went to Tanzania and joined the Front for National Salvation (FRONASA), a rebel group headed by Yoweri Museveni, the brother of his friend Salim Saleh. It was at this point that he began calling himself Fred Rwigema. Later that year, he traveled to Mozambique and joined the FRELIMO rebels who were fighting for the liberation of Mozambique from Portugal's colonial rule.

In 1979, he joined the Uganda National Liberation Army (UNLA), which together with Tanzanian armed forces captured Kampala in April 1979, forcing Idi Amin to flee into exile.[2]

He later joined Museveni's National Resistance Army (NRA), which fought a guerrilla war called the Ugandan Bush War against the government of Milton Obote. It was here that Rwigema first fought alongside a number of future RPF leaders including future Rwandan president Paul Kagame, James Kabarebe, Patrick Karegeya and Kayumba Nyamwasa.[3]

After the NRA captured state power in 1986, Rwigema became the deputy Minister of Defence. He was regularly at the front line in northern Uganda during the new government's operations against remnants of the ousted regime as well as other rebel groups.[4]Fred Rwigema was amongst the initial 27 armed individuals, led by Uganda's President Yoweri Museveni, who took to the bush in 1981 to begin a guerilla war following Uganda's contentious Presidential elections of 1980, where Apollo Milton Obote's party the Uganda People's Congress was accused of engineering an election fraud to get victory over the Democratic Party which was led by Paul Kawanga Ssemwogerere and Uganda Patriotic Movement, which was led by Yoweri Museveni.

By 1985, Fred Rwigema had emerged as one of the most significant military leaders so much so that when the National Resistance Army (NRA) secured a military victory against a military government that had staged a successful coup d’état against Milton Obote's regime, Fred Rwigyema was one of the three former rebel leaders who were commissioned as General Officers in the NRA. He was commissioned a Major General alongside Yoweri Museveni's brother Salim Saleh Akandwanaho and Elly Tumwine. Yoweri Museveni himself was made a Lieutenant General.

Fred Rwigema was a charismatic military leader, who was loved by all soldiers and officers who served under him. He especially earned his reputation in counter insurgency operations in Northern Uganda, where the army defeated by the National Resistance Army was holding out. Fred Rwigyema also stands out in his contemporaries for not being involved in any war crimes while he was directing operations in Northern and North Eastern Uganda. That earned the nickname “Mungu wa vita”, Swahili for “god of war”.

He was appointed Deputy Minister for Defense following the capture of power by the National Resistance Movement, but that did not take him away from directing military operations in Northern Uganda.On 1 October 1990, Rwigyema led the splinter group of 10,000 NRA troops in an invasion of northern Rwanda.[5] This event started the Rwandan Civil War. What became the RPF chose this date as it was close to Ugandan independence day on 9 October.[3] This served as an opportunity for Rwigyema, as the movement could be disguised from the main NRA as a military parade.[3]

On the second day of the civil war, Rwigyema was shot in the head and died at Nyabwenshogozi Hill.[6] His death was kept secret for a month so as not to harm morale.[7] There is a dispute about the exact circumstances of Rwigyema's death; the official line of Kagame's government was that Rwigyema was killed by a stray bullet.[8][9] However, historian Gérard Prunier states that he had established "from incontrovertible evidence (including an interview with an eyewitness to the killing)" that Rwigyema was killed by his subcommander Peter Bayingana, following an argument over tactics, and excused his readers for having accepted the "cooked version of facts [the RPF] provided" him with.[10]

Rwigyema is considered one of Rwanda's national heroes. His body was buried at the Heroes Cemetery in Kigali. 

Author: Nzayisenga Adrien 



0 Comments:

Post a Comment

Comment here

Subscribe to Post Comments [Atom]

<< Home

.

Nzayisenga Adrien

Rwanda • Africa • History • Business • Technology • Knowledge

Page Views
0
Visitors
0
AdSense Revenue
Check AdSense

Support Nzayisenga Adrien

Ushobora gushyigikira ibikorwa byacu by'ubushakashatsi, ubumenyi, amateka n'itangazamakuru.

Support / Pay

Uko system ikora

Abasomyi basura blog → Google igatanga ads → abantu bareba cyangwa bagakanda ads mu buryo busanzwe → AdSense ikabara amafaranga → Google ikishyura konti yawe hakurikijwe payment settings za AdSense.

Ntukande ku matangazo yawe kandi ntusabe abandi kuyakandaho. Clicks zigomba kuba genuine.

. Rwanda Nziza Ngobyi Iduhetse | ADFID TV | Nzayisenga Adrien ADFID Africa | Digital Library & AI Content Creator

ADFID Africa

African knowledge, digital publishing and AI-powered content creation in one platform.

🤖 AI Content Creator

Create articles, YouTube scripts, Shorts, Facebook posts and SEO content.

📚 Digital Library

Store and manage your African books, research and educational resources.

📺 ADFID TV

Transform written articles into video-ready scripts.

💰 Monetization

Prepare your platform for advertising, subscriptions and reader support.

🤖 ADFID TV AI Content Creator

Create multiple content formats from one article.

📚 ADFID Africa Digital Library

📤 Upload E-Book

📊 ADFID Dashboard

Books

0

Articles Created

0

AI Generations

0

Platform Status

ONLINE

System Information

This running version stores demo data in your browser using localStorage.

For a production platform, connect this interface to a real backend, database, authentication system and AI API.

❤️ Support ADFID Africa

Support Knowledge & African Digital Content

Your support can help develop educational materials, African history resources, digital books and media content.


Email: nayisengadrianos@gmail.com

Mobile: +250 784 296 338

require("dotenv").config(); const express = require("express"); const multer = require("multer"); const path = require("path"); const crypto = require("crypto"); const { createClient } = require("@supabase/supabase-js"); const app = express(); const PORT = process.env.PORT || 3000; const SUPABASE_URL = process.env.SUPABASE_URL; const SUPABASE_SERVICE_KEY = process.env.SUPABASE_SERVICE_KEY; const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD; if (!SUPABASE_URL || !SUPABASE_SERVICE_KEY || !ADMIN_PASSWORD) { console.error("Missing required environment variables."); process.exit(1); } const supabase = createClient( SUPABASE_URL, SUPABASE_SERVICE_KEY, { auth: { autoRefreshToken: false, persistSession: false } } ); app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(express.static(path.join(__dirname, "public"))); const upload = multer({ storage: multer.memoryStorage(), limits: { fileSize: 100 * 1024 * 1024 }, fileFilter: (req, file, cb) => { const extension = path.extname(file.originalname).toLowerCase(); if ( extension !== ".pdf" && file.mimetype !== "application/pdf" ) { return cb(new Error("Only PDF files are allowed.")); } cb(null, true); } }); function checkAdmin(req, res, next) { const password = req.headers["x-admin-password"]; if (!password || password !== ADMIN_PASSWORD) { return res.status(401).json({ error: "Unauthorized" }); } next(); } function cleanFileName(name) { return name .replace(/[^a-zA-Z0-9._-]/g, "-") .replace(/-+/g, "-") .toLowerCase(); } /* GET BOOKS */ app.get("/api/books", async (req, res) => { try { const search = (req.query.search || "").trim(); let query = supabase .from("books") .select("*") .order("created_at", { ascending: false }); if (search) { query = query.or( `title.ilike.%${search}%,author.ilike.%${search}%,category.ilike.%${search}%` ); } const { data, error } = await query; if (error) { throw error; } res.json(data || []); } catch (error) { console.error(error); res.status(500).json({ error: "Unable to load books." }); } }); /* UPLOAD BOOK */ app.post( "/api/books", checkAdmin, upload.single("pdf"), async (req, res) => { try { if (!req.file) { return res.status(400).json({ error: "Please select a PDF file." }); } const title = (req.body.title || "").trim(); const author = (req.body.author || "").trim(); const description = (req.body.description || "").trim(); const category = (req.body.category || "General").trim(); if (!title || !author) { return res.status(400).json({ error: "Title and author are required." }); } const unique = crypto.randomBytes(8).toString("hex"); const filename = `${Date.now()}-${unique}-${cleanFileName(req.file.originalname)}`; const storagePath = `pdfs/${filename}`; /* Upload PDF to Supabase Storage */ const { error: uploadError } = await supabase.storage .from("books") .upload( storagePath, req.file.buffer, { contentType: "application/pdf", upsert: false } ); if (uploadError) { throw uploadError; } /* Get public PDF URL */ const { data: publicData } = supabase.storage .from("books") .getPublicUrl(storagePath); const pdfUrl = publicData.publicUrl; /* Save book information */ const { data, error } = await supabase .from("books") .insert({ title, author, description, category, pdf_path: storagePath, pdf_url: pdfUrl, downloads: 0 }) .select() .single(); if (error) { throw error; } res.json({ success: true, message: "Book uploaded successfully.", book: data }); } catch (error) { console.error(error); res.status(500).json({ error: error.message || "Book upload failed." }); } } ); /* DELETE BOOK */ app.delete( "/api/books/:id", checkAdmin, async (req, res) => { try { const id = req.params.id; const { data: book, error: findError } = await supabase .from("books") .select("*") .eq("id", id) .single(); if (findError) { throw findError; } /* Delete PDF from storage */ if (book.pdf_path) { await supabase.storage .from("books") .remove([ book.pdf_path ]); } /* Delete database record */ const { error: deleteError } = await supabase .from("books") .delete() .eq("id", id); if (deleteError) { throw deleteError; } res.json({ success: true }); } catch (error) { console.error(error); res.status(500).json({ error: "Unable to delete book." }); } } ); /* DOWNLOAD BOOK Increments download counter. */ app.get( "/api/books/:id/download", async (req, res) => { try { const id = req.params.id; const { data: book, error } = await supabase .from("books") .select("*") .eq("id", id) .single(); if (error || !book) { return res.status(404).send( "Book not found." ); } /* Increase download count */ await supabase .from("books") .update({ downloads: Number(book.downloads || 0) + 1 }) .eq("id", id); /* Redirect to PDF */ res.redirect(book.pdf_url); } catch (error) { console.error(error); res.status(500).send( "Download failed." ); } } ); /* HEALTH CHECK */ app.get("/api/health", (req, res) => { res.json({ status: "running", application: "ADFID Africa Digital Library" }); }); /* ERROR HANDLER */ app.use((error, req, res, next) => { console.error(error); res.status(400).json({ error: error.message || "Something went wrong." }); }); app.listen(PORT, () => { console.log(""); console.log( "==========================================" ); console.log( " ADFID Africa Digital Library" ); console.log( " PDF Library Server" ); console.log( ` Running: http://localhost:${PORT}` ); console.log( ` Admin: http://localhost:${PORT}/admin.html` ); console.log( "==========================================" ); }); ADFID Library Administration

ADFID AFRICA DIGITAL LIBRARY

Administrator Panel

Administrator Login