For one user account, I want to have some bash scripts, which of course would be under version control.

The obvious solution is just to put the scripts in a git repository and make ~/bin a symlink to the scripts directory.

Now, it seems on systemd systems ~/.local/bin is supposedly the directory for user scripts.

My question, is mostly, what are the tradeoffs between using ~/bin and ~/.local/bin as directory for my own bash scripts?

One simple scenario I can come up with are 3rd party programs which might modify ~/.local/bin and put their own scripts/starters there, similar to 3rd party applications which put their *.desktop files in ~/.local/applications.

Any advice on this? Is ~/.local/bin safe to use for my scripts or should I stick to the classic ~/bin? Anyone has a better convention?

(Btw.: I am running Debian everywhere, so I do not worry about portability to non systemd Linux systems.)

Solved: Thanks a lot for all the feedback and answering my questions! I’ll settle with having my bash scripts somewhere under ~/my_git_monorepo and linking them to ~/.local/bin to stick to the XDG standard.

  • Akatsuki Levi@lemmy.world
    link
    fedilink
    English
    arrow-up
    5
    arrow-down
    1
    ·
    7 months ago

    I use ~/.local/bin since by linux standard, ~/.local is a user-level /usr/local, which is a override level of /usr

    ~/bin ends up cluttering the home folder

    • Max-P@lemmy.max-p.me
      link
      fedilink
      arrow-up
      7
      ·
      7 months ago

      Another reason to use ~/.local is you can do things like

      ./configure --prefix=$HOME/.local
      make -j$(ncpu)
      make install
      

      And then you get your .local/bin, .local/share, .local/include, .local/lib and such, just like /usr but scoped to your user.

      and it should mostly just work as well.

      • Akatsuki Levi@lemmy.world
        link
        fedilink
        English
        arrow-up
        3
        arrow-down
        1
        ·
        7 months ago

        And if there’s other users in the machine, it doesn’t fuck things up for others Or if it ends up messing something up, it is user-scoped, so its a lot easier to fix than a bricked system

    • wolf@lemmy.zipOP
      link
      fedilink
      English
      arrow-up
      2
      arrow-down
      1
      ·
      7 months ago

      Another follow up question: Is there any documentation for the linux standard/convention of ~/.local/bin? My initial search about this resulted in nothing which I would call authoritative/definitive.

    • BaconIsAVeg@lemmy.ml
      link
      fedilink
      English
      arrow-up
      0
      arrow-down
      2
      ·
      7 months ago

      If I hand write bash scripts, or for those single binary downloads, they’ll go into ~/bin. ~/.local is already used by a ton of packages. This helps a ton when it comes to backups or for just finding where I put stuff.

      My ~/.local is 283 GB, it’s where podman/docker/etc put containers, it may as well be a system managed folder at that point. My ~/bin is only 120 MB and is a lot simpler to backup/restore/sync to other desktops.

        • BaconIsAVeg@lemmy.ml
          link
          fedilink
          English
          arrow-up
          2
          ·
          7 months ago

          It’s really not. Python virtualenv, Steam, libvirt, composer, krita, vulkan, zed, zoxide, systemd, etc. ~/.local is the domain of various installed packages, not my hand crafted scripts.