commit
bf14725f30
8
backup_home.sh
Executable file
8
backup_home.sh
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Ferit Yiğit BALABAN <f@fybx.dev>, 2022
|
||||||
|
#
|
||||||
|
echo "Hello, $( whoami )"
|
||||||
|
echo "w/o Downloads: $( du -sh --exclude='Downloads' "$HOME" )"
|
||||||
|
echo "wth Downloads: $( du -sh "$HOME" )"
|
||||||
|
doas tar --exclude="$HOME/Downloads" --exclude="$HOME/.local/share/JetBrains" --exclude="$HOME/.cache/pip" --exclude="$HOME/.cache/yay" --exclude="$HOME/.cache/JetBrains" --exclude="$HOME/.nuget" --create --verbose --preserve-permissions --gzip --file "/home/ferit-$( date +'%y%m%d' ).tar.gz" /home/ferit
|
24
cdd.bash
Executable file
24
cdd.bash
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Ferit Yiğit BALABAN, <fybalaban@fybx.dev>
|
||||||
|
#
|
||||||
|
# cd on steroids for Johnny.Decimal directories
|
||||||
|
|
||||||
|
# Define the cdd function
|
||||||
|
cdd() {
|
||||||
|
local input="$1"
|
||||||
|
local folder="$(basename "$PWD")"
|
||||||
|
|
||||||
|
if [[ "$input" =~ ^[0-9]{3}\.[0-9]{2}$ ]]; then
|
||||||
|
cd "$HOME/shoka/*/*/$input *"
|
||||||
|
elif [[ "$input" =~ ^[0-9]{3}$ ]]; then
|
||||||
|
cd "$HOME/shoka/*/$input *"
|
||||||
|
elif [[ "$input" =~ ^[0-9]{2}$ && "$folder" =~ ^[0-9]{3} ]]; then
|
||||||
|
cd "$HOME/shoka/*/*/${folder:0:3}.$input *"
|
||||||
|
else
|
||||||
|
echo "Invalid input: $input"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Use the cdd function with the input argument
|
||||||
|
cdd "$1"
|
32
deprecated/unison_sync.sh
Executable file
32
deprecated/unison_sync.sh
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Ferit Yiğit BALABAN <fybalaban@fybx.dev>, 2023
|
||||||
|
# & ChatGPT
|
||||||
|
#
|
||||||
|
|
||||||
|
LOCAL_DIR="$HOME/mounts/31_shoka"
|
||||||
|
REMOTE_DIR="ssh://fyb@192.168.0.3//mnt/shoka"
|
||||||
|
LOG_FILE="$HOME/navi.log"
|
||||||
|
UNISON="/usr/bin/unison"
|
||||||
|
|
||||||
|
# Run Unison to synchronize the directories
|
||||||
|
$UNISON $LOCAL_DIR $REMOTE_DIR -batch -auto -confirmbigdel > /dev/null 2>&1
|
||||||
|
|
||||||
|
# Check the exit code of Unison
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# Synchronization was successful, log the message and exit
|
||||||
|
echo "$(date -Iseconds) INFO: unison, sync successful" >> $LOG_FILE
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
# Synchronization failed, check if there were conflicts
|
||||||
|
CONFLICTS=`grep "Conflicting file" /var/log/unison.log | wc -l`
|
||||||
|
if [ $CONFLICTS -eq 0 ]; then
|
||||||
|
# There were no conflicts, log the message and exit
|
||||||
|
echo "$(date -Iseconds) INFO: unison, no diff" >> $LOG_FILE
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
# There were conflicts, log the message and exit with an error code
|
||||||
|
echo "$(date -Iseconds) ERROR: unison, sync conflict" >> $LOG_FILE
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
308
dotman.py
308
dotman.py
@ -1,33 +1,31 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Ferit Yiğit BALABAN <f@fybx.dev>, 2022
|
# Ferit Yiğit BALABAN <f@fybx.dev>, 2023
|
||||||
#
|
#
|
||||||
import os.path
|
import os
|
||||||
|
import shlex
|
||||||
from subprocess import run
|
from subprocess import run
|
||||||
import sys
|
import sys
|
||||||
from datetime import datetime as dt
|
|
||||||
from termcolor import colored, cprint
|
|
||||||
|
|
||||||
# Modify SETTINGS dictionary to set runtime variables
|
# Modify SETTINGS dictionary to set runtime variables
|
||||||
# Access values in dictionary using pre-defined names
|
# Access values in dictionary using pre-defined names
|
||||||
SETTINGS = {
|
SETTINGS = {
|
||||||
'DOTFILES_REPOSITORY': '$HOME/repos/dotfiles',
|
'URL_REPO': 'https://github.com/fybx/dotfiles', # remote repository URL
|
||||||
'REMOTE_REPOSITORY': 'https://github.com/fybx/dotfiles',
|
'SHN_REPO': 'fybx/dotfiles', # remote shortname
|
||||||
'LOCAL_CONFIG': '$HOME/.config',
|
'DIR_REPO': '$HOME/shoka/300-399 repos/dotfiles', # local repository directory
|
||||||
'SETUP_FILE': 'same-directory'
|
'DIR_CONF': '$HOME/.config', # local .config directory
|
||||||
|
'F_DEPLOY': '$HOME/.config/dotman/deploy_list.json', # path to deploy_list.json file
|
||||||
}
|
}
|
||||||
WHEREAMI = '$HOME/scripts'
|
|
||||||
VER = 'v1.7'
|
VER = 'v1.8'
|
||||||
WER = 'v1.1'
|
|
||||||
help_message = f'''
|
help_message = f'''
|
||||||
dotman {VER} dotfiles manager by fyb
|
dotman {VER} dotfiles manager by ferityigitbalaban
|
||||||
|
|
||||||
Unrecognized keys are ignored. If every key supplied is unrecognized,
|
Unrecognized keys are ignored. If every key supplied is unrecognized,
|
||||||
this have the same effect as calling dotman without any key.
|
this have the same effect as calling dotman without any key.
|
||||||
|
|
||||||
Keys:
|
Keys:
|
||||||
-i, --interactive Interactively backup or deploy dotfiles. Not supplying any key will result in interactive mode.
|
-i, --interactive Interactively backup or deploy dotfiles. Not supplying any key will result in interactive mode.
|
||||||
-s, --setup-dotman Interactively set variables (DOTFILES_REPOSITORY, LOCAL_CONFIG, etc.) for your dotman setup.
|
|
||||||
-b, --backup Backup your dotfiles. Doesn't require user assistance but errors may occur.
|
-b, --backup Backup your dotfiles. Doesn't require user assistance but errors may occur.
|
||||||
-d, --deploy Deploy your dotfiles. Doesn't require user assistance but errors may occur.
|
-d, --deploy Deploy your dotfiles. Doesn't require user assistance but errors may occur.
|
||||||
-v, --version Shows the version and quits
|
-v, --version Shows the version and quits
|
||||||
@ -35,138 +33,100 @@ Keys:
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
||||||
def get_nth_key(n: int, d: dict[str, str]):
|
DL_FILES = []
|
||||||
c = 0
|
DL_DIRS = []
|
||||||
for k in d.keys():
|
|
||||||
if n == c:
|
|
||||||
return k
|
|
||||||
c += 1
|
|
||||||
|
|
||||||
|
|
||||||
def read_file(path: str):
|
def read_deploy_list():
|
||||||
with open(path, 'r') as f:
|
|
||||||
content = f.readlines()
|
|
||||||
f.close()
|
|
||||||
return content
|
|
||||||
|
|
||||||
|
|
||||||
def read_setup():
|
|
||||||
path = SETTINGS['SETUP_FILE']
|
|
||||||
lines = read_file(f'{WHEREAMI}setup.dtm') if path == 'same-directory' else read_file(os.path.expandvars(path))
|
|
||||||
lines = [line.strip() for line in lines if not line.startswith('#') and line.replace(' ', '') != '']
|
|
||||||
for line in lines:
|
|
||||||
key = line.split(':', 1)[0].rstrip()
|
|
||||||
value = line.split(':', 1)[1].lstrip()
|
|
||||||
SETTINGS[key] = value
|
|
||||||
|
|
||||||
|
|
||||||
def write_setup():
|
|
||||||
path = f'{WHEREAMI}setup.dtm' if SETTINGS['SETUP_FILE'] == 'same-directory' else os.path.expandvars(SETTINGS['SETUP_FILE'])
|
|
||||||
|
|
||||||
|
|
||||||
def rrem(text: str, char: str):
|
|
||||||
"""
|
"""
|
||||||
Remove characters from right until character supplied with char
|
Reads file from SETTINGS.F_DEPLOY to get list of directories and files to deploy
|
||||||
:param text: Where to remove characters from
|
|
||||||
:param char: Which character to stop removing at
|
|
||||||
:return: Returns text with all characters until specified character removed
|
|
||||||
"""
|
"""
|
||||||
iterator = len(text) - 1
|
path_deploy_list = SETTINGS['F_DEPLOY']
|
||||||
buffer = ''
|
if os.path.exists(path_deploy_list):
|
||||||
while text[iterator] != char:
|
with open(path_deploy_list, 'r') as f:
|
||||||
buffer += text[iterator]
|
file = f.read()
|
||||||
iterator -= 1
|
f.close()
|
||||||
return text.removesuffix(buffer[::-1])
|
dict_deploy_list = json.loads(file)
|
||||||
|
DL_FILES = dict_deploy_list['files']
|
||||||
|
DL_DIRS = dict_deploy_list['dirs']
|
||||||
def proc(command, cwd=''):
|
|
||||||
if 'cp -av' in command:
|
|
||||||
r = run(command, shell=True)
|
|
||||||
else:
|
else:
|
||||||
if cwd == '':
|
create_deploy_list()
|
||||||
r = run(command, shell=True, capture_output=True, text=True)
|
|
||||||
else:
|
|
||||||
r = run(command, shell=True, capture_output=True, text=True, cwd=cwd)
|
|
||||||
return r.returncode, str(r.stdout) + str(r.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
def print_settings():
|
def create_deploy_list():
|
||||||
count = 1
|
"""
|
||||||
for key, value in SETTINGS.items():
|
Creates the default deploy_list.json in path SETTINGS.F_DEPLOY
|
||||||
print(f'{count}. {key}:{value}')
|
"""
|
||||||
count += 1
|
dl_default = {
|
||||||
|
"files": [],
|
||||||
|
"dirs": ["dotman"],
|
||||||
|
}
|
||||||
|
with open(SETTINGS['F_DEPLOY'], 'w') as f:
|
||||||
|
f.write(json.dumps(dl_default, indent = 4))
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
|
||||||
def grab_dotfiles():
|
def copy(source, dest, interactive=False):
|
||||||
os.mkdir(rrem(SETTINGS['DOTFILES_REPOSITORY'], '/'))
|
if interactive:
|
||||||
code, output = proc(f"git clone {SETTINGS['REMOTE_REPOSITORY']}", SETTINGS['DOTFILES_REPOSITORY'])
|
run(shlex.split(f"cp -av {source} {dest}"))
|
||||||
return code == 0, code
|
return
|
||||||
|
run(shlex.split(f"cp -a {source} {dest}"))
|
||||||
|
|
||||||
|
|
||||||
def copy(source, dest):
|
def backup():
|
||||||
proc(f'cp -av {source} {dest}')
|
"""
|
||||||
|
Aggresively executes the steps to do checksum comparisons between local
|
||||||
|
config directory and local repository to decide which files to copy,
|
||||||
|
copy only changed files, commit and push to remote.
|
||||||
|
"""
|
||||||
|
# get list of files and directories to change (F_DEPLOY)
|
||||||
|
# get list of checksums of (F_DEPLOY), compute and compare with local repository
|
||||||
|
# if checksum(local_config) != checksum(local_repo)
|
||||||
|
# copy local_config to local_repo
|
||||||
|
# if exists(local_config in local_repo) is False
|
||||||
|
# copy local_config to local_repo
|
||||||
|
# if exists(F_DEPLOY) but not in local_config
|
||||||
|
# warn for lost file, user must either copy from local_repo to local_config or delete from F_DEPLOY
|
||||||
|
# exec git commit -m "[message]" && git push
|
||||||
|
|
||||||
|
|
||||||
def special_copy(source, dest):
|
def deploy(interactive=False):
|
||||||
whitelist = [
|
"""
|
||||||
'fish',
|
Kindly executes the steps to get a up-to-date local repository,
|
||||||
'gtk-2.0',
|
deploy (copy) files and directories to the local config directory.
|
||||||
'gtk-3.0',
|
"""
|
||||||
'htop',
|
if not os.path.exists(SETTINGS.DIR_REPO):
|
||||||
'i3',
|
r = SETTINGS.DIR_REPO
|
||||||
'kitty',
|
r.removesuffix("/")[:r.removesuffix("/").rindex("/")]
|
||||||
'neofetch',
|
if interactive:
|
||||||
'nitrogen',
|
print(f"Local repository at {SETTINGS['DIR_REPO']} wasn't found. Cloning at {r}")
|
||||||
'picom',
|
run(shlex.split(f"/usr/bin/git clone {SETTINGS[URL_REPO]}"), text=True, cwd=r)
|
||||||
'polybar',
|
if interactive:
|
||||||
'rofi',
|
print("Pulling changes")
|
||||||
'xfce4',
|
run(shlex.split("/usr/bin/git pull"), text=True, cwd=r)
|
||||||
'navi',
|
for file in DL_FILES:
|
||||||
'gtk-4.0',
|
copy(files, interactive=interactive)
|
||||||
'flameshot'
|
for directory in DL_DIRS:
|
||||||
]
|
copy(directory, interactive=interactive)
|
||||||
dirs = os.listdir(source)
|
|
||||||
selected_dirs = []
|
|
||||||
for each_name in dirs:
|
|
||||||
if each_name in whitelist:
|
|
||||||
selected_dirs.append(f'{source}{each_name}' if source.endswith('/') else f'{source}/{each_name}')
|
|
||||||
for directory in selected_dirs:
|
|
||||||
copy(directory, dest)
|
|
||||||
|
|
||||||
|
|
||||||
def commit_then_push():
|
def expand_settings():
|
||||||
# I forget checking out to main after testing on a seperate branch
|
"""
|
||||||
# Line below checks out for me every time it's run
|
Expands variables used in SETTINGS
|
||||||
proc('/usr/bin/git checkout main', SETTINGS['DOTFILES_REPOSITORY'])
|
"""
|
||||||
proc('/usr/bin/git fetch', SETTINGS['DOTFILES_REPOSITORY'])
|
SETTINGS['DIR_REPO'] = os.path.expandvars(SETTINGS['DIR_REPO'])
|
||||||
proc('/usr/bin/git pull', SETTINGS['DOTFILES_REPOSITORY'])
|
SETTINGS['DIR_CONF'] = os.path.expandvars(SETTINGS['DIR_CONF'])
|
||||||
proc('/usr/bin/git add .', SETTINGS['DOTFILES_REPOSITORY'])
|
SETTINGS['F_DEPLOY'] = os.path.expandvars(SETTINGS['F_DEPLOY'])
|
||||||
date = dt.now().strftime('%d.%m.%Y %H.%M')
|
|
||||||
_, output = proc(f'/usr/bin/git commit -m "dotman {date}"', SETTINGS['DOTFILES_REPOSITORY'])
|
|
||||||
if 'nothing to commit' not in output:
|
|
||||||
code, output = proc('/usr/bin/git push', SETTINGS['DOTFILES_REPOSITORY'])
|
|
||||||
if code == 0:
|
|
||||||
_, output = proc('/usr/bin/git log', SETTINGS['DOTFILES_REPOSITORY'])
|
|
||||||
commit = output.split('\n')[0].replace('commit ', '')
|
|
||||||
return 3, commit
|
|
||||||
return 0, None if code == 0 else 2, None
|
|
||||||
return 1, None
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
global WHEREAMI
|
expand_settings()
|
||||||
WHEREAMI = rrem(sys.argv[0], '/')
|
|
||||||
read_setup()
|
|
||||||
SETTINGS['DOTFILES_REPOSITORY'] = os.path.expandvars(SETTINGS['DOTFILES_REPOSITORY'])
|
|
||||||
SETTINGS['LOCAL_CONFIG'] = os.path.expandvars(SETTINGS['LOCAL_CONFIG'])
|
|
||||||
remote_shortname = SETTINGS['REMOTE_REPOSITORY'].removeprefix("https://github.com/")
|
|
||||||
|
|
||||||
local_repo_exists = os.path.exists(SETTINGS['DOTFILES_REPOSITORY'])
|
exists_dir_repo = os.path.exists(SETTINGS['DIR_REPO'])
|
||||||
|
|
||||||
flag_interactive = False
|
flag_interactive = False
|
||||||
flag_backup = False
|
flag_backup = False
|
||||||
flag_deploy = False
|
flag_deploy = False
|
||||||
flag_setup = False
|
|
||||||
flag_version = False
|
flag_version = False
|
||||||
flag_help = False
|
flag_help = False
|
||||||
sys.argv.remove(sys.argv[0])
|
sys.argv.remove(sys.argv[0])
|
||||||
@ -177,92 +137,38 @@ def main():
|
|||||||
flag_interactive = flag_interactive or key == '-i' or key == '--interactive'
|
flag_interactive = flag_interactive or key == '-i' or key == '--interactive'
|
||||||
flag_backup = flag_backup or key == '-b' or key == '--backup'
|
flag_backup = flag_backup or key == '-b' or key == '--backup'
|
||||||
flag_deploy = flag_deploy or key == '-d' or key == '--deploy'
|
flag_deploy = flag_deploy or key == '-d' or key == '--deploy'
|
||||||
flag_setup = flag_setup or key == '-s' or key == '--setup-dotman'
|
|
||||||
flag_version = flag_version or key == '-v' or key == '--version'
|
flag_version = flag_version or key == '-v' or key == '--version'
|
||||||
flag_help = flag_help or key == '-h' or key == '--help'
|
flag_help = flag_help or key == '-h' or key == '--help'
|
||||||
else:
|
else:
|
||||||
flag_interactive = True
|
flag_interactive = True
|
||||||
|
|
||||||
if flag_interactive:
|
if exists_dir_repo:
|
||||||
print(f"dotman {VER} by fyb, 2022")
|
if flag_interactive:
|
||||||
if not local_repo_exists:
|
|
||||||
print(colored('Important warning:', 'red'), 'dotfiles repository cannot be located at: ',
|
|
||||||
colored(SETTINGS['DOTFILES_REPOSITORY'], 'yellow'))
|
|
||||||
print('Edit DOTFILES_REPOSITORY variable in this script to specify its location')
|
|
||||||
print(f'To grab dotfiles from', colored(f'"{remote_shortname}"', 'yellow'), end='')
|
|
||||||
ans = input('type Y. (y/N): ')
|
|
||||||
if ans.lower() == 'y' or 'yes':
|
|
||||||
grab_successed, exit_code = grab_dotfiles()
|
|
||||||
if grab_successed:
|
|
||||||
print(f'Successfully grabbed dotfiles from', colored(f'"{remote_shortname}"', 'yellow'))
|
|
||||||
else:
|
|
||||||
print(f'git exited with result code:', colored(str(exit_code), 'red'),
|
|
||||||
'. An error may have occured.')
|
|
||||||
exit(128)
|
|
||||||
else:
|
|
||||||
cprint('There isn\'t anything left for dotman to do. Have a nice day!', 'green')
|
|
||||||
exit(0)
|
|
||||||
print('dotman is', colored('ready', 'green'), 'for your command. ')
|
|
||||||
print('You can either backup to remote, or copy local repo to local config (deploy)')
|
|
||||||
ans = input('(B)ackup or (D)eploy: ')
|
|
||||||
if ans.lower() == 'b' or ans.lower() == 'backup':
|
|
||||||
print(colored('Step 1: ', 'magenta'), 'Copy from local config', colored(f"\"{SETTINGS['LOCAL_CONFIG']}\"", 'yellow'),
|
|
||||||
'to local repo', colored(f"\"{SETTINGS['DOTFILES_REPOSITORY']}\"", 'yellow'))
|
|
||||||
special_copy(SETTINGS['LOCAL_CONFIG'], SETTINGS['DOTFILES_REPOSITORY'])
|
|
||||||
print(colored('Step 2: ', 'magenta'), f'Create a commit and push to remote repo',
|
|
||||||
colored(f"\"{SETTINGS['REMOTE_REPOSITORY']}\"", 'yellow'))
|
|
||||||
stat, _ = commit_then_push()
|
|
||||||
if stat == 0:
|
|
||||||
cprint('Backup completed. Have a nice day!', 'green')
|
|
||||||
elif stat == 1:
|
|
||||||
cprint('There was nothing to commit, aborting.', 'red')
|
|
||||||
elif stat == 2:
|
|
||||||
cprint('Couldn\'t push local to remote, aborting.', 'red')
|
|
||||||
elif stat == 3:
|
|
||||||
url = f"{SETTINGS['REMOTE_REPOSITORY']}/commit/{_}"
|
|
||||||
cprint(f'Backup completed: {url}. Have a nice day!', 'green')
|
|
||||||
exit(stat)
|
|
||||||
elif ans.lower() == 'd' or ans.lower() == 'deploy':
|
|
||||||
print(colored('Step 1:', 'magenta'), ' Copy from local repo to local config')
|
|
||||||
special_copy(SETTINGS['DOTFILES_REPOSITORY'], SETTINGS['LOCAL_CONFIG'])
|
|
||||||
cprint('Deploy completed. Have a nice day!', 'green')
|
|
||||||
exit(0)
|
|
||||||
elif flag_backup and not flag_deploy:
|
|
||||||
if local_repo_exists:
|
|
||||||
special_copy(SETTINGS['LOCAL_CONFIG'], SETTINGS['DOTFILES_REPOSITORY'])
|
|
||||||
exit(commit_then_push())
|
|
||||||
else:
|
|
||||||
print(colored('[CRITICAL]', 'red'), 'Local repository couldn\'t be located. Aborting...')
|
|
||||||
exit(128)
|
|
||||||
elif flag_deploy and not flag_backup:
|
|
||||||
if local_repo_exists:
|
|
||||||
special_copy(SETTINGS['DOTFILES_REPOSITORY'], SETTINGS['LOCAL_CONFIG'])
|
|
||||||
exit(0)
|
|
||||||
else:
|
|
||||||
print(colored('[CRITICAL]', 'red'), 'Local repository couldn\'t be located. Aborting...')
|
|
||||||
exit(128)
|
|
||||||
elif flag_setup:
|
|
||||||
print(f'dotman interactive setup wizard {WER}')
|
|
||||||
print_settings()
|
|
||||||
ans = input('Edit settings (y/N): ')
|
|
||||||
if ans.lower() == 'y' or ans.lower() == 'yes':
|
|
||||||
print('Type in number of setting you wish to modify, and "e" or "exit" when done')
|
|
||||||
while True:
|
while True:
|
||||||
num = input('Input: ')
|
ans = input('(B)ackup or (D)eploy is possible, select one: ').lower()
|
||||||
if num.lower() == 'exit' or num.lower() == 'e':
|
if ans == 'b' or ans == 'd':
|
||||||
break
|
break
|
||||||
elif num.isnumeric() and 1 <= int(num) <= len(SETTINGS):
|
if ans == 'b':
|
||||||
key = get_nth_key(int(num) - 1, SETTINGS)
|
backup(flag_interactive)
|
||||||
SETTINGS[key] = input(f'Enter new value for {key}: ').strip()
|
elif ans == 'd':
|
||||||
print('Saving changes to file')
|
deploy(flag_deploy)
|
||||||
write_setup()
|
else:
|
||||||
|
if flag_backup and not flag_deploy:
|
||||||
elif flag_version:
|
backup(flag_interactive)
|
||||||
print(f'dotman version: {VER.removeprefix("v")}')
|
elif flag_deploy and not flag_backup:
|
||||||
exit(0)
|
deploy(flag_interactive)
|
||||||
elif not flag_deploy and not flag_backup and not flag_interactive or flag_help:
|
else:
|
||||||
print(help_message)
|
exit(0)
|
||||||
exit(0)
|
else:
|
||||||
|
if flag_interactive:
|
||||||
|
print(f"local repository directory for {SETTINGS['SHN_REPO']} does not exist")
|
||||||
|
print("You can clone and deploy this repository to local config directory")
|
||||||
|
ans = input("Continue (y/N): ").lower()
|
||||||
|
if ans == "n" and not ans == "y":
|
||||||
|
exit(0)
|
||||||
|
if not flag_interactive and not flag_deploy:
|
||||||
|
exit(0)
|
||||||
|
deploy(flag_interactive)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
15
fetchpy2
15
fetchpy2
@ -7,7 +7,7 @@ import os
|
|||||||
from subprocess import run
|
from subprocess import run
|
||||||
|
|
||||||
|
|
||||||
IMG_LOC = '/home/ferit/sources/neco.png'
|
IMG_LOC = '/home/ferit/shoka/500-599 pictures/505 clipart/windowschan_s.png'
|
||||||
|
|
||||||
|
|
||||||
def clr(text: str):
|
def clr(text: str):
|
||||||
@ -27,9 +27,9 @@ def clr(text: str):
|
|||||||
'': info,
|
'': info,
|
||||||
'': info,
|
'': info,
|
||||||
'': info,
|
'': info,
|
||||||
'': info,
|
'': info,
|
||||||
'': info,
|
'': info,
|
||||||
'': info,
|
'': info,
|
||||||
'': info,
|
'': info,
|
||||||
'': info,
|
'': info,
|
||||||
'ferit@navi': title,
|
'ferit@navi': title,
|
||||||
@ -108,22 +108,23 @@ def main():
|
|||||||
│ {distro_name}│
|
│ {distro_name}│
|
||||||
│ {kernel_version}│
|
│ {kernel_version}│
|
||||||
│ {shell_name}│
|
│ {shell_name}│
|
||||||
│ {package_count}│
|
│ {package_count}│
|
||||||
├──────── Hardware ────────┤
|
├──────── Hardware ────────┤
|
||||||
│ AMD Ryzen 7 5800H │
|
│ AMD Ryzen 7 5800H │
|
||||||
│ NV GeForce RTX3050 Ti │
|
│ NV GeForce RTX3050 Ti │
|
||||||
│ {memory_usage}│
|
│ {memory_usage}│
|
||||||
│ {uptime}│
|
│ {uptime}│
|
||||||
╰──────────────────────────╯
|
╰──────────────────────────╯
|
||||||
'''
|
'''
|
||||||
|
|
||||||
txt_padded = ''
|
txt_padded = ''
|
||||||
img_width = 15
|
img_width = 16
|
||||||
line_count = 0
|
line_count = 0
|
||||||
for line in txt.splitlines():
|
for line in txt.splitlines():
|
||||||
txt_padded += ((' ' * img_width) + line + '\n')
|
txt_padded += ((' ' * img_width) + line + '\n')
|
||||||
line_count += 1
|
line_count += 1
|
||||||
run(['/usr/bin/kitty', 'icat', '--align', 'left', IMG_LOC])
|
print('')
|
||||||
|
run(['/usr/bin/kitty', 'icat', '--mirror', 'horizontal', '--align', 'left', IMG_LOC])
|
||||||
run(['printf', "\e[%sA\e[999999D", str(line_count)])
|
run(['printf', "\e[%sA\e[999999D", str(line_count)])
|
||||||
clr(txt_padded)
|
clr(txt_padded)
|
||||||
|
|
||||||
|
2
hypr_clip
Executable file
2
hypr_clip
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
cliphist list | wofi --show dmenu | cliphist decode | wl-copy
|
6
lock.sh
Executable file
6
lock.sh
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Ferit Yiğit BALABAN <fybalaban@fybx.dev>, 2023
|
||||||
|
#
|
||||||
|
playerctl pause
|
||||||
|
swaylock -efklu -i "mounts/31_shoka/pictures/landscape/024.jpg"
|
@ -11,7 +11,7 @@
|
|||||||
# Dependencies:
|
# Dependencies:
|
||||||
#
|
#
|
||||||
# - brightnessctl
|
# - brightnessctl
|
||||||
# - pactl
|
# - pamixer
|
||||||
# - playerctl
|
# - playerctl
|
||||||
# - wal
|
# - wal
|
||||||
# - betterlockscreen
|
# - betterlockscreen
|
||||||
@ -64,7 +64,7 @@ def set_volume(value: int, save_state=False):
|
|||||||
value = int(f.read())
|
value = int(f.read())
|
||||||
f.close()
|
f.close()
|
||||||
value = 100 if value > 100 else 0 if value < 0 else value
|
value = 100 if value > 100 else 0 if value < 0 else value
|
||||||
run_command(f'pactl set-sink-volume @DEFAULT_SINK@ {value}%')
|
run_command(f'pamixer --set-volume {value}')
|
||||||
if save_state:
|
if save_state:
|
||||||
with open(os.path.expandvars(PATH_RESC_VOLUME), 'w') as f:
|
with open(os.path.expandvars(PATH_RESC_VOLUME), 'w') as f:
|
||||||
f.write(str(state))
|
f.write(str(state))
|
||||||
@ -109,10 +109,7 @@ def get_brightness(device: int):
|
|||||||
|
|
||||||
|
|
||||||
def get_volume():
|
def get_volume():
|
||||||
r = do_query("pactl list")
|
return int(do_query("pamixer --get-volume"))
|
||||||
for x in r.split("Sink #0")[1].split("Base Volume:")[0].split(' '):
|
|
||||||
if '%' in x:
|
|
||||||
return int(x.replace('%', ''))
|
|
||||||
|
|
||||||
|
|
||||||
def log(message: str):
|
def log(message: str):
|
||||||
|
6
poweroff.sh
Executable file
6
poweroff.sh
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
dt=$(date -Iseconds)
|
||||||
|
unison=$($HOME/scripts/unison_sync.sh)
|
||||||
|
rm "$HOME/.cache/cliphist/db"
|
||||||
|
echo "[$dt] INFO: navi, powering off" >> navi.log
|
||||||
|
poweroff
|
@ -1,5 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
dt=$(date +'%d/%m/%y-%H.%M.%S')
|
|
||||||
echo "[$dt] navi shutting down..." >> navi.log
|
|
||||||
$HOME/scripts/modeset.py --shutdown
|
|
||||||
shutdown -h now
|
|
8
wl_ss.sh
Normal file
8
wl_ss.sh
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Ferit Yiğit BALABAN, <fybalaban@fybx.dev>
|
||||||
|
#
|
||||||
|
# Select an area with slurp, ss with grim
|
||||||
|
# and copy to clipboard.
|
||||||
|
export GRIM_DEFAULT_DIR="$HOME/items/ss"
|
||||||
|
grim -g "$( slurp )" - | wl-copy --type image/png
|
8
wl_sss.sh
Executable file
8
wl_sss.sh
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Ferit Yiğit BALABAN, <fybalaban@fybx.dev>
|
||||||
|
#
|
||||||
|
# Select an area with slurp, ss with grim
|
||||||
|
# and copy to clipboard.
|
||||||
|
SS="$HOME/items/ss"
|
||||||
|
grim -g "$( slurp )" - | wl-copy --type image/png && wl-paste > "$SS"/$( date +'%Y-%m-%d-%H%M%S.png' )
|
Loading…
x
Reference in New Issue
Block a user