Initial commit and creation of setup script

This commit is contained in:
Trysdyn Black 2020-05-01 19:20:46 -07:00
commit cd67a505db
10 changed files with 2041 additions and 0 deletions

174
.config/i3/config Normal file
View file

@ -0,0 +1,174 @@
# Global font config
font pango:DejaVu Sans Mono 9
# color scheme
client.focused #664477 #664477 #CCCCCC #E7D8B1 #664477
client.focused_inactive #222133 #222133 #AAAAAA #A074C4 #5F676A
client.unfocused #000000 #000000 #AAAAAA #A074C4 #222222
client.urgent #2F343A #900000 #FFFFFF #900000 #900000
client.placeholder #000000 #0C0C0C #FFFFFF #000000 #0C0C0C
client.background #000000
# Set mod key to Win key
set $mod Mod4
# i3status bar declarations
bar {
status_command "python3 -u ~/bin/statusbar"
position bottom
font pango:Terminus, Font Awesome 5 Free Regular 10
colors {
background #000000
statusline #CCCCCC
separator #000000
focused_workspace #664477 #664477 #CCCCCC
active_workspace #222133 #222133 #AAAAAA
inactive_workspace #000000 #000000 #AAAAAA
urgent_workspace #2F343A #900000 #FFFFFF
binding_mode #2F343A #900000 #FFFFFF
}
}
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# start a terminal
bindsym $mod+Return exec x-terminal-emulator
# screenshot on win+shift+s
bindsym $mod+Shift+s exec "~/bin/screenshot"
# kill focused window
bindsym $mod+Shift+q kill
# kill on titlebar midclick
bindsym button3 kill
# rofi window switcher
bindsym $mod+Tab exec "rofi -show window"
# rofi launcher
bindsym $mod+space exec "rofi -show run"
# change focus
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# move focused window
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# split in horizontal orientation
bindsym $mod+h split h
# split in vertical orientation
bindsym $mod+v split v
# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# focus the parent container
bindsym $mod+a focus parent
# focus the child container
bindsym $mod+d focus child
# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws1 "1"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
# switch to workspace
bindsym $mod+1 workspace $ws1
bindsym $mod+2 workspace $ws2
bindsym $mod+3 workspace $ws3
bindsym $mod+4 workspace $ws4
bindsym $mod+5 workspace $ws5
bindsym $mod+6 workspace $ws6
bindsym $mod+7 workspace $ws7
bindsym $mod+8 workspace $ws8
bindsym $mod+9 workspace $ws9
bindsym $mod+0 workspace $ws10
# tilda replacement: workspace 10 is a full screen terminal
# menu key (old tilda hotkey) just swaps to it
bindsym Menu workspace $ws10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace $ws1
bindsym $mod+Shift+2 move container to workspace $ws2
bindsym $mod+Shift+3 move container to workspace $ws3
bindsym $mod+Shift+4 move container to workspace $ws4
bindsym $mod+Shift+5 move container to workspace $ws5
bindsym $mod+Shift+6 move container to workspace $ws6
bindsym $mod+Shift+7 move container to workspace $ws7
bindsym $mod+Shift+8 move container to workspace $ws8
bindsym $mod+Shift+9 move container to workspace $ws9
bindsym $mod+Shift+0 move container to workspace $ws10
# reload the configuration file
bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
# resize window (you can also use the mouse for that)
mode "resize" {
# These bindings trigger as soon as you enter the resize mode
# Pressing left will shrink the windows width.
# Pressing right will grow the windows width.
# Pressing up will shrink the windows height.
# Pressing down will grow the windows height.
bindsym j resize shrink width 10 px or 10 ppt
bindsym k resize grow height 10 px or 10 ppt
bindsym l resize shrink height 10 px or 10 ppt
bindsym semicolon resize grow width 10 px or 10 ppt
# same bindings, but for the arrow keys
bindsym Left resize shrink width 1 px or 1 ppt
bindsym Down resize grow height 1 px or 1 ppt
bindsym Up resize shrink height 1 px or 1 ppt
bindsym Right resize grow width 1 px or 1 ppt
# back to normal: Enter or Escape or $mod+r
bindsym Return mode "default"
bindsym Escape mode "default"
bindsym $mod+r mode "default"
}
bindsym $mod+r mode "resize"
# remove extraneous borders
hide_edge_borders both
# allow workspace swap keys to toggle back and forth with prior workspace
workspace_auto_back_and_forth yes
# Startup stuff
exec --no-startup-id "xsetroot -solid black"
exec --no-startup-id nextcloud

