They want you to despair and die. They want you to kill yourself because then they can pretend they aren’t the cause. It’s critical that you understand this: Despite any pain we endure in the near future, it’s nowhere near over and we will fucking survive.
I am not making an optimistic assertion when I say this cannot stand. Fascism always destroys itself. We may end up living under a fascist dictator, but the world has survived powerful fascists before, and it will again.
Update: xdg-settings get default-web-browser should work instead of my solution5. Why was this nowhere in search results for this problem? I have no clue. It should be a very obvious answer.
Linux is a very powerful operating system that gets more user-friendly by the year, but it still has glaring holes. Today, I discovered there is no reliable method to finding out if a browser is installed.
Searching online reveals that most people only care about knowing if specific browsers are installed, or are content with the incomplete option of only checking for the most popular browsers (currently Chrome, Firefox, and Opera). The which command works fine combined with a resource like LinuxConfig.org’s List of Browsers available on Linux, but now your script requires periodic maintenance to add more browsers to the list1.
The next most common answer online is to see if xdg-open exists, based on the assumption that a browser must be installed if xdg-open is installed – this is simply false. You also can’t query xdg-open to see if it can handle URLs without opening a URL. If you use this method, you are effectively attacking the user with a pop-up2.
I’ve also found documentation for update-alternatives, but it requires knowing exactly what name it uses for browser entries. I was told to use x-www-browser, gnome-www-browser, and just www-browser. None of these work, and the command doesn’t allow you to list all of its entries because the --all option forces you into an interactive session to configure every single option it has. I refuse to go through that mess just to find how browsers are defined.
There’s also Debian Wiki’s DefaultWebBrowser which is somehow too dense and too sparse, and in light of what I’ve already tried – nonsensical. Suggesting the use of a $BROWSER environment variable strikes me as particularly insane6.
The best option I can find right now is to manually scan every menu entry for programs categorized with WebBrowser3. This still excludes some options, is convoluted, and has the possibility of failing due to mistakes in menu entries. But it’s the closest to a future-facing solution I could find.
Reading .desktop Files
Update: xdg-settings get default-web-browser basically has already done what I was doing here5. If anything has a .desktop file for a browser, that should return whatever default has been selected, thus telling you a browser is installed.4
Menus in Linux use a standard format to describe programs/actions so they can be automatically organized. Even some CLI apps create these entries as well. These are organized by predefined Categories, including WebBrowser. While this may still exclude some niche browsers, the users of such browsers likely will know how to handle this incompatibility, and are very very rare.
The only issue with this solution is finding the files and having to parse them yourself. This is still a little tedious, but will last longer and detect new browsers automatically. Unfortunately, the only information I found on where these files should be is conflicting slightly. The Arch wiki says they are in 3 specific locations, but the actual spec excludes one of those and specifies an environment variable where the rest are located. So I check all of these locations, scan every file, and look for two things: 1) A Categories key with “WebBrowser” in it. 2) No Hidden key.
For my specific use case, since I only need to know a browser is installed, I can exit this search on the first hit, but obviously you can use the spec to actually find which browsers are installed, and even launch them or show their icons!
For reference’ sake, here’s what a .desktop file for LibreWolf could look like:
[Desktop Entry]
Type=Application
Name=LibreWolf
Comment=Privacy-focused web browser
Exec=/path/to/librewolf
Icon=/path/to/icon.png
Categories=Network;WebBrowser;
Footnotes
Any decision that adds future maintenance costs should be made very carefully and avoided if possible. Do you really want to devote a portion of the rest of your life to making sure this keeps functioning? Do you really want to limit your list of acceptable browsers to only what’s popular now?
How long has it been and we still don’t force applications to open without stealing window focus at an OS level? There are always heavyweight applications, no matter how fast computers get, and computers are fundamentally designed for multitasking. We should be able to start a program and do something else while waiting for it to open, without the risk of random inputs being sent to the program when it is finally ready. Combine this with the fact that many programs steal focus before they’re even ready to accept input and it’s a garbage user experience.
In theory, a browser could still be installed that has its desktop file in the wrong place, but then it is likely the system won’t recognize it for using open or similar commands anyhow. For my use case, that means it is not worth continuing to look for a browser being installed, but depending on what you’re doing, you may want to search further. Heck, if it’s really important, you might want to find every desktop file on the computer to check for a browser – though at that point you should probably just be doing something to ensure a browser is ready yourself instead of trying so hard to find an extant badly configured browser..
Thanks to @CcxCZ on Telegram for telling me about this command!
It was pointed out to me that I should elaborate on this: Environment variables are easily manipulated and overwritten accidentally when they have simple names. (For a counter-example, I don’t worry about referencing $XDG_DATA_DIRS because it is unlikely to be screwed up.)
Real-time interaction has been too much for me, and I miss forums, so I made one at https://forum.tangentfox.com/. You should check it out. I’ve temporarily allowed posting without a login to try to get people talking.
Since I recently decided I’ll “cross-promote” videos when I have blog posts that are otherwise meh, here’s what happened when I first tried KSP 2:
I started blogging on April 10th, 2010 on WordPress.com. I made posts roughly every 2 days until November 11, 2012. They weren’t good. At some point, I was mature enough to realize this and hid them all from public viewing. I’ve built a couple websites that are also gone, they had their own blogs. I used Twitter before a fascist killed it, and use Bluesky now.
This blog was hosted on a DigitalOcean server until a few weeks ago. I was naive enough when they gave me 2 years of free usage to think it would continue being a good deal, and then was too busy to cancel for years. They got their money, I regret it some, but now I’m running on my own hardware.
I have varying quality standards, and keep not posting because I haven’t made anything specifically for this blog. I overcorrect back and forth between caring too much or too little. Recently, I’ve been caring too much, and so I haven’t been sharing things I should’ve shared. I don’t think I’ll fix that problem, but I have an idea on how to reduce it. I’m going to set up a Lemmy instance I set up a forum, so that it’s easier to communicate with me about things I make/share, as well as rate them. Over time, I should have a better idea what goes well, and what are mistakes.
I probably shouldn’t just make an aspirational post without something to show, but I don’t care so much right now, I care that I say I’m not dead, things are getting better for me, and I have plans.
Unrelated video I made “recently” about making your own cheap notepad.
Edited 2025-04-07: Lemmy proved to be too difficult to get working, so I have a simple forum in its place.
These notes are based on How To Write A Book In Less Than 24 Hours by Stefan Pylarinos. The book is very short and targeted at use of minimal effort to make money on short nonfiction books with no quality control. While that inherently colors its advice, there are useful tips within it. If you are enthusiastic about writing, rather than making money, I would not advise reading it.
“Good” Advice
These are the things that can be useful if you are trying to rush publish something simple. There are also pieces of advice that may apply for more serious efforts, but I do not make the effort to distinguish them.
Market-Based Advice: Make it quick and cheap because most people don’t read past the first chapter. Shorter books are less intimidating, quicker/easier to make, and cheaper. These make them more likely to be purchased. Series encourage people to buy multiple books, and they are more likely to believe there is more value in several cheaper books than a single equivalently priced book with equivalent content. Find your target market first. Specificity in topic is rewarded. Spend 30 minutes on coming up with at least 10 ideas. People choose highly specific titles over broader titles. Make a bunch of title ideas. Keep them as short as possible. Think of them like a headline. Figure out where to publish. (Stefan only focuses on low-effort self-publication systems. I didn’t bother to include them here, as it’d be a waste of your time.)
Research Advice: All of their research advice is bad in my opinion.
Outlining Method: Take 30-60 minutes to come up with a list of ideas to cover, then come up with chapter titles, cut them down or combine them depending on overlap of topics, and finally write 3 things to cover for each chapter.
Writing Advice: Perfect is the enemy of the good enough. Schedule time to write. Publicly commit to your work as a way to encourage yourself. Distractions are evil, and should be treated as such. Timers can help you focus. Aim for 500-1000 words per chapter. (That would make this blog post chapter-length.) Spend an hour per chapter. (They promote this as a limit.) Don’t filter, just write. (Proofreading and editing is a separate task that comes later.) Spelling and sentence structure can always be fixed – after you’re finished writing.
Writer’s block? Exercise, take a break.
Editing Advice: Stefan focuses on proofreading. They suggest only waiting 30 minutes between writing and proofreading, when you should at least sleep on it. Reading aloud can help you find clunky sentences. Having someone else proofread makes it easier to spot issues.
(If you really want to follow the idea of rapidly producing simpleton books, you should have each day’s tasks be for different books so that you have an appropriate rest period between each step. To be clear, I define tasks as everything before writing, the writing itself, and editing/proofreading. These are the 3 main “categories” of action that benefit from having a break in-between. Realistically, research should be its own block too, and editing/proofreading shouldn’t be done in one day.)
Really Bad Advice
I include this because it can be helpful to understand why a particular piece of advice is bad (and to share a few related thoughts).
Misunderstandings: The 80-20 rule is that 20% of effort generates 80% of value. This author seems to think this means you can put minimal effort into something and still have most of the value. The reality is that you can’t know which effort generated the most value until you are done. Skipping 80% of the effort just means you’ll have very little very low-quality work.
“I’ve researched this for 1 hour, therefore I understand it.”
Worst Advice: “Research for only an hour.” This is the single worst piece of advice in the whole book. It encourages perpetuating common misunderstandings and repeating surface-level information that doesn’t actually get to the heart of a topic.. or explain it at all. Anything produced with this philosophy will be of minimal value, maybe equivalent to this blog post at most. (This is why large language models appear to be very knowledgeable at a surface level, but if you have any experience in a particular field or knowledge on a topic, they immediately fall flat. LLMs are fundamentally a “highest probability” surface-scanning machine on everything.)
For comparison, when I wrote a blog post about taking breaks, the end result was 2 paragraphs explaining the practical result of current research on taking breaks. That came from 3 hours of research on summaries of studies and articles on the topic. If it takes 3 hours to make 2 paragraphs that just cover the surface of a topic as simple as “how often and how long should breaks be”, then anything book-length will be worthless if it is based on only an hour of research.
“Forums are better than research.”
The 2nd worst piece of advice was to use forums for answers rather than checking credible sources or doing original research. While forums can help you find good answers for a lot of things, making them the main source of a book is a woefully inadequate idea. Such information must be used carefully, and checked for validity. (You’ll note that I include a disclaimer about my blog posts not having been thoroughly checked for validity. This is why. I am confident in what I say, but not an authority on any particular topic.)
Stefan suggests taking advantage of someone from the global south to transcribe a voice recording if you don’t like typing. They also assume you can write at 50 wpm on average and thus it is theoretically possible to bang out a chapter in 10 minutes minimum. (This can be fine for a first draft, but Stefan expects it to be your final draft.)
The book ends by hard-selling an online course of some kind. I suspect it fits the colloquial definition of a scam. (Most “scams” are not legally scams because they contain ill-defined value – much like this book. One must be careful on their wording when publishing to avoid lawsuit. This is part of why it took me several months to go from writing these notes to publishing this overview – I needed to make sure that my descriptions of the content of this book do not violate copyright.)
Recently I saw a video (When Your Hero Is A Monster) talking about the general response people have any time a celebrity is revealed to have been doing sex crimes. A common response is to claim you always knew something was up, as a way to process your grief at having been misled into believing they were a good person. The video suggests that this impulse is harmful because it signals to others that they aren’t “good enough” because they didn’t see it coming. But this is usually post-fact rationalization, not a belief that was held before the reveal.
When Your Hero Is A Monster isn’t really about Neil Gaiman, it’s sorta about how we are misled into believing celebrity is good, and have an unhealthy relationship with finding out the truth.
It made me think about how Honey blew up recently (How Honey Scammed Everyone on YouTube). I never installed it because it seemed suspicious1, but I never called it out, so now me saying so is exactly the same knee-jerk response. It doesn’t actually help, whether or not it’s true that I felt there was something wrong, because now it’s too late to have warned anyone. It made me realize that I should be more forthright in saying when I think something bad is going on. At the very least, I can point to proof and say “yes, I did actually suspect” and know that I’m not making false memories, but it also is helpful to talk about misgivings because that’s how you can work out whether or not your concerns are justified, and maybe even help others.
Everyone credits MegaLag for exposing this, and while they definitely made the video that got everyone talking about it, it’s a long video and Mental Outlaw‘s video not only explains it much easier and quicker, but also manages to cover similar suspicions/problems with VPN companies, how Linus Media Group unintentionally helped Honey stay incognito, and even mentions a sort of successor to Honey to be on the lookout for. I think this is the best summary of recent events.
This also made me think about COVID. In March or April 2019, I correctly predicted exactly (within a few months) how long it would take for vaccines to arrive, and how people would pretend it stopped being a problem despite becoming endemic. But I didn’t say anything publicly. I told close friends and family what to do to be safe, and what to expect. I made my dad take precautions and took over riskier interactions to help keep him safe. I should’ve told more people. It’s my only regret from all of 2019. I could’ve helped more people, but I didn’t.
When you are unsure of something, or you feel that is something wrong, talk about it. Markiplier called out Honey’s suspicious activity years ago. Through dialogue, you learn whether or not your fears are misplaced, you help others remember to stay vigilant, or even help others recognize something is wrong long before it becomes popular or common knowledge. This is a mistake I keep making, but I’m trying to improve. When I see something important to discuss, I should call out. It’s not about being correct, it’s about communication.
Markiplier Predicts Honey Scam In 2020 (there’s also a response he made being very excited about how right he was, and a very amusing animatic of part of this rant)
Footnotes
Linus Media Group pulled their Honey sponsorships over suspicions a long time ago, but didn’t talk much about it. One could easily argue they are partially to blame for not speaking up, but it’s also easy to argue that it was a private business decision, and they didn’t know how important it would be to say something. (Hell, they could’ve even been under contract requiring them to keep the secret2. We would never know.) They did post a response to the Honey situation. That’s also a class-action lawsuit underway, spearheaded by LegalEagle.
Ironically, I was suspicious of it primarily because of privacy violations (tracking any shopping you do, but possibly also just everywhere) and because I assumed it worked through backroom deals with sellers to give out discounts in exchange for customer information – allowing a company to keep its image clean because it wasn’t the one who stole your private information, it just bought that information. As we now know, that’s not at all what was happening.
Being under a secretive contract is always bad. You don’t get to know what secrets you’re required to keep secret without signing the contract. Because of this, it’s hard to blame someone for being required to keep a secret. Obviously, there are many secrets that are highly unethical.. but it’s understandable to value your life more than revealing such secrets.
Is it still footnotes if you’re just posting semi-related thoughts?