Acer Predator Atlas 8 Handheld with Intel Arc G3 gets UK pricing and launch month
The Acer Predator Atlas 8 Handheld now has a price and expected launch month, for the UK at least.
Read the full article on GamingOnLinux. â Read more
The new Dinolords trailer gives medieval strategy a Jurassic twist
Iâm super pumped for Dinolords, because it brings together some really interesting gameplay mechanics - the latest trailer shows some of it off.
Read the full article on GamingOnLinux. â Read more
Beetleball looks hilarious, like Rocket League with bugs that have crazy abilities
Beetleball looks like it could be another good one to have a blast online with friends, or just to have a general laugh with.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/beetleball-looks-hilarious-like-rocket-league-with-bugs-that-have-cra ⌠â Read more
Set in a dark steampunk universe, Veil of Ashes is an RTS with some monstrous tanks
Veil of Ashes looks a little bit like Iron Harvest blended with Company of Heroes and Broken Arrow all in one set in a dark steampunk universe.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/set-in-a-dark-steampunk-universe-veil-of-ashes-is ⌠â Read more
Rogue Eclipse is âStarfox x Armored Coreâ and arrives August 7
Inspired by the likes of Starfox and Armored Core, the space shooter Rogue Eclipse looks bright and full of action with it planned for launch on August 7th.
Read the full article on GamingOnLinux. â Read more
PUROMA is an incremental horror game about isolation and it looks great
An incremental horror seems like quite an unusual mashup but PUROMA looks really good.
Read the full article on GamingOnLinux. â Read more
Robot Rhapsody is a cyberpunk odyssey of techno-cults, rebels, & robotic bards
Robot Rhapsody looks like a good one if youâre into pixel-styled JRPGs, a cyberpunk odyssey of techno-cults, rebels, & robotic bards.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/robot-rhapsody-is-a-cyberpunk-odyssey-of-techno-cults-rebels-robotic-bar ⌠â Read more
Get some quality games in the 2K Megahits 2026 Humble Bundle
The 2K Megahits 2026 Humble Bundle is live now, and itâs a good deal if you donât already own the various games included in it.
Read the full article on GamingOnLinux. â Read more
Faugus Launcher 2.0 rolls out with a new UI and many other enhancements
The idea of Faugus Launcher is to provide a reasonably simple game manager for Linux, as an alternative to Lutris and Heroic.
Read the full article on GamingOnLinux. â Read more
Valve expect component prices to continue getting worse
If you were hoping prices anywhere to come down soon - Valve have some bad news for you, as itâs only going to continue getting worse.
Read the full article on GamingOnLinux. â Read more
Retro vehicle combat game FUMES adds co-op support for as many friends as you can handle
FUMES is a vehicle combat game made like some of the classics, and now it has full online co-op support for a whole lot of extra action.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/retro-vehicle-combat-game-fumes-adds-co-op-su ⌠â Read more
Arma: Cold War Assault Remastered is now out in full and open source
Arma: Cold War Assault Remastered has been released as a nice upgrade for the classic, and the code is open source too.
Read the full article on GamingOnLinux. â Read more
I donât get people strolling in nature with headphones on and constantly staring at their phones all the time. Why even go outside if you cover ears and eyes? Okay, youâre on the move and smell the country air, but still. Yesterday, one girl was wearing earphones and reading a real book while walking on a field path. Better than a phone, sure, but what the hell!?
@david@daiwei.me I first thought that this is a real lake, but itâs just a lake of craziness. :-D A town owned by a company (or so it reads to me), thatâs insane.
Let me send you some nice 17°C.
@prologic@twtxt.net Yeah, great documentary. I was reading up on Orcas a few months ago. Zoos are really problematic.
D7VK 2.0 released with more performance fixes for retro Direct3D games on Linux
Love your classic retro games? D7VK 2.0 is out now to bring more performance improvements for running retro Direct3D games on Linux.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/d7vk-2-0-released-with-more-performance-fixes-for-retro-direct3d-ga ⌠â Read more
DXVK 3.0.2 brings bug fixes for Dying Light: The Beast, Halo and more on Linux / SteamOS
Direct 3D 8, 9, 10 and 11 to Vulkan layer DXVK has a new bug fix release out, sorting some issues in specific games to make gaming on Linux / SteamOS better.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/dxvk-3-0-2-brings-bug-fixes-for-dying-light-the ⌠â Read more
@david@daiwei.me Yeah, with the long and thus taller list entries, things are getting off hands. Ah, when focused, you wouldnât differentiate between read or unread.
tt. I run into this bug almost daily for weeks now.
@prologic@twtxt.net A screenshot wonât help in this case, as you donât see anything. :-D It starts off just fine with a conversation tree like that:
Unknown conversation root
ââ´Read reply
ââ´Read subreply
Everything works. After reloading the feeds, a new message becomes part of the conversation, so the conversation e.g. looks:
Unknown conversation root
ââ´Read reply
ââ´Read subreply
ââ´Unread subreply
However, the bug is that the whole conversation is not shown at all. None of the three (or four with the root) messages appear in the message tree view. My recursive SQL determining the messages to display is clearly broken.
đŁ ACTION REQUIRED: Hey folks đ For those of you whom are using the Twtxt App either via the Hosted option or on your own twtd instnace or via Github/Gitea or any other publishing backend (doesnât amtter). Please read.
Please open the app and you should be prompted to save your recovery code for your device. This basically is all of your settings, follows, etc in the app itself. This is synced to the Origin everytime you make a change, and also stored on-device. This is what makes it possible to sync your setting across services, move to another device, etc.
Please save a copy of the recovery code somewhere. This is only your only way to recover your settings.
Thank you đ
Collabora announce a preview of Holo Core, an AArch64 port of Arch Linux for Steam Frame
Open source firm Collabora who work with Valve (Steam), just announced a preview of Holo Core - the aarch64 port of Arch Linux for Steam Frame.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/collabora-announce-a-preview-of-holo-co ⌠â Read more
Bethesda roadmap: more Fallout is coming, Starfield support continues, but Elder Scrolls VI is the main priority
Bethesda Game Studios have given a rare update into their roadmap of what theyâre working on, and it sounds like quite exciting news.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/beth ⌠â Read more
DayZ Badlands gets a fresh teaser and itâs set to launch in October
Bohemia Interactive say DayZ Badlands is the largest expansion so far for the popular open-world zombie survival game.
Read the full article on GamingOnLinux. â Read more
Bandwagon is a âsurvivors-lite adventureâ that sounds wonderful from the Dome Keeper devs
Bandwagon is a bullet heaven survivors-lite (thatâs a new one?) that takes the genre in a fun new direction with music and you restoring joy to the world.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/bandwagon-is-a-survivors-li ⌠â Read more
Race down a mountain in the ridiculous looking shooter DIEATHLON
DIEATHLON is a retro-styled shooter thatâs not just another boomer shooter, as youâre racing down a mountain on skis as you attempt to survive.
Read the full article on GamingOnLinux. â Read more
I should really fix this damn bug where new replies to read replies to unknown conversation roots are not showing up in tt. I run into this bug almost daily for weeks now.
Valve say the Team Fortress 2 MvM update is still coming and theyâre still working on it
After the usual silence weâve come to expect from Valve on everything, they gave a short blog post on the upcoming MvM update for Team Fortress 2.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/valve-say-the-team-fortress-2-mvm-up ⌠â Read more
The explosive isometric insurgent simulator Brigador Killers arrives in August
The first Brigador game from Stellar Jockeys was fantastic for stomping around blowing everything up - and Brigador Killers looks much bigger and better.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/the-explosive-isometric-insurgent-simulator-briga ⌠â Read more
@david@daiwei.me Ha, I just noticed that I changed Newsboatâs defaults. Right from the factory, new items are just bold, while read ones arenât. No different colors, white on black. Focused items are bold yellow on blue. No matter the read status. I think thatâs why I started to play with the config to differentiate them. Itâs been so long ago that I didnât know anymore I even messed with that.
And yes, youâre right, the red on black is borderline readable. Also, my white on green focus is rather silly. But Iâm sooo used to it, I donât realize how bad the contrast is. To be fair, I donât spend a lot of time in the lists. Aha, there are new articles, Enter to hit the artice view, read it, press n to immediately jump to the next unread article, rince and repeat, finally Iâm back in the article list view.
Default theme, read focused:

Default theme, unread focused:

Lyseâs schlimmbesserung, read focused:

Lyseâs schlimmbesserung, unread focused:

SteamVR Beta gets a big update ahead of the Steam Frame release
Valve released SteamVR Beta version 2.17.4 which brings more Steam features into the VR environment, as they continue preparing for the Steam Frame release.
Read the full article on GamingOnLinux. â Read more
@dce@hashnix.club Fixed! 𼳠That 403 was our bug â connect was checking your token via /api/v1/user (needs read:user), but your tokenâs scoped to just the repo so it canât. Now it validates against the repo itself instead đ
@lyse@lyse.isobeef.org It reads a lot nicer, yeah. And you can do oink.my_property += 1 as well, for example.
Minecraft 26.3 Snapshot 4 brings SDL3, and prefers Wayland on Linux
Minecraft is set for another big update with a fresh Minecraft 26.3 Snapshot 4 ready for testing, and overall itâs quite a big technical upgrade.
Read the full article on GamingOnLinux. â Read more
@david@daiwei.me Not sure if you only mean the code segments or in general. In theory, a general darker text color for read messages would probably work. The thing is that regular white on black is quite standard. In Newsboat, new articles are red (I opted for yellow here) and read ones white. I found that useful and kinda copied it for tt.
Jagex Launcher Linux Beta released for Old School Runescape
Jagex today announced the official release of the Jagex Launcher Linux Beta, making it hopefully simpler and easier to get into Old School Runescape.
Read the full article on GamingOnLinux. â Read more
Game on the go with the new Humble Handhelds Bundle
Want some more games for your Steam Deck, Legion Go or whatever other device you have? The newly launched Humble Handhelds Bundle might save the day.
Read the full article on GamingOnLinux. â Read more
Proton Experimental brings fixes for Diablo IV, Marvel Rivals, RPGMaker Engine games
Valve launched the latest update to Proton Experimental to bring more fixes for running Windows games on SteamOS / Linux including Steam Deck and Steam Machine.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/proton-experimental-brings-fixes ⌠â Read more
Impressive grand-scale RTS game Beyond All Reason gets a major engine upgrade with ARM64 support
Beyond All Reason is a seriously impressive grand-scale open source RTS game that just got a big engine upgrade that brings ARM64 support.
Read the full article on [GamingOnLinux](https://www.gamingonlinux.com/2026/07/impressive-grand-scale-rts-g ⌠â Read more
tt. Focusing them just alternates the fore- and background colors. With the old color scheme, I disliked that inline code and code blocks were basically just the opposite of normal text. Hence, unread code was white and read code yellow. I found this often confusing, especially with larger code blocks. Sure, there are the timestamp and author columns that still show the usual white (read) and yellow (unread) background for selected messages, but still.
As an alternative, I also gave a much simpler teal on gray with reversed colors on focus a shot. Hmm, not so sure either. :-?
Unread messages:

Read messages:

Unread messages are yellow, while read messages are white in tt. Focusing them just alternates the fore- and background colors. With the old color scheme, I disliked that inline code and code blocks were basically just the opposite of normal text. Hence, unread code was white and read code yellow. I found this often confusing, especially with larger code blocks. Sure, there are the timestamp and author columns that still show the usual white (read) and yellow (unread) background for selected messages, but still.
This is how it was before with unread messages:

Before with read messages:

So, I just reworked the code styles. Not sure if I like that or if it is actually an improvement. Unread code is teal on gray when not in focus and becomes blue on orange when focused. I thought the dark gray code background on a black regular background is still nice and subtle. The same similarity in colors for focused messages meant to go with an orange code background on a yellow regular background. The teal was too light, so went with a blue foreground color:

When read and unfocused, the new color scheme calls for the same code style teal on dark gray. However, with white as the main background for selected messages, I went with a light gray code background and a blue code foreground. Again, the contrast with white and teal wasnât good enough. Vice versa, blue on dark gray is also not all that readable:

It looks like a parrot. Letâs see if I begin to like it.
@movq@www.uninformativ.de The nice thing about properties is that you can compute and cache things on the fly at first attempt and also ensure validation for writing. But like you said, since itâs not obvious that reading or writing might do some more things, itâs strongly advised to avoid doing expensive stuff disguised as properties.
I reckon the vast majority of property use cases is to provide read-only access. At least that was my impression when I was doing a lot more in Python.
Personally, I think that this just reads a lot nicer:
oink.my_property
oink.my_property = 42
Than:
oink.get_my_property()
oink.set_my_property(42)
Btw, any field access is implemented using method calls. I might be wrong, but I believe thereâs always __getattr__ and __setattr__ involved. 8-)
I trip over this in our code at work all the time.
Python has this concept of âpropertiesâ:
class Oink:
def __init__(self):
self._foo = 3
@property
def my_property(self):
return self._foo
a = Oink()
print(a.my_property)
my_property() is a method but it can be used as if it were a field.
This can also be used to define a setter:
class Oink:
def __init__(self):
self._foo = 3
@property
def my_property(self):
return self._foo
@my_property.setter
def my_property(self, value):
self._foo = 123 * value
Because, for some reason, Python people donât like getters and setters. Instead, they hide it behind a property.
The result is, when you read this:
a.my_property = 5
print(a.my_property)
You have no idea that this actually calls a method.
Does yarnd still support the old âthreadingâ? Letâs see.
I really think I should go back to Java.
Writing programs in Python is so exhausting. I want a compiler and I want static typing. No, linters and type checkers and IDEs are not good enough. Compilers catch way more errors in advance.
Rust is also exhausting. Theyâre constantly adding language features and, at the same time, the runtime library remains tiny and you need 3rd party libraries for everything. Many of those are still at version 0.x (SemVer!) and you canât rely on anything. Often times, you need the latest Rust nightly compiler.
Go is ⌠I donât like it. And huge binaries.
I like C as a language, but itâs too fragile. I want to have a proper HashMap every now and then.
None of the above have good GUI libraries, at least not on Linux.
And then thereâs Java. This is my fractal renderer that I wrote over 17 years ago:
https://movq.de/v/fcd3c4e557/vid-1784121825.mp4
Itâs fast. It has a GUI with custom widgets and those werenât even hard to make. It still works without changing a single line of code. The source code files have timestamps from 2009 and I just noticed that the JAR file Iâm using in the video was compiled in 2010.
Java as a language is relatively easy to learn and to master. There are few surprises. The source code organization with packages is good. Java API docs are clear and well written.
The JVM ramp-up times have improved considerably:
https://movq.de/v/e7314e521e/vid-1784121998.mp4
This isnât like the Dark Ages anymore. Might even be usable for some CLI tools.
The only thing where Java really sucks is anything close-ish to the kernel. Try issuing an ioctl() ⌠I couldnât have made my TUI framework in Java, but then again, I wouldnât have needed to because Swing already exists and it just works.
Hurray, I can now press gg instead of g to go to the top in tt. Much better! :-) Other multi-key combinations are also easily possible now.
I should probably write a real article about this at some point, but here we go. The only downside with my new key binding system is that it breaks tviewâs established pattern. Youâve got an InputHandler(), that is implemented using WrapInputHandler(âŚ). It typically then directly implements the switching logic depending on the key press. Something like this:
func (w *Widget) InputHandler() func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
// WrapInputHandler allows for intercepting key events with SetInputCapture(âŚ)
// from the outside for customization. This handles the default key bindings.
return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
switch event.Key() {
case tcell.KeyRune:
if event.Modifiers() == tcell.ModNone {
switch event.Rune() {
case 'k':
w.scrollUp()
return // we already handled the event, stop processing
case 'j':
w.scrollDown()
return
}
}
}
// We didn't handle the key event. Maybe the parent
// widget knows what to do with it.
if handler := w.parent.InputHandler(); handler != nil {
handler(event, setFocus)
}
})
}
From the outside, you can intercept and either stop or continue the widgetâs original key handling with a potentially rewritten key event using SetInputCapture(âŚ):
w := NewWidget()
// customized or additional key bindings
w.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
switch event.Key() {
case tcell.KeyUp:
// Rewrite the event, so the "cursor up" key is an alias
// for the vim key binding "k", that is handled by the
// wrapped input handler above. (I know, I know, this is a
// completely unrealistic example, why would anyone use
// cursor keys when there are vim key bindings available?!)
return tcell.NewEventKey(tcell.KeyRune, 'k', tcell.ModNone)
case tcell.KeyRune:
if event.Modifiers() == tcell.ModNone {
switch event.Rune() {
case 'q':
app.Stop()
// we already handled the event, do not pass it
// to the wrapped input handler above
return nil
case 'r':
toggleMessageReadStatus()
return nil
}
}
}
// we didn't handle the event, pass it to the wrapped
// input handler above
return event
}
Since they all expect a single key, Iâve noticed that using multiple dedicated KeyBindings of mine on these different levels kinda breaks multi-key handling with common prefixes. The outer-most KeyBinding captures the prefix, but it canât transfer it to the inner one if not handled by the outer one. At least not without some more (potentially ugly) changes. So, I now have to work with just a single KeyBindings object for the entire widget chain (if it consists of multiple other widgets or the regular input handler and input capture are in the game). The outside needs to register all its key bind customizations or extensions at the same level that the original widget handles its default ones. Doable by exposing the widgetâs KeyBindings instance, but not pretty. You always have to keep this in mind.
With the KeyBindings, it will look like that:
type Widget struct {
parent tview.Primitive
// make it available to children or the outside either by
// direct field access or by providing a getter method
KeyBindings *bind.KeyBindings
}
func NewWidget() *Widget {
w := &Widget{KeyBindings: &bind.KeyBindings{}}
w.KeyBindings. // default key bindings
Bind0(bind.KeySequence('k', w.scrollUp).
Bind0(bind.KeySequence('j', w.scrollDown)
return w
}
func (w *Widget) InputHandler() InputHandler() func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
// also note the missing support for focus transfer at the moment
event = w.KeyBindings.Capture(event)
if event == nil {
return
}
if handler := w.parent.InputHandler(); handler != nil {
handler(event, setFocus)
}
}
}
And then from the outside, or in a child widget:
w := NewWidget()
w.KeyBindings. // additional or customized key bindings
Bind1(bind.KeySequence(tcell.KeyUp), func(*tcell.EventKey) *tcell.EventKey {
return tcell.NewEventKey(tcell.KeyRune, 'k', tcell.ModNone)
}).
Bind0(bind.KeySequence('q'), app.Stop).
Bind0(bind.KeySequence('r'), toggleMessageReadStatus)
When directly working with tview primitives that are not part of custom widget implementations, the following works well so far:
textView := tview.NewTextView().
SetWordWrap(true).
SetText("âŚ")
SetScrollable(true)
textView.SetInputCapture((&bind.KeyBindings{}).
Bind0(bind.KeySequence('q'), app.Stop).
Bind1(bind.KeySequence('g', 'g'), func(*tcell.EventKey) *tcell.EventKey {
return tcell.NewEventKey(tcell.KeyHome, 0, tcell.ModNone)
}).
Capture)
I need to sleep on this some more.
Also, writing very long messages like this one is really not all that fun in ttâs editor. I should absolutely provide a way to shell out to vim.
(Took me about one and a half hours to compose, holy crap. But not only because of not using vim. Although, that might have saved me a quarter hour or so for sure. Proof-reading this message also uncovered quite a few bugs in my real documentation. So, thatâs a big win!) Good night!
Of course, Marco will never read my reply, I am afraid, because his is, yet-another, one way feed.
EV Batteries Defy Expectations, Last Hundreds of Thousands of Miles
247,000 miles on an EV battery? So says the owner of a U.K.-based used-car sales company that specializes in Evs, who tells the Wall Street Journal EV batteries keep performing well even after several hundred thousand miles. âThey are proving themselves to be exceptionally reliable.â
After five years on the road, the average EV will still b ⌠â Read more
ReactOS âOpen-Source Windowsâ Project Now Capable Of Running Half-Life 2
One month ago it was exciting to see the open-source ReactOS operating system running Valveâs Half-Life game. Little to realize less than 30 days later it would also be running Half-Life 2⌠â Read more
AMD Begins Staging Graphics Driver Changes For Linux 7.3
In addition to Intel beginning to volley graphics driver patches for Linux 7.3, this week AMD also began sending out their pull requests of ânew stuffâ to DRM-Next for the Linux 7.3 kernel cycle⌠â Read more
Intel Preparing Linux For IPU8 Web Camera Support With Nova Lake Laptops
More Linux kernel patches have been surfacing that confirm next-gen, high-end Nova Lake laptops will feature IPU8 image processing capabilities⌠â Read more