[-] ruffsl@programming.dev 10 points 6 months ago* (last edited 6 months ago)

Moving nixpkgs development from GitHub would be ambitious, as that repo already pushes their infrastructure limits with enterprise level support.

https://discourse.nixos.org/t/nixpkgs-core-team-update-2026-01-22/74585

I suspect the Nix org would need to garner many more sponsors to fund the hosting expenditures for an equivalent forge with matching CI/CD, PR automation, and geo redundancy. Would be nice to see.

[-] ruffsl@programming.dev 10 points 6 months ago

The article veers off about Flox, but I'm unsure what Flox adds over stock Nix?

[-] ruffsl@programming.dev 10 points 7 months ago

I never want to go back to an OS I can't diff or track under revision control. I just love being able to solve an issue once and move on without worrying about if I'll forget all the minutiae of changes I made to my customized system when it eventually comes to migrating workstations or replicating across my computers.

60
submitted 7 months ago by ruffsl@programming.dev to c/nix@programming.dev
13
submitted 7 months ago by ruffsl@programming.dev to c/nix@programming.dev
8
submitted 7 months ago by ruffsl@programming.dev to c/nix@programming.dev
25

CtrlAssist v0.4.0 introduces demultiplexing functionality along with enhancements to the system tray and rumble targeting. The updated README now features FAQ and Cookbook sections with practical examples, such as the "Double Agent Tag Team" scenario, where a single assist controller uses a demux to help multiple primary players across separate mux instances, and the "Couch Co-Op Swap" scenario, in which two players take turns assisting each other using toggle mode, with force feedback following the currently active controller by default.

While controller demultiplexing was a requested feature from a prior release, I didn't have a concrete use case until I found myself helping a pair of youngsters play couch co-op multiplayer games with each other. Instead of needing separate assist controllers for each player, otherwise charging/pairing four controllers in total, being able to unicast between mux instances with a single assist controller made juggling both inputs much simpler. Then after being roped into the "It Takes Two" session myself, I found being able to swap primary and assist players outright much simpler when both helping and playing, allowing the Helpee to also aid the Helper when it really does take two.

New Features

Demux Operation Mode

CtrlAssist now supports demultiplexing (demux), allowing a single physical controller to be split into multiple virtual gamepads. This complements the existing multiplexing (mux) functionality and enables more advanced input routing scenarios.

Demux Modes:

  • Unicast (default): Routes primary controller input to the currently active virtual gamepad. Cycle between virtual gamepads using the reserved Mode button.
    • Assist multiple players across separate mux instances
  • Multicast: Broadcasts primary controller input to all virtual gamepads simultaneously.
    • Replicate controller input for advanced input multiplexing pipelines

Active Rumble Targeting

A new "Active" rumble target has been added as the default option for mux operations. This routes force feedback to whichever controllers are currently active according to the selected mode:

  • Toggle Mode: Rumble follows the currently active controller
  • Priority/Average Modes: Rumble sent to both controllers, same as before

Expanded Documentation

The README has been significantly expanded with:

  • FAQ Section: Addresses common questions about who CtrlAssist is for, why it was developed, game compatibility, supported controllers, and running multiple instances
  • Cookbook Section: Provides practical examples demonstrating complex multi-instance setups:
    • Couch Co-Op Swap: Two players alternating assistance
    • Double Agent Tag Team: One assist controller helping multiple primary players

Breaking Changes

  • The rumble target enum options now defaults to "Active" instead of "Both"
  • Configuration file format has been extended to accommodate separate mux and demux settings

Installation

CtrlAssist v0.4.0 can be installed via:

  • Cargo: cargo install ctrlassist --force
  • Flatpak: Download the bundle from the releases page and install with flatpak install
8

