{"id":17271690,"url":"https://github.com/smartfinn/sdd","last_synced_at":"2025-07-31T10:10:54.832Z","repository":{"id":64516179,"uuid":"334912093","full_name":"SmartFinn/sdd","owner":"SmartFinn","description":"installing binaries from web sources (GitHub, GitLab, Gitea, cgit, etc..)","archived":false,"fork":false,"pushed_at":"2025-07-12T08:04:42.000Z","size":537,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-12T10:08:24.583Z","etag":null,"topics":["bash","linux","package-manager","shell"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SmartFinn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-02-01T10:27:33.000Z","updated_at":"2025-07-12T08:04:32.000Z","dependencies_parsed_at":"2023-12-09T13:24:44.942Z","dependency_job_id":"a2c16579-5a14-4e46-be81-3c816edee1f2","html_url":"https://github.com/SmartFinn/sdd","commit_stats":null,"previous_names":[],"tags_count":104,"template":false,"template_full_name":null,"purl":"pkg:github/SmartFinn/sdd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SmartFinn%2Fsdd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SmartFinn%2Fsdd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SmartFinn%2Fsdd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SmartFinn%2Fsdd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SmartFinn","download_url":"https://codeload.github.com/SmartFinn/sdd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SmartFinn%2Fsdd/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268022170,"owners_count":24182820,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-31T02:00:08.723Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","linux","package-manager","shell"],"created_at":"2024-10-15T08:46:08.605Z","updated_at":"2025-07-31T10:10:54.788Z","avatar_url":"https://github.com/SmartFinn.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `setup-da-distro`\n\n\u003e A framework to manage installation of binary programs from web sources for non-root users on Linux systems\n\nThe repo is a fork of https://github.com/pylipp/sdd with a few major changes:\n\n- Simpler project structure. Scripts in the repo are standalone with common helpers\n- Support multiple architectures (x86-64, i686, arm, aarch64, or any)\n- Extra helpers for fetching versions from GitHub, GitLab, and cgit, and for extracting archives\n- Extra apps available\n\n## Motivation\n\nDuring occasional strolls on reddit or github, my attention is often drawn towards programs that increase productivity or provide an enhancement over others. (As a somewhat irrelevant side note - these programs mostly work in the command line.) Usually these programs are available for download as binary or script, meaning that naturally, the management (installation, upgrade, removal) of those programs has to be performed manually. At this point `sdd` comes into play: It provides a framework to automatize the tasks of managing the programs (or, in `sdd` terminology, 'apps'). The procedures to manage specific apps are defined within scripts in this repository (at `apps/`).\n\n`sdd` enables me to keep track of my favorite programs, on different machines. I'm working towards having systems set up in a reproducible way on my machines. `sdd` helps me, since I might have different Linux distributions installed on these machine, with different package manager providing different versions of required programs (or none at all). I can freeze the versions of all apps managed by sdd with `sdd list --installed \u003e sdd_freeze.txt`, and re-create them with `xargs -a sdd_freeze.txt sdd install`.\n\n## WARNINGS\n\n`sdd` is a simple collection of bash scripts, not a mature package manager (neither do I aim to turn it into one...). Using it might break things on your system (e.g. overwrite existing program files).\n\nWhen using `sdd`, you execute functionality to manipulate your system. Especially, you download programs from third parties, and install them on your system. Most sources are provided by GitHub releases pages. Keep in mind that repositories can be compromised, and malicious code placed inside; and `sdd` will still happily download it. (If you have an idea how to mitigate this security flaw, please open an issue.)\n\nInstalling older versions of available apps is supported but not guaranteed.\n\n## Installation\n\n`sdd` requires a few dependencies:\n\n- `bash`\n- `curl`\n- `unzip`\n- `awk` or `mawk` or `busybox`\n- `coreutils` or `busybox`\n\nClone the git repository and let `sdd` install itself:\n\n```sh\ngit clone https://github.com/SmartFinn/sdd\ncd sdd\nbash bin/sdd install sdd\n```\n\nor install `sdd` without git using the following command:\n\n```sh\nwget -qO- https://raw.githubusercontent.com/SmartFinn/sdd/master/bootstrap.sh | sh\n```\n\nPlease verify that the `$SDD_BIN_DIR` (`$HOME/.local/bin` by default) is present in your `PATH`. You might want to append this to your shell configuration file:\n\n```sh\nexport PATH=\"$HOME/.local/bin:$PATH\"\n```\n\nSame applies for the `MANPATH`:\n\n```sh\nexport MANPATH=\"$HOME/.local/share/man:$MANPATH\"\n```\n\nFor enabling `zsh` completion functions (`oh-my-zsh` users: put this before the line that sources `oh-my-zsh.sh` since it calls `compinit` for setting up completions):\n\n```sh\nfpath=(~/.local/share/zsh/site-functions $fpath)\n```\n\nFor enabling `bash` completion functions, you should be fine if you already use the [`bash-completion`](https://github.com/scop/bash-completion) package. Otherwise add this snippet to your `~/.bashrc`:\n\n```sh\n# source user completion directory definitions\nfor i in \"${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion/completions\"/*; do\n    [[ -f $i \u0026\u0026 -r $i ]] \u0026\u0026 . \"$i\"\ndone\nunset i\n```\n\n## Usage\n\n### Installing an app\n\nInstall an app to `SDD_BIN_DIR` (defaults to `~/.local/bin`) with\n\n    sdd install \u003capp\u003e\n\nYou can specify a custom installation prefix like this:\n\n    SDD_BIN_DIR=~/bin sdd install \u003capp\u003e\n\nor by exporting the `SDD_BIN_DIR` environment variable.\n\nBy default, `sdd` installs the latest version of the app available. You can specify a version for installation:\n\n    sdd install \u003capp\u003e=\u003cversion\u003e\n\n\u003e This command overwrites an existing installation of the app without additional conformation.\n\n\u003e The format of the `\u003cversion\u003e` specifier depends on the app that is managed (usually it's the tag of the release on GitHub).\n\n### Upgrading the installed apps\n\nTo upgrade the installed apps to the latest version available, run\n\n    sdd upgrade\n\nIf you want to upgrade an individual app, run\n\n    sdd install \u003capp\u003e\n\nInternally, `sdd` executes un- and re-installation of the app for upgrading.\nThe usage of `SDD_BIN_DIR` is the same as for the `install` command.\n\n### Uninstalling an app\n\nTo uninstall an app, run\n\n    sdd uninstall \u003capp\u003e\n\nThe usage of `SDD_BIN_DIR` is the same as for the `install` command.\n\n### Batch commands\n\nThe commands `install` and `uninstall` can take multiple arguments to manage apps, e.g.\n\n    sdd install \u003capp1\u003e \u003capp2\u003e=\u003cversion\u003e \u003capp3\u003e\n\n### Listing app management information\n\nList installed apps by running\n\n    sdd list [--installed]\n\nList all apps available for management in `sdd` with\n\n    sdd list --available\n\nList all installed apps that can be upgraded to a more recent version with\n\n    sdd list --upgradable\n\nThe `list` command options come in short forms, too: `-i`, `-a`, `-u`\n\n### General help\n\nHigh-level program output during management is forwarded to the terminal. Output of the `sdd_*` functions of the app management file is in `/tmp/sdd-\u003ccommand\u003e-\u003capp\u003e.stderr`. For increased verbosity when running `sdd`, set the respective environment variable before invoking the program\n\n    SDD_VERBOSE=1 sdd install \u003capp\u003e\n\nYou can always consult\n\n    sdd --help\n\n## Customization\n\nYou can both\n\n- define app management files for apps that are not shipped with `sdd`, and\n- extend app management files for apps that are shipped with `sdd`.\n\nThe procedure in either case is:\n\n1. Create an empty bash file named after the app in `~/.config/sdd/apps` (without `.bash` extension).\n1. Add the functions `sdd_install`, `sdd_remove`, and `sdd_version` with respective functionality.\n1. You're able to manage the app as described in the 'Usage' section. `sdd` tells you when it found a customization for the app specified on the command line.\n\n## Contributing\n\nYou're looking for managing an app but it's not included in `sdd` yet? Here's how contribute an app management script:\n\n1. Fork this repository.\n1. In your fork, create a feature branch.\n1. Clone existing app management file to `new_name@arch` in `apps`.\n1. Update `sdd_version`, `sdd_install`, and `sdd_remove` functions.\n1. Add the new files, commit, and push.\n1. Open a PR!\n\n## Related projects\n\nUse case | Tool\n--- | ---\nManaging Python packages (system-wide or user-specific) | pip\nManaging Python apps (system-wide or user-specific) | [pipx](https://pipxproject.github.io/pipx/)\nGenerate packages from Makefile and track installation by package manager | [CheckInstall](https://asic-linux.com.mx/~izto/checkinstall/)\nDeclarative whole-system configuration; unprivileged package management | [GNU Guix](https://guix.gnu.org/)\nCreating packages of various formats | [fpm](https://github.com/jordansissel/fpm)\n\nNote that maintaining packages (deb, rpm, etc.) might still require root privileges, depending on your system.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmartfinn%2Fsdd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsmartfinn%2Fsdd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmartfinn%2Fsdd/lists"}