• 0 Posts
  • 18 Comments
Joined 7 days ago
cake
Cake day: July 27th, 2026

help-circle
  • || does not check for whether what’s on the left was run, it only checks for a non-zero exit code.

    In this case the left operand for || is &&, not the rm command. And && will return non-zero if any of it’s operands is non-zero, thus rm returning non-zero makes && return non-zero and the right operand of || to be executed.

    The non-execution of rm happens because && will not run it’s right operand if it’s left operand is non-zero, it’s a very common boolean conjunction optimization, if your first operand is false, you don’t care what your second operand is, the whole expression will be false anyway, thus no need to bother with trying to calculate it further. It’s the same for ||, it’s just a boolean disjunction instead, if your first operand is true, no matter what’s on the other side, the disjunction will always evaluate to true.









  • I entrust you with this horror, go figure out what to blame.

    shutdown-analyze.sh
    #! /usr/bin/env bash
    shutdown_start=$(journalctl -b -1 -u systemd-logind --grep="System is (powering down|rebooting)" --output=cat --no-pager --output-fields=_SOURCE_REALTIME_TIMESTAMP)
    shutdown_start=$((shutdown_start / 1000000))
    units=$(journalctl -b -1 --since=@$shutdown_start --output=cat --no-pager --output-fields=UNIT JOB_TYPE=stop CODE_FUNC=job_emit_start_message)
    
    for u in $units; do
        stopping_start=$(journalctl -b -1 --since=@$shutdown_start -u "$u" --output=cat --no-pager --output-fields=_SOURCE_REALTIME_TIMESTAMP JOB_TYPE=stop CODE_FUNC=job_emit_start_message _SYSTEMD_UNIT=init.scope)
        stopping_end=$(journalctl -b -1 --since=@$shutdown_start -u "$u" --output=cat --no-pager --output-fields=_SOURCE_REALTIME_TIMESTAMP JOB_TYPE=stop CODE_FUNC=job_emit_done_message _SYSTEMD_UNIT=init.scope)
        duration_human=$(systemd-analyze timespan $((stopping_end - stopping_start))us | tail -1 | sed 's/.*: //')
        printf "%s\t%10s %s\n" $((stopping_end - stopping_start)) "$duration_human" "$u"
    done | sort -rn | cut -f 2
    

  • Speaking about Gentoo, you don’t “have to” compile everything, but let’s just say it’s strongly encouraged. Most of the compilation is automated though, think AUR on steroids. If you don’t want to touch anything, you can go with defaults for all the software and you’ll get basically what you get on any other distro.

    The thing is, though, if you are not being a little funny with your software, why the hell are you running Gentoo? So, it’s entirely optional, but it’s the main reason one would use Gentoo, otherwise you get a stock standard system with stupidly long updates.

    I can’t speak for Nix, though, I haven’t touched it myself, but from what I know from those around me running it, it’s pretty much the same thing, unless you want something cool, you don’t have to suffer.








  • Are you arguing that since other terrible things exist, I shouldn’t try to make the world a better place? I can’t exactly see how that’s a valid point.

    I suppose you are trying to appeal to the fact that I’m not perfectly morally pure, trying to make it look like whatever I said is automatically invalid? That’s not how it works. If I say both “smoking is bad for your health” and “you should throw needles into sandboxes”, how exactly does the latter statement being utterly horrible affect the veracity of the former one?

    And of course I’m trying to minimize my usage of things made via exploitation of others, as in repairing the hardware instead of buying new stuff. It’s just incredibly hard to live in the modern world without mudding yourself somewhere. We judge thieves based on their circumstances and whatever they stole, just being a thief does not make you as bad as the worst one, the world is not black and white like that.