CtrlAssist v0.4.0 introduces demultiplexing functionality along with enhancements to the system tray and rumble targeting. The updated README now features FAQ and Cookbook sections with practical examples, such as the "Double Agent Tag Team" scenario, where a single assist controller uses a demux to help multiple primary players across separate mux instances, and the "Couch Co-Op Swap" scenario, in which two players take turns assisting each other using toggle mode, with force feedback following the currently active controller by default.

While controller demultiplexing was a requested feature from a prior release, I didn't have a concrete use case until I found myself helping a pair of youngsters play couch co-op multiplayer games with each other. Instead of needing separate assist controllers for each player, otherwise charging/pairing four controllers in total, being able to unicast between mux instances with a single assist controller made juggling both inputs much simpler. Then after being roped into the "It Takes Two" session myself, I found being able to swap primary and assist players outright much simpler when both helping and playing, allowing the Helpee to also aid the Helper when it really does take two.

New Features

Demux Operation Mode

CtrlAssist now supports demultiplexing (demux), allowing a single physical controller to be split into multiple virtual gamepads. This complements the existing multiplexing (mux) functionality and enables more advanced input routing scenarios.

Demux Modes:

  • Unicast (default): Routes primary controller input to the currently active virtual gamepad. Cycle between virtual gamepads using the reserved Mode button.
    • Assist multiple players across separate mux instances
  • Multicast: Broadcasts primary controller input to all virtual gamepads simultaneously.
    • Replicate controller input for advanced input multiplexing pipelines

Active Rumble Targeting

A new "Active" rumble target has been added as the default option for mux operations. This routes force feedback to whichever controllers are currently active according to the selected mode:

  • Toggle Mode: Rumble follows the currently active controller
  • Priority/Average Modes: Rumble sent to both controllers, same as before

Expanded Documentation

The README has been significantly expanded with:

  • FAQ Section: Addresses common questions about who CtrlAssist is for, why it was developed, game compatibility, supported controllers, and running multiple instances
  • Cookbook Section: Provides practical examples demonstrating complex multi-instance setups:
    • Couch Co-Op Swap: Two players alternating assistance
    • Double Agent Tag Team: One assist controller helping multiple primary players

Breaking Changes

  • The rumble target enum options now defaults to "Active" instead of "Both"
  • Configuration file format has been extended to accommodate separate mux and demux settings

Installation

CtrlAssist v0.4.0 can be installed via:

  • Cargo: cargo install ctrlassist --force
  • Flatpak: Download the bundle from the releases page and install with flatpak install
34

CtrlAssist v0.4.0 introduces demultiplexing functionality along with enhancements to the system tray and rumble targeting. The updated README now features FAQ and Cookbook sections with practical examples, such as the "Double Agent Tag Team" scenario, where a single assist controller uses a demux to help multiple primary players across separate mux instances, and the "Couch Co-Op Swap" scenario, in which two players take turns assisting each other using toggle mode, with force feedback following the currently active controller by default.

While controller demultiplexing was a requested feature from a prior release, I didn't have a concrete use case until I found myself helping a pair of youngsters play couch co-op multiplayer games with each other. Instead of needing separate assist controllers for each player, otherwise charging/pairing four controllers in total, being able to unicast between mux instances with a single assist controller made juggling both inputs much simpler. Then after being roped into the "It Takes Two" session myself, I found being able to swap primary and assist players outright much simpler when both helping and playing, allowing the Helpee to also aid the Helper when it really does take two.

New Features

Demux Operation Mode

CtrlAssist now supports demultiplexing (demux), allowing a single physical controller to be split into multiple virtual gamepads. This complements the existing multiplexing (mux) functionality and enables more advanced input routing scenarios.

Demux Modes:

  • Unicast (default): Routes primary controller input to the currently active virtual gamepad. Cycle between virtual gamepads using the reserved Mode button.
    • Assist multiple players across separate mux instances
  • Multicast: Broadcasts primary controller input to all virtual gamepads simultaneously.
    • Replicate controller input for advanced input multiplexing pipelines

Active Rumble Targeting

