switched from iterm to wezterm

This commit is contained in:
Jeremie Fraeys 2024-05-27 17:58:49 -04:00
parent f99d262760
commit 1972aef9bb
35 changed files with 593 additions and 215 deletions

View file

@ -1,2 +1,3 @@
/Users/jfraeys/yes /Users/jfraeys/.conda
/Users/jfraeys/yes/envs/soft-skills-env /usr/local/Caskroom/miniforge/base
/usr/local/Caskroom/miniforge/base/envs/soft-skills-env

23
gh/.config/gh/config.yml Normal file
View file

@ -0,0 +1,23 @@
# The current version of the config schema
version: 1
# What protocol to use when performing git operations. Supported values:
# ssh, https
git_protocol: https
# What editor gh should run when creating issues, pull requests, etc. If
# blank, will refer to environment.
editor: vim
# When to interactively prompt. This is a global config that cannot be
# overridden by hostname. Supported values: enabled, disabled
prompt: enabled
# A pager program to send command output to, e.g. "less". If blank, will
# refer to environment. Set the value to "cat" to disable the pager.
pager:
# Aliases allow you to create nicknames for gh commands
aliases:
co: pr checkout
# The path to a unix socket through which send HTTP connections. If blank,
# HTTP traffic will be handled by net/http.DefaultTransport.
http_unix_socket:
# What web browser gh should use when opening URLs. If blank, will refer to
# environment.
browser:

5
gh/.config/gh/hosts.yml Normal file
View file

@ -0,0 +1,5 @@
github.com:
git_protocol: https
users:
jfraeys:
user: jfraeys

View file

@ -0,0 +1,10 @@
/*This file contains any manual css for this page that needs to override the global styles.
This is only required when different pages style the same element differently. This is just
a hack to deal with our current css styles and no new styling should be added in this file.*/
#ipython-main-app {
position: relative;
}
#jupyter-main-app {
position: relative;
}

View file

@ -0,0 +1,82 @@
// leave at least 2 line with only a star on it below, or doc generation fails
/**
*
*
* Placeholder for custom user javascript
* mainly to be overridden in profile/static/custom/custom.js
* This will always be an empty file in IPython
*
* User could add any javascript in the `profile/static/custom/custom.js` file.
* It will be executed by the ipython notebook at load time.
*
* Same thing with `profile/static/custom/custom.css` to inject custom css into the notebook.
*
*
* The object available at load time depend on the version of IPython in use.
* there is no guaranties of API stability.
*
* The example below explain the principle, and might not be valid.
*
* Instances are created after the loading of this file and might need to be accessed using events:
* define([
* 'base/js/namespace',
* 'base/js/events'
* ], function(IPython, events) {
* events.on("app_initialized.NotebookApp", function () {
* IPython.keyboard_manager....
* });
* });
*
* __Example 1:__
*
* Create a custom button in toolbar that execute `%qtconsole` in kernel
* and hence open a qtconsole attached to the same kernel as the current notebook
*
* define([
* 'base/js/namespace',
* 'base/js/events'
* ], function(IPython, events) {
* events.on('app_initialized.NotebookApp', function(){
* IPython.toolbar.add_buttons_group([
* {
* 'label' : 'run qtconsole',
* 'icon' : 'icon-terminal', // select your icon from http://fortawesome.github.io/Font-Awesome/icons
* 'callback': function () {
* IPython.notebook.kernel.execute('%qtconsole')
* }
* }
* // add more button here if needed.
* ]);
* });
* });
*
* __Example 2:__
*
* At the completion of the dashboard loading, load an unofficial javascript extension
* that is installed in profile/static/custom/
*
* define([
* 'base/js/events'
* ], function(events) {
* events.on('app_initialized.DashboardApp', function(){
* require(['custom/unofficial_extension.js'])
* });
* });
*
* __Example 3:__
*
* Use `jQuery.getScript(url [, success(script, textStatus, jqXHR)] );`
* to load custom script into the notebook.
*
* // to load the metadata ui extension example.
* $.getScript('/static/notebook/js/celltoolbarpresets/example.js');
* // or
* // to load the metadata ui extension to control slideshow mode / reveal js for nbconvert
* $.getScript('/static/notebook/js/celltoolbarpresets/slideshow.js');
*
*
* @module IPython
* @namespace IPython
* @class customjs
* @static
*/

View file

@ -0,0 +1,13 @@
{
"version": 1,
"Exporter": {
"extra_template_paths": [
".",
"/usr/local/Caskroom/miniforge/base/envs/ml-nlp-env/lib/python3.11/site-packages/jupyter_contrib_nbextensions/templates"
],
"preprocessors": [
"jupyter_contrib_nbextensions.nbconvert_support.CodeFoldingPreprocessor",
"jupyter_contrib_nbextensions.nbconvert_support.PyMarkdownPreprocessor"
]
}
}

View file

@ -0,0 +1,7 @@
{
"NotebookApp": {
"nbserver_extensions": {
"jupyter_nbextensions_configurator": true
}
}
}

View file

@ -6,5 +6,9 @@
// Selected Theme // Selected Theme
// Application-level visual styling theme // Application-level visual styling theme
"theme": "JupyterLab Dark" "theme": "JupyterLab Dark",
// Scrollbar Theming
// Enable/disable styling of the application scrollbars
"theme-scrollbars": true
} }

View file

@ -0,0 +1,11 @@
{
// CodeMirror
// @jupyterlab/codemirror-extension:commands
// Text editor settings for all CodeMirror editors.
// ************************************************
// Theme
// CSS file defining the corresponding
// .cm-s-[name] styles is loaded
"theme": "jupyter"
}

View file

@ -0,0 +1 @@
{"data":{"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":0,"widgets":[]}},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"]},"right":{"collapsed":true,"widgets":["jp-property-inspector","debugger-sidebar"]},"relativeSizes":[0.22233718457205265,0.7776628154279474,0]}},"metadata":{"id":"auto-0"}}

View file

@ -0,0 +1 @@
{"data":{"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":0,"widgets":["notebook:notebooks/count_tf_df_analysis.ipynb","notebook:notebooks/exploration_soft_skills.ipynb","notebook:notebooks/exploration_coop_postings.ipynb","notebook:notebooks/tf_idf_programs.ipynb"]},"current":"notebook:notebooks/count_tf_df_analysis.ipynb"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"],"widgetStates":{"jp-running-sessions":{"sizes":[0.25,0.25,0.25,0.25],"expansionStates":[false,false,false,false]},"extensionmanager.main-view":{"sizes":[0,1,0],"expansionStates":[false,false,false]}}},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector","debugger-sidebar"],"widgetStates":{"jp-debugger-sidebar":{"sizes":[0.2,0.2,0.2,0.2,0.2],"expansionStates":[false,false,false,false,false]}}},"relativeSizes":[0.1298499741334713,0.8701500258665287,0],"top":{"simpleVisibility":true}},"file-browser-filebrowser:cwd":{"path":"notebooks"},"notebook:notebooks/count_tf_df_analysis.ipynb":{"data":{"path":"notebooks/count_tf_df_analysis.ipynb","factory":"Notebook"}},"notebook:notebooks/exploration_soft_skills.ipynb":{"data":{"path":"notebooks/exploration_soft_skills.ipynb","factory":"Notebook"}},"notebook:notebooks/exploration_coop_postings.ipynb":{"data":{"path":"notebooks/exploration_coop_postings.ipynb","factory":"Notebook"}},"notebook:notebooks/tf_idf_programs.ipynb":{"data":{"path":"notebooks/tf_idf_programs.ipynb","factory":"Notebook"}}},"metadata":{"id":"auto-1"}}

View file

@ -0,0 +1 @@
{"data":{"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":3,"widgets":["notebook:notebooks/figures_tf_idf_programe_name.ipynb","notebook:notebooks/tf_idf_timeline.ipynb","notebook:notebooks/tf_idf_programs.ipynb","notebook:notebooks/count_tf_df_analysis.ipynb","notebook:notebooks/exploration_coop_postings.ipynb","notebook:notebooks/exploration_soft_skills.ipynb"]},"current":"notebook:notebooks/count_tf_df_analysis.ipynb"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"]},"right":{"collapsed":true,"widgets":["jp-property-inspector","debugger-sidebar"]},"relativeSizes":[0.22236718127129082,0.7776328187287092,0]},"file-browser-filebrowser:cwd":{"path":"notebooks"},"notebook:notebooks/exploration_coop_postings.ipynb":{"data":{"path":"notebooks/exploration_coop_postings.ipynb","factory":"Notebook"}},"notebook:notebooks/exploration_soft_skills.ipynb":{"data":{"path":"notebooks/exploration_soft_skills.ipynb","factory":"Notebook"}},"notebook:notebooks/figures_tf_idf_programe_name.ipynb":{"data":{"path":"notebooks/figures_tf_idf_programe_name.ipynb","factory":"Notebook"}},"notebook:notebooks/tf_idf_timeline.ipynb":{"data":{"path":"notebooks/tf_idf_timeline.ipynb","factory":"Notebook"}},"notebook:notebooks/tf_idf_programs.ipynb":{"data":{"path":"notebooks/tf_idf_programs.ipynb","factory":"Notebook"}},"notebook:notebooks/count_tf_df_analysis.ipynb":{"data":{"path":"notebooks/count_tf_df_analysis.ipynb","factory":"Notebook"}}},"metadata":{"id":"auto-2"}}

View file

@ -0,0 +1 @@
{"data":{"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":1,"widgets":["notebook:notebooks/count_tf_df_analysis.ipynb"]},"current":"notebook:notebooks/count_tf_df_analysis.ipynb"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"]},"right":{"collapsed":true,"widgets":["jp-property-inspector","debugger-sidebar"]},"relativeSizes":[0.22233718457205265,0.7776628154279474,0]},"file-browser-filebrowser:cwd":{"path":"notebooks"},"notebook:notebooks/count_tf_df_analysis.ipynb":{"data":{"path":"notebooks/count_tf_df_analysis.ipynb","factory":"Notebook"}}},"metadata":{"id":"auto-4"}}

View file

@ -0,0 +1 @@
{"data":{"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":1,"widgets":["notebook:notebooks/count_tf_df_analysis.ipynb"]},"current":"notebook:notebooks/count_tf_df_analysis.ipynb"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"],"widgetStates":{"jp-running-sessions":{"sizes":[0.25,0.25,0.25,0.25],"expansionStates":[false,false,false,false]},"extensionmanager.main-view":{"sizes":[0.3333333333333333,0.3333333333333333,0.3333333333333333],"expansionStates":[false,false,false]}}},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector","debugger-sidebar"],"widgetStates":{"jp-debugger-sidebar":{"sizes":[0.2,0.2,0.2,0.2,0.2],"expansionStates":[false,false,false,false,false]}}},"relativeSizes":[0.1298499741334713,0.8701500258665287,0],"top":{"simpleVisibility":true}},"file-browser-filebrowser:cwd":{"path":"notebooks"},"notebook:notebooks/count_tf_df_analysis.ipynb":{"data":{"path":"notebooks/count_tf_df_analysis.ipynb","factory":"Notebook"}}},"metadata":{"id":"auto-a"}}

View file

@ -0,0 +1 @@
{"data":{"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":1,"widgets":["notebook:notebooks/count_tf_df_analysis.ipynb","notebook:notebooks/tf_idf_timeline.ipynb","notebook:notebooks/tf_idf_programs.ipynb"]},"current":"notebook:notebooks/tf_idf_timeline.ipynb"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"]},"right":{"collapsed":true,"widgets":["jp-property-inspector","debugger-sidebar"]},"relativeSizes":[0.22236718127129082,0.7776328187287092,0]},"file-browser-filebrowser:cwd":{"path":"notebooks"},"notebook:notebooks/count_tf_df_analysis.ipynb":{"data":{"path":"notebooks/count_tf_df_analysis.ipynb","factory":"Notebook"}},"notebook:notebooks/tf_idf_timeline.ipynb":{"data":{"path":"notebooks/tf_idf_timeline.ipynb","factory":"Notebook"}},"notebook:notebooks/tf_idf_programs.ipynb":{"data":{"path":"notebooks/tf_idf_programs.ipynb","factory":"Notebook"}}},"metadata":{"id":"auto-m"}}

View file

@ -0,0 +1 @@
{"data":{"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":1,"widgets":["notebook:notebooks/count_tf_df_analysis.ipynb"]},"current":"notebook:notebooks/count_tf_df_analysis.ipynb"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"],"widgetStates":{"jp-running-sessions":{"sizes":[0.25,0.25,0.25,0.25],"expansionStates":[false,false,false,false]},"extensionmanager.main-view":{"sizes":[0.3333333333333333,0.3333333333333333,0.3333333333333333],"expansionStates":[false,false,false]}}},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector","debugger-sidebar"],"widgetStates":{"jp-debugger-sidebar":{"sizes":[0.2,0.2,0.2,0.2,0.2],"expansionStates":[false,false,false,false,false]}}},"relativeSizes":[0.1298499741334713,0.8701500258665287,0],"top":{"simpleVisibility":true}},"file-browser-filebrowser:cwd":{"path":"notebooks"},"notebook:notebooks/count_tf_df_analysis.ipynb":{"data":{"path":"notebooks/count_tf_df_analysis.ipynb","factory":"Notebook"}}},"metadata":{"id":"auto-t"}}

View file

@ -0,0 +1 @@
{"data":{"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":0,"widgets":[]}},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"]},"right":{"collapsed":true,"widgets":["jp-property-inspector","debugger-sidebar"]},"relativeSizes":[0.22233718457205265,0.7776628154279474,0]}},"metadata":{"id":"auto-w"}}

View file

@ -0,0 +1 @@
{"data":{"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":0,"widgets":[]}},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"],"widgetStates":{"jp-running-sessions":{"sizes":[0.25,0.25,0.25,0.25],"expansionStates":[false,false,false,false]},"extensionmanager.main-view":{"sizes":[0.3333333333333333,0.3333333333333333,0.3333333333333333],"expansionStates":[false,false,false]}}},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector","debugger-sidebar"],"widgetStates":{"jp-debugger-sidebar":{"sizes":[0.2,0.2,0.2,0.2,0.2],"expansionStates":[false,false,false,false,false]}}},"relativeSizes":[0.1298499741334713,0.8701500258665287,0],"top":{"simpleVisibility":true}}},"metadata":{"id":"auto-z"}}

View file

@ -1 +1 @@
{"data":{"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":0,"widgets":[]},"current":"notebook:notebooks/figures_tf_idf_years.ipynb"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"running-sessions","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"]},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector","debugger-sidebar"]},"relativeSizes":[0.16373124592302674,0.8362687540769732,0],"top":{"simpleVisibility":true}},"file-browser-filebrowser:cwd":{"path":"notebooks"},"notebook:notebooks/figures_tf_idf_years.ipynb":{"data":{"path":"notebooks/figures_tf_idf_years.ipynb","factory":"Notebook"}},"notebook:notebooks/tf_idf_timeline.ipynb":{"data":{"path":"notebooks/tf_idf_timeline.ipynb","factory":"Notebook"}}},"metadata":{"id":"default"}} {"data":{"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":0,"widgets":["notebook:Untitled.ipynb"]},"current":"notebook:Untitled.ipynb"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"],"widgetStates":{"jp-running-sessions":{"sizes":[0.25,0.25,0.25,0.25],"expansionStates":[false,false,false,false]},"extensionmanager.main-view":{"sizes":[0.3333333333333333,0.3333333333333333,0.3333333333333333],"expansionStates":[false,false,false]}}},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector","debugger-sidebar"],"widgetStates":{"jp-debugger-sidebar":{"sizes":[0.2,0.2,0.2,0.2,0.2],"expansionStates":[false,false,false,false,false]}}},"relativeSizes":[0.25397835773392746,0.7460216422660726,0],"top":{"simpleVisibility":true}},"file-browser-filebrowser:cwd":{"path":""},"notebook:Untitled.ipynb":{"data":{"path":"Untitled.ipynb","factory":"Notebook"}}},"metadata":{"id":"default"}}

View file

@ -3,6 +3,7 @@
"nbextensions_configurator/config_menu/main": true, "nbextensions_configurator/config_menu/main": true,
"hinterland/hinterland": true, "hinterland/hinterland": true,
"jupyter_tabnine/main": true, "jupyter_tabnine/main": true,
"jupyter-js-widgets/extension": true "jupyter-js-widgets/extension": true,
"contrib_nbextensions_help_item/main": true
} }
} }

View file

@ -1,5 +1,29 @@
{ {
"0fb1f2828eeeae418602193a4d04d5ccd121dc74": { "0fb1f2828eeeae418602193a4d04d5ccd121dc74": {
"seen": true "seen": true
},
"d564445e21a7603ceaf5b28e4e981ac33d23905b": {
"seen": true
},
"e90082157ab36fe43a156f798be33af1f0101d8a": {
"seen": true
},
"608d7f891761d97403a2faf16de02aff3dda2895": {
"seen": true
},
"6c7c5d359b52a7ce16f1e251efb0e609a9c4e9ef": {
"seen": true
},
"a8587a7634f266c21a3498ad4b619099dab155d4": {
"seen": true
},
"5122698b39c2ff9417deb80bd329aee257a51be0": {
"seen": true
},
"b9d150ecb5e02a8359329ac6f34bfa41d1209f9e": {
"seen": true
},
"c8e6c57a45295d2f0982437c629c8ea5408700b7": {
"seen": true
} }
} }

View file

@ -0,0 +1,41 @@
# Function to change the tmux window background color based on SSH environment
function windowc() {
local profile_name="$1"
case "$profile_name" in
services*|service*)
tmux set-window-option -g window-status-bg colour1 # Change to the desired color
;;
production*|prod*|web*)
tmux set-window-option -g window-status-bg "rgb:00/7F/7F" # Change to the desired color
;;
staging*|stage*)
tmux set-window-option -g window-status-bg colour3 # Change to the desired color
;;
*)
tmux set-window-option -g window-status-bg default # Use default color for any other server
;;
esac
}
# Function to automatically create a new tmux window when using ssh
function colourssh() {
# Run the original ssh command, capturing its output
ssh_output=$(command ssh "$@")
# Check if the ssh command was successful
if [ $? -eq 0 ]; then
# Extract the hostname from the ssh command using pcregrep
host=$(echo "$ssh_output" | pcregrep -o1 'ssh\s+([^\@]+)')
# Change tmux window background color based on SSH environment
windowc "$host"
# Create a new tmux window
tmux new-window
fi
}
# Alias to use the modified ssh function
alias ssh="colourssh"

20
p10k/.p10k.zsh Executable file → Normal file
View file

@ -1,7 +1,7 @@
# Generated by Powerlevel10k configuration wizard on 2023-11-22 at 03:05 EST. # Generated by Powerlevel10k configuration wizard on 2024-05-04 at 13:58 EDT.
# Based on romkatv/powerlevel10k/config/p10k-lean.zsh, checksum 61526. # Based on romkatv/powerlevel10k/config/p10k-lean.zsh, checksum 61526.
# Wizard options: nerdfont-complete + powerline, small icons, unicode, lean, 1 line, # Wizard options: nerdfont-complete + powerline, small icons, unicode, lean, 24h time,
# compact, many icons, concise, transient_prompt, instant_prompt=quiet. # 1 line, compact, few icons, concise, transient_prompt, instant_prompt=quiet.
# Type `p10k configure` to generate another config. # Type `p10k configure` to generate another config.
# #
# Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate # Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate
@ -30,7 +30,7 @@
# The list of segments shown on the left. Fill it with the most important segments. # The list of segments shown on the left. Fill it with the most important segments.
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
os_icon # os identifier # os_icon # os identifier
dir # current directory dir # current directory
vcs # git status vcs # git status
prompt_char # prompt symbol prompt_char # prompt symbol
@ -100,7 +100,7 @@
taskwarrior # taskwarrior task count (https://taskwarrior.org/) taskwarrior # taskwarrior task count (https://taskwarrior.org/)
per_directory_history # Oh My Zsh per-directory-history local/global indicator per_directory_history # Oh My Zsh per-directory-history local/global indicator
# cpu_arch # CPU architecture # cpu_arch # CPU architecture
# time # current time time # current time
# ip # ip address and bandwidth usage for a specified network interface # ip # ip address and bandwidth usage for a specified network interface
# public_ip # public IP address # public_ip # public IP address
# proxy # system-wide http/https/ftp proxy # proxy # system-wide http/https/ftp proxy
@ -333,14 +333,14 @@
# parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls
# back to POWERLEVEL9K_DIR_FOREGROUND. # back to POWERLEVEL9K_DIR_FOREGROUND.
# #
# typeset -g POWERLEVEL9K_DIR_CLASSES=() typeset -g POWERLEVEL9K_DIR_CLASSES=()
# Custom prefix. # Custom prefix.
# typeset -g POWERLEVEL9K_DIR_PREFIX='%fin ' # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin '
#####################################[ vcs: git status ]###################################### #####################################[ vcs: git status ]######################################
# Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon.
typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 ' typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=
# Untracked files icon. It's really a question mark, your font isn't broken. # Untracked files icon. It's really a question mark, your font isn't broken.
# Change the value of this parameter to show a different icon. # Change the value of this parameter to show a different icon.
@ -486,7 +486,7 @@
typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76
typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244
# Custom icon. # Custom icon.
# typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION=
# Custom prefix. # Custom prefix.
# typeset -g POWERLEVEL9K_VCS_PREFIX='%fon ' # typeset -g POWERLEVEL9K_VCS_PREFIX='%fon '
@ -547,7 +547,7 @@
# Duration format: 1d 2h 3m 4s. # Duration format: 1d 2h 3m 4s.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
# Custom icon. # Custom icon.
# typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION=
# Custom prefix. # Custom prefix.
# typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook ' # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook '
@ -1630,7 +1630,7 @@
# behavior where they contain the end times of their preceding commands. # behavior where they contain the end times of their preceding commands.
typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
# Custom icon. # Custom icon.
# typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION=
# Custom prefix. # Custom prefix.
# typeset -g POWERLEVEL9K_TIME_PREFIX='%fat ' # typeset -g POWERLEVEL9K_TIME_PREFIX='%fat '

View file

@ -15,14 +15,16 @@ base=(
zsh zsh
vim vim
nvim nvim
tmux # tmux
git git
wezterm
) )
# Folders that should, or only need to be installed for a local user on macOS # Folders that should, or only need to be installed for a local user on macOS
useronly_macos=( useronly_macos=(
yabai yabai
skhd skhd
oh-my-zsh
) )
#Folders that should, or only need to be installed for a local user on Linux #Folders that should, or only need to be installed for a local user on Linux
@ -32,6 +34,7 @@ useronly_linux=(
# Folders that should, or only need to be installed for a local user # Folders that should, or only need to be installed for a local user
useronly=( useronly=(
zoxide
conda conda
dask dask
gh gh
@ -46,7 +49,7 @@ ignore_files=(
".DS_Store" ".DS_Store"
"__setup" "__setup"
"bin" "bin"
"git" ".git"
"setup.sh" "setup.sh"
) )
@ -85,7 +88,7 @@ expect_yes() {
spawn bash -c \"cd '$profile_dir' && $1\" > /dev/null 2>&1 spawn bash -c \"cd '$profile_dir' && $1\" > /dev/null 2>&1
expect { expect {
\"This script will update to the latest user.js file and append any custom configurations from user-overrides.js. Continue Y/N?\" { send \"y\r\"; exp_continue } \"This script will update to the latest user.js file and append any custom configurations from user-overrides.js. Continue Y/N?\" { send \"y\r\"; exp_continue }
eof { eof {
puts \"Error: Expected line not found.\" puts \"Error: Expected line not found.\"
exit 1 exit 1
} }
@ -123,9 +126,10 @@ for app in "${useronly[@]}"; do
stowit "${HOME}" "${app}" stowit "${HOME}" "${app}"
if [[ "${app}" = "firefox" ]]; then if [[ "${app}" = "firefox" ]]; then
expect_yes "./updater.sh" expect_yes "./updater.sh"
fi fi
fi fi
done done
echo "" echo ""
echo "##### ALL DONE" echo "##### ALL DONE"

View file

@ -1,9 +1,22 @@
# change window focus within space #change window focus within space
shift + cmd - j : yabai -m window --focus south shift + cmd - j : yabai -m window --focus south
shift + cmd - k : yabai -m window --focus north shift + cmd - k : yabai -m window --focus north
shift + cmd - h : yabai -m window --focus west shift + cmd - h : yabai -m window --focus west
shift + cmd - l : yabai -m window --focus east shift + cmd - l : yabai -m window --focus east
# Resize windows
lctrl + alt - h : yabai -m window --resize left:-50:0; \
yabai -m window --resize right:-50:0
lctrl + alt - j : yabai -m window --resize bottom:0:50; \
yabai -m window --resize top:0:50
lctrl + alt - k : yabai -m window --resize top:0:-50; \
yabai -m window --resize bottom:0:-50
lctrl + alt - l : yabai -m window --resize right:50:0; \
yabai -m window --resize left:50:0
# Equalize size of windows
lctrl + alt - e : yabai -m space --balance
# change space # # change space #
shift + cmd - 1 : yabai -m space --display 1 shift + cmd - 1 : yabai -m space --display 1
shift + cmd - 2 : yabai -m space --display 2 shift + cmd - 2 : yabai -m space --display 2
@ -14,8 +27,8 @@ shift + cmd - 6 : yabai -m space --display 6
shift + cmd - 7 : yabai -m space --display 7 shift + cmd - 7 : yabai -m space --display 7
#change focus between external displays (left and right) #change focus between external displays (left and right)
cmd - s: yabai -m display --focus west cmd - h: yabai -m display --focus west
cmd - g: yabai -m display --focus east cmd - l: yabai -m display --focus east
# rotate layout clockwise # rotate layout clockwise
shift + alt - r : yabai -m space --rotate 270 shift + alt - r : yabai -m space --rotate 270
@ -30,14 +43,11 @@ shift + alt - x : yabai -m space --mirror x-axis
shift + alt - t : yabai -m window --toggle float --grid 4:4:1:1:2:2 shift + alt - t : yabai -m window --toggle float --grid 4:4:1:1:2:2
# maximize a window # maximize a window
shift + alt - m : yabai -m window --toggle zoom-fullscreeni shift + alt - m : yabai -m window --toggle zoom-fullscreen
# toggle whether the focused window should be shown on all spaces # toggle whether the focused window should be shown on all spaces
shift + alt - a : yabai -m window --toggle sticky shift + alt - a : yabai -m window --toggle sticky
# balance out tree of windows (resize to occupy same area)
shift + alt - e : yabai -m space --balance
# swap windows # swap windows
shift + alt - j : yabai -m window --swap south shift + alt - j : yabai -m window --swap south
shift + alt - k : yabai -m window --swap north shift + alt - k : yabai -m window --swap north
@ -51,8 +61,8 @@ ctrl + alt - h : yabai -m window --warp west
ctrl + alt - l : yabai -m window --warp east ctrl + alt - l : yabai -m window --warp east
# move window to display left and right # move window to display left and right
shift + alt - s : yabai -m window --display west; yabai -m display --focus west; shift + alt - h : yabai -m window --display west; yabai -m display --focus west;
shift + alt - g : yabai -m window --display east; yabai -m display --focus east; shift + alt - l : yabai -m window --display east; yabai -m display --focus east;
#move window to prev and next space #move window to prev and next space
shift + alt - p : yabai -m window --space prev; shift + alt - p : yabai -m window --space prev;
@ -67,16 +77,16 @@ shift + alt - 5 : yabai -m window --space 5;
shift + alt - 6 : yabai -m window --space 6; shift + alt - 6 : yabai -m window --space 6;
shift + alt - 7 : yabai -m window --space 7; shift + alt - 7 : yabai -m window --space 7;
# open apps # # open apps
ctrl + cmd - 1 : open -a VSCodium.app # lctrl + shift - t : open -an Wezterm.app
ctrl + cmd - 2 : open -a Brave\ Browser.app # lctrl + shift - b : open -an Firefox.app
ctrl + cmd - 3 : open -n /Applications/Brave\ Browser.app # lctrl + shift - v : open -an VSCodium.app
ctrl + cmd - 4 : open -a Mail.app # shift + alt - m : open -an Mail.app
ctrl + cmd - 5 : open -a Authy\ Desktop.app # shift + alt - a : open -an Authy\ Desktop.app
ctrl + cmd - 6 : open -a Bitwarden.app # shift + alt - w : open -an Bitwarden.app
ctrl + cmd - 0 : open -a iTerm.app
# stop/start/restart yabai # stop/start/restart yabai
ctrl + alt - q : brew services stop yabai ctrl + alt - q : yabai --stop-service
ctrl + alt - s : brew services start yabai ctrl + alt - s : yabai --start-service
ctrl + alt - r : brew services restart yabai ctrl + alt - r : yabai --restart-service

View file

@ -1,7 +1,6 @@
#! /bin/bash #/bin/bash
IGNORED_CAL="Birthdays, Family, Contacts, School, Home, Canadian Holidays, Canadiens, Jours fériés au Canada" IGNORED_CAL="Birthdays, Family, Contacts, School, Home, Canadian Holidays, Canadiens, Jours fériés au Canada"
ALERT_IF_IN_NEXT_MINUTES=60 ALERT_IF_IN_NEXT_MINUTES=30
ALERT_POPUP_BEFORE_SECONDS=15 ALERT_POPUP_BEFORE_SECONDS=15
THEME_BG="#2c323c" THEME_BG="#2c323c"
THEME_RED="#f92572" THEME_RED="#f92572"
@ -12,6 +11,13 @@ NERD_FONT_SEPARATOR=""
ICAL_BUDDY="/usr/local/bin/icalBuddy" ICAL_BUDDY="/usr/local/bin/icalBuddy"
check_ical_buddy() {
if [[ ! -f "$ICAL_BUDDY" ]]; then
echo "Error: iCalBuddy is not installed" >&2
return 1
fi
}
get_next_meeting() { get_next_meeting() {
next_meeting=$("$ICAL_BUDDY" \ next_meeting=$("$ICAL_BUDDY" \
--includeEventProps "title,datetime,attendees" \ --includeEventProps "title,datetime,attendees" \
@ -22,9 +28,15 @@ get_next_meeting() {
--limitItems 1 \ --limitItems 1 \
--excludeAllDayEvents \ --excludeAllDayEvents \
--separateByDate \ --separateByDate \
--bullet "" \ --excludeCals "$IGNORED_CAL" \
--excludeCals "${IGNORED_CAL}" \ eventsToday
eventsToday) )
if [[ -z "$next_meeting" ]]; then
return 1
fi
echo "$next_meeting"
} }
get_next_next_meeting() { get_next_next_meeting() {
@ -38,168 +50,205 @@ get_next_next_meeting() {
--limitItems 1 \ --limitItems 1 \
--excludeAllDayEvents \ --excludeAllDayEvents \
--separateByDate \ --separateByDate \
--bullet "" \ --excludeCals "$IGNORED_CAL" \
--excludeCals "${IGNORED_CAL}" \ eventsFrom:"${end_timestamp}" to:"${tonight}"
eventsFrom:"${end_timestamp}" to:"${tonight}") )
if [[ -z "$next_meeting" ]]; then
return 1
fi
} }
parse_result() { parse_result() {
local ical_output="$1" local ical_output="$1"
# Extract the title from the third line start_time=""
title=$(echo "$ical_output" | awk 'NR==3') end_time=""
attendees=""
title=$(echo "$ical_output" | awk 'NR==3')
lines=()
while IFS= read -r line; do # Use process substitution to emulate a file for the while loop
# array+=("$line") while read -r line; do
lines+=("$line") # Store each line in the array for potential future use
# Extract start and end time
if [[ $line =~ [0-9]{2}:[0-9]{2}\ -\ [0-9]{2}:[0-9]{2} ]]; then if [[ $line =~ [0-9]{2}:[0-9]{2}\ -\ [0-9]{2}:[0-9]{2} ]]; then
start_time=$(echo "$line" | awk '{print $1}') start_time=$(echo "$line" | awk '{print $1}')
end_time=$(echo "$line" | awk '{print $3}') end_time=$(echo "$line" | awk '{print $3}')
fi fi
# Extract attendees from the line, excluding "mailto:" if [[ $line == *attendees:* ]]; then
if [[ $line == *attendees:* ]]; then attendees_line=${line#*attendees:}
attendees_line=${line#*attendees:} attendees=$(echo "$attendees_line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//g')
attendees=$(echo "$attendees_line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//g') # Count the number of attendees
# Count the number of attendees num_attendees=$(echo "$attendees" | awk -F, '{print NF}')
num_attendees=$(echo "$attendees" | awk -F, '{print NF}') fi
fi done < <(echo "$ical_output")
done < <(echo "$ical_output")
} }
calculate_times() { calculate_times() {
if [[ -z "$start_time" ]]; then if [[ -z "$start_time" ]]; then
# echo "Error: start_time is empty or invalid"
return 1 return 1
fi fi
epoc_meeting=$(date -jf "%T" "$start_time:00" +%s) epoc_meeting=$(date -jf "%T" "$start_time:00" +%s)
if [[ $? -ne 0 ]]; then if [[ $? -ne 0 ]]; then
echo "Error: Failed to convert '$start_time' using format '%T'" echo "Error: Failed to convert '$start_time' to epoch time" >&2
return 1 return 2
fi fi
epoc_now=$(date +%s) epoc_now=$(date +%s)
epoc_diff=$((epoc_meeting - epoc_now)) epoc_diff=$((epoc_meeting - epoc_now))
minutes_till_meeting=$((epoc_diff / 60)) minutes_till_meeting=$((epoc_diff / 60))
} }
get_upcoming_meetings() { get_upcoming_meetings() {
upcoming_meetings=$("$ICAL_BUDDY" \ upcoming_meetings=$("$ICAL_BUDDY" \
--includeEventProps "title,datetime" \ --noCalendarNames \
--propertyOrder "title,datetime" \ --formatOutput \
--noCalendarNames \ --includeEventProps "title,datetime,attendees,notes,url" \
--dateFormat "%A" \ --propertyOrder "title,datetime" \
--excludeAllDayEvents \ --includeOnlyEventsFromNowOn \
--separateByDate \ --sortTagsByDate "Descending" \
--bullet "$MEETING_DELIMITER" \ --excludeAllDayEvents \
--excludeCals "${IGNORED_CAL}" \ --bullet "$MEETING_DELIMITER" \
eventsToday) --excludeCals "$IGNORED_CAL" \
eventsToday)
echo "upcoming_meetings: $upcoming_meetings"
if [[ -z "$upcoming_meetings" ]]; then
if [[ $? -ne 0 ]]; then return 1
echo "Error: Failed to get upcoming meetings" fi
return 1
fi
if [[ -z "$upcoming_meetings" ]]; then
echo "Error: upcoming_meetings is empty"
return 1
fi
} }
get_popup_size($last_meetingi) { # get_last_meeting() {
# Set minimum and maximum width/height # get_upcoming_meetings
local min_width=15 #
local max_width=40 # if [[ -z "$upcoming_meetings" ]]; then
local min_height=13 # return 1
local max_height=100 # fi
#
# meetings=("${(s/$MEETING_DELIMITER/)upcoming_meetings}")
#
# echo "meetings: ${meetings[@]}"
#
# if [[ ${#meetings[@]} -eq 0 ]]; then
# return 2
# fi
#
# last_meeting="${meetings[-1]}"
# echo "$last_meeting"
# }
# Calculate the maximum line length in the last meeting text # Split the string into an array using the delimiter, in ZSH script
local max_line_length=0 get_last_meeting() {
local length=0 get_upcoming_meetings
while IFS= read -r line; do if [[ -z "$upcoming_meetings" ]]; then
echo "line: $line" return 1
length=${#line} fi
max_line_length=$((length > max_line_length ? length : max_line_length))
done <<< "$last_meeting"
# Add padding for aesthetics echo "upcoming_meetings: $upcoming_meetings"
width=$((max_line_length + 4))
# Ensure width is within the specified range # Split the input by newline and remove leading/trailing whitespace
width=$((width > max_width ? max_width : width)) IFS=$'\n' lines=($(echo "$input" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'))
width=$((width < min_width ? min_width : width))
# Count the number of lines in the last meeting text # Find the last line that contains "attendees:"
local line_count=$(echo "$last_meeting" | wc -l) last_attendees_line=""
for line in ${(O)lines}; do
if [[ $line == *attendees:* ]]; then
last_attendees_line=$line
fi
done
# Calculate the height based on the length of the text echo "last_attendees_line: $last_attendees_line"
height=$((line_count + (width / max_line_length) + 1))
# Ensure height is within the specified range # Extract meeting information from the last attendees line
height=$((height < min_height ? min_height : height)) if [[ -n "$last_attendees_line" ]]; then
height=$((height > max_height ? max_height : height)) title=$lines[1]
start_time=$(echo "$lines[2]" | awk '{print $1}')
end_time=$(echo "$lines[2]" | awk '{print $3}')
attendees=$(echo "$last_attendees_line" | sed 's/^[^:]*: //')
# Store the meeting information in last_meeting
last_meeting="Title: $title
Start Time: $start_time
End Time: $end_time
Attendees: $attendees"
# Print or use the extracted information as needed
echo "$last_meeting"
else
echo "No meeting information found."
return 1
fi
echo "last_meeting: $last_meeting"
return "$last_meeting"
} }
display_popup() { display_popup() {
# Get all upcoming meetings get_last_meeting
get_upcoming_meetings
IFS='$MEETING_DELIMITER' read -r -d '$MEETING_DELIMITER' meetings <<< "$upcoming_meetings"
# Get the last meeting if [[ -z "$last_meeting" ]]; then
local last_meeting="${meetings[-1]}" return 1
fi
call get_popup_size "$last_meeting"
# Display a popup for the last meeting with dynamic width and height tmux display-popup \
tmux display-popup \ -S "fg=$THEME_BG" \
-S "fg=$THEME_BG" \ -w 50% \
-w${width}% \ -h 50% \
-h${height}% \ -T 'Meeting Reminder' \
-d '#{pane_current_path}' \ -d '#{pane_current_path}' \
-T Meeting \ echo "$last_meeting"
echo "$last_meeting"
} }
print_tmux_status() { print_tmux_status() {
local tmux_refresh_interval=$(tmux show-option -g status-interval) local tmux_refresh_interval=$(tmux show-option -g status-interval)
tmux_refresh_interval=$(echo "$tmux_refresh_interval" | awk '{print $NF}' | tr -d '[:space:]') local tmux_refresh_interval=$(echo "$tmux_refresh_interval" | awk '{print $NF}' | tr -d '[:space:]')
tmux_refresh_interval=$((tmux_refresh_interval)) local tmux_refresh_interval=$((tmux_refresh_interval))
local print_alert="#[fg=$THEME_RED,bold,bg=$THEME_BG] \
local print_alert="#[fg=$THEME_RED,bold,bg=$THEME_BG] \
$NERD_FONT_SEPARATOR \ $NERD_FONT_SEPARATOR \
$NERD_FONT_MEETING \ $NERD_FONT_MEETING \
$start_time $title ($minutes_till_meeting minutes)" $start_time $title ($minutes_till_meeting minutes) "
if [[ $(( $ALERT_POPUP_BEFORE_SECONDS - $tmux_refresh_interval )) -lt 0 ]]; then if ((ALERT_POPUP_BEFORE_SECONDS <= tmux_refresh_interval)); then
echo "Error: ALERT_POPUP_BEFORE_SECONDS must be greater than tmux_refresh_interval" echo "Error: ALERT_POPUP_BEFORE_SECONDS must be greater than tmux_refresh_interval" >&2
fi return
fi
if [[ $minutes_till_meeting -lt $ALERT_IF_IN_NEXT_MINUTES && \ if ((minutes_till_meeting < ALERT_IF_IN_NEXT_MINUTES)) && ((epoc_diff > ALERT_POPUP_BEFORE_SECONDS)); then
$epoc_diff -gt $ALERT_POPUP_BEFORE_SECONDS ]]; then echo "$print_alert"
echo "$print_alert" elif ((epoc_diff <= ALERT_POPUP_BEFORE_SECONDS)) && ((epoc_diff > (ALERT_POPUP_BEFORE_SECONDS - tmux_refresh_interval))); then
elif [[ $epoc_diff -le $ALERT_POPUP_BEFORE_SECONDS && \ echo "$print_alert"
$epoc_diff -gt $(( $ALERT_POPUP_BEFORE_SECONDS - $tmux_refresh_interval )) ]]; then display_popup
echo "$print_alert" else
display_popup echo "#[bold,bg=$THEME_BG] $NERD_FONT_SEPARATOR $NERD_FONT_FREE "
else fi
echo "#[bold,bg=$THEME_BG] $NERD_FONT_SEPARATOR $NERD_FONT_FREE "
fi
} }
main() { main() {
check_ical_buddy
get_next_meeting get_next_meeting
parse_result "${next_meeting[@]}" parse_result "${next_meeting[@]}"
calculate_times calculate_times
if [[ "${next_meeting[*]}" != "" && $number_of_attendees -lt 2 ]]; then if [[ -n "${next_meeting[*]}" && $num_attendees -lt 2 ]]; then
get_next_next_meeting get_next_next_meeting
parse_result "${next_next_meeting[@]}" parse_result "${next_next_meeting[@]}"
calculate_times calculate_times
fi fi
print_tmux_status print_tmux_status
} }
main main

View file

@ -6,15 +6,6 @@ set-option -g prefix C-a
unbind r unbind r
bind R source-file ~/.config/tmux/tmux.conf; display-message "Config reloaded.." bind R source-file ~/.config/tmux/tmux.conf; display-message "Config reloaded.."
# # unbind-key “x” from its current job of “ask and then close”
# unbind-key x
# # rebind-key it to just “close”
# bind-key x kill-pane
# # unbind-key “x” from its current job of “ask and then close”
# bind-key X kill-session
set-option -g detach-on-destroy off
# Session management # Session management
bind S command-prompt -p "New Session:" "new-session -A -s '%%' -c ~" bind S command-prompt -p "New Session:" "new-session -A -s '%%' -c ~"
@ -30,6 +21,13 @@ bind w display-popup -E "tmux list-windows -F '#{window_index} #{window_name} (#
# Use choose-tree for interactive session and window navigation # Use choose-tree for interactive session and window navigation
bind-key W choose-tree -Zw bind-key W choose-tree -Zw
# # Define a shell function to perform the search and display results in a tmux popup
# tmux_search() {
# display-popup -E -t 3 "$(grep -nri "$1" .)"
# }
#
# # Bind a key to trigger the search function
# bind-key / command-prompt -p "Search term:" "run-shell 'tmux_search \"%%\"'"
# Bind a key to run the switch_or_create_session function # Bind a key to run the switch_or_create_session function
bind-key -r f run-shell "tmux neww -n tmux_sessonizer ~/.local/bin/tmux_sessionizer" bind-key -r f run-shell "tmux neww -n tmux_sessonizer ~/.local/bin/tmux_sessionizer"
@ -52,6 +50,7 @@ bind j select-pane -D
# List windows # List windows
bind p previous-window bind p previous-window
bind n next-window bind n next-window
bind Y last-window
# Quick renaming # Quick renaming
bind C switch-client -n -t "#{session_name}" bind C switch-client -n -t "#{session_name}"
@ -90,7 +89,7 @@ set-window-option -g aggressive-resize off
# Seamless navigation with neovim panes # Seamless navigation with neovim panes
is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'" is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
# Navigate panes # Navigate panes
bind-key -n C-h if-shell "$is_vim" 'send-keys C-h' 'select-pane -L' bind-key -n C-h if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
bind-key -n C-j if-shell "$is_vim" 'send-keys C-j' 'select-pane -D' bind-key -n C-j if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
bind-key -n C-k if-shell "$is_vim" 'send-keys C-k' 'select-pane -U' bind-key -n C-k if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
@ -101,47 +100,41 @@ set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible' set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect' set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum' set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
set -g @plugin 'rickstaa/tmux-notify' set -g @plugin 'rickstaa/tmux-notify'
set -g @tpm_install_dir "$HOME/.config/tmux/plugins/" set -g @tpm_install_dir "$HOME/.config/tmux/plugins"
set -g status-left "#(echo -e '\033]50;SetProfile=MesloLGS NF\007')" run-shell "tmux source-file $HOME/.config/tmux/tmux.\${TMUX_THEME:-default}.theme"
set -g status-left '#[fg=#282c35,bold,bg=#98C379] 󱌄 #S '
set -g status-right '#{prefix_highlight} #[fg=grey,bold,bg=#2c323c] %a %Y-%m-%d %H:%M #($HOME/.config/tmux/scripts/cal.sh)'
set -g status-justify left set -g status-justify left
set -g status-interval 3 set -g status-interval 5
set -g status-left-length 200 set -g status-left-length 200
set -g status-right-length 200 set -g status-right-length 200
set -g status-position top set -g status-position top
set -g status-style bg='#2c323c'
set -g window-status-format "#[fg=#828997, bg=#2c323c] #I #W"
set -g window-status-current-format "#[fg=#61afef, bg=#2c323c] 󰆤#I #W"
set -g window-style 'fg=white,bg=#262a2c'
# Set status line set -g @continuum-save-interval 15
# set -g status-right '#[fg=blue]#(date "+%%H:%%M %%d-%%b-%%yi")' set -g @continuum-restore 'on'
# set -g status-left 'Session: #S | Host: #{hostname} | ' set -g @continuum-save-path "$HOME/.config/tmux/resurrect"
# set -g status-right '#{?window_bigger,[#[fg=green]\u25B2#[fg=default]],}' # Display arrow if the window has more lines
# set -g status-right '#{?window_smaller,[#[fg=red]\u25BC#[fg=default]],}' # Display arrow if the window has fewer lines set -g @notify_show_alerts 'on'
# set -g status-right '#{?client_prefix,#[reverse]<Prefix>#[noreverse] ,}' # Display prefix indicator set -g @notify_show_messages 'on'
# set -g status-right '#{?pane_in_mode,[#[fg=yellow]Copy Mode#[fg=default]],}' # Display copy mode indicator set -g @notify_show_activity 'on'
# set -g status-right ' #{=21:pane_title}' # Display pane title set -g @notify_show_monitor_activity 'on'
set -g @resurrect-capture 'C'
set -g @resurrect-save 'R'
set -g @resurrect-save-script 'yes'
set -g @resurrect-save-path "$HOME/.config/tmux/resurrect"
# Renaming Session the current dir's name # Renaming Session the current dir's name
set-option -g automatic-rename on set-option -g automatic-rename on
set-option -g automatic-rename-format '#{b:pane_current_path}' set-option -g automatic-rename-format '#{b:pane_current_path}'
set -g @prefix_highlight_fg '#282c35' # default is 'colour231'
set -g @prefix_highlight_bg '#61afef' # default is 'colour04'
set -g @prefix_highlight_prefix_prompt 'P'
# Default TMUX keybindings # Default TMUX keybindings
bind c new-window bind c new-window -c '#{pane_current_path}'
bind '"' split-window -h bind '"' split-window -h -c '#{pane_current_path}'
bind % split-window -v bind % split-window -v -c '#{pane_current_path}'
bind h select-pane -L bind h select-pane -L
bind l select-pane -R bind l select-pane -R
bind Left select-pane -L bind Left select-pane -L
@ -206,3 +199,4 @@ bind-key : command-prompt
bind-key -n F5 show-buffer bind-key -n F5 show-buffer
run '$HOME/.config/tmux/plugins/tpm/tpm' run '$HOME/.config/tmux/plugins/tpm/tpm'

View file

@ -0,0 +1,17 @@
# Set status line
set -g status-left "#(echo -e '\033]50;SetProfile=MesloLGS NF\007')"
set -g status-left '#[fg=#272A30,bold,bg=green] 󱌄 #S '
set -g status-right '#{?client_prefix,#[bg=red],} #[fg=#8F908A,bold,bg=#2E323C] %a %Y-%m-%d %H:%M #($HOME/.config/tmux/scripts/cal.sh)'
set -g status-style 'bg=#2E323C'
# Set window style
set -g window-status-format '#[fg=#8F908A,bg=#2E323C] #I #W'
set -g window-status-current-format '#[fg=blue,bg=#2E323C] 󰆤#I #W'
set -g window-style 'fg=#f8f8f0,bg=#26292C'
set -g window-status-style 'fg=blue,bg=#2E323C'
# Set status line
set -g pane-border-style 'bg=#2E323C'
set -g pane-active-border-style 'fg=blue'
set -g message-style 'fg=#2E323C,bg=#B1B1B1'

View file

@ -0,0 +1,17 @@
# Set status line
set -g status-left "#(echo -e '\033]50;SetProfile=MesloLGS NF\007')"
set -g status-left '#[fg=#073642,bold,bg=#dcd6c5] 󱌄 #S '
set -g status-right '#{?client_prefix,#[bg=red],} #[fg=white,bold,bg=brightblack] %a %Y-%m-%d %H:%M #($HOME/.config/tmux/scripts/cal.sh)'
set -g status-style 'bg=#002b36'
# Set window style
set -g window-status-format '#[fg=white,bg=brightblack] #I #W'
set -g window-status-current-format '#[fg=blue,bg=brightblack] 󰆤#I #W'
set -g window-style 'fg=#586e75,bg=#fdf6e3'
set -g window-status-style 'fg=#839496,bg=brightblack'
# Additional settings
set -g pane-border-style 'bg=brightblack'
set -g pane-active-border-style 'fg=blue'
set -g message-style 'fg=white,bg=brightblack'

View file

@ -1,4 +1,8 @@
let g:netrw_dirhistmax =10 let g:netrw_dirhistmax =10
let g:netrw_dirhistcnt =2 let g:netrw_dirhistcnt =6
let g:netrw_dirhist_6='/Users/jfraeys/.dotfiles/nvim/.config/nvim/lua/custom/plugins'
let g:netrw_dirhist_5='/Users/jfraeys/Documents/projects/job-req/resume-recomm/job_req_resume_recomm'
let g:netrw_dirhist_4='/Users/jfraeys/Documents/projects/job-req/resume-recomm'
let g:netrw_dirhist_3='/Users/jfraeys/Documents/projects/job-req/resume-recomm/job_req_resume_recomm'
let g:netrw_dirhist_2='/Users/jeremiefraeys/.ssh' let g:netrw_dirhist_2='/Users/jeremiefraeys/.ssh'
let g:netrw_dirhist_1='/Users/jeremiefraeys/.oh-my-zsh' let g:netrw_dirhist_1='/Users/jeremiefraeys/.oh-my-zsh'

View file

@ -1,4 +1,5 @@
lt g:TerminusFocusReporting=0 let g:TerminusFocusReporting = 0
let g:molokai_original = 1 let g:molokai_original = 1
set autoindent expandtab tabstop=4 shiftwidth=4 set autoindent expandtab tabstop=4 shiftwidth=4

View file

@ -1,4 +1,4 @@
#!/usr/bin/env sh #/usr/bin/env sh
# global settings # global settings
yabai -m config mouse_follows_focus off yabai -m config mouse_follows_focus off
yabai -m config focus_follows_mouse off yabai -m config focus_follows_mouse off
@ -7,7 +7,7 @@ yabai -m config window_topmost off
yabai -m config window_opacity off yabai -m config window_opacity off
yabai -m config window_opacity_duration 0.0 yabai -m config window_opacity_duration 0.0
yabai -m config window_shadow off yabai -m config window_shadow off
yabai -m config window_border off yabai -m config window_border off
yabai -m config window_border_width 4 yabai -m config window_border_width 4
yabai -m config active_window_opacity 1.0 yabai -m config active_window_opacity 1.0
@ -20,12 +20,13 @@ yabai -m config mouse_action2 resize
# general space settings # general space settings
yabai -m config layout bsp yabai -m config layout bsp
yabai -m config top_padding 10 yabai -m config top_padding 5
yabai -m config bottom_padding 50 yabai -m config bottom_padding 50
yabai -m config left_padding 10 yabai -m config left_padding 5
yabai -m config right_padding 10 yabai -m config right_padding 5
yabai -m config window_gap 10 yabai -m config window_gap 3
yabai -m config --sapce 2 window_gap 0 yabai -m config --space 2 window_gap 0
echo "yabai configuration loaded.." echo "yabai configuration loaded.."

View file

@ -1,3 +1,19 @@
if [[ -z "$XDG_CONFIG_HOME" ]]; then
export XDG_CONFIG_HOME="$HOME/.config"
fi
if [[ -z "$XDG_CACHE_HOME" ]]; then
export XDG_CACHE_HOME="$HOME/.cache"
fi
if [[ -z "$XDG_DATA_HOME" ]]; then
export XDG_DATA_HOME="$HOME/.local/share"
fi
if [[ -z "$XDG_STATE_HOME" ]]; then
export XDG_STATE_HOME="$HOME/.local/state"
fi
export ITERM_ENABLE_SHELL_INTEGRATION_WITH_TMUX=YES export ITERM_ENABLE_SHELL_INTEGRATION_WITH_TMUX=YES
if [[ -n $SSH_CONNECTION ]]; then if [[ -n $SSH_CONNECTION ]]; then
@ -10,17 +26,41 @@ export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)" eval "$(pyenv init -)"
export PATH=$PATH:/usr/local/bin/ # set PATH so it includes user's private ~/.local/bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
chmod -R ug+rwx "$HOME/.local/bin/" chmod -R ug+rwx "$HOME/.local/bin/"
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border' export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border'
# Add RVM to PATH for scripting. Make sure this is the last PATH variable change. # Add RVM to PATH for scripting. Make sure this is the last PATH variable change.
export PATH="$PATH:$HOME/.rvm/bin"´ export PATH="$PATH:$HOME/.rvm/bin"
# Add Golang to PATH
export GOPATH="$HOME/Documents/projects:$HOME/go"
export PATH="$PATH:$(go env GOPATH)/bin"
# # Function to activate Python virtual environment if found
activate_python_env() {
local env_dir
# env_dir=$(find . -type f -name activate -exec dirname {} \;)
env_dir=$(fd -H -I -t f -d 3 'activate$' | xargs dirname)
if [ -n "$env_dir" ]; then
source "$env_dir/activate"
else
echo "No Python virtual environment found in the current directory or its subdirectories."
fi
}
alias act='activate_python_env'
alias python="python3" alias python="python3"
alias vim="nvim" alias vim="nvim"
alias tn="tmux new -s (pwd | sed 's/.*\///g')" # alias docker="$HOME/.local/bin/docker_check.sh"
alias tn="tmux new -s $(pwd | sed 's/.*\///g')"
alias cat="bat --paging=never" alias cat="bat --paging=never"
alias grep="grep --color=auto"
alias ll="ls -alF"
# set bat to highlight --help messages # set bat to highlight --help messages
alias bathelp='bat --plain --language=help' alias bathelp='bat --plain --language=help'
@ -32,11 +72,3 @@ help() {
alias -g -- -h='-h 2>&1 | bat --language=help --style=plain' alias -g -- -h='-h 2>&1 | bat --language=help --style=plain'
alias -g -- --help='--help 2>&1 | bat --language=help --style=plain' alias -g -- --help='--help 2>&1 | bat --language=help --style=plain'
# dir location alias
alias projects="cd ~/projects"
alias download="cd ~/Download"
alias document="cd ~/Document"
alias config="cd ~/.config"
alias .tmux.conf="nvim ~/.tmux.conf"
alias research="cd ~/Google\ Drive/My\ Drive/School/UoGuelph/MSc/Research/soft_skills_job_desc/jfraeysd/"

View file

@ -8,6 +8,8 @@ export PATH="$HOME/.local/bin:$PATH"
# Path to your oh-my-zsh installation. # Path to your oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh" export ZSH="$HOME/.oh-my-zsh"
export UPDATE_ZSH_DAYS=1
# Set name of the theme to load --- if set to "random", it will # Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case, # load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME # to know which specific one was loaded, run: echo $RANDOM_THEME
@ -59,6 +61,16 @@ ZSH_THEME="powerlevel10k/powerlevel10k"
# much, much faster. # much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true" # DISABLE_UNTRACKED_FILES_DIRTY="true"
# autoload -Uz add-zsh-hook
# move_curor_to_bottom() {
# [[ -n ${PIN_PROMPT_NEWLINE+1} ]] && echo
# tput cup $LINES
# }
# move_curor_to_bottom
# add-zsh-hook preexec move_curor_to_bottom
# Uncomment the following line if you want to change the command execution time # Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output. # stamp shown in the history command output.
# You can set one of the optional three formats: # You can set one of the optional three formats:
@ -77,9 +89,11 @@ ZSH_CUSTOM=$HOME/.oh-my-zsh/custom
# Add wisely, as too many plugins slow down shell startup. # Add wisely, as too many plugins slow down shell startup.
plugins=( plugins=(
git git
docker
zsh-syntax-highlighting zsh-syntax-highlighting
zsh-autosuggestions zsh-autosuggestions
macos macos
autoupdate
) )
export ZSH_AUTOSUGGEST_STRATEGY=( export ZSH_AUTOSUGGEST_STRATEGY=(
@ -123,21 +137,25 @@ source ~/.zprofile
# >>> conda initialize >>> # >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !! # !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/jfraeys/yes/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)" __conda_setup="$('/usr/local/Caskroom/miniforge/base/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
eval "$__conda_setup" eval "$__conda_setup"
else else
if [ -f "/Users/jfraeys/yes/etc/profile.d/conda.sh" ]; then if [ -f "/usr/local/Caskroom/miniforge/base/etc/profile.d/conda.sh" ]; then
. "/Users/jfraeys/yes/etc/profile.d/conda.sh" . "/usr/local/Caskroom/miniforge/base/etc/profile.d/conda.sh"
else else
export PATH="/Users/jfraeys/yes/bin:$PATH" export PATH="/usr/local/Caskroom/miniforge/base/bin:$PATH"
fi fi
fi fi
unset __conda_setup unset __conda_setup
if [ -f "/Users/jfraeys/yes/etc/profile.d/mamba.sh" ]; then if [ -f "/usr/local/Caskroom/miniforge/base/etc/profile.d/mamba.sh" ]; then
. "/Users/jfraeys/yes/etc/profile.d/mamba.sh" . "/usr/local/Caskroom/miniforge/base/etc/profile.d/mamba.sh"
fi fi
conda config --set auto_activate_base false
# <<< conda initialize <<< # <<< conda initialize <<<
eval "$(zoxide init --cmd cd zsh)"
# To customize prompt, run `p10k configure` or edit ~/.dotfiles/p10k/.p10k.zsh.
[[ ! -f ~/.dotfiles/p10k/.p10k.zsh ]] || source ~/.dotfiles/p10k/.p10k.zsh