Rewriting config-user.sh
The easy parts of config-user.sh have been rewritten to python. I tried to avoid using subprocess wherever possible. Some parts remain open (see TODOs), but it should mostly work. Probably
This commit is contained in:
parent
c6116bac21
commit
e1cafcfd6a
@ -18,6 +18,12 @@ fi
|
|||||||
# keep sudo active in background
|
# keep sudo active in background
|
||||||
func_dont_timeout &
|
func_dont_timeout &
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
############################################################
|
||||||
|
###################### INSTALL CONFIG ######################
|
||||||
|
############################################################
|
||||||
|
EOF
|
||||||
|
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
########################################
|
########################################
|
||||||
################ Setup ################
|
################ Setup ################
|
||||||
@ -42,20 +48,6 @@ if ! cmp --silent "$scriptloc" "$HOME/scripts/arch-config.sh"; then
|
|||||||
cp "$tempdir/arch-config/scripts/arch-config.sh" "$HOME/scripts/" && bash ~/scripts/arch-config.sh "$@"
|
cp "$tempdir/arch-config/scripts/arch-config.sh" "$HOME/scripts/" && bash ~/scripts/arch-config.sh "$@"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# FIXME compare correct script
|
|
||||||
# check config-user script
|
|
||||||
#if ! cmp --silent "$scriptloc" "$HOME/scripts/config-user.sh"; then
|
|
||||||
# echo Updated config-user script.
|
|
||||||
# cp "$tempdir/arch-config/scripts/config-user.sh" "$HOME/scripts/"
|
|
||||||
#fi
|
|
||||||
|
|
||||||
# FIXME compare correct script
|
|
||||||
# check config-root script
|
|
||||||
#if ! cmp --silent "$scriptloc" "$HOME/scripts/config-root.sh"; then
|
|
||||||
# echo Updated config-root script.
|
|
||||||
# cp "$tempdir/arch-config/scripts/config-root.sh" "$HOME/scripts/"
|
|
||||||
#fi
|
|
||||||
|
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
########################################
|
########################################
|
||||||
############## Start Setup #############
|
############## Start Setup #############
|
||||||
@ -66,7 +58,7 @@ EOF
|
|||||||
pids=""
|
pids=""
|
||||||
|
|
||||||
# call user script
|
# call user script
|
||||||
bash "$tempdir/arch-config/scripts/config-user.sh" &
|
python "$tempdir/arch-config/scripts/config-user.py" &
|
||||||
pids="$pids $!"
|
pids="$pids $!"
|
||||||
|
|
||||||
# call root script
|
# call root script
|
||||||
|
298
arch-config/scripts/config-user.py
Normal file
298
arch-config/scripts/config-user.py
Normal file
@ -0,0 +1,298 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import re
|
||||||
|
import dialog # install pythondialog
|
||||||
|
|
||||||
|
def func_seltheme():
|
||||||
|
"""
|
||||||
|
Dialogue to select a theme
|
||||||
|
"""
|
||||||
|
d = dialog.Dialog(dialog="dialog")
|
||||||
|
|
||||||
|
options = ["Nyarch", "Spaceengine Pink"]
|
||||||
|
|
||||||
|
response, selected_index = d.menu("Select theme", choices=options)
|
||||||
|
|
||||||
|
# User selects an option
|
||||||
|
if response == 0:
|
||||||
|
theme: str = options[selected_index]
|
||||||
|
# write theme name defined in `options` to .seltheme
|
||||||
|
with open(f"{home_dir}/.seltheme", "w") as file:
|
||||||
|
file.write(theme)
|
||||||
|
|
||||||
|
def copy_firefox():
|
||||||
|
"""
|
||||||
|
Copy configuration for Firefox
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""
|
||||||
|
Main function
|
||||||
|
"""
|
||||||
|
global home_dir
|
||||||
|
home_dir = os.environ["HOME"]
|
||||||
|
|
||||||
|
# find temporary directory
|
||||||
|
scriptloc = os.path.abspath(__file__)
|
||||||
|
tempdir = os.path.dirname(scriptloc)
|
||||||
|
|
||||||
|
# Force theme selection if none has been selected yet
|
||||||
|
if not os.path.isfile(os.path.join(home_dir, ".seltheme")):
|
||||||
|
func_seltheme()
|
||||||
|
|
||||||
|
print("""\
|
||||||
|
########################################
|
||||||
|
################ Backup ################
|
||||||
|
########################################\
|
||||||
|
""")
|
||||||
|
|
||||||
|
####################
|
||||||
|
##### Cleaning #####
|
||||||
|
####################
|
||||||
|
|
||||||
|
# Remove old backup
|
||||||
|
old_dat_path = os.path.join(home_dir, "old_dat")
|
||||||
|
if os.path.isdir(old_dat_path):
|
||||||
|
print("Removing old backup")
|
||||||
|
shutil.rmtree(old_dat_path)
|
||||||
|
|
||||||
|
####################
|
||||||
|
##### Creating #####
|
||||||
|
####################
|
||||||
|
|
||||||
|
# create folders
|
||||||
|
print("Creating backup")
|
||||||
|
os.makedirs(old_dat_path)
|
||||||
|
os.makedirs(os.path.join(old_dat_path, ".config"))
|
||||||
|
os.makedirs(os.path.join(old_dat_path, ".doom.d"))
|
||||||
|
os.makedirs(os.path.join(old_dat_path, ".mozilla"))
|
||||||
|
os.makedirs(os.path.join(old_dat_path, "scripts"))
|
||||||
|
os.makedirs(os.path.join(old_dat_path, ".ssh"))
|
||||||
|
os.makedirs(os.path.join(old_dat_path, ".local"))
|
||||||
|
os.makedirs(os.path.join(old_dat_path, ".local", "share"))
|
||||||
|
|
||||||
|
# backup config folders
|
||||||
|
config_folders = ["MangoHud","fish","gtk-3.0","sway","polybar"]
|
||||||
|
|
||||||
|
for folder in config_folders:
|
||||||
|
src = os.path.join(home_dir, f".config/{folder}")
|
||||||
|
if os.path.isdir(src):
|
||||||
|
dst = os.path.join(old_dat_path, ".config")
|
||||||
|
shutil.copytree(src, dst)
|
||||||
|
|
||||||
|
# backup main level folders
|
||||||
|
other_folders = [".ssh",".mozilla","scripts"]
|
||||||
|
|
||||||
|
for folder in other_folders:
|
||||||
|
src = os.path.join(home_dir, folder)
|
||||||
|
if os.path.isdir(src):
|
||||||
|
shutil.copytree(src, old_dat_path)
|
||||||
|
|
||||||
|
####################
|
||||||
|
###### Cleanup #####
|
||||||
|
####################
|
||||||
|
|
||||||
|
folders = [".config/Vorlagen","scripts/in_path","scripts/pieces","scripts/polybar","scripts/archive"]
|
||||||
|
|
||||||
|
for folder in folders:
|
||||||
|
path = os.path.join(home_dir, folder)
|
||||||
|
if os.path.isdir(path):
|
||||||
|
shutil.rmtree(path)
|
||||||
|
|
||||||
|
print("""\
|
||||||
|
########################################
|
||||||
|
########### Copy New Config ###########
|
||||||
|
########################################\
|
||||||
|
""")
|
||||||
|
|
||||||
|
# copy folders
|
||||||
|
copy_folders = [".config",".local",".ssh","scripts"]
|
||||||
|
|
||||||
|
for folder in copy_folders:
|
||||||
|
path = os.path.join(tempdir, "arch-config", folder)
|
||||||
|
shutil.copytree(path, home_dir)
|
||||||
|
|
||||||
|
# copy files
|
||||||
|
copy_files = [".face",".gtkrc-2.0",".gitconfig",".kopiaignore",".Xdefaults"]
|
||||||
|
|
||||||
|
for file in copy_files:
|
||||||
|
path = os.path.join(tempdir, "arch-config", file)
|
||||||
|
shutil.copy(path, home_dir)
|
||||||
|
|
||||||
|
# Copy firefox if argument "-f" or "--firefox" is given
|
||||||
|
if copy_firefox and os.path.isdir(os.path.join(home_dir, ".mozilla/firefox")):
|
||||||
|
firefox_dirs = [dirname for dirname in os.listdir(os.path.join(home_dir,".mozilla/firefox")) if re.search('.*default-release', dirname)]
|
||||||
|
if len(firefox_dirs) >= 1:
|
||||||
|
for directory in firefox_dirs:
|
||||||
|
src = os.path.join(tempdir, "arch-config/.mozilla/firefox/default-release")
|
||||||
|
shutil.copytree(src, directory)
|
||||||
|
else:
|
||||||
|
print("Please launch firefox and then update the config again")
|
||||||
|
else:
|
||||||
|
print("Please launch firefox and then update the config again")
|
||||||
|
|
||||||
|
print("Copied folder and files")
|
||||||
|
|
||||||
|
print("""\
|
||||||
|
##############################
|
||||||
|
##### Per Device Settings ####
|
||||||
|
##############################\
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Skipped for now
|
||||||
|
# shell commands as reference
|
||||||
|
'''
|
||||||
|
# lupusregina
|
||||||
|
# TODO analyse parts necessary for Wayland with Alita
|
||||||
|
if [ "$(hostname)" == "lupusregina" ]; then
|
||||||
|
echo "Applying overrides for $(hostname)"
|
||||||
|
# polybar dpi
|
||||||
|
polybardpi="$(cat ~/configs/arch-config/per-device/lupusregina/polybar-dpi-override.ini)"
|
||||||
|
awk -v polybardpi="$polybardpi" '/;per-device dpi insert/{print;print polybardpi;next}1' ~/.config/polybar/i3config.ini >/tmp/i3config.ini
|
||||||
|
cp /tmp/i3config.ini ~/.config/polybar/i3config.ini
|
||||||
|
# xresources dpi
|
||||||
|
xftdpi="$(cat ~/configs/arch-config/per-device/lupusregina/xresources-dpi-override)"
|
||||||
|
awk -v xftdpi="$xftdpi" '/!per-device dpi insert/{print;print xftdpi;next}1' ~/.Xdefaults >/tmp/.Xdefaults
|
||||||
|
cp /tmp/.Xdefaults ~/.Xdefaults
|
||||||
|
fi
|
||||||
|
'''
|
||||||
|
|
||||||
|
print("""\
|
||||||
|
####################
|
||||||
|
###### Theme ######
|
||||||
|
####################\
|
||||||
|
""")
|
||||||
|
|
||||||
|
# read selected theme
|
||||||
|
seltheme = ""
|
||||||
|
with open(os.path.join(home_dir, ".seltheme"), "r") as file:
|
||||||
|
seltheme = file.read()
|
||||||
|
|
||||||
|
match seltheme:
|
||||||
|
case "Nyarch":
|
||||||
|
shutil.copy(os.path.join(tempdir, "arch-themes/nyarch/sway/color"), os.path.join(home_dir, ".config/sway/config.d"))
|
||||||
|
case "Spaceengine Pink":
|
||||||
|
shutil.copy(os.path.join(tempdir, "arch-themes/space-pink/sway/color"), os.path.join(home_dir, ".config/sway/config.d"))
|
||||||
|
case _:
|
||||||
|
raise ValueError("No theme defined")
|
||||||
|
|
||||||
|
# copy chosen image for lockscreen and desktop
|
||||||
|
backgroundimage = "/home/exu/Bilder/Backgrounds/artstation/dk-lan/artstation_14224733_55806391_月半与鬼哭.jpg"
|
||||||
|
|
||||||
|
os.makedirs(os.path.join(home_dir, ".cache"))
|
||||||
|
os.makedirs(os.path.join(home_dir, ".cache", "backgrounds"))
|
||||||
|
|
||||||
|
shutil.copy(backgroundimage,os.path.join(home_dir,".cache/backgrounds/desktop"))
|
||||||
|
shutil.copy(backgroundimage,os.path.join(home_dir,".cache/backgrounds/lockscreen"))
|
||||||
|
|
||||||
|
subprocess.run(["chmod", "+x", os.path.join(home_dir, "scripts/gsettings.sh")])
|
||||||
|
subprocess.run(["bash", os.path.join(home_dir, "scripts/gsettings.sh")])
|
||||||
|
print("Set theme using gsettings")
|
||||||
|
|
||||||
|
print("""\
|
||||||
|
####################
|
||||||
|
##### Bash Cat #####
|
||||||
|
####################\
|
||||||
|
""")
|
||||||
|
|
||||||
|
# TODO download bash cat
|
||||||
|
# shell command for reference
|
||||||
|
'''
|
||||||
|
echo "Installing bash cat"
|
||||||
|
mkdir "$tempdir/bash-cat-with-cat"
|
||||||
|
git clone https://github.com/RealStickman/bash-cat-with-cat.git "$tempdir/bash-cat-with-cat" &>/dev/null
|
||||||
|
cp "$tempdir/bash-cat-with-cat/cat.sh" "$HOME/scripts/pieces/cat.sh"
|
||||||
|
'''
|
||||||
|
|
||||||
|
print("""\
|
||||||
|
########################################
|
||||||
|
############### Autostart ##############
|
||||||
|
########################################\
|
||||||
|
""")
|
||||||
|
|
||||||
|
# create autostart directory
|
||||||
|
os.makedirs(os.path.join(home_dir, ".config", "autostart"))
|
||||||
|
|
||||||
|
# TODO check installed package with python
|
||||||
|
# shell commands for reference
|
||||||
|
'''
|
||||||
|
# copy corectrl desktop file
|
||||||
|
if [[ $(pacman -Q | grep corectrl) ]]; then
|
||||||
|
cp /usr/share/applications/org.corectrl.corectrl.desktop ~/.config/autostart/org.corectrl.corectrl.desktop
|
||||||
|
fi
|
||||||
|
'''
|
||||||
|
|
||||||
|
print("""\
|
||||||
|
########################################
|
||||||
|
############### Services ###############
|
||||||
|
########################################\
|
||||||
|
""")
|
||||||
|
|
||||||
|
# reload systemd user scripts
|
||||||
|
subprocess.run(["systemctl", "--user", "daemon-reload"])
|
||||||
|
|
||||||
|
# enable ssh-agent
|
||||||
|
subprocess.run(["systemctl", "--user", "enable" ,"--now" ,"ssh-agent"])
|
||||||
|
|
||||||
|
print("""\
|
||||||
|
########################################
|
||||||
|
############# Misc Config #############
|
||||||
|
########################################\
|
||||||
|
""")
|
||||||
|
|
||||||
|
# make scripts executable
|
||||||
|
subprocess.run(["chmod", "+x", "-R", os.path.join(home_dir, ".config/polybar")])
|
||||||
|
subprocess.run(["chmod", "+x", "-R", os.path.join(home_dir, ".config/sway/scripts")])
|
||||||
|
subprocess.run(["chmod", "+x", "-R", os.path.join(home_dir, "scripts")])
|
||||||
|
subprocess.run(["chmod", "+x", "-R", os.path.join(home_dir, ".local/share/applications")])
|
||||||
|
|
||||||
|
# remove downloaded folder
|
||||||
|
shutil.rmtree(tempdir)
|
||||||
|
|
||||||
|
print("""\
|
||||||
|
########################################
|
||||||
|
############## Reloading ##############
|
||||||
|
########################################\
|
||||||
|
""")
|
||||||
|
|
||||||
|
# TODO implement this stuff
|
||||||
|
# bash for reference
|
||||||
|
'''
|
||||||
|
# reload applications
|
||||||
|
update-desktop-database ~/.local/share/applications/
|
||||||
|
|
||||||
|
# sync doom-emacs only if it is installed
|
||||||
|
if [[ -f ~/.config/emacs/bin/doom ]]; then
|
||||||
|
~/.config/emacs/bin/doom sync &
|
||||||
|
pids="$pids $!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $XDG_SESSION_DESKTOP == "sway" ]; then
|
||||||
|
swaymsg reload
|
||||||
|
echo "Reloaded sway"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# wait for all background jobs to finish
|
||||||
|
wait $pids && echo "Finished background jobs"
|
||||||
|
'''
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
####################
|
||||||
|
#### Arguments ####
|
||||||
|
####################
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("-t", "--theme", help="Select a different theme", action="store_true")
|
||||||
|
parser.add_argument("-f", "--firefox", help="Update firefox config", action="store_true")
|
||||||
|
|
||||||
|
# parse arguments
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
select_theme = args.theme
|
||||||
|
copy_firefox = args.firefox
|
||||||
|
|
||||||
|
main()
|
@ -2,12 +2,6 @@
|
|||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
cat <<EOF
|
|
||||||
############################################################
|
|
||||||
###################### INSTALL CONFIG ######################
|
|
||||||
############################################################
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# function to select theme
|
# function to select theme
|
||||||
function func_seltheme {
|
function func_seltheme {
|
||||||
cmd=(dialog --separate-output --checklist "Select theme (Only select one)" 22 76 16)
|
cmd=(dialog --separate-output --checklist "Select theme (Only select one)" 22 76 16)
|
||||||
@ -79,7 +73,6 @@ mkdir -p ~/old_dat/.config
|
|||||||
mkdir -p ~/old_dat/.doom.d
|
mkdir -p ~/old_dat/.doom.d
|
||||||
mkdir -p ~/old_dat/.mozilla
|
mkdir -p ~/old_dat/.mozilla
|
||||||
mkdir -p ~/old_dat/scripts
|
mkdir -p ~/old_dat/scripts
|
||||||
mkdir -p ~/old_dat/.elvish
|
|
||||||
mkdir -p ~/old_dat/.ssh
|
mkdir -p ~/old_dat/.ssh
|
||||||
|
|
||||||
# make subdirectories
|
# make subdirectories
|
||||||
|
Loading…
Reference in New Issue
Block a user