A new "Active" rumble target has been added as the default option for mux operations. This routes force feedback to whichever controllers are currently active according to the selected mode:

  • Toggle Mode: Rumble follows the currently active controller
  • Priority/Average Modes: Rumble sent to both controllers, same as before

Expanded Documentation

The README has been significantly expanded with:

  • FAQ Section: Addresses common questions about who CtrlAssist is for, why it was developed, game compatibility, supported controllers, and running multiple instances
  • Cookbook Section: Provides practical examples demonstrating complex multi-instance setups:
    • Couch Co-Op Swap: Two players alternating assistance
    • Double Agent Tag Team: One assist controller helping multiple primary players

Breaking Changes

  • The rumble target enum options now defaults to "Active" instead of "Both"
  • Configuration file format has been extended to accommodate separate mux and demux settings

Installation

CtrlAssist v0.4.0 can be installed via:

  • Cargo: cargo install ctrlassist --force
  • Flatpak: Download the bundle from the releases page and install with flatpak install
17
submitted 7 months ago by ruffsl@programming.dev to c/nix@programming.dev
9

Announcing the release of CtrlAssist v0.3.0, which introduces significant new features and usability improvements. CtrlAssist brings "controller assist" functionality to Linux gaming by allowing multiple physical controllers to operate as a single virtual input device. This enables collaborative play and customizable gamepad setups, making it easier for players of all ages and abilities to enjoy games together.

Major Features

System Tray Interface

This release introduces a graphical system tray application that provides desktop integration for managing controller multiplexing. Users can now:

  • Configure primary and assist controller assignments via dropdown menus
  • Start and stop the mux without using the command line
  • Adjust settings through a context menu interface
  • Receive desktop notifications for status changes
  • Persist configuration across sessions

The tray interface supports live reconfiguration of device-invariant settings (mux mode and rumble target) while the mux is running.

Multiple Hiding Strategies

Controller hiding now supports three distinct strategies:

  • None: No hiding, manual configuration required
  • Steam: Automatically manages Steam's controller blacklist via config.vdf modification
  • System: Restricts device permissions system-wide (requires root access)

The Steam hiding strategy enables proper functionality in sandboxed environments without requiring elevated privileges, addressing a key limitation for Flatpak users.

Live Runtime Updates

The mux runtime now supports dynamic reconfiguration without restart for:

  • Mux mode changes (Priority, Average, Toggle)
  • Rumble target adjustments (Primary, Assist, Both, None)

This functionality is available through both the system tray and programmatic (D-BUS) interfaces, allowing users to adapt behavior during gameplay sessions.

Flatpak Distribution

CtrlAssist is now packaged as a Flatpak application with:

  • Automated GitHub Actions workflow for release builds
  • Desktop entry and metainfo for application catalogs
  • Proper sandbox permissions for device access
  • Support for Steam configuration modifications within the sandbox

Flatpak bundles are automatically built and attached to GitHub releases.

Additional Improvements

  • Configuration persistence to $XDG_CONFIG_HOME/ctrlassist/config.toml
  • Controller selection by name with best-effort matching across sessions
  • Enhanced documentation with installation instructions for both Cargo and Flatpak
  • New pixel art banner and application icon (via Aseprite)
  • Improved force feedback device recovery after disconnection
  • Better error handling and user feedback throughout the application

Installation

CtrlAssist v0.3.0 can be installed via:

  • Cargo: cargo install ctrlassist --force
  • Flatpak: Download the bundle from the releases page and install with flatpak install

Full installation instructions are available in the README.

Breaking Changes

The --hide flag now requires an enum value (none, steam, system) instead of being a boolean flag. Users upgrading from v0.2.x should update their scripts accordingly:

  • Previous: ctrlassist mux --hide
  • Current: ctrlassist mux --hide system
18

Announcing the release of CtrlAssist v0.3.0, which introduces significant new features and usability improvements. CtrlAssist brings "controller assist" functionality to Linux gaming by allowing multiple physical controllers to operate as a single virtual input device. This enables collaborative play and customizable gamepad setups, making it easier for players of all ages and abilities to enjoy games together.

Major Features

System Tray Interface

This release introduces a graphical system tray application that provides desktop integration for managing controller multiplexing. Users can now:

  • Configure primary and assist controller assignments via dropdown menus
  • Start and stop the mux without using the command line
  • Adjust settings through a context menu interface
  • Receive desktop notifications for status changes
  • Persist configuration across sessions

The tray interface supports live reconfiguration of device-invariant settings (mux mode and rumble target) while the mux is running.

Multiple Hiding Strategies

Controller hiding now supports three distinct strategies:

  • None: No hiding, manual configuration required
  • Steam: Automatically manages Steam's controller blacklist via config.vdf modification
  • System: Restricts device permissions system-wide (requires root access)

The Steam hiding strategy enables proper functionality in sandboxed environments without requiring elevated privileges, addressing a key limitation for Flatpak users.

Live Runtime Updates

The mux runtime now supports dynamic reconfiguration without restart for:

  • Mux mode changes (Priority, Average, Toggle)
  • Rumble target adjustments (Primary, Assist, Both, None)

This functionality is available through both the system tray and programmatic (D-BUS) interfaces, allowing users to adapt behavior during gameplay sessions.

Flatpak Distribution

CtrlAssist is now packaged as a Flatpak application with:

  • Automated GitHub Actions workflow for release builds
  • Desktop entry and metainfo for application catalogs
  • Proper sandbox permissions for device access
  • Support for Steam configuration modifications within the sandbox

Flatpak bundles are automatically built and attached to GitHub releases.

Additional Improvements

  • Configuration persistence to $XDG_CONFIG_HOME/ctrlassist/config.toml
  • Controller selection by name with best-effort matching across sessions
  • Enhanced documentation with installation instructions for both Cargo and Flatpak
  • New pixel art banner and application icon (via Aseprite)
  • Improved force feedback device recovery after disconnection
  • Better error handling and user feedback throughout the application

Installation

CtrlAssist v0.3.0 can be installed via:

  • Cargo: cargo install ctrlassist --force
  • Flatpak: Download the bundle from the releases page and install with flatpak install

Full installation instructions are available in the README.

Breaking Changes

The --hide flag now requires an enum value (none, steam, system) instead of being a boolean flag. Users upgrading from v0.2.x should update their scripts accordingly:

  • Previous: ctrlassist mux --hide
  • Current: ctrlassist mux --hide system
30

Announcing the release of CtrlAssist v0.3.0, which introduces significant new features and usability improvements. CtrlAssist brings "controller assist" functionality to Linux gaming by allowing multiple physical controllers to operate as a single virtual input device. This enables collaborative play and customizable gamepad setups, making it easier for players of all ages and abilities to enjoy games together.

Major Features

System Tray Interface

This release introduces a graphical system tray application that provides desktop integration for managing controller multiplexing. Users can now:

  • Configure primary and assist controller assignments via dropdown menus
  • Start and stop the mux without using the command line
  • Adjust settings through a context menu interface
  • Receive desktop notifications for status changes
  • Persist configuration across sessions

The tray interface supports live reconfiguration of device-invariant settings (mux mode and rumble target) while the mux is running.

Multiple Hiding Strategies

Controller hiding now supports three distinct strategies:

  • None: No hiding, manual configuration required
  • Steam: Automatically manages Steam's controller blacklist via config.vdf modification
  • System: Restricts device permissions system-wide (requires root access)

The Steam hiding strategy enables proper functionality in sandboxed environments without requiring elevated privileges, addressing a key limitation for Flatpak users.

Live Runtime Updates

The mux runtime now supports dynamic reconfiguration without restart for:

  • Mux mode changes (Priority, Average, Toggle)
  • Rumble target adjustments (Primary, Assist, Both, None)

This functionality is available through both the system tray and programmatic (D-BUS) interfaces, allowing users to adapt behavior during gameplay sessions.

Flatpak Distribution

CtrlAssist is now packaged as a Flatpak application with:

  • Automated GitHub Actions workflow for release builds
  • Desktop entry and metainfo for application catalogs
  • Proper sandbox permissions for device access
  • Support for Steam configuration modifications within the sandbox

Flatpak bundles are automatically built and attached to GitHub releases.

Additional Improvements

  • Configuration persistence to $XDG_CONFIG_HOME/ctrlassist/config.toml
  • Controller selection by name with best-effort matching across sessions
  • Enhanced documentation with installation instructions for both Cargo and Flatpak
  • New pixel art banner and application icon (via Aseprite)
  • Improved force feedback device recovery after disconnection
  • Better error handling and user feedback throughout the application

Installation

CtrlAssist v0.3.0 can be installed via:

  • Cargo: cargo install ctrlassist --force
  • Flatpak: Download the bundle from the releases page and install with flatpak install

Full installation instructions are available in the README.

Breaking Changes

The --hide flag now requires an enum value (none, steam, system) instead of being a boolean flag. Users upgrading from v0.2.x should update their scripts accordingly:

  • Previous: ctrlassist mux --hide
  • Current: ctrlassist mux --hide system
[-] ruffsl@programming.dev 10 points 8 months ago

I'm no graphic artist, and with my disabilities it certainly would have taken me much longer to type out the same docs. Also, emojiis is what I grew up with back when AOL chat and sms char limits where the norm. LLMs have been a boon for assistive technology users, but admittedly a crux for those who less experience in computer science; though not much different from any double edge sword.

60
submitted 8 months ago* (last edited 8 months ago) by ruffsl@programming.dev to c/linux_gaming@lemmy.world

Excited to announce release v0.2.0 for CtrlAssist, adding rumble pass-through support and significant improvements to controller multiplexing! CtrlAssist brings "controller assist" functionality to Linux gaming by allowing multiple physical controllers to operate as a single virtual input device. This enables collaborative play and customizable gamepad setups, making it easier for players of all ages and abilities to enjoy games together.

🎯 What's New

Rumble Pass-Through

Force feedback can now be forwarded to paired physical controllers! Configure which controller(s) receive rumble effects—route them to Primary, Assist, both, or neither. Share every haptic encounter from turbulence, engine failure, and hard landings with your co-pilot. Even better: if a controller disconnects mid-game (swapping batteries, USB cords, etc.), CtrlAssist automatically recovers and restores all force feedback effects when it reconnects.

Smoother Input Transitions

All assist modes now feature improved synchronization for more natural gameplay:

  • Joysticks snap cleanly: When assistance begins or ends, both X and Y axes update together—no more jarring diagonal-to-cardinal transitions
  • Toggle mode syncs instantly: Switching between Primary and Assist now mirrors the active controller's complete current state, eliminating phantom inputs from buttons or sticks that were held during the switch

Better Device Discovery

Controllers device trees are now discovered more reliably, preventing edge cases where multiple similar devices could cause conflicts. This also improves device hiding and rumble pass-through selection.

🛠️ Under the Hood

  • Refactored input handling for consistency across all three modes
  • Fixed button mapping quirks across physical and virtual device boundaries
  • Improved error handling and logging for edge cases and issue reporting
  • More graceful shutdown on Ctrl+C with robust cleanup

📦 Install and Upgrade

cargo install ctrlassist --force

Full changelog available at the GitHub release page.


Note: If you have experience with Arch or modding SteamOS, I could use also some help in fixing/documenting SteamDeck support, as I've not the hardware on hand and most of my Linux development has been on NixOS and Ubuntu thus far:

8
submitted 8 months ago* (last edited 8 months ago) by ruffsl@programming.dev to c/gamedev@programming.dev

