Skip Navigation
Europeans of Lemmy, what places in Europe should foreigners avoid at all cost?
  • There was a post earlier today complaining about questions that aren't open-ended, and therefore don't adhere to the community rules. So here we are with a question with many possible answers (which makes it properly open-ended).

  • Rofi as primary menu — recommendations?
  • I guess it's not relevant for your setup, but I like rofi because there is a fork that works in Wayland, and it's the only Wayland window switcher I have found that isn't tied to a specific window manager.

  • Moonlight isn't working
  • To start the firewall after you stopped it:

    sudo systemctl start firewalld
    

    systemctl is part of systemd - it starts and stops various services, shows statuses, lists available services, etc.

    There is documentation on opening ports here, plus more details on enabling & disabling the firewall: https://docs.fedoraproject.org/en-US/quick-docs/firewalld/#_controlling_ports_using_firewalld

  • How to force all chromium apps to use wayland, instead of xwayland by default?
  • Probably not directly helpful, but Nix packages for Chromium and Electron apps are set up so that you can switch to native Wayland mode globally by setting an environment variable, NIXOS_OZONE_WL=1

    I don't know of any global setting that isn't distro-specific.

  • Please submit within three business days
  • That's a different form

  • Does anyone have any instructables or ideas on how to make my car sound like a Tie Fighter as I drive around?
  • The artificial sounds are legally required at low speeds, at least in the US and Europe. In the US electronic sounds are required at speeds below 30 kph. In the EU I think it's 20 kph. At faster speeds the sounds of wheels on the road and such make electric and hybrid cars basically as loud as ICE cars.

    There are very specific rules about the noises. It looks like there was some effort in the US to allow user-selectable sounds, but it didn't work out. I found some info here, https://www.federalregister.gov/documents/2022/07/13/2022-14733/federal-motor-vehicle-safety-standards-minimum-sound-requirements-for-hybrid-and-electric-vehicles

  • Those guys back in 1700s probably had nothing left to lose
  • From what I've learned revolutions are often accompanied by circumstances where people are desperate due to lack of basic necessities, especially food.

    The French revolution was preceded by a serious food shortage. Remember that "let them eat cake" comment? One of the key events, the Women's March which displaced the king and queen from Versailles, was specifically motivated by demands for food.

    The European People's Spring saw lots of revolutions across Europe in 1848-1849 including in France, Italy, Bavaria, Austria, Hungary. That was about the same time as a continent-wide grain shortage on top of an economic crisis.

    The Russian revolution of 1917 came at a time when a combination of WW1, bad leadership, and an extra cold winter led to food shortages, and fuel shortages so people were starving and freezing at the same time.

  • How Electric Car Batteries Might Aid the Grid (and Win Over Drivers)
  • It could be good, but there is a conflict with one of the electric car hurdles: range anxiety. I use a level 1 charger at home which works fine for regular use - but it does take about 4 days to charge a nearly-depleted battery up to 80%. I'd be loath to give up energy that takes such a long time to get back. But this system would presumably require a level 2 charger, and that might make it ok. Still I can imagine objections over not having a car charged when you want to make a longer, last-minute trip, and over battery depreciation due to more cycling.

  • Damn, Scylla is really happy
  • I love the name!

  • How easy is it to switch back to windows?
  • This seems like the right answer to me. Whether or not you decide to dual boot, make one of these USB keys so you can recover if something goes wrong.

  • If you fail to pull Gale through the portal, can you recruit him later?
  • Only tangentially related, but if you choose to ignore the portal you can come back later to get Gale. I was in a role-playing mood on my first playthrough. When I encountered a strange portal, and was given only the choices of ignoring it or sticking my hand in I thought, "How about no."

  • Why does nobody maintain PPAs anymore?
  • When I was using Debian I found I could generally get the latest version of software I wanted from Nix if it wasn't in the main Debian repos, or was outdated. Nix works quite well on any Linux distro - it doesn't interfere with the rest of the system.

  • I'm with McCoy here
  • That comic really came out with a banger on day 1

  • [SOLVED] How do I add autocompletion for my `stfu` command?
  • All I can tell you is that this is done differently for each shell. So decide whether you want completions for bash, zsh, fish, all of the above, or whatever, and look at the docs for the relevant shells.

  • What it's like to ditch your car for e-biking | Digital Trends
  • This is how I sometimes take my dog on my bike for short trips:

    dog sitting in a tub secured on the rear rack of a cargo bike

    But the best way to transport dogs is using a trailer. That tub takes the place of the rear seat; so to transport kids and the dog at the same time I'd need a trailer.

  • Can Milky Way and Andromeda collision reconcile with an Expanding Universe with galaxies spreading away from each other like "raisins in a loaf"?
  • There are other galaxy clusters. Gravitational binding is not unique to the local cluster. From Wikipedia,

    Notable galaxy clusters in the relatively nearby Universe include the Virgo Cluster, Fornax Cluster, Hercules Cluster, and the Coma Cluster.

    The expansion of the universe is very tricky to explain. Oversimplifying can lead to an explanation that seems to be contradictory.

  • Self-balancing commuter pods ride old railway lines on demand
  • By using one rail they can get two-way traffic on one set of tracks. These early units have an anti-tipping safety device that extends to the second rail, but they plan to get rid of that later.

  • Old XKCD, still relevant
  • I think you want to remove the c because that means "create" an archive, and you're missing a z which applies gzip decompression/compression

  • Every time I search for a USB key, I end up finding the ones flashed with OS ISOs! I don't have a normal key anymore lol
  • This is why I switched to labelling USB sticks with two-character codes, and I keep a file that lists the current content of each stick.

  • Start learning at 50
  • I think this is good advice. Don't over-think it!

  • Blank red videos in game running in Wine?

    I installed StarCraft: Mass Recall which is an impressive project that recreates the original StarCraft and Brood War campaigns in StarCraft 2. Everything works except that the cinematics and some of the game assets are flat, blank red. For example some of the video portraits in the briefing rooms display correctly, but Mengsk is a solid red square. In the first mission Raynor's vulture is flat red while everything else looks correct. Sound works correctly including in cinematics.

    The game assets aren't a huge deal, but the cinematics are a big part of the reason for playing these campaigns IMO.

    I've tried everything I can think of. I tried some different Wine runners. I tried disabling DXVK. I installed a number of dependencies that look like they provide video codecs:

    • amstream
    • devenum
    • quartz
    • xvid
    • ffdshow

    Does anyone have ideas about what else I might try?

    What I did figure out is a working command to run the mod, which took me a while. I used Bottles, installed Battle.net through the Bottles program installer, installed StarCraft 2 via Battle.net, and finally installed Mass Recall by unzipping and copying its files to the StarCraft Maps/ and Mods/ directories. Then I was able to run Mass Recall with this command:

    sh $ bottles-cli shell -b "<bottle name>" -i '"C:\Program Files (x86)\StarCraft II\Support64\SC2Switcher_x64.exe" "C:\Program Files (x86)\StarCraft II\Maps\Starcraft Mass Recall\SCMR Campaign Launcher.SC2Map"'

    2
    Using passkeys on Linux & Android

    Passkeys seem like a great idea, and we are at a point where, although things are still very much in flux, software passkeys managed by password managers are starting to be usable. I thought I'd share the workflow that's working for me on Linux with some sites, and ask the community for more tips & tricks.

    A passkey is a client certificate - which is an old idea, but now there are some new standards in place*. When you log into a website, instead of sending a password you send a message signed using the private key on your hardware security device, or stored in your password manager. If you use a password manager the flow is about the same as with passwords: your password manager pops up and asks if you want to log in to the given website. But instead of sending a password to the browser, message signing takes place in the password manager. Unlike passwords those signed messages can't be replayed. Arguably you can skip sending MFA codes and get about the same (or maybe better) security with passkeys than you were getting with passwords + MFA.

    Complications come up because support for passkey APIs is still patchy. On Linux I think there is system-level support for hardware keys, but not for passkey managers (password managers that can do passkey signing). But you can close that gap using browser extensions! I'm using Enpass with it's Firefox extension. Signing into websites in Firefox using passkeys works quite well in some of the sites I've tried. (I've also tested with Bitwarden's browser extension, and it works just as well.**) Although creating passkeys doesn't work on all of those sites.

    • I was able to create a passkey on Github, and sign in with it.
    • I was able to create a passkey for the demo at https://www.passkeys.io/, and sign in with it.
    • I couldn't create passkeys for Google, but I could log in with passkeys created on another device, and synced by Enpass to my Linux machine.
    • I can use a passkey for MFA on Discord, but they don't seem to be using them for logins yet.
    • I'm not getting options to use my passkeys on Amazon or Paypal, but I was able to create passkeys for these sites on Android.

    Without using a browser extension Chrome on Linux does have a feature to sign in with passkeys on mobile devices. I don't think this works with third-party passskey managers. On some sites Chrome gave me the option to log in using the automatically-generated, Google-managed passkey on my phone. It didn't actually worked for me - my phone showed a message saying "connecting to device" but never actually connected.

    That brings me to the Android side. Since some sites will let me log in with passkeys but not create them it's helpful to have another option for creating passkeys. Android is further along in implementing system level passkey support (only in Android 14 or later). But it's not perfect yet. Firefox for Android is not working with passkey managers yet, but there is a ticket to track this. Third-party passkey managers work in Chrome for Android, but only if you enable an experimental flag:

    • open chrome://flags/
    • find the setting "Android Credential Management for passkeys"
    • set the value to "Enabled for Google Password Manager and 3rd party passkeys"

    ---

    \* "Passkey" seems to be an umbrella term for WebAuthn or FIDO U2F. It looks like WebAuthn is a part of FIDO2.

    ** From a cursory look at the two I feel more comfortable with Enpass' browser extension than with Bitwarden's. I'm not positive, but it looks like Bitwarden loads credentials in the extension itself which puts all of your secrets in the browser process. OTOH the Enpass extension uses IPC to send requests to the Enpass desktop app. But as many will point out, Bitwarden's clients are open-source and audited while Enpass' software is closed-source.

    6
    [HowTo] gnome-keyring as ssh agent in lightweight window manager

    It took me some time to work out how to get my ssh agent set up in Niri so I though I would share what I did. I'm using NixOS and Home Manager. I put this in my Home Manager config:

    nix services.gnome-keyring = { enable = true; components = [ "pkcs11" "secrets" "ssh" ]; }; home.sessionVariables.SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/keyring/ssh";

    I'm using GDM according to NixOS' default configuration which I think runs gnome-keyring (I thought I saw it in the process list before I set up the user unit), and I think that configuration is automatically unlocking gnome-keyring when I log in via PAM integration. But apparently I need to run gnome-keyring again in my window manager session. Home Manager's services.gnome-keyring adds a systemd user unit that does that.

    1
    Nix, NPM, and Dependabot
    sitr.us Nix, NPM, and Dependabot

    I have a project, git-format-staged , that I build with Nix. It includes NPM dependencies, and it is convenient to have Dependabot keep…

    0
    Treesitter query to match adjacent Rust nodes?

    I'd like a treesitter query that matches a Rust struct together with all of its attributes. For example,

    rust #[derive(Debug)] #[serde(rename_all = "camel_case")] pub struct MyType { pub foo: i32, }

    The lines beginning with # are attributes that are logically connected to the struct declaration. But the treesitter grammar for Rust parses attributes as adjacent nodes, not as children of the struct declaration:

    scm (attribute_item ; [27, 0] - [27, 16] (attribute ; [27, 2] - [27, 15] (identifier) ; [27, 2] - [27, 8] arguments: (token_tree ; [27, 8] - [27, 15] (identifier)))) ; [27, 9] - [27, 14] (attribute_item ; [28, 0] - [28, 35] (attribute ; [28, 2] - [28, 34] (identifier) ; [28, 2] - [28, 7] arguments: (token_tree ; [28, 7] - [28, 34] (identifier) ; [28, 8] - [28, 18] (string_literal)))) ; [28, 21] - [28, 33] (struct_item ; [29, 0] - [31, 1] (visibility_modifier) ; [29, 0] - [29, 3] name: (type_identifier) ; [29, 11] - [29, 17] body: (field_declaration_list ; [29, 18] - [31, 1] (field_declaration ; [30, 4] - [30, 16] (visibility_modifier) ; [30, 4] - [30, 7] name: (field_identifier) ; [30, 8] - [30, 11] type: (primitive_type)))) ; [30, 13] - [30, 16]

    How can I get produce a query that I can use in mini.ai that matches the struct, and all attributes?

    I've tried this query using Neovim's new built-in :EditQuery command:

    scm ((attribute_item)* . (struct_item)) @custom_capture.outer

    It looks like it does what I want. But when I try using @custom_capture.outer in mini.ai it matches the struct declaration, but not the attributes.

    I tried using #make-range! like this,

    scm ((attribute_item)* @_start . (struct_item) @_end (#make-range! "custom_capture.outer" @_start @_end))

    That matches the struct and the second attribute, but does not get the first attribute. I'm guessing that's because the . specifies that nodes must be adjacent, and the second attribute is the only one that is adjacent to a struct_item. Following that thinking I tried this,

    scm ((attribute_item)? @_start . (attribute_item)* . (struct_item) @_end (#make-range! "custom_capture.outer" @_start @_end))

    That gets the struct and all the attributes, but only if my cursor is on the first attribute line when I use the textobject. If my cursor is on any subsequent line then I get the second attribute and the struct, but the first attribute is missed.

    One problem is I'm not clear whether ((attribute_item) . (struct_item)) matches an attribute_item and a struct_item that are adjacent, or matches an attribute_item that precedes a struct_item, but does not also match the struct_item. I tried experimenting with the second interpretation and used this query,

    scm (((attribute_item) . [(attribute_item) (struct_item)])* @_start (struct_item) @_end (#make-range! "custom_capture.outer" @_start @_end))

    That captures what I want, but in some cases if I have two struct declarations and I try to match only the second one the query selects both structs instead.

    Is that the way to do a lookahead? Or is there another way?

    I've kinda hit a wall looking at documentation, other examples, and running my own experiments. Does anyone have any pointers to help understand these queries on a deeper level?

    Edit: It looks like this stuff is in flux, so I should mention that I'm using the latest nightly as of March 2 2024, and I made sure that all of my plugins are up-to-date.

    0
    hallettj hallettj @leminal.space

    Just a basic programmer living in California

    Posts 5
    Comments 84