commit 10d3436c34dfd6ca85ee52be8025ddf1c7ba91dd Author: Penelope Gwen Date: Wed Mar 27 12:38:43 2024 -0600 initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..1358a74 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Sapphrc diff --git a/debian/README b/debian/README new file mode 100644 index 0000000..de90b9e --- /dev/null +++ b/debian/README @@ -0,0 +1,6 @@ +The Debian Package sapphrc +---------------------------- + + + + -- Penelope Gwen Fri, 08 Mar 2024 11:49:45 -0700 diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 0000000..83764bf --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1,6 @@ +sapphrc for Debian +----------------- + + + + -- Penelope Gwen Fri, 08 Mar 2024 11:49:45 -0700 diff --git a/debian/README.source b/debian/README.source new file mode 100644 index 0000000..f4f8148 --- /dev/null +++ b/debian/README.source @@ -0,0 +1,10 @@ +sapphrc for Debian +----------------- + + + + + + -- Penelope Gwen Fri, 08 Mar 2024 11:49:45 -0700 + diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..84f4548 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +sapphrc (1.0) UNRELEASED; urgency=medium + + * Initial release. + + -- Penelope Gwen Fri, 08 Mar 2024 11:49:45 -0700 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..a437fd8 --- /dev/null +++ b/debian/control @@ -0,0 +1,19 @@ +Source: sapphrc +Section: unknown +Priority: optional +Maintainer: Penelope Gwen +Rules-Requires-Root: no +Build-Depends: + debhelper-compat (= 13), +Standards-Version: 4.6.2 +Homepage: +#Vcs-Browser: https://salsa.debian.org/debian/sapphrc +#Vcs-Git: https://salsa.debian.org/debian/sapphrc.git + +Package: sapphrc +Architecture: all +Multi-Arch: foreign +Depends: + ${misc:Depends}, +Description: + diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..ad494ed --- /dev/null +++ b/debian/copyright @@ -0,0 +1,43 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Source: +Upstream-Name: sapphrc +Upstream-Contact: + +Files: + * +Copyright: + + +License: GPL-3.0+ + +Files: + debian/* +Copyright: + 2024 Penelope Gwen +License: GPL-3.0+ + +License: GPL-3.0+ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see . +Comment: + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. +# Please avoid picking licenses with terms that are more restrictive than the +# packaged work, as it may make Debian's contributions unacceptable upstream. +# +# If you need, there are some extra license texts available in two places: +# /usr/share/debhelper/dh_make/licenses/ +# /usr/share/common-licenses/ diff --git a/debian/install b/debian/install new file mode 100644 index 0000000..653948f --- /dev/null +++ b/debian/install @@ -0,0 +1,5 @@ +etc/bash_completion.d/spm etc/bash_completion.d/ +lib/sapphrc/* lib/sapphrc/ +usr/bin/* usr/bin/ +usr/share/doc/sapphrc/* usr/share/doc/sapphrc/ +lib/sapphrc/* lib/sapphrc/ diff --git a/debian/manpage.1.ex b/debian/manpage.1.ex new file mode 100644 index 0000000..3131a20 --- /dev/null +++ b/debian/manpage.1.ex @@ -0,0 +1,56 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" (C) Copyright 2024 Penelope Gwen , +.\" +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH Sapphrc SECTION "March 8 2024" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +sapphrc \- program to do something +.SH SYNOPSIS +.B sapphrc +.RI [ options ] " files" ... +.br +.B bar +.RI [ options ] " files" ... +.SH DESCRIPTION +This manual page documents briefly the +.B sapphrc +and +.B bar +commands. +.PP +.\" TeX users may be more comfortable with the \fB\fP and +.\" \fI\fP escape sequences to invode bold face and italics, +.\" respectively. +\fBsapphrc\fP is a program that... +.SH OPTIONS +These programs follow the usual GNU command line syntax, with long +options starting with two dashes ('\-'). +A summary of options is included below. +For a complete description, see the Info files. +.TP +.B \-h, \-\-help +Show summary of options. +.TP +.B \-v, \-\-version +Show version of program. +.SH SEE ALSO +.BR bar (1), +.BR baz (1). +.br +The programs are documented fully by +.IR "The Rise and Fall of a Fooish Bar" , +available via the Info system. diff --git a/debian/manpage.md.ex b/debian/manpage.md.ex new file mode 100644 index 0000000..2cb0870 --- /dev/null +++ b/debian/manpage.md.ex @@ -0,0 +1,134 @@ +% sapphrc(SECTION) | User Commands +% +% "March 8 2024" + +[comment]: # The lines above form a Pandoc metadata block. They must be +[comment]: # the first ones in the file. +[comment]: # See https://pandoc.org/MANUAL.html#metadata-blocks for details. + +[comment]: # pandoc -s -f markdown -t man package.md -o package.1 +[comment]: # +[comment]: # A manual page package.1 will be generated. You may view the +[comment]: # manual page with: nroff -man package.1 | less. A typical entry +[comment]: # in a Makefile or Makefile.am is: +[comment]: # +[comment]: # package.1: package.md +[comment]: # pandoc --standalone --from=markdown --to=man $< --output=$@ +[comment]: # +[comment]: # The pandoc binary is found in the pandoc package. Please remember +[comment]: # that if you create the nroff version in one of the debian/rules +[comment]: # file targets, such as build, you will need to include pandoc in +[comment]: # your Build-Depends control field. + +[comment]: # lowdown is a low dependency, lightweight alternative to +[comment]: # pandoc as a markdown to manpage translator. Use with: +[comment]: # +[comment]: # package.1: package.md +[comment]: # lowdown -s -Tman -o $@ $< +[comment]: # +[comment]: # And add lowdown to the Build-Depends control field. + +[comment]: # Remove the lines starting with '[comment]:' in this file in order +[comment]: # to avoid warning messages. + +# NAME + +sapphrc - program to do something + +# SYNOPSIS + +**sapphrc** **-e** _this_ [**\-\-example=that**] [{**-e** | **\-\-example**} _this_] + [{**-e** | **\-\-example**} {_this_ | _that_}] + +**sapphrc** [{**-h** | *\-\-help**} | {**-v** | **\-\-version**}] + +# DESCRIPTION + +This manual page documents briefly the **sapphrc** and **bar** commands. + +This manual page was written for the Debian distribution because the +original program does not have a manual page. Instead, it has documentation +in the GNU info(1) format; see below. + +**sapphrc** is a program that... + +# OPTIONS + +The program follows the usual GNU command line syntax, with long options +starting with two dashes ('-'). A summary of options is included below. For +a complete description, see the **info**(1) files. + +**-e** _this_, **\-\-example=**_that_ +: Does this and that. + +**-h**, **\-\-help** +: Show summary of options. + +**-v**, **\-\-version** +: Show version of program. + +# FILES + +/etc/foo.conf +: The system-wide configuration file to control the behaviour of + sapphrc. See **foo.conf**(5) for further details. + +${HOME}/.foo.conf +: The per-user configuration file to control the behaviour of + sapphrc. See **foo.conf**(5) for further details. + +# ENVIRONMENT + +**FOO_CONF** +: If used, the defined file is used as configuration file (see also + the section called “FILES”). + +# DIAGNOSTICS + +The following diagnostics may be issued on stderr: + +Bad configuration file. Exiting. +: The configuration file seems to contain a broken configuration + line. Use the **\-\-verbose** option, to get more info. + +**sapphrc** provides some return codes, that can be used in scripts: + + Code Diagnostic + 0 Program exited successfully. + 1 The configuration file seems to be broken. + +# BUGS + +The program is currently limited to only work with the foobar library. + +The upstream BTS can be found at http://bugzilla.foo.tld. + +# SEE ALSO + +**bar**(1), **baz**(1), **foo.conf**(5) + +The programs are documented fully by The Rise and Fall of a Fooish Bar +available via the **info**(1) system. + +# AUTHOR + +Penelope Gwen +: Wrote this manpage for the Debian system. + +# COPYRIGHT + +Copyright © 2007 Penelope Gwen + +This manual page was written for the Debian system (and may be used by +others). + +Permission is granted to copy, distribute and/or modify this document under +the terms of the GNU General Public License, Version 2 or (at your option) +any later version published by the Free Software Foundation. + +On Debian systems, the complete text of the GNU General Public License +can be found in /usr/share/common-licenses/GPL. + +[comment]: # Local Variables: +[comment]: # mode: markdown +[comment]: # End: diff --git a/debian/manpage.sgml.ex b/debian/manpage.sgml.ex new file mode 100644 index 0000000..098d630 --- /dev/null +++ b/debian/manpage.sgml.ex @@ -0,0 +1,154 @@ + manpage.1'. You may view + the manual page with: 'docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + + + The docbook-to-man binary is found in the docbook-to-man package. + Please remember that if you create the nroff version in one of the + debian/rules file targets (such as build), you will need to include + docbook-to-man in your Build-Depends control field. + + --> + + + FIRSTNAME"> + SURNAME"> + + March 8 2024"> + + SECTION"> + support@pogmom.me"> + + Sapphrc"> + + + Debian"> + GNU"> + GPL"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2003 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + program to do something + + + + &dhpackage; + + + + + + + + DESCRIPTION + + This manual page documents briefly the + &dhpackage; and bar + commands. + + This manual page was written for the &debian; distribution + because the original program does not have a manual page. + Instead, it has documentation in the &gnu; + Info format; see below. + + &dhpackage; is a program that... + + + + OPTIONS + + These programs follow the usual &gnu; command line syntax, + with long options starting with two dashes ('-'). A summary of + options is included below. For a complete description, see the + Info files. + + + + + + + + Show summary of options. + + + + + + + + Show version of program. + + + + + + SEE ALSO + + bar (1), baz (1). + + The programs are documented fully by The Rise and + Fall of a Fooish Bar available via the + Info system. + + + AUTHOR + + This manual page was written by &dhusername; &dhemail; for + the &debian; system (and may be used by others). Permission is + granted to copy, distribute and/or modify this document under + the terms of the &gnu; General Public License, Version 2 any + later version published by the Free Software Foundation. + + + On Debian systems, the complete text of the GNU General Public + License can be found in /usr/share/common-licenses/GPL. + + + +
+ + diff --git a/debian/manpage.xml.ex b/debian/manpage.xml.ex new file mode 100644 index 0000000..c1d844a --- /dev/null +++ b/debian/manpage.xml.ex @@ -0,0 +1,291 @@ + +.
will be generated. You may view the +manual page with: nroff -man .
| less'. A typical entry +in a Makefile or Makefile.am is: + +DB2MAN = /usr/share/sgml/docbook/stylesheet/xsl/docbook-xsl/manpages/docbook.xsl +XP = xsltproc -''-nonet -''-param man.charmap.use.subset "0" + +manpage.1: manpage.xml + $(XP) $(DB2MAN) $< + +The xsltproc binary is found in the xsltproc package. The XSL files are in +docbook-xsl. A description of the parameters you can use can be found in the +docbook-xsl-doc-* packages. Please remember that if you create the nroff +version in one of the debian/rules file targets (such as build), you will need +to include xsltproc and docbook-xsl in your Build-Depends control field. +Alternatively use the xmlto command/package. That will also automatically +pull in xsltproc and docbook-xsl. + +Notes for using docbook2x: docbook2x-man does not automatically create the +AUTHOR(S) and COPYRIGHT sections. In this case, please add them manually as + ... . + +To disable the automatic creation of the AUTHOR(S) and COPYRIGHT sections +read /usr/share/doc/docbook-xsl/doc/manpages/authors.html. This file can be +found in the docbook-xsl-doc-html package. + +Validation can be done using: `xmllint -''-noout -''-valid manpage.xml` + +General documentation about man-pages and man-page-formatting: +man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/ + +--> + + + + + + + + + + + + + +]> + + + + &dhtitle; + &dhpackage; + + + &dhfirstname; + &dhsurname; + Wrote this manpage for the Debian system. +
+ &dhemail; +
+
+
+ + 2007 + &dhusername; + + + This manual page was written for the Debian system + (and may be used by others). + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU General Public License, + Version 2 or (at your option) any later version published by + the Free Software Foundation. + On Debian systems, the complete text of the GNU General Public + License can be found in + /usr/share/common-licenses/GPL. + +
+ + &dhucpackage; + &dhsection; + + + &dhpackage; + program to do something + + + + &dhpackage; + + + + + + + + + this + + + + + + + + this + that + + + + + &dhpackage; + + + + + + + + + + + + + + + + + + + DESCRIPTION + This manual page documents briefly the + &dhpackage; and bar + commands. + This manual page was written for the Debian distribution + because the original program does not have a manual page. + Instead, it has documentation in the GNU + info + 1 + format; see below. + &dhpackage; is a program that... + + + OPTIONS + The program follows the usual GNU command line syntax, + with long options starting with two dashes ('-'). A summary of + options is included below. For a complete description, see the + + info + 1 + files. + + + + + + + Does this and that. + + + + + + + Show summary of options. + + + + + + + Show version of program. + + + + + + FILES + + + /etc/foo.conf + + The system-wide configuration file to control the + behaviour of &dhpackage;. See + + foo.conf + 5 + for further details. + + + + ${HOME}/.foo.conf + + The per-user configuration file to control the + behaviour of &dhpackage;. See + + foo.conf + 5 + for further details. + + + + + + ENVIRONMENT + + + FOO_CONF + + If used, the defined file is used as configuration + file (see also ). + + + + + + DIAGNOSTICS + The following diagnostics may be issued + on stderr: + + + Bad configuration file. Exiting. + + The configuration file seems to contain a broken configuration + line. Use the option, to get more info. + + + + + &dhpackage; provides some return codes, that can + be used in scripts: + + Code + Diagnostic + + 0 + Program exited successfully. + + + 1 + The configuration file seems to be broken. + + + + + + BUGS + The program is currently limited to only work + with the foobar library. + The upstreams BTS can be found + at . + + + SEE ALSO + + + bar + 1 + , + baz + 1 + , + foo.conf + 5 + + The programs are documented fully by The Rise and + Fall of a Fooish Bar available via the + info + 1 + system. + +
+ diff --git a/debian/postinst.ex b/debian/postinst.ex new file mode 100644 index 0000000..6bf00a9 --- /dev/null +++ b/debian/postinst.ex @@ -0,0 +1,39 @@ +#!/bin/sh +# postinst script for sapphrc. +# +# See: dh_installdeb(1). + +set -e + +# Summary of how this script can be called: +# * 'configure' +# * 'abort-upgrade' +# * 'abort-remove' 'in-favour' +# +# * 'abort-remove' +# * 'abort-deconfigure' 'in-favour' +# 'removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package. + + +case "$1" in + configure) + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument '$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/postrm.ex b/debian/postrm.ex new file mode 100644 index 0000000..a5ae940 --- /dev/null +++ b/debian/postrm.ex @@ -0,0 +1,37 @@ +#!/bin/sh +# postrm script for sapphrc. +# +# See: dh_installdeb(1). + +set -e + +# Summary of how this script can be called: +# * 'remove' +# * 'purge' +# * 'upgrade' +# * 'failed-upgrade' +# * 'abort-install' +# * 'abort-install' +# * 'abort-upgrade' +# * 'disappear' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package. + + +case "$1" in + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument '$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/preinst.ex b/debian/preinst.ex new file mode 100644 index 0000000..a46880b --- /dev/null +++ b/debian/preinst.ex @@ -0,0 +1,35 @@ +#!/bin/sh +# preinst script for sapphrc. +# +# See: dh_installdeb(1). + +set -e + +# Summary of how this script can be called: +# * 'install' +# * 'install' +# * 'upgrade' +# * 'abort-upgrade' +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package. + + +case "$1" in + install|upgrade) + ;; + + abort-upgrade) + ;; + + *) + echo "preinst called with unknown argument '$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/prerm.ex b/debian/prerm.ex new file mode 100644 index 0000000..50e5463 --- /dev/null +++ b/debian/prerm.ex @@ -0,0 +1,38 @@ +#!/bin/sh +# prerm script for sapphrc. +# +# See: dh_installdeb(1). + +set -e + +# Summary of how this script can be called: +# * 'remove' +# * 'upgrade' +# * 'failed-upgrade' +# * 'remove' 'in-favour' +# * 'deconfigure' 'in-favour' +# 'removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package. + + +case "$1" in + remove|upgrade|deconfigure) + ;; + + failed-upgrade) + ;; + + *) + echo "prerm called with unknown argument '$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..f1d1d25 --- /dev/null +++ b/debian/rules @@ -0,0 +1,26 @@ +#!/usr/bin/make -f + +# See debhelper(7) (uncomment to enable). +# Output every command that modifies files on the build system. +#export DH_VERBOSE = 1 + + +# See FEATURE AREAS in dpkg-buildflags(1). +#export DEB_BUILD_MAINT_OPTIONS = hardening=+all + +# See ENVIRONMENT in dpkg-buildflags(1). +# Package maintainers to append CFLAGS. +#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic +# Package maintainers to append LDFLAGS. +#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed + + +%: + dh $@ + + +# dh_make generated override targets. +# This is an example for Cmake (see ). +#override_dh_auto_configure: +# dh_auto_configure -- \ +# -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) diff --git a/debian/salsa-ci.yml.ex b/debian/salsa-ci.yml.ex new file mode 100644 index 0000000..11a64c6 --- /dev/null +++ b/debian/salsa-ci.yml.ex @@ -0,0 +1,10 @@ +# For more information on what jobs are run see: +# https://salsa.debian.org/salsa-ci-team/pipeline +# +# To enable the jobs, go to your repository (at salsa.debian.org) +# and click over Settings > CI/CD > Expand (in General pipelines). +# In "CI/CD configuration file" write debian/salsa-ci.yml and click +# in "Save Changes". The CI tests will run after the next commit. +--- +include: + - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/recipes/debian.yml diff --git a/debian/sapphrc-docs.docs b/debian/sapphrc-docs.docs new file mode 100644 index 0000000..a25c234 --- /dev/null +++ b/debian/sapphrc-docs.docs @@ -0,0 +1,3 @@ +README +README.source +README.Debian diff --git a/debian/sapphrc.cron.d.ex b/debian/sapphrc.cron.d.ex new file mode 100644 index 0000000..efb35fb --- /dev/null +++ b/debian/sapphrc.cron.d.ex @@ -0,0 +1,4 @@ +# +# Regular cron jobs for the sapphrc package. +# +0 4 * * * root [ -x /usr/bin/sapphrc_maintenance ] && /usr/bin/sapphrc_maintenance diff --git a/debian/sapphrc.doc-base.ex b/debian/sapphrc.doc-base.ex new file mode 100644 index 0000000..b657b32 --- /dev/null +++ b/debian/sapphrc.doc-base.ex @@ -0,0 +1,20 @@ +Document: sapphrc +Title: Debian sapphrc Manual +Author: +Abstract: This manual describes what sapphrc is + and how it can be used to + manage online manuals on Debian systems. +Section: unknown + +Format: debiandoc-sgml +Files: /usr/share/doc/sapphrc/sapphrc.sgml.gz + +Format: postscript +Files: /usr/share/doc/sapphrc/sapphrc.ps.gz + +Format: text +Files: /usr/share/doc/sapphrc/sapphrc.text.gz + +Format: HTML +Index: /usr/share/doc/sapphrc/html/index.html +Files: /usr/share/doc/sapphrc/html/*.html diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..89ae9db --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/lib/sapphrc/sapphrc-font b/lib/sapphrc/sapphrc-font new file mode 100644 index 0000000..6d046f4 --- /dev/null +++ b/lib/sapphrc/sapphrc-font @@ -0,0 +1,4 @@ +#!/bin/bash + +bold=$(tput bold) +normal=$(tput sgr0) diff --git a/lib/sapphrc/sapphrc-functions b/lib/sapphrc/sapphrc-functions new file mode 100644 index 0000000..44d821b --- /dev/null +++ b/lib/sapphrc/sapphrc-functions @@ -0,0 +1,98 @@ +#!/bin/bash + +sapphrc_config="$HOME/.config/sapphrc" + +usage(){ + echo -n "spm " + cat /usr/share/doc/sapphrc/$(basename $0) +} + +check_name(){ + if [ -z "${1}" ];then + $2 || echo "Profile name cannot be blank" + return 0 + fi + if [[ ! "$1" =~ ^[a-zA-Z0-9_-]+$ ]];then + $2 || echo "Profile name can only contain numbers, letters, hyphens, and underscores" + return 0 + fi + return 1 +} + +validate_profile(){ + profile_name="${1}" + first_check=true + while check_name "${profile_name}" "$first_check";do + first_check=false + if [ "$COMMAND" == "create" ];then + read -p "Profile Name: " profile_name + else + backups=( "${sapphrc_config}/backups/"* ) + echo "$backups" + if [ -d "${backups[0]}" ];then + select d in $(ls "${sapphrc_config}/backups/");do test -n "$d" && break; echo ">>> Invalid Selection"; done + profile_name="$d" + else + echo "No backups exist!" + exit 1 + fi + fi + done + sapphrc_profile="${sapphrc_config}/backups/${profile_name}" + sapphrc_profile_rcdir="${sapphrc_profile}/home/.sapphrc" + sapphrc_profile_rc="${sapphrc_profile_rcdir}/${profile_name}" +} + +inex_func(){ + validate_profile "${profile_name}" + [ ${#@} -eq 0 ] && echo "No files selected" && exit 1 + for file in "$@";do + fullpath=$(realpath "${file}") + if ! [[ "$fullpath" =~ ^"$HOME/".* ]];then + echo "file not in home dir" + break + fi + if ! [[ -d "$file" || -f "$file" ]];then + echo "file does not exist" + break + fi + filelist+=(${fullpath#$HOME/}) + done + + for e in ${filelist[@]};do + echo $e + done + + read -p "${bold}Add the listed files/directories to profile '${profile_name}'?${normal} (Y/n)" yn + if ! [[ "${yn}" =~ ^([nN][oO]|[nN])$ ]];then + for e in ${filelist[@]};do + if grep -q ^"${e}"$ "${sapphrc_config}/backups/${profile_name}/${inex}";then + echo "already in file" + else + echo $e|tee -a "${sapphrc_config}/backups/${profile_name}/${inex}" >/dev/null + fi + done + fi +} + +inex_rm(){ + validate_profile "${profile_name}" + i=0 + while read line; do + rmfiles+=("$i");i=$(($i+1)) + rmfiles+=("$line") + rmfiles+=("$line") + done < "${sapphrc_config}/backups/${profile_name}/${inex}" + [ ${#rmfiles[@]} -eq 0 ] && echo "No files in list" && exit 1 + choices=($(dialog --checklist --output-fd 1 "Select options:" 0 0 0 "${rmfiles[@]}")) + if [ $? -ne 0 ]; then + echo "User canceled." + exit 1 + fi + + for choice in "${choices[@]}"; do + rmlines="${rmlines}$((${choice}+1))d;" + done + sed -i "${rmlines}" "${sapphrc_config}/backups/${profile_name}/${inex}" + echo "Removed ${#choices[@]} paths from ${profile_name} ${inex} list" +} diff --git a/lib/sapphrc/version b/lib/sapphrc/version new file mode 100644 index 0000000..d3827e7 --- /dev/null +++ b/lib/sapphrc/version @@ -0,0 +1 @@ +1.0 diff --git a/usr/bin/.sapphrc_restore.swp b/usr/bin/.sapphrc_restore.swp new file mode 100644 index 0000000..9caec2f Binary files /dev/null and b/usr/bin/.sapphrc_restore.swp differ diff --git a/usr/bin/sapphrc b/usr/bin/sapphrc new file mode 100755 index 0000000..e908887 --- /dev/null +++ b/usr/bin/sapphrc @@ -0,0 +1,44 @@ +#!/bin/bash + +COMMAND="${1}" +VERSION=$(cat /lib/sapphrc/version) + +setup() { + sapphrc_setup $@ +} + +profile() { + sapphrc_profile $@ +} + +backup() { + sapphrc_backup $@ +} + +restore() { + sapphrc_restore $@ +} + +usage() { + echo "Sapphic Package Manager v${VERSION}" + cat ./usr/share/doc/sapphrc/sapphrc + sed -e 's/^/ /' /usr/share/doc/sapphrc/sapphrc_setup + sed -e 's/^/ /' /usr/share/doc/sapphrc/sapphrc_profile + sed -e 's/^/ /' /usr/share/doc/sapphrc/sapphrc_backup + sed -e 's/^/ /' /usr/share/doc/sapphrc/sapphrc_restore +} + +case $COMMAND in + setup|profile|backup|restore ) + shift 1;;& + setup ) + setup $@;; + profile ) + profile $@;; + backup ) + backup $@;; + restore ) + restore $@;; + *|usage ) + usage;; +esac diff --git a/usr/bin/sapphrc_backup b/usr/bin/sapphrc_backup new file mode 100755 index 0000000..328ff73 --- /dev/null +++ b/usr/bin/sapphrc_backup @@ -0,0 +1,11 @@ +#!/bin/bash + +sapphrc_config="$HOME/.config/sapphrc" + +cat "${sapphrc_config}/active_profiles" | while read profile_name +do + backup_homedir="$sapphrc_config/backups/${profile_name}/home" + include_list="$sapphrc_config/backups/${profile_name}/include" + exclude_list="$sapphrc_config/backups/${profile_name}/exclude" + rsync -avSH --files-from="${include_list}" --exclude-from="${exclude_list}" --exclude '.config/sapphrc/' "${HOME}" "${backup_homedir}" +done diff --git a/usr/bin/sapphrc_exclude b/usr/bin/sapphrc_exclude new file mode 100755 index 0000000..59e6ce2 --- /dev/null +++ b/usr/bin/sapphrc_exclude @@ -0,0 +1,34 @@ +#!/bin/bash + +COMMAND=$1 + +source ./lib/sapphrc/sapphrc-functions +source ./lib/sapphrc/sapphrc-font + +inex="exclude" + +case $COMMAND in + add|remove ) + shift 1;;& + add ) + action="add";; + remove ) + action="remove";; + * ) + usage + exit 1;; +esac + +while getopts 'hp:' flag; do + case "${flag}" in + p ) echo "${OPTARG}";shift 2;profile_name="${OPTARG}";;& + h ) usage;exit 1 ;; + esac +done + +case "${action}" in + add ) + inex_func "$@";; + remove ) + inex_rm "$@";; +esac diff --git a/usr/bin/sapphrc_include b/usr/bin/sapphrc_include new file mode 100755 index 0000000..81d4cac --- /dev/null +++ b/usr/bin/sapphrc_include @@ -0,0 +1,34 @@ +#!/bin/bash + +COMMAND=$1 + +source ./lib/sapphrc/sapphrc-functions +source ./lib/sapphrc/sapphrc-font + +inex="include" + +case $COMMAND in + add|remove ) + shift 1;;& + add ) + action="add";; + remove ) + action="remove";; + * ) + usage + exit 1;; +esac + +while getopts 'hp:' flag; do + case "${flag}" in + p ) echo "${OPTARG}";shift 2;profile_name="${OPTARG}";;& + h ) usage;exit 1 ;; + esac +done + +case "${action}" in + add ) + inex_func "$@";; + remove ) + inex_rm "$@";; +esac diff --git a/usr/bin/sapphrc_profile b/usr/bin/sapphrc_profile new file mode 100755 index 0000000..ea188c1 --- /dev/null +++ b/usr/bin/sapphrc_profile @@ -0,0 +1,74 @@ +#!/bin/bash + +source ./lib/sapphrc/sapphrc-functions +source ./lib/sapphrc/sapphrc-font + +COMMAND="${1}" + +sapphrc_config="${HOME}/.config/sapphrc" + +create(){ + mkdir -p "${sapphrc_profile_rcdir}" + touch "${sapphrc_profile}/"{include,exclude} + echo '#!/bin/bash'|tee "${sapphrc_profile_rc}" > /dev/null + echo ".sapphrc/${profile_name}"|tee "${sapphrc_profile}/include" > /dev/null + chmod +x "${sapphrc_profile_rc}" + echo "Successfully created '${profile_name}'" + join "${profile_name}" +} + +remove(){ + echo "WARNING: really remove profile '${profile_name}'?" + echo "~${sapphrc_profile#$HOME} and all its contents will be deleted!" + read -p "Confirm removal (y/N): " confirm_remove + if [[ "${confirm_remove}" =~ ^([yY][eE][sS]|[yY])$ ]];then + leave + echo "removing '${profile_name}'" + rm -r "${sapphrc_profile}" + echo "Profile '${profile_name}' has been removed. Be sure to leave the profile on other machines/accounts to avoid synchronization issues." + fi +} + +join(){ + if grep -q ^"${profile_name}"$ "${sapphrc_config}/active_profiles";then + echo "Already joined ${profile_name}, nothing to do." + else + echo "${profile_name}"|tee -a "${sapphrc_config}/active_profiles" > /dev/null + echo "Successfully joined '${profile_name}'!" + fi +} + +leave(){ + if grep -q ^"${profile_name}"$ "${sapphrc_config}/active_profiles";then + sed -i '/^'"${profile_name}"'$/d' "${sapphrc_config}/active_profiles" + [ -e "${HOME}/.sapphrc/${profile_name}" ] && rm "${HOME}/.sapphrc/${profile_name}" + echo "Successfully left '${profile_name}'!" + else + echo "You have not joined '${profile_name}', nothing to do." + fi +} + +list(){ + echo "${bold}Active profiles:${normal}" + cat "${sapphrc_config}/active_profiles" + echo "${bold}Available profiles:${normal}" + ls "${sapphrc_config}/backups/" | cat +} + +case $COMMAND in + create|remove|join|leave ) + shift 1; + validate_profile $@;;& + create ) + create $@;; + remove ) + remove $@;; + join ) + join $@;; + leave ) + leave $@;; + list ) + list;; + *|usage ) + usage;; +esac diff --git a/usr/bin/sapphrc_restore b/usr/bin/sapphrc_restore new file mode 100755 index 0000000..3d8800e --- /dev/null +++ b/usr/bin/sapphrc_restore @@ -0,0 +1,11 @@ +#!/bin/bash + +sapphrc_config="$HOME/.config/sapphrc" + +cat "${sapphrc_config}/active_profiles" | while read profile_name +do + backup_homedir="$sapphrc_config/backups/${profile_name}/home" + include_list="$sapphrc_config/backups/${profile_name}/include" + exclude_list="$sapphrc_config/backups/${profile_name}/exclude" + rsync -avSH --files-from="${include_list}" --exclude-from="${exclude_list}" --exclude '.config/sapphrc/' "${backup_homedir}" "${HOME}" +done diff --git a/usr/bin/sapphrc_setup b/usr/bin/sapphrc_setup new file mode 100755 index 0000000..8013561 --- /dev/null +++ b/usr/bin/sapphrc_setup @@ -0,0 +1,64 @@ +#!/bin/bash + + +sapphrc_config="$HOME/.config/sapphrc" +if [ -f "${aspphic_config}/.init_complete"];then + echo "already setup" + exit 0 +fi + +mkdir -p "${sapphrc_config}" +mkdir -p "${HOME}/.sapphrc" + +while true;do + read -p "use an existing git repo? (y/n)" gitrepo_exists + case $gitrepo_exists in + [Yy] ) + read -p "Enter YOUR git repo url: " git_url + git clone "${git_url}" "${sapphic_config}/backups" + touch "${aspphic_config}/.init_complete" + backup_count="0" + backups=($(ls "${sapphrc_config}/backups/")) + for b in ${backups[@]};do + echo $b + [ -d "${sapphrc_config}/backups/${b}" ] && backup_count=$(($backup_count+1)) + done + + if [[ backup_count -gt 0 ]];then + read -p "Found existing profile(s). Join one? (Y/n) " yn + [[ "${yn}" =~ ^([nN][oO]|[nN])$ ]] || sapphrc profile join + else + sapphrc profile create default + fi + break + ;; + [Nn] ) + mkdir -p "${sapphrc_config}/backups" + cd "${sapphrc_config}/backups" + git init + git add "${sapphrc_config}/backups/." + git commit -m "first commit" + git branch -M main + read -p "Enter YOUR git repo url: " git_url + git remote add origin "${git_url}" + git push -u origin main + break + ;; + esac +done + +##link ~/.sapphrc/* files to .bashrc +sapphrc_bashrc="$(awk '/.sapphrc/,/done/' ~/.bashrc)" +if [[ "${#sapphrc_bashrc}" -eq 0 ]];then + echo "for file in ~/.sapphrc/* ; do" >> $HOME/.bashrc + echo " if [ -f \"$file\" ] ; then" >> $HOME/.bashrc + echo " source \"$file\"" >> $HOME/.bashrc + echo " fi" >> $HOME/.bashrc + echo "done" >> $HOME/.bashrc +fi + +mkdir -p $HOME/.cache/sapphrc/ +crontab -l > $HOME/.cache/sapphrc/crontab +echo "*/15 * * * * sapphrc_updown" >> $HOME/.cache/sapphrc/crontab +crontab $HOME/.cache/sapphrc/crontab +rm $HOME/.cache/sapphrc/crontab diff --git a/usr/bin/sapphrc_updown b/usr/bin/sapphrc_updown new file mode 100644 index 0000000..300f5c0 --- /dev/null +++ b/usr/bin/sapphrc_updown @@ -0,0 +1,4 @@ +#!/bin/bash + +sapphrc_restore +sapphrc_backup diff --git a/usr/share/doc/sapphrc/sapphrc b/usr/share/doc/sapphrc/sapphrc new file mode 100644 index 0000000..1330ddd --- /dev/null +++ b/usr/share/doc/sapphrc/sapphrc @@ -0,0 +1,6 @@ +Usage: spm command [options] + +Sapphrc is a dotfiles manager with support for multiple profile and git synchonization + +Commands: + usage: Print this dialogue diff --git a/usr/share/doc/sapphrc/sapphrc_backup b/usr/share/doc/sapphrc/sapphrc_backup new file mode 100644 index 0000000..78d3ebf --- /dev/null +++ b/usr/share/doc/sapphrc/sapphrc_backup @@ -0,0 +1,3 @@ +backup: update profile based on current configuration + usage: + sapphrc backup diff --git a/usr/share/doc/sapphrc/sapphrc_exclude b/usr/share/doc/sapphrc/sapphrc_exclude new file mode 100644 index 0000000..e0ea58b --- /dev/null +++ b/usr/share/doc/sapphrc/sapphrc_exclude @@ -0,0 +1,3 @@ +backup: update profile based on current configuration + usage: + sapphrc exclude [action] (-p ) diff --git a/usr/share/doc/sapphrc/sapphrc_include b/usr/share/doc/sapphrc/sapphrc_include new file mode 100644 index 0000000..a1a869c --- /dev/null +++ b/usr/share/doc/sapphrc/sapphrc_include @@ -0,0 +1 @@ +include diff --git a/usr/share/doc/sapphrc/sapphrc_profile b/usr/share/doc/sapphrc/sapphrc_profile new file mode 100644 index 0000000..f9f7193 --- /dev/null +++ b/usr/share/doc/sapphrc/sapphrc_profile @@ -0,0 +1,8 @@ +profile: manage sapphrc profiles + usage: + sapphrc profile [action] (profile) + actions: + create: creates a new sapphrc profile and joins it + remove: leaves and deletes an existing sapphrc profile + join: joins an existing sapphrc profile + leave: leaves an existing sapphrc profile diff --git a/usr/share/doc/sapphrc/sapphrc_restore b/usr/share/doc/sapphrc/sapphrc_restore new file mode 100644 index 0000000..fd3b8de --- /dev/null +++ b/usr/share/doc/sapphrc/sapphrc_restore @@ -0,0 +1,3 @@ +backup: update current configuration from available profile updates + usage: + sapphrc restore diff --git a/usr/share/doc/sapphrc/sapphrc_setup b/usr/share/doc/sapphrc/sapphrc_setup new file mode 100644 index 0000000..e69de29