123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #!/bin/bash
- #This script copies all the scripts specified in a file to a vm of your choice.
- #This is a qubes-os specific script.
- # i3-copy-scripts - Copy scripts to a vm of your choice.
- # Copyright (C) 2017 Fabrizio Romano Genovese <egonigredo@gmail.com>
- # This copyrighted material is made available to anyone wishing to use,
- # modify, copy, or redistribute it subject to the terms and conditions of
- # the GNU General Public License v.2, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful, but WITHOUT
- # ANY WARRANTY expressed or implied, including the implied warranties 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 <http://www.gnu.org/licenses/>
- # Put this file in /bin/ or in /usr/bin. Do not forget to give
- # sudo chmod +x i3-copy-scripts
- # to make it executable.
- # The subroutine that copies files
- version=1.1
- scripts_file=$HOME/.config/i3/i3-copy-scripts
- configs_file=$HOME/.config/i3/i3-copy-configs
- # This is the subroutine that performs the copying.
- # It checks that the config file exists and is not empty before
- # proceeding.
- checker()
- {
- vmstate=`qvm-check $1 | grep "not"`
- if [ -z "$vmstate" ]; then
- echo "VM $1 exists. Proceeding."
- else
- echo "The VM $1 does not exist. Aborting."
- echo "Usage: $0 {-v, --version|-h, --help| vmname}"
- exit 2
- fi
- }
- copy_scripts()
- {
- if [ ! -f $scripts_file ]; then
- echo "The scrips file does not exist!"
- exit 2
- elif [ -z `sed -n "1p" $scripts_file` ]; then
- echo "The scripts file is empty!"
- exit 2
- else
- # Here we copy all the scripts specified in the file
- # until we hit an empty line
- line_number=1
- while [ ! -z `sed -n "${line_number}p" $scripts_file` ]; do
- script=`sed -n "${line_number}p" $scripts_file`
- # Evaluate ~ if present
- script="${script/#\~/$HOME}"
- echo "Copying $script..."
- # Here we abort if a script specified in the file does not exist
- # or cannot be located
- if [ ! -f $script ]; then
- echo "The script '$script' does not exist or I cannot find it."
- echo "Aborting."
- exit 2
- fi
- # For security reason we don't want to export executable scripts.
- # So we make the script not executable, we pass it to the app vm
- # and we make it executable again for dom0. The change of permission must be done
- # locally, since invoking it with qvm-run within the appvm causes permission
- # problems.
- sudo chmod -x $script
- qvm-copy-to-vm $1 $script
- sudo chmod +x $script
- let line_number=line_number+1
- done
- # Here we copy all the configurations specified in the file
- # until we hit an empty line
- line_number=1
- while [ ! -z `sed -n "${line_number}p" $configs_file` ]; do
- config=`sed -n "${line_number}p" $configs_file`
- # Evaluate ~ if present
- config="${config/#\~/$HOME}"
- echo "Copying $config..."
- # Here we abort if a configuration file specified in the file does not exist
- # or cannot be located
- if [ ! -f $config ]; then
- echo "The configuration file '$config' does not exist or I cannot find it."
- echo "Aborting."
- exit 2
- fi
- # Here we copy to appvm
- qvm-copy-to-vm $1 $config
- let line_number=line_number+1
- done
- fi
- }
- # Here we give help messages and the like
- if [[ $# -le 1 ]]; then
- case $1 in
- -v | --version)
- echo "$0 - Version $version"
- exit 0
- ;;
- -h | --help)
- echo "This script is QubesOS specific.
- Usage: $0 {-v, --version|-h, --help| vmname}.
- It copies all the scripts/configuration files specified in a file to a vm of your choice. All the inputs must have the format
- /path/to/script/script
- There has to be one input per line, whithout empty lines.
- The scripts to copy have to be specified in the file
- ~./config/i3/i3-copy-scripts.
- The configuration files to copy have to be specified in the file ~./config/i3/i3-copy-configs.
- - v, --version Display current version
- -h, --help Display this message
- vmname Copies the scripts to vmname appvm"
- exit 0
- ;;
- *)
- # Gives usage instruction if imput is empty
- if [ -z ${1} ]; then
- echo "Usage: $0 {-v, --version|-h, --help|up|toggle|down}"
- exit 2
- fi
- # Check if the appvm exists
- checker $1
- # If the appvm exists, it copies the files
- copy_scripts $1
- esac
- fi
|