diff --git a/conda/.conda/environments.txt b/conda/.conda/environments.txt index c603b14..93da1e3 100755 --- a/conda/.conda/environments.txt +++ b/conda/.conda/environments.txt @@ -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 diff --git a/gh/.config/gh/config.yml b/gh/.config/gh/config.yml new file mode 100644 index 0000000..2c35244 --- /dev/null +++ b/gh/.config/gh/config.yml @@ -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: diff --git a/gh/.config/gh/hosts.yml b/gh/.config/gh/hosts.yml new file mode 100644 index 0000000..463a2b4 --- /dev/null +++ b/gh/.config/gh/hosts.yml @@ -0,0 +1,5 @@ +github.com: + git_protocol: https + users: + jfraeys: + user: jfraeys diff --git a/jupyter/.ipython/profile_default/history.sqlite b/jupyter/.ipython/profile_default/history.sqlite index 5812cbf..d2eda86 100755 Binary files a/jupyter/.ipython/profile_default/history.sqlite and b/jupyter/.ipython/profile_default/history.sqlite differ diff --git a/jupyter/.jupyter/custom/custom.css b/jupyter/.jupyter/custom/custom.css new file mode 100644 index 0000000..76f7336 --- /dev/null +++ b/jupyter/.jupyter/custom/custom.css @@ -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; +} diff --git a/jupyter/.jupyter/custom/custom.js b/jupyter/.jupyter/custom/custom.js new file mode 100644 index 0000000..05aa9ae --- /dev/null +++ b/jupyter/.jupyter/custom/custom.js @@ -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 + */ diff --git a/jupyter/.jupyter/jupyter_nbconvert_config.json b/jupyter/.jupyter/jupyter_nbconvert_config.json new file mode 100644 index 0000000..225f784 --- /dev/null +++ b/jupyter/.jupyter/jupyter_nbconvert_config.json @@ -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" + ] + } +} \ No newline at end of file diff --git a/jupyter/.jupyter/jupyter_notebook_config.json b/jupyter/.jupyter/jupyter_notebook_config.json new file mode 100644 index 0000000..8f7385c --- /dev/null +++ b/jupyter/.jupyter/jupyter_notebook_config.json @@ -0,0 +1,7 @@ +{ + "NotebookApp": { + "nbserver_extensions": { + "jupyter_nbextensions_configurator": true + } + } +} \ No newline at end of file diff --git a/jupyter/.jupyter/lab/user-settings/@jupyterlab/apputils-extension/themes.jupyterlab-settings b/jupyter/.jupyter/lab/user-settings/@jupyterlab/apputils-extension/themes.jupyterlab-settings index 419e835..c6f9ca2 100755 --- a/jupyter/.jupyter/lab/user-settings/@jupyterlab/apputils-extension/themes.jupyterlab-settings +++ b/jupyter/.jupyter/lab/user-settings/@jupyterlab/apputils-extension/themes.jupyterlab-settings @@ -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 } \ No newline at end of file diff --git a/jupyter/.jupyter/lab/user-settings/@jupyterlab/codemirror-extension/commands.jupyterlab-settings b/jupyter/.jupyter/lab/user-settings/@jupyterlab/codemirror-extension/commands.jupyterlab-settings new file mode 100644 index 0000000..be98128 --- /dev/null +++ b/jupyter/.jupyter/lab/user-settings/@jupyterlab/codemirror-extension/commands.jupyterlab-settings @@ -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" +} \ No newline at end of file diff --git a/jupyter/.jupyter/lab/workspaces/auto-0-1753.jupyterlab-workspace b/jupyter/.jupyter/lab/workspaces/auto-0-1753.jupyterlab-workspace new file mode 100644 index 0000000..6fdb564 --- /dev/null +++ b/jupyter/.jupyter/lab/workspaces/auto-0-1753.jupyterlab-workspace @@ -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"}} \ No newline at end of file diff --git a/jupyter/.jupyter/lab/workspaces/auto-1-4161.jupyterlab-workspace b/jupyter/.jupyter/lab/workspaces/auto-1-4161.jupyterlab-workspace new file mode 100644 index 0000000..79101ee --- /dev/null +++ b/jupyter/.jupyter/lab/workspaces/auto-1-4161.jupyterlab-workspace @@ -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"}} \ No newline at end of file diff --git a/jupyter/.jupyter/lab/workspaces/auto-2-c813.jupyterlab-workspace b/jupyter/.jupyter/lab/workspaces/auto-2-c813.jupyterlab-workspace new file mode 100644 index 0000000..e244579 --- /dev/null +++ b/jupyter/.jupyter/lab/workspaces/auto-2-c813.jupyterlab-workspace @@ -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"}} \ No newline at end of file diff --git a/jupyter/.jupyter/lab/workspaces/auto-4-b5a0.jupyterlab-workspace b/jupyter/.jupyter/lab/workspaces/auto-4-b5a0.jupyterlab-workspace new file mode 100644 index 0000000..4f7af37 --- /dev/null +++ b/jupyter/.jupyter/lab/workspaces/auto-4-b5a0.jupyterlab-workspace @@ -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"}} \ No newline at end of file diff --git a/jupyter/.jupyter/lab/workspaces/auto-a-ce05.jupyterlab-workspace b/jupyter/.jupyter/lab/workspaces/auto-a-ce05.jupyterlab-workspace new file mode 100644 index 0000000..515c568 --- /dev/null +++ b/jupyter/.jupyter/lab/workspaces/auto-a-ce05.jupyterlab-workspace @@ -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"}} \ No newline at end of file diff --git a/jupyter/.jupyter/lab/workspaces/auto-m-6bf5.jupyterlab-workspace b/jupyter/.jupyter/lab/workspaces/auto-m-6bf5.jupyterlab-workspace new file mode 100644 index 0000000..5f66fee --- /dev/null +++ b/jupyter/.jupyter/lab/workspaces/auto-m-6bf5.jupyterlab-workspace @@ -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"}} \ No newline at end of file diff --git a/jupyter/.jupyter/lab/workspaces/auto-t-11cd.jupyterlab-workspace b/jupyter/.jupyter/lab/workspaces/auto-t-11cd.jupyterlab-workspace new file mode 100644 index 0000000..4d84f29 --- /dev/null +++ b/jupyter/.jupyter/lab/workspaces/auto-t-11cd.jupyterlab-workspace @@ -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"}} \ No newline at end of file diff --git a/jupyter/.jupyter/lab/workspaces/auto-w-47cd.jupyterlab-workspace b/jupyter/.jupyter/lab/workspaces/auto-w-47cd.jupyterlab-workspace new file mode 100644 index 0000000..27efa89 --- /dev/null +++ b/jupyter/.jupyter/lab/workspaces/auto-w-47cd.jupyterlab-workspace @@ -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"}} \ No newline at end of file diff --git a/jupyter/.jupyter/lab/workspaces/auto-z-813a.jupyterlab-workspace b/jupyter/.jupyter/lab/workspaces/auto-z-813a.jupyterlab-workspace new file mode 100644 index 0000000..92fd86b --- /dev/null +++ b/jupyter/.jupyter/lab/workspaces/auto-z-813a.jupyterlab-workspace @@ -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"}} \ No newline at end of file diff --git a/jupyter/.jupyter/lab/workspaces/default-37a8.jupyterlab-workspace b/jupyter/.jupyter/lab/workspaces/default-37a8.jupyterlab-workspace index ddd4467..55ef22d 100755 --- a/jupyter/.jupyter/lab/workspaces/default-37a8.jupyterlab-workspace +++ b/jupyter/.jupyter/lab/workspaces/default-37a8.jupyterlab-workspace @@ -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"}} \ No newline at end of file +{"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"}} \ No newline at end of file diff --git a/jupyter/.jupyter/nbconfig/notebook.json b/jupyter/.jupyter/nbconfig/notebook.json index fd01adf..1940d52 100755 --- a/jupyter/.jupyter/nbconfig/notebook.json +++ b/jupyter/.jupyter/nbconfig/notebook.json @@ -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 } } \ No newline at end of file diff --git a/jupyter/.jupyter/serverconfig/jupyterlabapputilsextensionannouncements.json b/jupyter/.jupyter/serverconfig/jupyterlabapputilsextensionannouncements.json index 8373aaa..9b61a93 100755 --- a/jupyter/.jupyter/serverconfig/jupyterlabapputilsextensionannouncements.json +++ b/jupyter/.jupyter/serverconfig/jupyterlabapputilsextensionannouncements.json @@ -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 } } \ No newline at end of file diff --git a/oh-my-zsh/.oh-my-zsh/custom/colour-ssh.zsh b/oh-my-zsh/.oh-my-zsh/custom/colour-ssh.zsh new file mode 100755 index 0000000..dd8224a --- /dev/null +++ b/oh-my-zsh/.oh-my-zsh/custom/colour-ssh.zsh @@ -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" + diff --git a/p10k/.p10k.zsh b/p10k/.p10k.zsh old mode 100755 new mode 100644 index 6ace4e1..7b064b3 --- a/p10k/.p10k.zsh +++ b/p10k/.p10k.zsh @@ -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 ' diff --git a/setup.sh b/setup.sh index 621183e..68bb70f 100755 --- a/setup.sh +++ b/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" + diff --git a/skhd/.config/skhd/skhdrc b/skhd/.config/skhd/skhdrc index 8a6a9b3..d50bf04 100755 --- a/skhd/.config/skhd/skhdrc +++ b/skhd/.config/skhd/skhdrc @@ -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 + diff --git a/tmux/.config/tmux/scripts/cal.sh b/tmux/.config/tmux/scripts/cal.sh index be356fb..3a0b1b0 100755 --- a/tmux/.config/tmux/scripts/cal.sh +++ b/tmux/.config/tmux/scripts/cal.sh @@ -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 + diff --git a/tmux/.config/tmux/tmux.conf b/tmux/.config/tmux/tmux.conf index 104f980..b1e2642 100644 --- a/tmux/.config/tmux/tmux.conf +++ b/tmux/.config/tmux/tmux.conf @@ -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]#[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' + diff --git a/tmux/.config/tmux/tmux.default.theme b/tmux/.config/tmux/tmux.default.theme new file mode 100644 index 0000000..2b34d82 --- /dev/null +++ b/tmux/.config/tmux/tmux.default.theme @@ -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' + diff --git a/tmux/.config/tmux/tmux.light.theme b/tmux/.config/tmux/tmux.light.theme new file mode 100644 index 0000000..f2ad749 --- /dev/null +++ b/tmux/.config/tmux/tmux.light.theme @@ -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' + diff --git a/vim/.vim/.netrwhist b/vim/.vim/.netrwhist index 8d1ecf8..6ed247e 100755 --- a/vim/.vim/.netrwhist +++ b/vim/.vim/.netrwhist @@ -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' diff --git a/vim/.vimrc b/vim/.vimrc index a1daa53..e2eb3a9 100755 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -1,4 +1,5 @@ -lt g:TerminusFocusReporting=0 +let g:TerminusFocusReporting = 0 let g:molokai_original = 1 set autoindent expandtab tabstop=4 shiftwidth=4 + diff --git a/yabai/.config/yabai/yabairc b/yabai/.config/yabai/yabairc index d56ea21..cc47ab1 100755 --- a/yabai/.config/yabai/yabairc +++ b/yabai/.config/yabai/yabairc @@ -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.." + diff --git a/zsh/.zprofile b/zsh/.zprofile index 8cd6dec..fb20de7 100755 --- a/zsh/.zprofile +++ b/zsh/.zprofile @@ -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/" - diff --git a/zsh/.zshrc b/zsh/.zshrc index 0ad7201..dad44e7 100755 --- a/zsh/.zshrc +++ b/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 +