51
.config/kitty/kitty.conf Normal file
View file

@ -0,0 +1,51 @@
cursor_blink_interval 0
scrollback_lines 2000
url_color #0087BD
url_style curly
sync_to_monitor yes
enable_audio_bell no
window_alert_on_bell yes
foreground #cccccc
background #000000
map kitty_mod+enter new_window_with_cwd
map kitty_mod+j previous_window
map kitty_mod+k next_window
map kitty_mod+up move_window_forward
map kitty_mod+down move_window_backward
map kitty_mod+] next_tab
map kitty_mod+[ previous_tab
map kitty_mod+right move_tab_forward
map kitty_mod+left move_tab_backward
map kitty_mod+t new_tab_with_cwd
map kitty_mod+equal change_font_size all +2.0
map kitty_mod+minus change_font_size all -2.0
map kitty_mod+backspace change_font_size all 0
map kitty_mod+u input_unicode_character
map kitty_mod+f2 edit_config_file
color0 #444444
color1 #FF0054
color2 #B1D630
color3 #9D895E
color4 #67BEE3
color5 #B576BC
color6 #569A9F
color7 #EDEDED
color8 #777777
color9 #D65E75
color10 #BAFFAA
color11 #ECE1C8
color12 #9FD3E5
color13 #DEB3DF
color14 #B6E0E5
color15 #FFFFFF
background #000000
selection #ffffff

1
.config/rofi/config Normal file
View file

@ -0,0 +1 @@
rofi.theme: /usr/share/rofi/themes/purple.rasi

5
.gitconfig Normal file
View file

@ -0,0 +1,5 @@
[user]
email = trysdyn@voidfox.com
name = Trysdyn Black
[push]
default = simple

1590
.p10k.zsh Normal file

File diff suppressed because it is too large Load diff

21
.taskrc Normal file
View file

@ -0,0 +1,21 @@
include /usr/share/taskwarrior/dark-green-256.theme
data.location=~/Nextcloud/My Library/taskwarrior
# Quick "What I did yesterday/today" standup report
report.standup.labels=Status,Modified,Description
report.standup.columns=status,modified.relative,description.count
report.standup.sort=modified+
report.standup.filter=modified.after:yesterday or +next
# Same as above but weekly report
report.weekly.labels=Status,Modified,Description
report.weekly.columns=status,modified.relative,description.count
report.weekly.sort=modified+
report.weekly.filter=modified.after:today-7d or +next
# Remove annotations from default (next) report; just count them instead
report.next.columns=id,start.age,entry.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description.count,urgency
# Remove blank lines and useless things like task totals in searches
verbose=label,footnote,new-id,special,edit,project

83
.vimrc Normal file
View file

@ -0,0 +1,83 @@
" Ensure certain plugins work by removing vi compatable modes
set nocompatible
" Start Vundle, temporarily set some values
set rtp+=~/.vim/bundle/Vundle.vim
filetype off
call vundle#begin()
" Plugin execution
Plugin 'VundleVim/Vundle.vim'
Plugin 'vim-pandoc/vim-pandoc'
Plugin 'vim-pandoc/vim-pandoc-syntax'
Plugin 'tpope/vim-surround'
Plugin 'mhinz/vim-startify'
Plugin 'vim-airline/vim-airline'
Plugin 'dense-analysis/ale'
Plugin 'noahfrederick/vim-hemisu'
" End Vundle startup, reset changed values as desired
call vundle#end()
filetype plugin indent on
" Visual themeing
set termguicolors "Enable 256 colors
set scrolloff=5 "Always display 5 lines below cursor when scrolling
colorscheme hemisu
set background=dark
let g:airline_powerline_fonts = 1
" Set UTF-8 default
set encoding=utf-8
" Searching Modifications
set hlsearch "highlight search matches
set incsearch
set ignorecase
set smartcase
" Tabs and Whitespace
set breakindent
set autoindent
set smartindent
set nowrap
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set list listchars=tab:\ \ ,trail:.
" Command completion
set wildmenu
set wildignorecase
" Syntax Highlighting
syntax on
" Directories for backup files
set backupdir=~/.vim/backup
set directory=~/.vim/backup
" Disable markdown spelling by default
let g:pandoc#modules#disabled = ["spell"]
" Fixes to pandoc's rules to make markdown less ugly
let g:pandoc#syntax#codeblocks#embeds#langs = ["python", "bash=sh", "sh"]
let g:pandoc#syntax#conceal#blacklist = ["ellipses", "quotes"]
let g:pandoc#syntax#conceal#urls = 1
" Unfold everything by default
set foldlevel=99
" Bracketed Paste
let &t_ti = &t_ti . "\e[?2004h"
let &t_te = "\e[?2004l" . &t_te
function XTermPasteBegin(ret)
set pastetoggle=<Esc>[201~
set paste
return a:ret
endfunction
map <expr> <Esc>[200~ XTermPasteBegin("i")
imap <expr> <Esc>[200~ XTermPasteBegin("")
cmap <Esc>[200~ <nop>
cmap <Esc>[201~ <nop>

29
.zshrc Normal file
View file

@ -0,0 +1,29 @@
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
source ~/.p10k/powerlevel10k.zsh-theme
export EDITOR=vim
export PAGER=most
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory
alias ct="clear && task"
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias diff='diff --color=auto'
# Case-insensetive tab completion
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}'
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

1
README.md Normal file
View file

@ -0,0 +1 @@
Personal dotfiles

86
setup_dotfiles.py Executable file
View file

@ -0,0 +1,86 @@
#!/usr/bin/env python3
"""
Syncronizes dotfiles from a source dir that mimics a homedir tree to a homedir,
removing old symlinks as necessary as well as optionally files.
"""
import os
import pathlib
FORCE = False
HOMEDIR = os.path.expanduser("~")
SOURCEDIR = os.path.dirname(os.path.join(os.path.realpath(__file__)))
EXCLUSIONS = [
".git",
"setup_dotfiles.py",
"README.md"
]
def check_and_remove(source, destination, force=False):
"""
Checks if a file exists and removes it if appropriate.
If it's a symlink we check it points the right place and remove it if not.
If it's a file, we remove it if --force is provided, or error if not.
If we need to re-deply the symlink, return True, else return False.
"""
pathlib.Path(os.path.dirname(destination)).mkdir(parents=True, exist_ok=True)
# Destination exists as a symlink
if os.path.islink(destination):
# Symlink is correct, return
if os.readlink(destination) == source:
return False
# Symlink is incorrect, remove it
os.unlink(destination)
# Destination exists as a file
elif os.path.exists(destination):
# Force mode enabled, remove it (Data loss risk!!)
if force:
os.remove(destination)
# Force mode diseabled, error out
else:
raise OSError(f"{destination} exists as a file and --force not provided")
# File doesn't exists or undefined "thing" happened, return True to try to
# write, and if something goes wrong, we'll see the OSError
return True
def install_dotfiles(source_dir, dest_dir, exclusions, force=False):
"""
Iterates the files present in source_dir, excluding EXCLUSIONS, and syncs
them to dest_dir, overwriting files that exist if force is true.
"""
# source_dir needs to end in an / to make replacements work
if not source_dir.endswith("/"):
source_dir = source_dir + "/"
for root, dir_names, file_names in os.walk(source_dir):
# Remove exclusions from the walk list so we don't touch them
for exclusion in exclusions:
if exclusion in dir_names:
dir_names.remove(exclusion)
if exclusion in file_names:
file_names.remove(exclusion)
for file_name in file_names:
# Get the full path for the source file
source = os.path.join(root, file_name)
# Get the full path for where the symlink should go
# We remove the source_dir to get a dotfile dir relative path
destination = os.path.join(dest_dir, source.replace(source_dir, ''))
# Check for and remove the destination file if it exists
# If a removal occurs, catch True and deploy the symlink
if check_and_remove(source, destination, force):
print(f"Symlinking {source} => {destination}")
os.symlink(source, destination)
if __name__ == "__main__":
install_dotfiles(SOURCEDIR, HOMEDIR, EXCLUSIONS, False)