diff --git a/.gitignore b/.gitignore index e77dd36..6fb1c45 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ # Contains wakatime API which should remain private files/.wakatime.cfg # Backup directory will get created by script, no need to push it -backup/ +Backups/ # Don't include file backups *.bak # todo list diff --git a/dotfiles_install.py b/dotfiles_install.py index 7cc7c61..7ce12b2 100644 --- a/dotfiles_install.py +++ b/dotfiles_install.py @@ -1,12 +1,22 @@ from lib import Input, Print, Install, Path import os +from datetime import datetime - -def make_backup(backup_floder): +def make_backup(files_dir): if Input.yes_no('Do you wish to create a backup of current state of your dotfiles?'): Print.action('Creating dotfiles backup') - Print.err('Backup is not yet implemented') - # TODO: Create backup + backup_dir = str(datetime.now()).replace(' ', '--') + current_backup_dir = os.path.join(Path.get_parent(__file__), 'Backups', backup_dir) + Path.ensure_dirs(current_backup_dir) + for file in Path.get_all_files(files_dir): + from_pos = os.path.join( + Path.get_home(), file.replace(f'{files_dir}/', '')) + to_pos = os.path.join( + current_backup_dir, file.replace(f'{files_dir}/', '')) + if os.path.isfile(from_pos): + Path.copy(from_pos, to_pos) + + Print.action('Backup complete') return True else: Print.warning('Proceeding without backup') @@ -59,8 +69,16 @@ def init(symlink): Path.get_parent(__file__), 'files') # Create optional backup make_backup(files_dir) + files_list, dirs_list = Path.get_all_dirs_and_files(files_dir) + + # Create all dirs + for directory in dirs_list: + position = os.path.join( + Path.get_home(), directory.replace(f'{files_dir}/', '')) + Path.ensure_dirs(position) + # Go through all files - for file in Path.get_all_files(files_dir): + for file in files_list: # Make personalized changes to files personalized_changes(file) # Set symlink position ($HOME/filepath) diff --git a/files/.config/sh/.aliases b/files/.config/sh/.aliases index 77b4ed7..80a3cd1 100755 --- a/files/.config/sh/.aliases +++ b/files/.config/sh/.aliases @@ -41,7 +41,7 @@ alias py2='python2' # Config access shortcuts alias cfvim='vim ~/.vimrc' -alias cfzsh='vim ~/config/zsh/.zsh_config' +alias cfzsh='vim ~/.config/zsh/.zsh_config' alias cfzshrc='vim ~/.zshrc' # Replacements @@ -54,6 +54,9 @@ alias tty-clock='tty-clock -Ssc' # Terminal clock screensaver # Custom aliases + + +alias nvidia='__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia' # Run app with nvidia (on hybrid mode with optimus) alias fhere='find . -name' # Find file/dir from currrent dir alias ssh-list='ss | grep ssh' # List all SSH connections alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' @@ -72,7 +75,8 @@ alias pacman-extract='pacman -Syw --cachedir .' # Extract package/es into curren alias mount-table='df' # Show list of all mounted devices and their mount locations alias swapout='sudo swapoff -a; sudo swapon -a' # Reset swap (move everything to RAM) alias sound_control='alsamixer' # Sound control tool in alsa_utils package - +alias md-to-pdf='pandoc -s -o' # Convert markdown to pdf +alias pdf-reader='mupdf' # Open pdf file # If user is not root, pass all commands via sudo if [ $UID -ne 0 ]; then diff --git a/files/.config/sh/zsh/.zsh_config b/files/.config/sh/zsh/.zsh_config deleted file mode 100755 index 421d88f..0000000 --- a/files/.config/sh/zsh/.zsh_config +++ /dev/null @@ -1,19 +0,0 @@ -# Enable colors -autoload -U colors && colors - - - -# Basic auto/tab complete -autoload -U compinit -zstyle ':completion:*' menu select -zmodload zsh/complist -compinit -_comp_options+=(globdots) - -# Setup aliases -if [ -f ~/.config/sh/.aliases ]; then - source ~/.config/sh/.aliases -fi - -# Load zsh-syntax-highlighting (should be last) -source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh diff --git a/files/.vimrc b/files/.config/vim/vimrc similarity index 94% rename from files/.vimrc rename to files/.config/vim/vimrc index 4252196..d9d69eb 100755 --- a/files/.vimrc +++ b/files/.config/vim/vimrc @@ -24,6 +24,12 @@ set laststatus=2 " Always show status line set wildmode=longest,list,full " Enable autocompletion set splitbelow splitright " Split in more natural way +" SET VIM Locations +set undodir=$XDG_DATA_HOME/vim/undo +set directory=$XDG_DATA_HOME/vim/swap +set backupdir=$XDG_DATA_HOME/vim/backup +set viminfo+='1000,n$XDG_DATA_HOME/vim/viminfo +set runtimepath=$XDG_CONFIG_HOME/vim,$VIMRUNTIME,$XDG_CONFIG_HOME/vim/after "set nomodeline " Disable as a security precaution "set wildmenu " Enable wildmenu diff --git a/files/.zshrc b/files/.zshrc index d9c607c..2758700 100755 --- a/files/.zshrc +++ b/files/.zshrc @@ -1,17 +1,19 @@ -#save_aliases=$(alias -L) +ZSH_CACHE="$HOME/.cache/zsh" + # History in cache directory HISTSIZE=10000 SAVEHIST=10000 -HISTFILE=~/.cache/zsh/history +HISTFILE=$ZSH_CACHE/history + +# Move .zsh-update to $ZSH_CACHE +[ -f ~/.zsh-update ] && mv ~/.zsh-update $ZSH_CACHE/.zsh-update + + # Export oh-my-zsh location as $ZSH -export ZSH="$HOME/.config/oh-my-zsh" + export ZSH="/usr/share/oh-my-zsh" # Set theme -#ZSH_THEME="agnoster" -#ZSH_THEME="bira" -#ZSH_THEME="gnzh" -#ZSH_THEME="rkj-repos"i ZSH_THEME="af-magic" # How often should zsh be updated @@ -23,18 +25,33 @@ ENABLE_CORRECTION="false" # Run oh-my-zsh source $ZSH/oh-my-zsh.sh -# Load plugins -plugins=( - git - python - pylint - pyenv - autopep8 - zsh-autosuggestions -) -if [ -f "$HOME/.config/sh/zsh/.zsh_config" ]; then - source "$HOME/.config/sh/zsh/.zsh_config" -fi +# Enable colors +autoload -U colors && colors + +# Basic auto/tab complete +autoload -U compinit +zstyle ':completion:*' menu select +zmodload zsh/complist +compinit +_comp_options+=(globdots) + +# Setup aliases +[ -f ~/.config/sh/.aliases ] && source ~/.config/sh/.aliases + +# XDG Exports +export XDG_CONFIG_HOME="$HOME/.config" +export XDG_CACHE_HOME="$HOME/.cache" +export XDG_DATA_HOME="$HOME/.local/share" + +# ~/ Clean-up +export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority" # Might break some DMs +export WGETRC="$HOME/.config/wget/wgetrc" +export LESSHISTFILE="-" +export VIMINIT=":source $XDG_CONFIG_HOME"/vim/vimrc + + +# Load zsh-syntax-highlighting (should be last) +source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh #neofetch --cpu_temp C --gtk2 off --gtk3 off --color_blocks on --pixterm diff --git a/lib.py b/lib.py index 7946d42..8d679a4 100644 --- a/lib.py +++ b/lib.py @@ -381,6 +381,8 @@ class Path: Returns: bool -- One of dirs exists/Single dir exists ''' + if type(paths) != str: + paths = str(paths) paths = paths.split(' ') for dir_path in paths: dir_path = os.path.expanduser(dir_path) @@ -416,7 +418,25 @@ class Path: files_found.append(os.path.join(subdir, file)) return files_found - def ensure_dirs(path, file_end=False, absolute_path=True): + def get_all_dirs_and_files(dir_path): + '''Get list of all files and directories in specified directory (recursive) + + Arguments: + dir_path {str/Path} -- path to starting directory + + Returns: + list, list-- files, dirs found + ''' + files_found = [] + dirs_found = [] + for subdir, dirs, files in os.walk(dir_path): + for file in files: + files_found.append(os.path.join(subdir, file)) + for directory in dirs: + dirs_found.append(os.path.join(subdir, directory)) + return files_found, dirs_found + + def ensure_dirs(path, absolute_path=True): '''Ensure existence of directories (usually before creating files in it) Arguments: @@ -428,17 +448,12 @@ class Path: ''' if not absolute_path: path = pathlib.Path(path).absolute() - parts = pathlib.Path(path).parts - if file_end: - parts = parts[:-1] - cur_path = '/' - # ignore first element (it is root (/), which was specified earlier) - parts = parts[1:] - for part in parts: - cur_path = os.path.join(cur_path, part) - if not Path.check_dir_exists(cur_path): - Print.comment(f'Creating directory {cur_path}') - os.mkdir(cur_path) + if os.path.isfile(path): + path = Path.get_parent(path) + + if not Path.check_dir_exists(path): + Command.execute(f'mkdir -p {path}') + Print.comment(f'Creating directory {path}') def get_home(): '''Get home path @@ -455,7 +470,7 @@ class Path: symlink_pointer {str} -- path where symlink should be pointing path {str} -- path in which the symlink should be created ''' - Path.ensure_dirs(path, file_end=True) + Path.ensure_dirs(path) Command.execute(f'ln -sf {symlink_pointer} {path}') Print.comment(f'Created symlink: {path} -> {symlink_pointer}') @@ -466,6 +481,6 @@ class Path: path {str} -- path to original file copied_path {str} -- path to new file ''' - Path.ensure_dirs(copied_path, file_end=True) + Path.ensure_dirs(copied_path) Command.execute(f'cp {path} {copied_path}') Print.comment(f'Copied {path} to {copied_path}')