aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/%HOME%/.bash_utils/os.sh
diff options
context:
space:
mode:
Diffstat (limited to '%HOME%/.bash_utils/os.sh')
-rw-r--r--%HOME%/.bash_utils/os.sh65
1 files changed, 65 insertions, 0 deletions
diff --git a/%HOME%/.bash_utils/os.sh b/%HOME%/.bash_utils/os.sh
new file mode 100644
index 0000000..faada73
--- /dev/null
+++ b/%HOME%/.bash_utils/os.sh
@@ -0,0 +1,65 @@
+#!/usr/bin/env bash
+
+_os=''
+
+detect_os() {
+ command -v uname > /dev/null \
+ && [ "$( uname -o )" == 'Cygwin' ] \
+ && _os='Cygwin' \
+ && return 0
+
+ [ -r /etc/os-release ] \
+ && _os="$( . /etc/os-release && echo "$NAME" )" \
+ && return 0
+
+ return 1
+}
+
+detect_os
+
+os_detected() {
+ test -n "$_os"
+}
+
+is_cygwin() {
+ test "$_os" == 'Cygwin'
+}
+
+is_ubuntu() {
+ test "$_os" == 'Ubuntu'
+}
+
+list_manually_installed_packages_ubuntu() (
+ set -o errexit -o nounset -o pipefail
+
+ comm -23 <( apt-mark showmanual | sort | uniq ) \
+ <( gzip --decompress --stdout -- /var/log/installer/initial-status.gz | sed --quiet 's/^Package: //p' | sort | uniq )
+)
+
+list_packages_cygwin() (
+ set -o errexit -o nounset -o pipefail
+
+ cygcheck --check-setup --dump-only \
+ | tail -n +3 \
+ | cut -d ' ' -f 1
+)
+
+list_packages_ubuntu() (
+ set -o errexit -o nounset -o pipefail
+
+ dpkg --get-selections \
+ | grep --invert-match -- 'deinstall$' \
+ | cut -f 1 \
+ | cut -d ':' -f 1
+)
+
+list_packages() (
+ set -o errexit -o nounset -o pipefail
+
+ if is_cygwin; then
+ list_packages_cygwin
+ elif is_ubuntu; then
+ list_packages_ubuntu
+ fi
+ return 1
+)