Just my blogroll - BlogFlock2025-11-28T23:51:38.887ZBlogFlockJustin Barclay, Protesilaos Stavrou: News and Announcements, Arialdo Martini, BuzzMachine, Irreal, GamingOnLinux Latest Articles, The Emacs Cat, Karthinks, Jeff Kreeftmeijer, Xah Lee, Sacha Chua, Emacs@ Dyerdwelling, MacAdie Web Blog, Philip KALUDERCIC, Bowmansarrow, Take on Rules, manuel uberti, Wilfred Hughes::Blog, Bicycle For Your Mind, LWN.net, Rock Paper Shotgun Latest Articles Feed, McSweeney’sAfter six hours of tweaker gunslinging and trench warfare, I'm sold on Darktide's imminent Hive Scum update - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/after-six-hours-of-tweaker-gunslinging-and-trench-warfare-im-sold-on-darktides-imminent-hive-scum-update2025-11-28T18:00:04.000Z<img src="https://assetsio.gnwcdn.com/Darktide-Hive-Scum-preview.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>I was precisely <em>whelmed</em> when Fatshark revealed the mohawked, chem-huffing <a href="https://www.rockpapershotgun.com/darktides-next-new-class-is-a-dual-wielding-miscreant-who-thinks-the-drugs-do-work-they-just-make-heretics-worse">Hive Scum</a> as <a href="https://www.rockpapershotgun.com/games/warhammer-40000-darktide">Warhammer 40,000: Darktide</a>’s next class; most of the existing player characters being unwashed crims as it is. Turns out, however, they make good company when it counts. Having played about six hours of Hive Scum, ahead of launch on December 2nd, I’m convinced the class offers something new – and even those who don’t drop the requisite $12 on it will still, on the same day, get a rollicking new mission type that delves into properly muddy 40K ground warfare.</p>
<p><a href="https://www.rockpapershotgun.com/after-six-hours-of-tweaker-gunslinging-and-trench-warfare-im-sold-on-darktides-imminent-hive-scum-update">Read more</a></p>With Black Friday discounts, the top-spec Lenovo Legion Go S is faster than the equivalent Steam Deck OLED and almost as cheap - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/with-black-friday-discounts-the-top-spec-lenovo-legion-go-s-is-faster-than-the-equivalent-steam-deck-oled-and-almost-as-cheap2025-11-28T17:20:08.000Z<img src="https://assetsio.gnwcdn.com/Lenovo-Legion-Go-S-review.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>I never bought a <a href="https://www.rockpapershotgun.com/lenovo-legion-go-s-steamos-review">Lenovo Legion Go S</a>, or even slotted it into our <a href="https://www.rockpapershotgun.com/best-handheld-pcs">best handheld PCs</a> list, though it’s funny how much a fat <a href="https://www.rockpapershotgun.com/topics/black-friday">Black Friday</a> price cut can massage the desirability gland. And it helps that these savings cover not just the budget Ryzen Z2 Go model I originally reviewed, but the top-of-the-line Z1 Extreme version with an upgraded 32GB of RAM – and the same SteamOS, instead of fiddly Windows. That <a href="https://www.rockpapershotgun.com/predicting-steam-machine-prices-would-be-a-lot-easier-if-ram-costs-hadnt-gone-horribly-wrong">extra memory’s probably worth about four billion quid</a> by itself, though while it lasts, the primo Legion Go S is going for £599 in the UK (a £100 saving) and $650 in the US (a $250 saving).</p> <p><a href="https://www.rockpapershotgun.com/with-black-friday-discounts-the-top-spec-lenovo-legion-go-s-is-faster-than-the-equivalent-steam-deck-oled-and-almost-as-cheap">Read more</a></p>Command a massive walking gun in Iron Nest: Heavy Turret Simulator - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/command-a-massive-walking-gun-in-iron-nest-heavy-turret-simulator2025-11-28T17:15:41.000Z<img src="https://assetsio.gnwcdn.com/ironnest.png?width=690&quality=85&format=jpg&auto=webp" /> <p>
Of steel is my spirit, of thunder my bones. I am the hawk's justice, the quadrapedal crucible of oil and atrocity in which the future is forged. BEHOLD, ye <a href="https://www.rockpapershotgun.com/the-best-strategy-games-on-pc">strategy</a> simulation enthusiasts. Behold my unabashed phallic symbolism menacing the gates of heaven, while my hissing hydraulics uncipher the coordinates of my prey.</p>
<p>Many are my supplicants, strangers from near and far who seek to beguile me and aim my blessed ordnance, but mine is the judgement, and mine the tactile gratifications of levers and gears and dials. You were getting bored of turrets in war games? Fools! You have never experienced one from the inside. Come, surrender yourself to the dieselpunk folds and surprisingly jaunty background music of my ironclad majesty. (Here's a trailer.)
</p> <p><a href="https://www.rockpapershotgun.com/command-a-massive-walking-gun-in-iron-nest-heavy-turret-simulator">Read more</a></p>Hytale arrives in Early Access in January 2026 after being revived - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2025/11/hytale-arrives-in-early-access-in-january-2026-after-being-revived/2025-11-28T16:52:47.000ZAfter being cancelled by Riot Games and revived as an indie game again, Hytale is now set for an Early Access launch in January 2026.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/1039878345id28104gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2025/11/hytale-arrives-in-early-access-in-january-2026-after-being-revived/">GamingOnLinux</a>.</p>Moonlighter 2: The Endless Vault has another patch for Steam Deck and to improve performance for all - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2025/11/moonlighter-2-the-endless-vault-has-another-patch-for-steam-deck-and-to-improve-performance-for-all/2025-11-28T16:32:59.000ZMoonlighter 2: The Endless Vault from Digital Sun and 11 bit studios should run a whole lot smoother for everyone now, and feel better on Valve's Steam Deck.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/1390577211id28103gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2025/11/moonlighter-2-the-endless-vault-has-another-patch-for-steam-deck-and-to-improve-performance-for-all/">GamingOnLinux</a>.</p>Hytale's early access release date set in stone for January 2026, but its devs admit "the first impression will be rough" - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/hytales-early-access-release-date-set-in-stone-for-january-2026-but-its-devs-admit-the-first-impression-will-be-rough2025-11-28T16:26:25.000Z<img src="https://assetsio.gnwcdn.com/hytale-early-access-release-date-01.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>Still fresh off of being <a href="https://www.rockpapershotgun.com/hytale-studio-founder-says-hell-reach-out-to-riot-in-an-effort-to-buy-back-and-revive-the-game">bought from Riot</a> and revived by a team lead by Hypixel co-founder Simon Collins-Laflamme, <a href="https://www.rockpapershotgun.com/games/hytale">Hytale</a> now has an early access release date. The <a href="https://www.rockpapershotgun.com/games/minecraft">Minecraft</a>y sandbox emerges from the cave it's spent years exploring early next year, with pre-orders kicking off next month.</p>
<p><a href="https://www.rockpapershotgun.com/hytales-early-access-release-date-set-in-stone-for-january-2026-but-its-devs-admit-the-first-impression-will-be-rough">Read more</a></p>Seduce serial killers on the dark web in dating sim Killer Chat, which is free on Steam - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/seduce-serial-killers-on-the-dark-web-in-dating-sim-killer-chat-which-is-free-on-steam2025-11-28T16:01:17.000Z<img src="https://assetsio.gnwcdn.com/killerchat.png?width=690&quality=85&format=jpg&auto=webp" /> <p>
If you've been struggling lately with the thought that everybody you interact with online is a closet serial killer, why not fire up Killer Chat, which will remove all uncertainty from your brain and flood it with delicious, sexy fear. Hitherto available on <a href="https://rosesrot.itch.io/killer-chat">Itch.io</a>, and just released on <a href="https://store.steampowered.com/app/3476730/Killer_Chat__Original_Edition/">Steam</a>, it casts you as a reporter researching a book on serial killers.
</p> <p><a href="https://www.rockpapershotgun.com/seduce-serial-killers-on-the-dark-web-in-dating-sim-killer-chat-which-is-free-on-steam">Read more</a></p>The PS5 DualSense controller is a surprisingly good PC pad that’s dropped to £43/$55 in the Black Friday sales - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/the-ps5-dualsense-controller-is-a-surprisingly-good-pc-pad-thats-dropped-to-4355-in-the-black-friday-sales2025-11-28T15:55:31.000Z<img src="https://assetsio.gnwcdn.com/ps5%20controller.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>Convention tells us that to be a PC gamepad, the gamepad in question must follow the layout – or, at least, match the button glyphs – of the Xbox controller’s ABXY design. Even the new <a href="https://www.rockpapershotgun.com/valves-new-steam-controller-aims-to-entice-a-broader-field-of-pc-players-which-i-fear-already-includes-me">Steam Controller</a> is doing it. To convention, though, I say: appreciate you’re an important component of usability design but also <em>get lost</em>. One of the best PC controllers right now is the PS5-pattern <a href="https://www.rockpapershotgun.com/how-to-use-a-ps5-dualsense-controller-on-pc">DualSense</a>, which today's Black Friday deals have brought down to its lowest price in months.</p>
<p><a href="https://www.rockpapershotgun.com/the-ps5-dualsense-controller-is-a-surprisingly-good-pc-pad-thats-dropped-to-4355-in-the-black-friday-sales">Read more</a></p>Fallout season 2 still sounds like it won't commit to a New Vegas ending, but for the love of all that's Housely, I hope it will - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/fallout-season-2-still-sounds-like-it-wont-commit-to-a-new-vegas-ending-but-for-the-love-of-all-thats-housely-i-hope-it-will2025-11-28T15:40:29.000Z<img src="https://assetsio.gnwcdn.com/fallout-tv-show-season-two-sounds-like-no-canon-new-vegas-ending-01.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>Prime Video's <a href="https://www.rockpapershotgun.com/tv-shows/fallout">Fallout TV series</a> has been followed around by a <a href="https://www.rockpapershotgun.com/no-the-fallout-tv-show-hasnt-written-fallout-new-vegas-out-of-history-says-bethesda-studio-design-director">buzzing swarm of canon chatter hornets</a> since the moment its first series emerged from the vault. Such a thing's natural and healthy - people care enough about the games to have thoughts about how this adaptation portrays the world in which they take place. It goes double when when you head to locations which have played host to entries especially beloved for how much say they let the player have in how their stories play out.</p>
<p>Enter <a href="https://www.rockpapershotgun.com/macvulpes-inculkin-stares-at-a-guy-spitting-blood-as-fallout-season-2s-latest-trailer-sets-up-many-family-searches">Fallout season two</a>, debuting next month and set in (clears throat) <a href="https://www.rockpapershotgun.com/fallout-season-2-radiates-new-vegas-with-a-trailer-heavy-on-stupid-sexy-house-and-a-december-debut-date">NEW VEGAS</a>. Will it set one of <a href="https://www.rockpapershotgun.com/games/fallout-new-vegas">Fallout: NEW VEGAS</a>'s endings in stone as the canon option?</p>
<p><a href="https://www.rockpapershotgun.com/fallout-season-2-still-sounds-like-it-wont-commit-to-a-new-vegas-ending-but-for-the-love-of-all-thats-housely-i-hope-it-will">Read more</a></p>Why are there so many bloody roguelikes or roguelites, and what really makes a game roguish? - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/why-are-there-so-many-bloody-roguelikes-or-roguelites-and-what-really-makes-a-game-roguish2025-11-28T15:13:31.000Z<img src="https://assetsio.gnwcdn.com/eurogamer-11o3td.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>
Some days, I think I'd rather gouge my eyes out than read another email about a new roguelike or roguelite. This confuses me, because many of favourite games are roguelikes or roguelites, including <a href="https://www.rockpapershotgun.com/games/dead-cells">Dead Cells</a>, <a href="https://www.rockpapershotgun.com/games/balatro">Balatro</a>, <a href="https://www.rockpapershotgun.com/games/ftl-faster-than-light">FTL: Faster Than Light</a>, and the recent <a href="https://www.rockpapershotgun.com/games/morsels">Morsels</a>, a reeking procedural dumpsite that speaks to the overproduction of Rogue/rogue derivatives at large.</p>
<p>Roguish games are <em>everywhere</em> right now. According to <a href="https://steamdb.info/stats/releases/?tagid=1716">SteamDB</a>, 1602 games tagged "roguelike" were published in 2024 out of 18567 total, versus 312 out of 9655 in 2020. Stir in roguelites and the countless games that advertise themselves as having "roguelike mechanics", and I sincerely worry that you're describing the majority of PC releases from the past couple of years.
</p>
<p><a href="https://www.rockpapershotgun.com/why-are-there-so-many-bloody-roguelikes-or-roguelites-and-what-really-makes-a-game-roguish">Read more</a></p>MangoHud performance overlay for Linux v0.8.2 released - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2025/11/mangohud-performance-overlay-for-linux-v0-8-2-released/2025-11-28T15:10:02.000ZThe excellent and incredibly useful Linux performance overlay MangoHud has released version 0.8.2 after being in testing for a few weeks with new features.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/1904413551id28102gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2025/11/mangohud-performance-overlay-for-linux-v0-8-2-released/">GamingOnLinux</a>.</p>Some Nice Examples Of Org Babel Use - Irrealhttps://irreal.org/blog/?p=134382025-11-28T15:05:21.000Z<p>
Donald Hunter over at <a href="https://donaldh.wtf">donaldh.wtf</a> has an interesting post about <a href="https://donaldh.wtf/2025/11/an-ode-to-org-babel/">Org Babel’s many powers and uses</a>. Hunter thinks of it as a “polyglot Jupyter Notebook ” and uses it extensively for both professional and personal projects. His post consists of several examples of how he uses it.
</p>
<p>
One trick he shows is using the <code>dir</code> command to specify a remote machine. That allows him to capture output from the remote host.
</p>
<p>
Another trick he uses is isolating the boilerplate for several similar source blocks into a separate block and including it in the blocks that need it with the noweb syntax. See his post for a fully worked example.
</p>
<p>
Finally he demonstrates the real power of Babel by using two different languages. The way that works is that you use a convenient language in one block to produce an intermediate result and finish the computation in a second block with another language that calls the first block to get the intermediate result.
</p>
<p>
In his example, he uses an SQL block to read data from an SQL database and processes that data in the second block using <a href="https://gnuplot.sourceforge.net/">Gnuplot</a>. Of course, you can chain more than two blocks together or have more than one block feeding the final block.
</p>
<p>
Org Babel really is a powerful system and is part of what sets Org apart from Markdown and other markup languages. You might also want to take a look at <a href="https://irreal.org/blog/?p=8452">Mike Hamrick’s video on using Org and Babel for writing</a>.</p>
Convert copied jira kanban to org (jira-to-org) - Emacs@ Dyerdwellinghttps://emacs.dyerdwelling.family/emacs/20251128145610-emacs--jira-to-org/2025-11-28T14:56:00.000Z<p>I have been fiddling around with some very rudimentary Jira integration to org, basically something very simple, just a regular copy from the kanban and then convert into org headlines!</p>
<p>This package is designed for simpler workflows where you copy data from Jira rather than maintaining API integration.</p>
<figure><img src="https://emacs.dyerdwelling.family/ox-hugo/20251128145610-emacs--jira-to-org.jpg" width="100%">
</figure>
<p>Here is a link to the package:</p>
<p><a href="https://github.com/captainflasmr/jira-to-org">https://github.com/captainflasmr/jira-to-org</a></p>
<h2 id="overview">Overview</h2>
<p><code>jira-to-org</code> is an Emacs package that converts Jira sprint board data into org-mode task entries. It parses text copied directly from Jira sprint boards and transforms it into properly formatted org-mode headings with TODO keywords, priorities, tags, and metadata.</p>
<h2 id="features">Features</h2>
<ul>
<li>Parse Jira sprint data from buffers, regions, or clipboard</li>
<li>Convert Jira statuses to org-mode TODO keywords</li>
<li>Map Jira priorities to org-mode priorities (A/B/C)</li>
<li>Generate tags from assignees, sprint identifiers, and years</li>
<li>Update existing org entries based on fresh Jira data</li>
<li>Customizable mappings for assignees, priorities, and statuses</li>
<li>Configurable heading levels and default values</li>
</ul>
<h2 id="installation">Installation</h2>
<h3 id="manual-installation">Manual Installation</h3>
<ol>
<li>Download <code>jira-to-org.el</code> to your Emacs configuration directory</li>
<li>Add to your <code>init.el</code>:</li>
</ol>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(add-to-list <span style="color:#e6db74">'load-path</span> <span style="color:#e6db74">"/path/to/jira-to-org/"</span>)
</span></span><span style="display:flex;"><span>(require <span style="color:#e6db74">'jira-to-org</span>)
</span></span></code></pre></div><h3 id="using-use-package">Using <code>use-package</code></h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package jira-to-org
</span></span><span style="display:flex;"><span> :load-path <span style="color:#e6db74">"/path/to/jira-to-org/"</span>
</span></span><span style="display:flex;"><span> :custom
</span></span><span style="display:flex;"><span> (jira-to-org-default-sprint <span style="color:#e6db74">"s7"</span>)
</span></span><span style="display:flex;"><span> (jira-to-org-default-year <span style="color:#e6db74">"2025"</span>)
</span></span><span style="display:flex;"><span> (jira-to-org-heading-level <span style="color:#ae81ff">4</span>))
</span></span></code></pre></div><h2 id="usage">Usage</h2>
<h3 id="basic-workflow">Basic Workflow</h3>
<ol>
<li>Open your Jira sprint board in a web browser</li>
<li>Select and copy the sprint data (the entire board or specific columns)</li>
<li>In Emacs, use one of the parsing commands</li>
</ol>
<h3 id="commands">Commands</h3>
<h4 id="jira-to-org-parse-buffer"><code>jira-to-org-parse-buffer</code></h4>
<p>Parse the entire current buffer as Jira data. The result is copied to the kill ring.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>M-x jira-to-org-parse-buffer
</span></span></code></pre></div><p>With prefix argument (<code>C-u</code>), prompts for a sprint tag:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>C-u M-x jira-to-org-parse-buffer
</span></span><span style="display:flex;"><span>Sprint tag <span style="color:#f92672">(</span>e.g., s7<span style="color:#f92672">)</span>: s8
</span></span></code></pre></div><h4 id="jira-to-org-parse-region"><code>jira-to-org-parse-region</code></h4>
<p>Parse Jira data in the selected region. The result is copied to the kill ring.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>1. Select region containing Jira data
</span></span><span style="display:flex;"><span>2. M-x jira-to-org-parse-region
</span></span></code></pre></div><h4 id="jira-to-org-parse-and-insert"><code>jira-to-org-parse-and-insert</code></h4>
<p>Parse Jira data from the clipboard and insert the org headings at point.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>1. Copy Jira data to clipboard
</span></span><span style="display:flex;"><span>2. Position cursor where you want entries inserted
</span></span><span style="display:flex;"><span>3. M-x jira-to-org-parse-and-insert
</span></span></code></pre></div><h4 id="jira-to-org-update-from-jira"><code>jira-to-org-update-from-jira</code></h4>
<p>Update existing org entries based on fresh Jira data. This command:</p>
<ul>
<li>Updates TODO statuses for entries that already exist in your buffer</li>
<li>Reports how many entries were updated</li>
<li>Copies new items (not found in buffer) to the kill ring</li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>M-x jira-to-org-update-from-jira
</span></span></code></pre></div><h3 id="example-input-format">Example Input Format</h3>
<p>The package expects text copied from Jira sprint boards in this format:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>To Do
</span></span><span style="display:flex;"><span>MM-78
</span></span><span style="display:flex;"><span>Implement IG connection management APIs
</span></span><span style="display:flex;"><span>Assignee: James Dyer
</span></span><span style="display:flex;"><span>Priority: Medium
</span></span><span style="display:flex;"><span>Issue Type: Story
</span></span><span style="display:flex;"><span>2
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>In Progress
</span></span><span style="display:flex;"><span>MM-79
</span></span><span style="display:flex;"><span>Create gRPC service definition
</span></span><span style="display:flex;"><span>Assignee: Freddy
</span></span><span style="display:flex;"><span>Priority: High
</span></span><span style="display:flex;"><span>3
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Done
</span></span><span style="display:flex;"><span>MM-75
</span></span><span style="display:flex;"><span>Setup project structure
</span></span><span style="display:flex;"><span>Assignee: N Cropper
</span></span><span style="display:flex;"><span>Priority: Low
</span></span><span style="display:flex;"><span>Issue Type: Task
</span></span><span style="display:flex;"><span>1
</span></span></code></pre></div><h3 id="example-output">Example Output</h3>
<p>The above input would be converted to:</p>
<p>#+BEGIN_EXAMPLE</p>
<!--list-separator-->
<ul>
<li><span class="org-todo todo TODO">TODO</span> MM-78 Implement IG connection management APIs</li>
</ul>
<!--list-separator-->
<ul>
<li><span class="org-todo todo DOING">DOING</span> MM-79 Create gRPC service definition</li>
</ul>
<!--list-separator-->
<ul>
<li>
<p><span class="org-todo done DONE">DONE</span> MM-75 Setup project structure</p>
<p>#+END_EXAMPLE</p>
</li>
</ul>
<h2 id="configuration">Configuration</h2>
<h3 id="customization-variables">Customization Variables</h3>
<h4 id="jira-to-org-default-sprint"><code>jira-to-org-default-sprint</code></h4>
<p>Default sprint tag to add to all entries (e.g., <code>"s7"</code>). If <code>nil</code>, no sprint tag is added.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setq jira-to-org-default-sprint <span style="color:#e6db74">"s7"</span>)
</span></span></code></pre></div><h4 id="jira-to-org-default-year"><code>jira-to-org-default-year</code></h4>
<p>Default year to add as a tag to all entries.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setq jira-to-org-default-year <span style="color:#e6db74">"2025"</span>)
</span></span></code></pre></div><h4 id="jira-to-org-assignee-map"><code>jira-to-org-assignee-map</code></h4>
<p>Alist mapping full names (as they appear in Jira) to short tag names.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setq jira-to-org-assignee-map
</span></span><span style="display:flex;"><span> <span style="color:#f92672">'</span>((<span style="color:#e6db74">"James Dyer"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"jdyer"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Freddy"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"freddy"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"N Cropper"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"ncropper"</span>)))
</span></span></code></pre></div><h4 id="jira-to-org-priority-map"><code>jira-to-org-priority-map</code></h4>
<p>Alist mapping Jira priority levels to org-mode priority letters.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setq jira-to-org-priority-map
</span></span><span style="display:flex;"><span> <span style="color:#f92672">'</span>((<span style="color:#e6db74">"Highest"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"A"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"High"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"A"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Medium"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"B"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Low"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"C"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Lowest"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"C"</span>)))
</span></span></code></pre></div><h4 id="jira-to-org-status-map"><code>jira-to-org-status-map</code></h4>
<p>Alist mapping Jira status names to org-mode TODO keywords.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setq jira-to-org-status-map
</span></span><span style="display:flex;"><span> <span style="color:#f92672">'</span>((<span style="color:#e6db74">"To Do"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"TODO"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"In Progress"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"DOING"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Done"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"DONE"</span>)))
</span></span></code></pre></div><h4 id="jira-to-org-heading-level"><code>jira-to-org-heading-level</code></h4>
<p>Number of asterisks for generated org headings (default: 4).</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setq jira-to-org-heading-level <span style="color:#ae81ff">3</span>) <span style="color:#75715e">; Use *** instead of ****</span>
</span></span></code></pre></div><h3 id="complete-configuration-example">Complete Configuration Example</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package jira-to-org
</span></span><span style="display:flex;"><span> :custom
</span></span><span style="display:flex;"><span> (jira-to-org-default-sprint <span style="color:#e6db74">"s8"</span>)
</span></span><span style="display:flex;"><span> (jira-to-org-default-year <span style="color:#e6db74">"2025"</span>)
</span></span><span style="display:flex;"><span> (jira-to-org-heading-level <span style="color:#ae81ff">4</span>)
</span></span><span style="display:flex;"><span> (jira-to-org-assignee-map
</span></span><span style="display:flex;"><span> <span style="color:#f92672">'</span>((<span style="color:#e6db74">"James Dyer"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"jdyer"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Freddy Johnson"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"freddy"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Sarah Chen"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"schen"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Mike Wilson"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"mwilson"</span>)))
</span></span><span style="display:flex;"><span> (jira-to-org-priority-map
</span></span><span style="display:flex;"><span> <span style="color:#f92672">'</span>((<span style="color:#e6db74">"Highest"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"A"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"High"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"A"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Medium"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"B"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Low"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"C"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Lowest"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"C"</span>)))
</span></span><span style="display:flex;"><span> (jira-to-org-status-map
</span></span><span style="display:flex;"><span> <span style="color:#f92672">'</span>((<span style="color:#e6db74">"To Do"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"TODO"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"In Progress"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"DOING"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"In Review"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"REVIEW"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Done"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"DONE"</span>)))
</span></span><span style="display:flex;"><span> :bind
</span></span><span style="display:flex;"><span> (:map org-mode-map
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"C-c j p"</span> <span style="color:#f92672">.</span> jira-to-org-parse-and-insert)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"C-c j u"</span> <span style="color:#f92672">.</span> jira-to-org-update-from-jira)))
</span></span></code></pre></div><h2 id="workflow-integration">Workflow Integration</h2>
<h3 id="sprint-planning-workflow">Sprint Planning Workflow</h3>
<ol>
<li>Open your sprint planning org file</li>
<li>Navigate to the sprint section</li>
<li>Copy the Jira sprint board data</li>
<li>Run <code>M-x jira-to-org-parse-and-insert</code></li>
<li>Adjust any entries as needed</li>
</ol>
<h3 id="daily-standup-updates">Daily Standup Updates</h3>
<ol>
<li>Copy current sprint board state from Jira</li>
<li>Run <code>M-x jira-to-org-update-from-jira</code></li>
<li>Review updated TODO states</li>
<li>Any new items are copied to kill ring for manual placement</li>
</ol>
<h3 id="custom-key-bindings">Custom Key Bindings</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span><span style="color:#75715e">;; Add to your org-mode configuration</span>
</span></span><span style="display:flex;"><span>(with-eval-after-load <span style="color:#e6db74">'org</span>
</span></span><span style="display:flex;"><span> (<span style="color:#a6e22e">define-key</span> org-mode-map (kbd <span style="color:#e6db74">"C-c j p"</span>) <span style="color:#a6e22e">#'</span>jira-to-org-parse-and-insert)
</span></span><span style="display:flex;"><span> (<span style="color:#a6e22e">define-key</span> org-mode-map (kbd <span style="color:#e6db74">"C-c j r"</span>) <span style="color:#a6e22e">#'</span>jira-to-org-parse-region)
</span></span><span style="display:flex;"><span> (<span style="color:#a6e22e">define-key</span> org-mode-map (kbd <span style="color:#e6db74">"C-c j b"</span>) <span style="color:#a6e22e">#'</span>jira-to-org-parse-buffer)
</span></span><span style="display:flex;"><span> (<span style="color:#a6e22e">define-key</span> org-mode-map (kbd <span style="color:#e6db74">"C-c j u"</span>) <span style="color:#a6e22e">#'</span>jira-to-org-update-from-jira))
</span></span></code></pre></div><h2 id="parsed-fields">Parsed Fields</h2>
<p>The package extracts and uses the following fields from Jira data:</p>
<table>
<thead>
<tr>
<th>Jira Field</th>
<th>Usage</th>
<th>Example</th>
</tr>
</thead>
<tbody>
<tr>
<td>Issue Key</td>
<td>Included in heading</td>
<td>MM-78</td>
</tr>
<tr>
<td>Title</td>
<td>Included in heading</td>
<td>Fix bug in API</td>
</tr>
<tr>
<td>Status</td>
<td>Converted to TODO keyword</td>
<td>In Progress</td>
</tr>
<tr>
<td>Assignee</td>
<td>Converted to tag</td>
<td>James Dyer</td>
</tr>
<tr>
<td>Priority</td>
<td>Converted to org priority</td>
<td>Medium</td>
</tr>
<tr>
<td>Story Points</td>
<td>Extracted (not currently used in output)</td>
<td>3</td>
</tr>
</tbody>
</table>
<h2 id="customizing-for-your-organization">Customizing for Your Organization</h2>
<h3 id="adjusting-issue-key-pattern">Adjusting Issue Key Pattern</h3>
<p>If your Jira instance uses a different project key pattern, modify the regex in <code>jira-to-org--parse-buffer-to-items</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span><span style="color:#75715e">;; Current pattern matches MM-123</span>
</span></span><span style="display:flex;"><span>((<span style="color:#a6e22e">string-match</span> <span style="color:#e6db74">"^\\(MM-[0-9]+\\)$"</span> line)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;; Example: Match PROJECT-123</span>
</span></span><span style="display:flex;"><span>((<span style="color:#a6e22e">string-match</span> <span style="color:#e6db74">"^\\(PROJECT-[0-9]+\\)$"</span> line)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">;; Example: Match multiple projects (PROJ1-123 or PROJ2-123)</span>
</span></span><span style="display:flex;"><span>((<span style="color:#a6e22e">string-match</span> <span style="color:#e6db74">"^\\(\\(?:PROJ1\\|PROJ2\\)-[0-9]+\\)$"</span> line)
</span></span></code></pre></div><h3 id="adding-custom-status-mappings">Adding Custom Status Mappings</h3>
<p>If your Jira workflow has additional statuses:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setq jira-to-org-status-map
</span></span><span style="display:flex;"><span> <span style="color:#f92672">'</span>((<span style="color:#e6db74">"To Do"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"TODO"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"In Progress"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"DOING"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Code Review"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"REVIEW"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"QA Testing"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"TESTING"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Blocked"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"BLOCKED"</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#e6db74">"Done"</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">"DONE"</span>)))
</span></span></code></pre></div><p>Make sure your org-mode TODO keywords match:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(setq org-todo-keywords
</span></span><span style="display:flex;"><span> <span style="color:#f92672">'</span>((sequence <span style="color:#e6db74">"TODO"</span> <span style="color:#e6db74">"DOING"</span> <span style="color:#e6db74">"REVIEW"</span> <span style="color:#e6db74">"TESTING"</span> <span style="color:#e6db74">"BLOCKED"</span> <span style="color:#e6db74">"|"</span> <span style="color:#e6db74">"DONE"</span>)))
</span></span></code></pre></div><h2 id="troubleshooting">Troubleshooting</h2>
<h3 id="no-items-parsed">No Items Parsed</h3>
<ul>
<li>Verify the Jira data format matches the expected structure</li>
<li>Check that issue keys match the pattern (e.g., <code>MM-123</code>)</li>
<li>Ensure status headers (To Do, In Progress, Done) are present</li>
</ul>
<h3 id="wrong-assignee-tags">Wrong Assignee Tags</h3>
<ul>
<li>Check <code>jira-to-org-assignee-map</code> contains mappings for all team members</li>
<li>Verify exact spelling of names in Jira matches the mapping</li>
</ul>
<h3 id="incorrect-todo-keywords">Incorrect TODO Keywords</h3>
<ul>
<li>Verify <code>jira-to-org-status-map</code> maps all statuses used in your Jira</li>
<li>Check that target TODO keywords exist in <code>org-todo-keywords</code></li>
</ul>
<h3 id="entries-not-found-during-update">Entries Not Found During Update</h3>
<ul>
<li>Ensure issue keys in org file exactly match Jira format</li>
<li>Verify the heading contains the issue key followed by a space</li>
</ul>
<h2 id="api-functions">API Functions</h2>
<p>For programmatic use:</p>
<h3 id="jira-to-org-parse-string"><code>jira-to-org-parse-string</code></h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(jira-to-org-parse-string STRING <span style="color:#66d9ef">&optional</span> SPRINT)
</span></span></code></pre></div><p>Parse STRING containing Jira data and return org-mode headings as a string.</p>
<h3 id="jira-to-org-parse-buffer-to-items"><code>jira-to-org--parse-buffer-to-items</code></h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(jira-to-org--parse-buffer-to-items BUFFER-OR-STRING)
</span></span></code></pre></div><p>Parse Jira data into a list of <code>jira-to-org-item</code> structs for further processing.</p>
<h3 id="jira-to-org-item-to-org-heading"><code>jira-to-org--item-to-org-heading</code></h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(jira-to-org--item-to-org-heading ITEM <span style="color:#66d9ef">&optional</span> SPRINT)
</span></span></code></pre></div><p>Convert a <code>jira-to-org-item</code> struct to an org-mode heading string.</p>
<h2 id="contributing">Contributing</h2>
<p>Contributions are welcome! Please submit issues or pull requests on the project repository.</p>
<h3 id="development-setup">Development Setup</h3>
<ol>
<li>Clone the repository</li>
<li>Load <code>jira-to-org.el</code> in Emacs</li>
<li>Make changes and test with sample Jira data</li>
<li>Run byte-compilation: <code>M-x byte-compile-file</code></li>
</ol>
<h3 id="testing">Testing</h3>
<p>Create a test file with sample Jira data and verify parsing:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(with-temp-buffer
</span></span><span style="display:flex;"><span> (<span style="color:#a6e22e">insert</span> <span style="color:#e6db74">"To Do\nMM-1\nTest Issue\nAssignee: Test User\nPriority: High\n"</span>)
</span></span><span style="display:flex;"><span> (jira-to-org-parse-buffer))
</span></span></code></pre></div><h2 id="license">License</h2>
<p>This package is provided as-is for personal and professional use.</p>
<h2 id="changelog">Changelog</h2>
<h3 id="version-1-dot-0">Version 1.0</h3>
<ul>
<li>Initial release</li>
<li>Basic parsing of Jira sprint data</li>
<li>Configurable mappings for assignees, priorities, and statuses</li>
<li>Buffer, region, and clipboard parsing commands</li>
<li>Update existing entries from fresh Jira data</li>
</ul>
<h2 id="related-packages">Related Packages</h2>
<ul>
<li><a href="https://github.com/ahungry/org-jira">org-jira</a> - Full bidirectional sync with Jira (requires API access)</li>
<li><a href="https://github.com/nyyManni/jiralib2">jiralib2</a> - Jira REST API library for Emacs</li>
<li><a href="https://github.com/baohaojun/org-jira">org-jira (baohaojun)</a> - Alternative Jira integration</li>
</ul>Security updates for Friday - LWN.nethttps://lwn.net/Articles/1048596/2025-11-28T14:55:04.000ZSecurity updates have been issued by <b>Debian</b> (krita and tryton-server), <b>Oracle</b> (bind9.18, ipa, kernel, libssh, redis, redis:7, sqlite, sssd, and vim), <b>Slackware</b> (cups), <b>SUSE</b> (containerd, cups, curl, dovecot24, git-bug, gitea-tea, glib2, grub2, himmelblau, java-25-openjdk, kernel, libmicrohttpd, libvirt, pnpm, powerpc-utils, python311, python313, redis, rnp, runc, sssd, tomcat11, unbound, and xwayland), and <b>Ubuntu</b> (cups, libxml2, openvpn, and webkit2gtk).Ugreen’s 9-in-1 Steam Deck stand is perfect for resting weary handhelds, and it’s going cheap on Black Friday - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/ugreens-9-in-1-steam-deck-stand-is-perfect-for-resting-weary-handhelds-and-its-going-cheap-on-black-friday2025-11-28T14:43:40.000Z<img src="https://assetsio.gnwcdn.com/UGreen-Steam-Deck-Dock-9-in-1.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>I, erm, <a href="https://www.rockpapershotgun.com/topics/steam-deck">write about the Steam Deck a lot</a>, and keen eyed readers may have spotted a recurring theme among the <a href="https://www.rockpapershotgun.com/hollow-knight-silksong-steam-deck">accompanying</a> <a href="https://www.rockpapershotgun.com/best-steam-deck-power-banks">photographs</a>: a lurking Ugreen logo. That’s the <a href="https://www.rockpapershotgun.com/best-steam-deck-accessories#best%20steam%20deck%20dock">Ugreen 9-in-1 Steam Deck Dock</a>, aND what it lacks in sexy naming, it makes up for by being just the nicest little stand/port extender combo that a handheld PC could ask for. It’s also a mere £36/$40 on Black Friday, up to a third off its usual price.</p>
<p><a href="https://www.rockpapershotgun.com/ugreens-9-in-1-steam-deck-stand-is-perfect-for-resting-weary-handhelds-and-its-going-cheap-on-black-friday">Read more</a></p>The best-ever lightweight gaming mouse, in my opinion, is £46/$50 off for Black Friday - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/the-best-ever-lightweight-gaming-mouse-in-my-opinion-is-4650-off-for-black-friday2025-11-28T13:59:28.000Z<img src="https://assetsio.gnwcdn.com/Logitech-G-Pro-X-Superlight-2.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>Rejoice, those with nimble wrists or heightened gravity anomalies localised on top of their desks. Logitech’s G Pro X Superlight 2 gaming mouse, which for my money is the finest ultra-lightweight mouse in existence, is getting cut down in the <a href="https://www.rockpapershotgun.com/topics/black-friday">Black Friday</a> sales – so for <em>your</em> money, it’s down from an admittedly ambitious £149/$180 to a far more reasonable £104/$130.</p>
<p><a href="https://www.rockpapershotgun.com/the-best-ever-lightweight-gaming-mouse-in-my-opinion-is-4650-off-for-black-friday">Read more</a></p>Recently unearthed Fallout: New Vegas builds could be "incredibly useful" for modders, preservationists claim - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/recently-unearthed-fallout-new-vegas-builds-could-be-incredibly-useful-for-modders-preservationists-claim2025-11-28T12:47:12.000Z<img src="https://assetsio.gnwcdn.com/fallout-new-vegas-beta-allegedly-useful-modders-01.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>Pre-release builds of <a href="https://www.rockpapershotgun.com/games/fallout-new-vegas">Fallout: New Vegas</a> recently unearthed at a shop in Utah contain rare files which could be "incredibly useful" to expanding what modders can do with the RPG. Well, at least they doe in the estimation of the folks who claim to have found them, a group of preservationists whose current online presence only looks to have popped up last month.</p>
<p><a href="https://www.rockpapershotgun.com/recently-unearthed-fallout-new-vegas-builds-could-be-incredibly-useful-for-modders-preservationists-claim">Read more</a></p>Black Friday’s microSD sales cut prices on our top Steam Deck cards – and they’ll work on the Steam Machine too - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/black-fridays-microsd-sales-cut-prices-on-our-top-steam-deck-cards-and-theyll-work-on-the-steam-machine-too2025-11-28T12:15:21.000Z<img src="https://assetsio.gnwcdn.com/Steam-Deck-microSDs-1.png?width=690&quality=85&format=jpg&auto=webp" /> <p>I will begrudgingly accept that <a href="https://www.rockpapershotgun.com/topics/black-friday">Black Friday</a>, bleak as it is to anyone who didn’t grow up with framed spreadsheets above their beds, is at least a good opportunity to pick up dirt-cheap PC storage. Case in point, today’s sales include some nice, sharp slashings on some of the best <a href="https://www.rockpapershotgun.com/best-microsd-cards-for-steam-deck">Steam Deck microSD cards</a>.</p>
<p><a href="https://www.rockpapershotgun.com/black-fridays-microsd-sales-cut-prices-on-our-top-steam-deck-cards-and-theyll-work-on-the-steam-machine-too">Read more</a></p>Save on 2K games like XCOM, Risk of Rain Returns and Rollerdrome in a new Green Man Gaming bundle - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2025/11/save-on-2k-games-like-xcom-risk-of-rain-returns-and-rollerdrome-in-a-new-green-man-gaming-bundle/2025-11-28T11:32:19.000ZAnother interesting bundle of games here for you that you may want to pick up with some really nice stuff from Green Man Gaming.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/1270539204id28101gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2025/11/save-on-2k-games-like-xcom-risk-of-rain-returns-and-rollerdrome-in-a-new-green-man-gaming-bundle/">GamingOnLinux</a>.</p>Oh hey, it's Black Friday, so here are the best Black Friday best graphics cards deals - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/oh-hey-its-black-friday-so-here-are-the-best-black-friday-best-graphics-cards-deals2025-11-28T11:28:20.000Z<img src="https://assetsio.gnwcdn.com/Nvidia-GeForce-RTX-5070-Ti-review.jpg?width=690&quality=85&format=jpg&auto=webp" /> <p>I’m trying something new for this year’s <a href="https://www.rockpapershotgun.com/topics/black-friday">Black Friday</a> coverage: drastically overestimating how long it would take to put together a guide to its best <a href="https://www.rockpapershotgun.com/best-graphics-card">graphics card</a> deals. How is it past 11 already. Still, I do hope this helps any potential upgrader or from-scratch DIY builder out there – GPUs haven’t been 'cheap' in years, and while <a href="https://www.rockpapershotgun.com/predicting-steam-machine-prices-would-be-a-lot-easier-if-ram-costs-hadnt-gone-horribly-wrong">RAM is currently doing its best</a> to replace them as the most overpriced component type in PCdom, graphics cards are usually in drastic need of discounts. Just as, like, their default state of being.</p>
<p><a href="https://www.rockpapershotgun.com/oh-hey-its-black-friday-so-here-are-the-best-black-friday-best-graphics-cards-deals">Read more</a></p>