Excited to announce release v0.2.0 for CtrlAssist, adding rumble pass-through support and significant improvements to controller multiplexing! CtrlAssist brings "controller assist" functionality to Linux gaming by allowing multiple physical controllers to operate as a single virtual input device. This enables collaborative play and customizable gamepad setups, making it easier for players of all ages and abilities to enjoy games together.

🎯 What's New

Rumble Pass-Through

Force feedback can now be forwarded to paired physical controllers! Configure which controller(s) receive rumble effects—route them to Primary, Assist, both, or neither. Share every haptic encounter from turbulence, engine failure, and hard landings with your co-pilot. Even better: if a controller disconnects mid-game (swapping batteries, USB cords, etc.), CtrlAssist automatically recovers and restores all force feedback effects when it reconnects.

Smoother Input Transitions

All assist modes now feature improved synchronization for more natural gameplay:

  • Joysticks snap cleanly: When assistance begins or ends, both X and Y axes update together—no more jarring diagonal-to-cardinal transitions
  • Toggle mode syncs instantly: Switching between Primary and Assist now mirrors the active controller's complete current state, eliminating phantom inputs from buttons or sticks that were held during the switch

Better Device Discovery

Controllers device trees are now discovered more reliably, preventing edge cases where multiple similar devices could cause conflicts. This also improves device hiding and rumble pass-through selection.

🛠️ Under the Hood

  • Refactored input handling for consistency across all three modes
  • Fixed button mapping quirks across physical and virtual device boundaries
  • Improved error handling and logging for edge cases and issue reporting
  • More graceful shutdown on Ctrl+C with robust cleanup

📦 Install and Upgrade

cargo install ctrlassist --force

Full changelog available at the GitHub release page.


Note: If you have experience with Arch or modding SteamOS, I could use also some help in fixing/documenting SteamDeck support, as I've not the hardware on hand and most of my Linux development has been on NixOS and Ubuntu thus far:

[-] ruffsl@programming.dev 11 points 11 months ago* (last edited 11 months ago)

Given the amount of trouble shooting demonstrated throughout the video, don't think the marketing was entirely positive...

[-] ruffsl@programming.dev 11 points 1 year ago* (last edited 1 year ago)

I think installing NixOS is something that could really benefit from more community mentoring or nearby a local linux user group.

Now that I have a working config for my hardware, I feel like I could explain it all to my old self in under half an hour. But to get to that point of familiarity took a few days. Having someone over your shoulder to save a new user most of any trial and error could go a long way in terms of adoption or bounce rate. It's like subject that can be tricky to approach solo, but could be trivial if tutored even slightly formally.

If you also like me prefer spoken/visual instructions over written forms, I'd also recommend these resources:

[-] ruffsl@programming.dev 12 points 1 year ago

It's a slippery slope, to be sure.

[-] ruffsl@programming.dev 10 points 2 years ago

I was thinking of cross posting this to a Fortran community, but it looks like we don't yet have one.

[-] ruffsl@programming.dev 13 points 2 years ago

Pain... This too painful to be posted as just a meme...

[-] ruffsl@programming.dev 9 points 3 years ago

For anybody wondering what the Mastodon security issue is - CVE-2023-36460, you can send a toot which makes a webshell on instances that process said toot. #CVE202336460 #TootRoot

[-] ruffsl@programming.dev 11 points 3 years ago

Just need to put a JIT compiled language logo inside the blue car and caption it as "Containerise once, ship anywhere".

[-] ruffsl@programming.dev 10 points 3 years ago* (last edited 3 years ago)

If I recall, this controller was wireless via Logitech's proprietary 2.4Ghz USB dongle, but yes, weird would be better. I'm also surprised they still used wireless due to battery concerns, such as being an additional fire hazard in a confined space, or unexpected power loss during critical maneuvers, and not just from the connectivity liability of RF.

view more: ‹ prev next ›

ruffsl

0 post score
0 comment score
joined 3 years ago
MODERATOR OF