switched from iterm to wezterm
This commit is contained in:
parent
f99d262760
commit
1972aef9bb
35 changed files with 593 additions and 215 deletions
|
|
@ -1,2 +1,3 @@
|
|||
/Users/jfraeys/yes
|
||||
/Users/jfraeys/yes/envs/soft-skills-env
|
||||
/Users/jfraeys/.conda
|
||||
/usr/local/Caskroom/miniforge/base
|
||||
/usr/local/Caskroom/miniforge/base/envs/soft-skills-env
|
||||
|
|
|
|||
23
gh/.config/gh/config.yml
Normal file
23
gh/.config/gh/config.yml
Normal 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
5
gh/.config/gh/hosts.yml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
github.com:
|
||||
git_protocol: https
|
||||
users:
|
||||
jfraeys:
|
||||
user: jfraeys
|
||||
Binary file not shown.
10
jupyter/.jupyter/custom/custom.css
Normal file
10
jupyter/.jupyter/custom/custom.css
Normal 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;
|
||||
}
|
||||
82
jupyter/.jupyter/custom/custom.js
Normal file
82
jupyter/.jupyter/custom/custom.js
Normal 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
|
||||
*/
|
||||
13
jupyter/.jupyter/jupyter_nbconvert_config.json
Normal file
13
jupyter/.jupyter/jupyter_nbconvert_config.json
Normal 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"
|
||||
]
|
||||
}
|
||||
}
|
||||
7
jupyter/.jupyter/jupyter_notebook_config.json
Normal file
7
jupyter/.jupyter/jupyter_notebook_config.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"NotebookApp": {
|
||||
"nbserver_extensions": {
|
||||
"jupyter_nbextensions_configurator": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -6,5 +6,9 @@
|
|||
|
||||
// Selected Theme
|
||||
// Application-level visual styling theme
|
||||
"theme": "JupyterLab Dark"
|
||||
"theme": "JupyterLab Dark",
|
||||
|
||||
// Scrollbar Theming
|
||||
// Enable/disable styling of the application scrollbars
|
||||
"theme-scrollbars": true
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|
||||
|
|
@ -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"}}
|
||||
|
|
@ -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"}}
|
||||
|
|
@ -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"}}
|
||||
|
|
@ -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"}}
|
||||
|
|
@ -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"}}
|
||||
|
|
@ -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"}}
|
||||
|
|
@ -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"}}
|
||||
|
|
@ -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"}}
|
||||
|
|
@ -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"}}
|
||||
|
|
@ -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"}}
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
"nbextensions_configurator/config_menu/main": true,
|
||||
"hinterland/hinterland": true,
|
||||
"jupyter_tabnine/main": true,
|
||||
"jupyter-js-widgets/extension": true
|
||||
"jupyter-js-widgets/extension": true,
|
||||
"contrib_nbextensions_help_item/main": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,29 @@
|
|||
{
|
||||
"0fb1f2828eeeae418602193a4d04d5ccd121dc74": {
|
||||
"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
|
||||
}
|
||||
}
|
||||
41
oh-my-zsh/.oh-my-zsh/custom/colour-ssh.zsh
Executable file
41
oh-my-zsh/.oh-my-zsh/custom/colour-ssh.zsh
Executable 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
20
p10k/.p10k.zsh
Executable file → Normal 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.
|
||||
# Wizard options: nerdfont-complete + powerline, small icons, unicode, lean, 1 line,
|
||||
# compact, many icons, concise, transient_prompt, instant_prompt=quiet.
|
||||
# Wizard options: nerdfont-complete + powerline, small icons, unicode, lean, 24h time,
|
||||
# 1 line, compact, few icons, concise, transient_prompt, instant_prompt=quiet.
|
||||
# Type `p10k configure` to generate another config.
|
||||
#
|
||||
# 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.
|
||||
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
|
||||
os_icon # os identifier
|
||||
# os_icon # os identifier
|
||||
dir # current directory
|
||||
vcs # git status
|
||||
prompt_char # prompt symbol
|
||||
|
|
@ -100,7 +100,7 @@
|
|||
taskwarrior # taskwarrior task count (https://taskwarrior.org/)
|
||||
per_directory_history # Oh My Zsh per-directory-history local/global indicator
|
||||
# cpu_arch # CPU architecture
|
||||
# time # current time
|
||||
time # current time
|
||||
# ip # ip address and bandwidth usage for a specified network interface
|
||||
# public_ip # public IP address
|
||||
# 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
|
||||
# back to POWERLEVEL9K_DIR_FOREGROUND.
|
||||
#
|
||||
# typeset -g POWERLEVEL9K_DIR_CLASSES=()
|
||||
typeset -g POWERLEVEL9K_DIR_CLASSES=()
|
||||
|
||||
# Custom prefix.
|
||||
# typeset -g POWERLEVEL9K_DIR_PREFIX='%fin '
|
||||
|
||||
#####################################[ vcs: git status ]######################################
|
||||
# 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.
|
||||
# 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_LOADING_VISUAL_IDENTIFIER_COLOR=244
|
||||
# Custom icon.
|
||||
# typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||
typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION=
|
||||
# Custom prefix.
|
||||
# typeset -g POWERLEVEL9K_VCS_PREFIX='%fon '
|
||||
|
||||
|
|
@ -547,7 +547,7 @@
|
|||
# Duration format: 1d 2h 3m 4s.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
|
||||
# Custom icon.
|
||||
# typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION=
|
||||
# Custom prefix.
|
||||
# typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook '
|
||||
|
||||
|
|
@ -1630,7 +1630,7 @@
|
|||
# behavior where they contain the end times of their preceding commands.
|
||||
typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
|
||||
# Custom icon.
|
||||
# typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||
typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION=
|
||||
# Custom prefix.
|
||||
# typeset -g POWERLEVEL9K_TIME_PREFIX='%fat '
|
||||
|
||||
|
|
|
|||
12
setup.sh
12
setup.sh
|
|
@ -15,14 +15,16 @@ base=(
|
|||
zsh
|
||||
vim
|
||||
nvim
|
||||
tmux
|
||||
# tmux
|
||||
git
|
||||
wezterm
|
||||
)
|
||||
|
||||
# Folders that should, or only need to be installed for a local user on macOS
|
||||
useronly_macos=(
|
||||
yabai
|
||||
skhd
|
||||
oh-my-zsh
|
||||
)
|
||||
|
||||
#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
|
||||
useronly=(
|
||||
zoxide
|
||||
conda
|
||||
dask
|
||||
gh
|
||||
|
|
@ -46,7 +49,7 @@ ignore_files=(
|
|||
".DS_Store"
|
||||
"__setup"
|
||||
"bin"
|
||||
"git"
|
||||
".git"
|
||||
"setup.sh"
|
||||
)
|
||||
|
||||
|
|
@ -85,7 +88,7 @@ expect_yes() {
|
|||
spawn bash -c \"cd '$profile_dir' && $1\" > /dev/null 2>&1
|
||||
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 }
|
||||
eof {
|
||||
eof {
|
||||
puts \"Error: Expected line not found.\"
|
||||
exit 1
|
||||
}
|
||||
|
|
@ -123,9 +126,10 @@ for app in "${useronly[@]}"; do
|
|||
stowit "${HOME}" "${app}"
|
||||
if [[ "${app}" = "firefox" ]]; then
|
||||
expect_yes "./updater.sh"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "##### ALL DONE"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,22 @@
|
|||
# change window focus within space
|
||||
#change window focus within space
|
||||
shift + cmd - j : yabai -m window --focus south
|
||||
shift + cmd - k : yabai -m window --focus north
|
||||
shift + cmd - h : yabai -m window --focus west
|
||||
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 #
|
||||
shift + cmd - 1 : yabai -m space --display 1
|
||||
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
|
||||
|
||||
#change focus between external displays (left and right)
|
||||
cmd - s: yabai -m display --focus west
|
||||
cmd - g: yabai -m display --focus east
|
||||
cmd - h: yabai -m display --focus west
|
||||
cmd - l: yabai -m display --focus east
|
||||
|
||||
# rotate layout clockwise
|
||||
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
|
||||
|
||||
# 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
|
||||
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
|
||||
shift + alt - j : yabai -m window --swap south
|
||||
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
|
||||
|
||||
# move window to display left and right
|
||||
shift + alt - s : 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 - h : yabai -m window --display west; yabai -m display --focus west;
|
||||
shift + alt - l : yabai -m window --display east; yabai -m display --focus east;
|
||||
|
||||
#move window to prev and next space
|
||||
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 - 7 : yabai -m window --space 7;
|
||||
|
||||
# open apps
|
||||
ctrl + cmd - 1 : open -a VSCodium.app
|
||||
ctrl + cmd - 2 : open -a Brave\ Browser.app
|
||||
ctrl + cmd - 3 : open -n /Applications/Brave\ Browser.app
|
||||
ctrl + cmd - 4 : open -a Mail.app
|
||||
ctrl + cmd - 5 : open -a Authy\ Desktop.app
|
||||
ctrl + cmd - 6 : open -a Bitwarden.app
|
||||
ctrl + cmd - 0 : open -a iTerm.app
|
||||
# # open apps
|
||||
# lctrl + shift - t : open -an Wezterm.app
|
||||
# lctrl + shift - b : open -an Firefox.app
|
||||
# lctrl + shift - v : open -an VSCodium.app
|
||||
# shift + alt - m : open -an Mail.app
|
||||
# shift + alt - a : open -an Authy\ Desktop.app
|
||||
# shift + alt - w : open -an Bitwarden.app
|
||||
|
||||
# stop/start/restart yabai
|
||||
ctrl + alt - q : brew services stop yabai
|
||||
ctrl + alt - s : brew services start yabai
|
||||
ctrl + alt - r : brew services restart yabai
|
||||
ctrl + alt - q : yabai --stop-service
|
||||
ctrl + alt - s : yabai --start-service
|
||||
ctrl + alt - r : yabai --restart-service
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
#! /bin/bash
|
||||
|
||||
#/bin/bash
|
||||
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
|
||||
THEME_BG="#2c323c"
|
||||
THEME_RED="#f92572"
|
||||
|
|
@ -12,6 +11,13 @@ NERD_FONT_SEPARATOR=""
|
|||
|
||||
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() {
|
||||
next_meeting=$("$ICAL_BUDDY" \
|
||||
--includeEventProps "title,datetime,attendees" \
|
||||
|
|
@ -22,9 +28,15 @@ get_next_meeting() {
|
|||
--limitItems 1 \
|
||||
--excludeAllDayEvents \
|
||||
--separateByDate \
|
||||
--bullet "" \
|
||||
--excludeCals "${IGNORED_CAL}" \
|
||||
eventsToday)
|
||||
--excludeCals "$IGNORED_CAL" \
|
||||
eventsToday
|
||||
)
|
||||
|
||||
if [[ -z "$next_meeting" ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$next_meeting"
|
||||
}
|
||||
|
||||
get_next_next_meeting() {
|
||||
|
|
@ -38,168 +50,205 @@ get_next_next_meeting() {
|
|||
--limitItems 1 \
|
||||
--excludeAllDayEvents \
|
||||
--separateByDate \
|
||||
--bullet "" \
|
||||
--excludeCals "${IGNORED_CAL}" \
|
||||
eventsFrom:"${end_timestamp}" to:"${tonight}")
|
||||
--excludeCals "$IGNORED_CAL" \
|
||||
eventsFrom:"${end_timestamp}" to:"${tonight}"
|
||||
)
|
||||
|
||||
if [[ -z "$next_meeting" ]]; then
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
parse_result() {
|
||||
local ical_output="$1"
|
||||
local ical_output="$1"
|
||||
|
||||
# Extract the title from the third line
|
||||
title=$(echo "$ical_output" | awk 'NR==3')
|
||||
start_time=""
|
||||
end_time=""
|
||||
attendees=""
|
||||
title=$(echo "$ical_output" | awk 'NR==3')
|
||||
lines=()
|
||||
|
||||
while IFS= read -r line; do
|
||||
# array+=("$line")
|
||||
|
||||
# Extract start and end time
|
||||
if [[ $line =~ [0-9]{2}:[0-9]{2}\ -\ [0-9]{2}:[0-9]{2} ]]; then
|
||||
start_time=$(echo "$line" | awk '{print $1}')
|
||||
end_time=$(echo "$line" | awk '{print $3}')
|
||||
fi
|
||||
# Use process substitution to emulate a file for the while loop
|
||||
while read -r line; do
|
||||
lines+=("$line") # Store each line in the array for potential future use
|
||||
|
||||
if [[ $line =~ [0-9]{2}:[0-9]{2}\ -\ [0-9]{2}:[0-9]{2} ]]; then
|
||||
start_time=$(echo "$line" | awk '{print $1}')
|
||||
end_time=$(echo "$line" | awk '{print $3}')
|
||||
fi
|
||||
|
||||
# Extract attendees from the line, excluding "mailto:"
|
||||
if [[ $line == *attendees:* ]]; then
|
||||
attendees_line=${line#*attendees:}
|
||||
attendees=$(echo "$attendees_line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//g')
|
||||
# Count the number of attendees
|
||||
num_attendees=$(echo "$attendees" | awk -F, '{print NF}')
|
||||
fi
|
||||
done < <(echo "$ical_output")
|
||||
if [[ $line == *attendees:* ]]; then
|
||||
attendees_line=${line#*attendees:}
|
||||
attendees=$(echo "$attendees_line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//g')
|
||||
# Count the number of attendees
|
||||
num_attendees=$(echo "$attendees" | awk -F, '{print NF}')
|
||||
fi
|
||||
done < <(echo "$ical_output")
|
||||
}
|
||||
|
||||
calculate_times() {
|
||||
if [[ -z "$start_time" ]]; then
|
||||
# echo "Error: start_time is empty or invalid"
|
||||
return 1
|
||||
fi
|
||||
|
||||
epoc_meeting=$(date -jf "%T" "$start_time:00" +%s)
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "Error: Failed to convert '$start_time' using format '%T'"
|
||||
return 1
|
||||
echo "Error: Failed to convert '$start_time' to epoch time" >&2
|
||||
return 2
|
||||
fi
|
||||
|
||||
epoc_now=$(date +%s)
|
||||
|
||||
epoc_diff=$((epoc_meeting - epoc_now))
|
||||
|
||||
minutes_till_meeting=$((epoc_diff / 60))
|
||||
}
|
||||
|
||||
|
||||
get_upcoming_meetings() {
|
||||
upcoming_meetings=$("$ICAL_BUDDY" \
|
||||
--includeEventProps "title,datetime" \
|
||||
--propertyOrder "title,datetime" \
|
||||
--noCalendarNames \
|
||||
--dateFormat "%A" \
|
||||
--excludeAllDayEvents \
|
||||
--separateByDate \
|
||||
--bullet "$MEETING_DELIMITER" \
|
||||
--excludeCals "${IGNORED_CAL}" \
|
||||
eventsToday)
|
||||
|
||||
echo "upcoming_meetings: $upcoming_meetings"
|
||||
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "Error: Failed to get upcoming meetings"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -z "$upcoming_meetings" ]]; then
|
||||
echo "Error: upcoming_meetings is empty"
|
||||
return 1
|
||||
fi
|
||||
upcoming_meetings=$("$ICAL_BUDDY" \
|
||||
--noCalendarNames \
|
||||
--formatOutput \
|
||||
--includeEventProps "title,datetime,attendees,notes,url" \
|
||||
--propertyOrder "title,datetime" \
|
||||
--includeOnlyEventsFromNowOn \
|
||||
--sortTagsByDate "Descending" \
|
||||
--excludeAllDayEvents \
|
||||
--bullet "$MEETING_DELIMITER" \
|
||||
--excludeCals "$IGNORED_CAL" \
|
||||
eventsToday)
|
||||
|
||||
if [[ -z "$upcoming_meetings" ]]; then
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
get_popup_size($last_meetingi) {
|
||||
# Set minimum and maximum width/height
|
||||
local min_width=15
|
||||
local max_width=40
|
||||
local min_height=13
|
||||
local max_height=100
|
||||
# get_last_meeting() {
|
||||
# get_upcoming_meetings
|
||||
#
|
||||
# if [[ -z "$upcoming_meetings" ]]; then
|
||||
# return 1
|
||||
# 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
|
||||
local max_line_length=0
|
||||
local length=0
|
||||
# Split the string into an array using the delimiter, in ZSH script
|
||||
get_last_meeting() {
|
||||
get_upcoming_meetings
|
||||
|
||||
while IFS= read -r line; do
|
||||
echo "line: $line"
|
||||
length=${#line}
|
||||
max_line_length=$((length > max_line_length ? length : max_line_length))
|
||||
done <<< "$last_meeting"
|
||||
if [[ -z "$upcoming_meetings" ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Add padding for aesthetics
|
||||
width=$((max_line_length + 4))
|
||||
echo "upcoming_meetings: $upcoming_meetings"
|
||||
|
||||
# Ensure width is within the specified range
|
||||
width=$((width > max_width ? max_width : width))
|
||||
width=$((width < min_width ? min_width : width))
|
||||
# Split the input by newline and remove leading/trailing whitespace
|
||||
IFS=$'\n' lines=($(echo "$input" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'))
|
||||
|
||||
# Count the number of lines in the last meeting text
|
||||
local line_count=$(echo "$last_meeting" | wc -l)
|
||||
# Find the last line that contains "attendees:"
|
||||
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
|
||||
height=$((line_count + (width / max_line_length) + 1))
|
||||
echo "last_attendees_line: $last_attendees_line"
|
||||
|
||||
# Ensure height is within the specified range
|
||||
height=$((height < min_height ? min_height : height))
|
||||
height=$((height > max_height ? max_height : height))
|
||||
# Extract meeting information from the last attendees line
|
||||
if [[ -n "$last_attendees_line" ]]; then
|
||||
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() {
|
||||
# Get all upcoming meetings
|
||||
get_upcoming_meetings
|
||||
IFS='$MEETING_DELIMITER' read -r -d '$MEETING_DELIMITER' meetings <<< "$upcoming_meetings"
|
||||
get_last_meeting
|
||||
|
||||
# Get the last meeting
|
||||
local last_meeting="${meetings[-1]}"
|
||||
|
||||
call get_popup_size "$last_meeting"
|
||||
if [[ -z "$last_meeting" ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Display a popup for the last meeting with dynamic width and height
|
||||
tmux display-popup \
|
||||
-S "fg=$THEME_BG" \
|
||||
-w${width}% \
|
||||
-h${height}% \
|
||||
-d '#{pane_current_path}' \
|
||||
-T Meeting \
|
||||
echo "$last_meeting"
|
||||
tmux display-popup \
|
||||
-S "fg=$THEME_BG" \
|
||||
-w 50% \
|
||||
-h 50% \
|
||||
-T 'Meeting Reminder' \
|
||||
-d '#{pane_current_path}' \
|
||||
echo "$last_meeting"
|
||||
}
|
||||
|
||||
print_tmux_status() {
|
||||
local tmux_refresh_interval=$(tmux show-option -g status-interval)
|
||||
tmux_refresh_interval=$(echo "$tmux_refresh_interval" | awk '{print $NF}' | tr -d '[:space:]')
|
||||
tmux_refresh_interval=$((tmux_refresh_interval))
|
||||
local print_alert="#[fg=$THEME_RED,bold,bg=$THEME_BG] \
|
||||
local tmux_refresh_interval=$(tmux show-option -g status-interval)
|
||||
local tmux_refresh_interval=$(echo "$tmux_refresh_interval" | awk '{print $NF}' | tr -d '[:space:]')
|
||||
local tmux_refresh_interval=$((tmux_refresh_interval))
|
||||
|
||||
local print_alert="#[fg=$THEME_RED,bold,bg=$THEME_BG] \
|
||||
$NERD_FONT_SEPARATOR \
|
||||
$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
|
||||
echo "Error: ALERT_POPUP_BEFORE_SECONDS must be greater than tmux_refresh_interval"
|
||||
fi
|
||||
if ((ALERT_POPUP_BEFORE_SECONDS <= tmux_refresh_interval)); then
|
||||
echo "Error: ALERT_POPUP_BEFORE_SECONDS must be greater than tmux_refresh_interval" >&2
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ $minutes_till_meeting -lt $ALERT_IF_IN_NEXT_MINUTES && \
|
||||
$epoc_diff -gt $ALERT_POPUP_BEFORE_SECONDS ]]; then
|
||||
echo "$print_alert"
|
||||
elif [[ $epoc_diff -le $ALERT_POPUP_BEFORE_SECONDS && \
|
||||
$epoc_diff -gt $(( $ALERT_POPUP_BEFORE_SECONDS - $tmux_refresh_interval )) ]]; then
|
||||
echo "$print_alert"
|
||||
display_popup
|
||||
else
|
||||
echo "#[bold,bg=$THEME_BG] $NERD_FONT_SEPARATOR $NERD_FONT_FREE "
|
||||
fi
|
||||
if ((minutes_till_meeting < ALERT_IF_IN_NEXT_MINUTES)) && ((epoc_diff > ALERT_POPUP_BEFORE_SECONDS)); then
|
||||
echo "$print_alert"
|
||||
elif ((epoc_diff <= ALERT_POPUP_BEFORE_SECONDS)) && ((epoc_diff > (ALERT_POPUP_BEFORE_SECONDS - tmux_refresh_interval))); then
|
||||
echo "$print_alert"
|
||||
display_popup
|
||||
else
|
||||
echo "#[bold,bg=$THEME_BG] $NERD_FONT_SEPARATOR $NERD_FONT_FREE "
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
check_ical_buddy
|
||||
|
||||
get_next_meeting
|
||||
|
||||
parse_result "${next_meeting[@]}"
|
||||
|
||||
calculate_times
|
||||
if [[ "${next_meeting[*]}" != "" && $number_of_attendees -lt 2 ]]; then
|
||||
if [[ -n "${next_meeting[*]}" && $num_attendees -lt 2 ]]; then
|
||||
get_next_next_meeting
|
||||
|
||||
parse_result "${next_next_meeting[@]}"
|
||||
|
||||
calculate_times
|
||||
fi
|
||||
|
||||
print_tmux_status
|
||||
}
|
||||
|
||||
main
|
||||
|
||||
|
|
|
|||
|
|
@ -6,15 +6,6 @@ set-option -g prefix C-a
|
|||
unbind r
|
||||
bind R source-file ~/.config/tmux/tmux.conf; display-message "Config reloaded.."
|
||||
|
||||
# # unbind-key “x” from it’s 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 it’s current job of “ask and then close”
|
||||
# bind-key X kill-session
|
||||
|
||||
set-option -g detach-on-destroy off
|
||||
|
||||
# Session management
|
||||
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
|
||||
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-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
|
||||
bind p previous-window
|
||||
bind n next-window
|
||||
bind Y last-window
|
||||
|
||||
# Quick renaming
|
||||
bind C switch-client -n -t "#{session_name}"
|
||||
|
|
@ -90,7 +89,7 @@ set-window-option -g aggressive-resize off
|
|||
# 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)?$'"
|
||||
|
||||
# Navigate panes
|
||||
# Navigate panes
|
||||
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-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-resurrect'
|
||||
set -g @plugin 'tmux-plugins/tmux-continuum'
|
||||
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
|
||||
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')"
|
||||
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)'
|
||||
run-shell "tmux source-file $HOME/.config/tmux/tmux.\${TMUX_THEME:-default}.theme"
|
||||
|
||||
set -g status-justify left
|
||||
set -g status-interval 3
|
||||
set -g status-interval 5
|
||||
set -g status-left-length 200
|
||||
set -g status-right-length 200
|
||||
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 status-right '#[fg=blue]#(date "+%%H:%%M %%d-%%b-%%yi")'
|
||||
# set -g status-left 'Session: #S | Host: #{hostname} | '
|
||||
# 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 status-right '#{?client_prefix,#[reverse]<Prefix>#[noreverse] ,}' # Display prefix indicator
|
||||
# set -g status-right '#{?pane_in_mode,[#[fg=yellow]Copy Mode#[fg=default]],}' # Display copy mode indicator
|
||||
# set -g status-right ' #{=21:pane_title}' # Display pane title
|
||||
set -g @continuum-save-interval 15
|
||||
set -g @continuum-restore 'on'
|
||||
set -g @continuum-save-path "$HOME/.config/tmux/resurrect"
|
||||
|
||||
set -g @notify_show_alerts 'on'
|
||||
set -g @notify_show_messages 'on'
|
||||
set -g @notify_show_activity 'on'
|
||||
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
|
||||
set-option -g automatic-rename on
|
||||
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
|
||||
bind c new-window
|
||||
bind '"' split-window -h
|
||||
bind % split-window -v
|
||||
bind c new-window -c '#{pane_current_path}'
|
||||
bind '"' split-window -h -c '#{pane_current_path}'
|
||||
bind % split-window -v -c '#{pane_current_path}'
|
||||
bind h select-pane -L
|
||||
bind l select-pane -R
|
||||
bind Left select-pane -L
|
||||
|
|
@ -206,3 +199,4 @@ bind-key : command-prompt
|
|||
bind-key -n F5 show-buffer
|
||||
|
||||
run '$HOME/.config/tmux/plugins/tpm/tpm'
|
||||
|
||||
|
|
|
|||
17
tmux/.config/tmux/tmux.default.theme
Normal file
17
tmux/.config/tmux/tmux.default.theme
Normal 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'
|
||||
|
||||
17
tmux/.config/tmux/tmux.light.theme
Normal file
17
tmux/.config/tmux/tmux.light.theme
Normal 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'
|
||||
|
||||
|
|
@ -1,4 +1,8 @@
|
|||
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_1='/Users/jeremiefraeys/.oh-my-zsh'
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
lt g:TerminusFocusReporting=0
|
||||
let g:TerminusFocusReporting = 0
|
||||
let g:molokai_original = 1
|
||||
|
||||
set autoindent expandtab tabstop=4 shiftwidth=4
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env sh
|
||||
#/usr/bin/env sh
|
||||
# global settings
|
||||
yabai -m config mouse_follows_focus 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_duration 0.0
|
||||
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 active_window_opacity 1.0
|
||||
|
|
@ -20,12 +20,13 @@ yabai -m config mouse_action2 resize
|
|||
|
||||
# general space settings
|
||||
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 left_padding 10
|
||||
yabai -m config right_padding 10
|
||||
yabai -m config window_gap 10
|
||||
yabai -m config left_padding 5
|
||||
yabai -m config right_padding 5
|
||||
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.."
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
if [[ -n $SSH_CONNECTION ]]; then
|
||||
|
|
@ -10,17 +26,41 @@ export PYENV_ROOT="$HOME/.pyenv"
|
|||
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
|
||||
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/"
|
||||
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border'
|
||||
|
||||
# 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 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 grep="grep --color=auto"
|
||||
alias ll="ls -alF"
|
||||
|
||||
# set bat to highlight --help messages
|
||||
alias bathelp='bat --plain --language=help'
|
||||
|
|
@ -32,11 +72,3 @@ help() {
|
|||
alias -g -- -h='-h 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/"
|
||||
|
||||
|
|
|
|||
34
zsh/.zshrc
34
zsh/.zshrc
|
|
@ -8,6 +8,8 @@ export PATH="$HOME/.local/bin:$PATH"
|
|||
# Path to your oh-my-zsh installation.
|
||||
export ZSH="$HOME/.oh-my-zsh"
|
||||
|
||||
export UPDATE_ZSH_DAYS=1
|
||||
|
||||
# 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,
|
||||
# to know which specific one was loaded, run: echo $RANDOM_THEME
|
||||
|
|
@ -59,6 +61,16 @@ ZSH_THEME="powerlevel10k/powerlevel10k"
|
|||
# much, much faster.
|
||||
# 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
|
||||
# stamp shown in the history command output.
|
||||
# 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.
|
||||
plugins=(
|
||||
git
|
||||
docker
|
||||
zsh-syntax-highlighting
|
||||
zsh-autosuggestions
|
||||
macos
|
||||
autoupdate
|
||||
)
|
||||
|
||||
export ZSH_AUTOSUGGEST_STRATEGY=(
|
||||
|
|
@ -123,21 +137,25 @@ source ~/.zprofile
|
|||
|
||||
# >>> conda initialize >>>
|
||||
# !! 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
|
||||
eval "$__conda_setup"
|
||||
else
|
||||
if [ -f "/Users/jfraeys/yes/etc/profile.d/conda.sh" ]; then
|
||||
. "/Users/jfraeys/yes/etc/profile.d/conda.sh"
|
||||
if [ -f "/usr/local/Caskroom/miniforge/base/etc/profile.d/conda.sh" ]; then
|
||||
. "/usr/local/Caskroom/miniforge/base/etc/profile.d/conda.sh"
|
||||
else
|
||||
export PATH="/Users/jfraeys/yes/bin:$PATH"
|
||||
export PATH="/usr/local/Caskroom/miniforge/base/bin:$PATH"
|
||||
fi
|
||||
fi
|
||||
unset __conda_setup
|
||||
|
||||
if [ -f "/Users/jfraeys/yes/etc/profile.d/mamba.sh" ]; then
|
||||
. "/Users/jfraeys/yes/etc/profile.d/mamba.sh"
|
||||
if [ -f "/usr/local/Caskroom/miniforge/base/etc/profile.d/mamba.sh" ]; then
|
||||
. "/usr/local/Caskroom/miniforge/base/etc/profile.d/mamba.sh"
|
||||
fi
|
||||
|
||||
conda config --set auto_activate_base false
|
||||
# <<< 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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue