├── .gitignore ├── LICENSE ├── README.md ├── _bootstrap_util.py ├── braintree.yaml ├── cihai.yaml ├── cpython.yaml ├── devops └── salt-master.yaml ├── eduflow.yaml ├── eduflow_master.yaml ├── freebsd.yaml ├── futurecoder.yaml ├── js-frontend.yaml ├── notifly.yaml ├── peergrade.yaml ├── poetry.yaml ├── projects.yaml ├── pyterm ├── bootstrap_env.py └── pyterm.yaml ├── python ├── anyvcs.yaml ├── bootstrap_env.sh ├── docutils.yaml ├── flask.yaml ├── kivy.yaml ├── logbook.yaml ├── pandas.yaml ├── qencode.yaml ├── readthedocs.org.yaml ├── sphinx.yaml ├── sphinx_rtd_theme.yaml ├── sqlalchemy.yaml ├── tornado.yaml └── warehouse.yaml ├── rust-study.yaml ├── rustacean.yaml ├── saltstack.yaml ├── scripts └── poetry-before-script.sh └── study.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | *pyc 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2013-2016 Tony Narlock. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # tmuxp configuration files 2 | 3 | Configuration files for [tmuxp]. 4 | 5 | Instructions: 6 | 7 | 1. Install [tmux]. 8 | 9 | 2. [Install tmuxp]. 10 | 11 | 3. Fork / clone this repo to `~/.dot-config`: 12 | 13 | ``` {.sh} 14 | # if forked, change the URL below to your repo 15 | $ git clone https://github.com/tony/tmuxp-config.git ~/.tmuxp 16 | ``` 17 | 18 | 4. Type `tmuxp load ~/.tmuxp/.yaml`. 19 | 20 | [tmuxp]: https://github.com/tony/tmuxp 21 | [tmux]: http://tmux.sourceforge.net/ 22 | [Install tmuxp]: http://tmuxp.readthedocs.org/en/latest/quickstart.html 23 | 24 | ## License 25 | 26 | MIT 27 | -------------------------------------------------------------------------------- /_bootstrap_util.py: -------------------------------------------------------------------------------- 1 | """ 2 | You contribute to a lot of open source projects, you want to be able to 3 | contribute, but are tired of repeating the same process over and over again. 4 | 5 | Self contained bootstrapper for python projects. 6 | 7 | What it helps you do: 8 | 9 | - helper functions: 10 | - check whether virtualenv and pip installed on system 11 | - check if a virtualenv exists 12 | - check if packages installed in virtualenv 13 | - check if programs are installed on target system 14 | - create a virtualenv 15 | - install packages from virtualenv 16 | - functions to see if modules are installed at system level (virtualenv 17 | and pip) 18 | 19 | Borrows functions from virtualenv-api (BSD 2-clause) 20 | https://github.com/sjkingo/virtualenv-api 21 | https://github.com/sjkingo/virtualenv-api/blob/master/LICENSE 22 | """ 23 | from __future__ import ( 24 | absolute_import, division, print_function, with_statement, unicode_literals 25 | ) 26 | 27 | import os 28 | import sys 29 | import subprocess 30 | import pkgutil 31 | 32 | class PackageInstallationException(EnvironmentError): 33 | pass 34 | 35 | 36 | def warning(*objs): 37 | print("WARNING: ", *objs, file=sys.stderr) 38 | 39 | 40 | def fail(message): 41 | sys.exit("Error: {message}".format(message=message)) 42 | 43 | 44 | PY2 = sys.version_info[0] == 2 45 | 46 | 47 | def has_module(module_name): 48 | try: 49 | import imp 50 | imp.find_module(module_name) 51 | del imp 52 | return True 53 | except ImportError: 54 | return False 55 | 56 | 57 | def split_package_name(p): 58 | """Splits the given package name and returns a tuple (name, ver).""" 59 | s = p.split('==') 60 | if len(s) == 1: 61 | return (s[0], None) 62 | else: 63 | return (s[0], s[1]) 64 | 65 | 66 | def which(exe=None, throw=True): 67 | """Return path of bin. Python clone of /usr/bin/which. 68 | 69 | from salt.util - https://www.github.com/saltstack/salt - license apache 70 | 71 | :param exe: Application to search PATHs for. 72 | :type exe: string 73 | :param throw: Raise ``Exception`` if not found in paths 74 | :type throw: bool 75 | :rtype: string 76 | 77 | """ 78 | if exe: 79 | if os.access(exe, os.X_OK): 80 | return exe 81 | 82 | # default path based on busybox's default 83 | default_path = '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin' 84 | search_path = os.environ.get('PATH', default_path) 85 | 86 | for path in search_path.split(os.pathsep): 87 | full_path = os.path.join(path, exe) 88 | if os.access(full_path, os.X_OK): 89 | return full_path 90 | 91 | message = ( 92 | '{0!r} could not be found in the following search ' 93 | 'path: {1!r}'.format( 94 | exe, search_path 95 | ) 96 | ) 97 | 98 | if throw: 99 | raise Exception(message) 100 | else: 101 | print(message) 102 | return None 103 | 104 | 105 | def pymod_exists(module, msg=None, throw=False): 106 | """Return True if python module exists. 107 | 108 | :param module: Python package name, only accepts root module, e.g. 109 | 'flask', but not 'flask.app' 110 | :type module: str 111 | :param msg: Optional message / instruction if module not found 112 | :type msg: str 113 | :param throw: Raise exception if module not found 114 | :type throw: boot 115 | :rtype: bool 116 | :returns: True if module found 117 | """ 118 | if pkgutil.find_loader(module): 119 | return True 120 | 121 | if not msg: 122 | msg = '${module} not found.'.format(module=module) 123 | 124 | if throw: 125 | fail(msg) 126 | 127 | print(msg) 128 | return False 129 | 130 | 131 | def bin_exists(binpath): 132 | return os.path.exists(binpath) and os.path.isfile(binpath) 133 | 134 | project_dir = os.path.dirname(os.path.realpath(__file__)) 135 | env_dir = os.path.join(project_dir, '.venv') 136 | pip_bin = os.path.join(env_dir, 'bin', 'pip') 137 | python_bin = os.path.join(env_dir, 'bin', 'python') 138 | virtualenv_bin = which('virtualenv', throw=False) 139 | virtualenv_exists = os.path.exists(env_dir) and os.path.isfile(python_bin) 140 | sphinx_requirements_filepath = os.path.join( 141 | project_dir, 'doc', 'requirements.pip' 142 | ) 143 | 144 | def expanddir(_dir): 145 | return os.path.expanduser(os.path.expandvars(_dir)) 146 | 147 | 148 | class Project(object): 149 | 150 | def __init__( 151 | self, 152 | project_dir=os.path.dirname(os.path.realpath(__file__)), 153 | virtualenv_dir='.venv/', 154 | project_requirements=None, 155 | doc_requirements=None, 156 | test_requirements=None 157 | ): 158 | """You can override this initializer and anything else here. 159 | 160 | :param project_dir: directory of project 161 | :type project_dir: str 162 | :param virtualenv_dir: can be absolute, or relative to the project_dir 163 | :type virtualenv_dir: str 164 | """ 165 | self.project_dir = expanddir(project_dir) 166 | self.virtualenv_dir = expanddir( 167 | os.path.normpath(os.path.join(self.project_dir, virtualenv_dir)) 168 | ) 169 | self.env = PipEnv(self.pip_bin) 170 | 171 | @property 172 | def pip_bin(self): 173 | """Path to pip binary.""" 174 | return os.path.join(self.virtualenv_dir, 'bin', 'pip') 175 | 176 | @property 177 | def python_bin(self): 178 | """Path to python binary.""" 179 | return os.path.join(self.virtualenv_dir, 'bin', 'python') 180 | 181 | @property 182 | def virtualenv_exists(self): 183 | return ( 184 | os.path.exists(self.virtualenv_dir) and 185 | os.path.isfile(self.python_bin) 186 | ) 187 | 188 | """ 189 | Requirements 190 | ------------ 191 | 192 | Tuple of pip requirements 193 | 194 | These may be None:: 195 | 196 | docs_requirements = None 197 | 198 | A tuple of packages: 199 | 200 | docs_requirements = ('sphinx', 'sphinx-rtd-theme',) 201 | 202 | A tuple of packages with versions (optional):: 203 | 204 | docs_requirements = ('sphinx>=0.13', 'sphinx-rtd-theme',) 205 | 206 | A requirements file:: 207 | 208 | docs_requirements = ('-r /path/to/requirements.txt') 209 | 210 | # both:: 211 | 212 | docs_requirements = ('-r /path/to/reqs.txt', 'sphinx>=013', 'ptpdb',) 213 | 214 | You can also return it as a property: 215 | 216 | @property 217 | def docs_requirements(self): 218 | reqs = () 219 | if somecondition: 220 | reqs += ('specialpkg') 221 | return reqs 222 | """ 223 | docs_requirements = None # path to docs requirement packages 224 | tests_requirements = None # path to test requirement textfile 225 | dev_requirements = None # path to test requirement textfile 226 | 227 | def setup(self): 228 | join = os.path.join 229 | exists = os.path.exists 230 | 231 | if not which('entr', throw=False): 232 | message = ( 233 | '\nentr(1) is a cross platform file watcher.' 234 | 'You can install it via your package manager on most POSIX ' 235 | 'systems. See the site at http://entrproject.org/\n' 236 | ) 237 | print(message) 238 | 239 | if not self.virtualenv_exists: 240 | subprocess.check_call( 241 | [virtualenv_bin, self.virtualenv_dir] 242 | ) 243 | 244 | self.install_project() 245 | 246 | self.setup_docs() 247 | 248 | def install_project(self): 249 | return self.env.install(self.project_dir, options=['-e']) 250 | 251 | def setup_docs(self): 252 | join, exists, isfile = os.path.join, os.path.exists, os.path.isfile 253 | if self.docs_requirements: 254 | if not isfile(join(env_dir, 'bin', 'sphinx-quickstart')): 255 | self.env.install(self.docs_requirements) 256 | 257 | # clean sphinx build dir 258 | if exists(join(env_dir, 'build')): 259 | os.removedirs(join(env_dir, 'build')) 260 | 261 | 262 | class PipEnv(object): 263 | """Tiny wrapper around pip. Useful to target a virtualenv or system pip.""" 264 | 265 | def __init__(self, pip_bin): 266 | self.pip_bin = pip_bin 267 | 268 | def pip(self, command, *args): 269 | print(self.pip_bin, command, *args) 270 | return subprocess.check_output((self.pip_bin, command,) + args) 271 | 272 | def installed_bins(self): 273 | """list bins in bin/""" 274 | return None 275 | 276 | @property 277 | def pip_version(self): 278 | """Version of installed pip.""" 279 | if not hasattr(self, '_pip_version'): 280 | string_version = self.pip('-V').split()[1] 281 | self._pip_version = tuple([int(n) 282 | for n in string_version.split('.')]) 283 | return self._pip_version 284 | 285 | def install(self, package, force=False, upgrade=False, options=None): 286 | """Installs the given package into this virtual environment, as 287 | specified in pip's package syntax or a tuple of ('name', 'ver'), 288 | only if it is not already installed. Some valid examples: 289 | 'Django' 290 | 'Django==1.5' 291 | ('Django', '1.5') 292 | If `force` is True, force an installation. If `upgrade` is True, 293 | attempt to upgrade the package in question. If both `force` and 294 | `upgrade` are True, reinstall the package and its dependencies. 295 | The `options` is a list of strings that can be used to pass to 296 | pip.""" 297 | if options is None: 298 | options = [] 299 | if isinstance(package, tuple): 300 | package = '=='.join(package) 301 | if not (force or upgrade) and self.is_installed(package): 302 | print( 303 | '%s is already installed, skipping (use force=True to override)' % package) 304 | return 305 | if not isinstance(options, list): 306 | raise ValueError("Options must be a list of strings.") 307 | if upgrade: 308 | options += ['--upgrade'] 309 | if force: 310 | options += ['--force-reinstall'] 311 | elif force: 312 | options += ['--ignore-installed'] 313 | 314 | options += [package] 315 | try: 316 | print(self.pip('install', *options)) 317 | except subprocess.CalledProcessError as e: 318 | raise PackageInstallationException( 319 | (e.returncode, e.output, package)) 320 | 321 | def search(self, term): 322 | """ 323 | Searches the PyPi repository for the given `term` and returns a 324 | dictionary of results. 325 | New in 2.1.5: returns a dictionary instead of list of tuples 326 | """ 327 | packages = {} 328 | results = self.pip('search', term) 329 | for result in results.split(os.linesep): 330 | try: 331 | name, description = result.split(' - ', 1) 332 | except ValueError: 333 | # '-' not in result so unable to split into tuple; 334 | # this could be from a multi-line description 335 | continue 336 | else: 337 | name = name.strip() 338 | if len(name) == 0: 339 | continue 340 | packages[name] = description.split('= (8, 1, 0) else ['-l'] 354 | return list(map(split_package_name, filter( 355 | None, self.pip('freeze', *freeze_options).split(os.linesep))) 356 | ) 357 | 358 | @property 359 | def installed_package_names(self): 360 | """List of all package names that are installed in this environment.""" 361 | return [name.lower() for name, _ in self.installed_packages] 362 | 363 | def is_installed(self, package): 364 | """Returns True if the given package (given in pip's package syntax or a 365 | tuple of ('name', 'ver')) is installed in the virtual environment.""" 366 | if isinstance(package, tuple): 367 | package = '=='.join(package) 368 | if package.endswith('.git'): 369 | pkg_name = os.path.split(package)[1][:-4] 370 | return pkg_name in self.installed_package_names or \ 371 | pkg_name.replace('_', '-') in self.installed_package_names 372 | pkg_tuple = split_package_name(package) 373 | if pkg_tuple[1] is not None: 374 | return pkg_tuple in self.installed_packages 375 | else: 376 | return pkg_tuple[0] in self.installed_package_names 377 | -------------------------------------------------------------------------------- /braintree.yaml: -------------------------------------------------------------------------------- 1 | session_name: braintree 2 | start_directory: ~/study/merchant 3 | windows: 4 | - window_name: braintree.js 5 | start_directory: braintree.js 6 | options: 7 | main-pane-height: 67% 8 | layout: main-horizontal 9 | focus: true 10 | panes: 11 | - shell_command: 12 | - pane 13 | focus: true 14 | - pane 15 | - pane 16 | - window_name: braintree_node 17 | start_directory: braintree_node 18 | panes: 19 | - shell_command: 20 | - pane 21 | focus: true 22 | - pane 23 | - pane 24 | layout: main-horizontal 25 | options: 26 | main-pane-height: 67% 27 | - window_name: braintree_python 28 | start_directory: braintree_python 29 | panes: 30 | - shell_command: 31 | - pane 32 | focus: true 33 | - pane 34 | - pane 35 | layout: main-horizontal 36 | options: 37 | main-pane-height: 67% 38 | - window_name: braintree_node_guide 39 | start_directory: braintree_node_guide 40 | panes: 41 | - shell_command: 42 | - pane 43 | focus: true 44 | - pane 45 | - pane 46 | layout: main-horizontal 47 | options: 48 | main-pane-height: 67% 49 | - window_name: braintree_python_guide 50 | start_directory: braintree_python_guide 51 | panes: 52 | - shell_command: 53 | - pane 54 | focus: true 55 | - pane 56 | - pane 57 | layout: main-horizontal 58 | options: 59 | main-pane-height: 67% 60 | - window_name: skeuocard 61 | start_directory: ../javascript/skeuocard 62 | panes: 63 | - shell_command: 64 | - pane 65 | focus: true 66 | - pane 67 | - pane 68 | layout: main-horizontal 69 | options: 70 | main-pane-height: 67% 71 | -------------------------------------------------------------------------------- /cihai.yaml: -------------------------------------------------------------------------------- 1 | session_name: cihai 2 | start_directory: ~/work/cihai 3 | shell_command_before: 4 | - cmd: poetry shell --quiet --no-interaction 5 | sleep_before: .25 6 | sleep_after: .25 7 | - cmd: reset 8 | sleep_before: .75 9 | sleep_after: .25 10 | windows: 11 | - window_name: cihai 12 | start_directory: ./cihai 13 | layout: main-horizontal 14 | focus: true 15 | panes: 16 | - focus: True 17 | - blank 18 | - make watch_mypy 19 | - - cmd: > 20 | make start 21 | sleep_before: .5 22 | options: 23 | main-pane-height: 67% 24 | - window_name: cihai-cli 25 | start_directory: ./cihai-cli 26 | layout: main-horizontal 27 | panes: 28 | - focus: True 29 | - blank 30 | - make watch_mypy 31 | - - cmd: > 32 | make start 33 | sleep_before: .5 34 | options: 35 | main-pane-height: 67% 36 | - window_name: unihan-etl 37 | start_directory: ./unihan-etl 38 | layout: main-horizontal 39 | panes: 40 | - focus: True 41 | - blank 42 | - make watch_mypy 43 | - - cmd: > 44 | make start 45 | sleep_before: .5 46 | options: 47 | main-pane-height: 67% 48 | - window_name: unihan-db 49 | start_directory: ./unihan-db 50 | layout: main-horizontal 51 | panes: 52 | - focus: True 53 | - blank 54 | - make watch_mypy 55 | - - cmd: > 56 | make start 57 | sleep_before: .5 58 | options: 59 | main-pane-height: 67% 60 | -------------------------------------------------------------------------------- /cpython.yaml: -------------------------------------------------------------------------------- 1 | session_name: cpython 2 | start_directory: ~/study/c/cpython 3 | windows: 4 | - window_name: cpython 5 | layout: main-horizontal 6 | focus: true 7 | panes: 8 | - shell_command: 9 | - vim 10 | - :Ex 11 | focus: True 12 | - pane 13 | - pane 14 | options: 15 | main-pane-height: 67% 16 | - window_name: csv 17 | layout: main-horizontal 18 | start_directory: Lib 19 | panes: 20 | - shell_command: 21 | - vim ./csv.py 22 | focus: true 23 | - pane 24 | - pane 25 | options: 26 | main-pane-height: 67% 27 | - window_name: logging 28 | layout: main-horizontal 29 | start_directory: Lib/logging 30 | panes: 31 | - shell_command: 32 | - vim 33 | - :Ex 34 | focus: True 35 | options: 36 | main-pane-height: 67% 37 | - window_name: re 38 | start_directory: Lib 39 | panes: 40 | - shell_command: 41 | - vim ./re.py 42 | focus: true 43 | options: 44 | main-pane-height: 67% 45 | layout: main-horizontal 46 | - window_name: glob/fnmatch 47 | start_directory: Lib 48 | panes: 49 | - shell_command: 50 | - vim ./fnmatch.py 51 | focus: true 52 | - vim ./glob.py 53 | options: 54 | main-pane-height: 67% 55 | layout: main-horizontal 56 | - window_name: unittest 57 | start_directory: Lib/unittest 58 | panes: 59 | - shell_command: 60 | - vim 61 | - :Ex 62 | focus: true 63 | - pane 64 | - pane 65 | options: 66 | main-pane-height: 67% 67 | layout: main-horizontal 68 | - window_name: pdb 69 | panes: 70 | - vim ./pdb.py 71 | start_directory: Lib 72 | options: 73 | main-pane-height: 67% 74 | layout: main-horizontal 75 | - window_name: multiprocessing 76 | panes: 77 | - shell_command: 78 | - vim 79 | - :Ex 80 | start_directory: Lib/multiprocessing 81 | options: 82 | main-pane-height: 67% 83 | layout: main-horizontal 84 | - window_name: curses 85 | panes: 86 | - shell_command: 87 | - vim 88 | - :Ex 89 | focus: true 90 | start_directory: Lib/curses 91 | options: 92 | main-pane-height: 67% 93 | layout: main-horizontal 94 | -------------------------------------------------------------------------------- /devops/salt-master.yaml: -------------------------------------------------------------------------------- 1 | session_name: salt 2 | start_directory: ./ 3 | windows: 4 | - window_name: salt 5 | layout: main-horizontal 6 | focus: true 7 | panes: 8 | - focus: True 9 | - pane 10 | - pane 11 | options: 12 | main-pane-height: 67% 13 | start_directory: /etc/salt 14 | - window_name: salt-state-configs 15 | layout: main-horizontal 16 | panes: 17 | - focus: True 18 | - pane 19 | - pane 20 | options: 21 | main-pane-height: 67% 22 | start_directory: ~/workspace/salt-states-configs 23 | - window_name: private 24 | layout: main-horizontal 25 | panes: 26 | - focus: True 27 | - pane 28 | - pane 29 | options: 30 | main-pane-height: 67% 31 | start_directory: ~/workspace/salt-states-private 32 | -------------------------------------------------------------------------------- /eduflow.yaml: -------------------------------------------------------------------------------- 1 | session_name: eduflow 2 | start_directory: ~/work/peergrade/eduflow 3 | shell_command_before: 4 | - cmd: poetry shell --quiet --no-interaction 5 | sleep_before: .25 6 | sleep_after: .25 7 | - cmd: reset 8 | sleep_before: .75 9 | sleep_after: .75 10 | windows: 11 | - window_name: eduflow 12 | layout: main-horizontal 13 | focus: true 14 | panes: 15 | - focus: True 16 | - blank 17 | - - cmd: > 18 | poetry run ./manage.py generate_graphql_schema && yarn --cwd js run relay && yarn --cwd 19 | js run start 20 | sleep_before: 1.5 21 | - - cmd: poetry run ./manage.py runserver 22 | sleep_before: 1.5 23 | options: 24 | main-pane-height: 67% 25 | -------------------------------------------------------------------------------- /eduflow_master.yaml: -------------------------------------------------------------------------------- 1 | session_name: eduflow-master 2 | environment: 3 | DJANGO_SETTINGS_MODULE: eduflow.settings.local 4 | DEV_SERVER_PORT: "3001" 5 | SERVER_PORT: "8012" 6 | start_directory: ~/work/peergrade/eduflow-master 7 | before_script: ./scripts/poetry-before-script.sh 8 | shell_command_before: 9 | - "[ -f .venv/bin/activate ] && source .venv/bin/activate && reset" 10 | - sleep 1 11 | windows: 12 | - window_name: eduflow-master 13 | layout: main-horizontal 14 | focus: true 15 | panes: 16 | - focus: True 17 | - blank 18 | # - poetry run ./manage.py generate_graphql_schema && npm -C js run relay && DEV_SERVER_PORT=3001 SERVER_PORT=8012 npm -C js run start 19 | - poetry run ./manage.py generate_graphql_schema && npm -C js run relay && npm -C js run start 20 | - poetry run ./manage.py sites add_site "localhost:${SERVER_PORT}" 21 | "eduflow-port-${SERVER_PORT}" && poetry run ./manage.py runserver 0.0.0.0:${SERVER_PORT} 22 | options: 23 | main-pane-height: 67% 24 | -------------------------------------------------------------------------------- /freebsd.yaml: -------------------------------------------------------------------------------- 1 | session_name: freebsd 2 | windows: 3 | - window_name: /usr/src 4 | layout: main-horizontal 5 | focus: true 6 | start_directory: /usr/src 7 | panes: 8 | - focus: True 9 | - pane 10 | - pane 11 | options: 12 | main-pane-height: 67% 13 | - window_name: /usr/doc 14 | layout: main-horizontal 15 | start_directory: /usr/doc 16 | panes: 17 | - focus: True 18 | - pane 19 | - pane 20 | options: 21 | main-pane-height: 67% 22 | - window_name: /usr/ports 23 | layout: main-horizontal 24 | start_directory: /usr/ports 25 | panes: 26 | - focus: True 27 | - pane 28 | - pane 29 | options: 30 | main-pane-height: 67% 31 | -------------------------------------------------------------------------------- /futurecoder.yaml: -------------------------------------------------------------------------------- 1 | session_name: futurecoder 2 | start_directory: ~/work/python/futurecoder 3 | before_script: ./scripts/poetry-before-script.sh 4 | shell_command_before: 5 | - echo '' && poetry shell 6 | windows: 7 | - window_name: backend 8 | layout: main-horizontal 9 | start_directory: ./backend 10 | focus: true 11 | panes: 12 | - focus: True 13 | - blank 14 | - blank 15 | - poetry run ./manage.py runserver 16 | options: 17 | main-pane-height: 67% 18 | - window_name: frontend 19 | start_directory: ./frontend 20 | layout: main-horizontal 21 | panes: 22 | - focus: True 23 | - blank 24 | - blank 25 | - blank 26 | options: 27 | main-pane-height: 67% 28 | - window_name: root 29 | layout: main-horizontal 30 | panes: 31 | - focus: True 32 | - blank 33 | - blank 34 | - blank 35 | options: 36 | main-pane-height: 67% 37 | -------------------------------------------------------------------------------- /js-frontend.yaml: -------------------------------------------------------------------------------- 1 | session_name: js-frontend 2 | start_directory: ~/study/javascript 3 | windows: 4 | - window_name: jquery 5 | options: 6 | main-pane-height: 67% 7 | layout: main-horizontal 8 | start_directory: jquery 9 | focus: true 10 | panes: 11 | - focus: true 12 | - pane 13 | - pane 14 | - window_name: sizzle 15 | options: 16 | main-pane-height: 67% 17 | layout: main-horizontal 18 | start_directory: sizzle 19 | focus: true 20 | panes: 21 | - focus: true 22 | - pane 23 | - pane 24 | - window_name: backbone 25 | options: 26 | main-pane-height: 67% 27 | layout: main-horizontal 28 | start_directory: backbone 29 | focus: true 30 | panes: 31 | - focus: true 32 | - pane 33 | - pane 34 | - window_name: backbone.marionette 35 | options: 36 | main-pane-height: 67% 37 | layout: main-horizontal 38 | start_directory: backbone.marionette 39 | focus: true 40 | panes: 41 | - focus: true 42 | - pane 43 | - pane 44 | - window_name: backbone.wreqr 45 | options: 46 | main-pane-height: 67% 47 | layout: main-horizontal 48 | start_directory: backbone.wreqr 49 | focus: true 50 | panes: 51 | - focus: true 52 | - pane 53 | - pane 54 | - window_name: backbone.babysitter 55 | options: 56 | main-pane-height: 67% 57 | layout: main-horizontal 58 | start_directory: backbone.babysitter 59 | focus: true 60 | panes: 61 | - focus: true 62 | - pane 63 | - pane 64 | - window_name: underscore 65 | options: 66 | main-pane-height: 67% 67 | layout: main-horizontal 68 | start_directory: underscore 69 | focus: true 70 | panes: 71 | - focus: true 72 | - pane 73 | - pane 74 | - window_name: list 75 | options: 76 | main-pane-height: 67% 77 | layout: main-horizontal 78 | start_directory: list 79 | focus: true 80 | panes: 81 | - focus: true 82 | - pane 83 | - pane 84 | - window_name: codemirror 85 | options: 86 | main-pane-height: 67% 87 | layout: main-horizontal 88 | start_directory: codemirror 89 | focus: true 90 | panes: 91 | - focus: true 92 | - pane 93 | - pane 94 | -------------------------------------------------------------------------------- /notifly.yaml: -------------------------------------------------------------------------------- 1 | session_name: notifly 2 | start_directory: ~/work/peergrade/notifly 3 | shell_command_before: 4 | - cmd: poetry shell --quiet --no-interaction 5 | sleep_before: .25 6 | sleep_after: .25 7 | - cmd: reset 8 | sleep_before: .75 9 | sleep_after: .75 10 | windows: 11 | - window_name: notifly 12 | layout: main-horizontal 13 | focus: true 14 | panes: 15 | - focus: True 16 | - blank 17 | - blank 18 | options: 19 | main-pane-height: 67% 20 | - window_name: notifly-server 21 | layout: main-horizontal 22 | start_directory: ./notifly-server 23 | panes: 24 | - focus: True 25 | - blank 26 | - blank 27 | options: 28 | main-pane-height: 67% 29 | - window_name: notifly-python 30 | layout: main-horizontal 31 | start_directory: ./notifly-python 32 | panes: 33 | - focus: True 34 | - blank 35 | - blank 36 | options: 37 | main-pane-height: 67% 38 | - window_name: notifly-client 39 | layout: main-horizontal 40 | start_directory: ./notifly-client 41 | panes: 42 | - focus: True 43 | - blank 44 | - "[ ! -d node_modules ] && npm install && reset" 45 | options: 46 | main-pane-height: 67% 47 | -------------------------------------------------------------------------------- /peergrade.yaml: -------------------------------------------------------------------------------- 1 | session_name: peergrade 2 | start_directory: ~/work/peergrade/peergrade.io 3 | shell_command_before: 4 | - cmd: poetry shell --quiet --no-interaction 5 | sleep_before: .25 6 | sleep_after: .25 7 | - cmd: reset 8 | sleep_before: .75 9 | sleep_after: .75 10 | windows: 11 | - window_name: peergrade 12 | layout: main-horizontal 13 | focus: true 14 | panes: 15 | - focus: True 16 | - blank 17 | - - cmd: | 18 | poetry run ./manage.py generate_graphql_schema && \ 19 | npm run relay && \ 20 | npm run webpack-dev-server 21 | sleep_before: 1.5 22 | - - cmd: poetry run ./run_debug.py 23 | sleep_before: 1.5 24 | options: 25 | main-pane-height: 67% 26 | - window_name: front-end building 27 | layout: main-horizontal 28 | panes: 29 | - focus: True 30 | - - cmd: poetry run ./run_grasp.py 31 | sleep_before: 1.5 32 | - - cmd: poetry run ./worker.py 33 | sleep_before: 1.5 34 | - - cmd: npm run bower -- install && npm run watch 35 | sleep_before: 1.5 36 | options: 37 | main-pane-height: 67% 38 | -------------------------------------------------------------------------------- /poetry.yaml: -------------------------------------------------------------------------------- 1 | session_name: poetry 2 | start_directory: ~/study/python/poetry 3 | before_script: ./scripts/poetry-before-script.sh 4 | shell_command_before: 5 | - poetry install --no-interaction --no-ansi --quiet 6 | - source $(poetry env info -p)/bin/activate; reset 7 | windows: 8 | - window_name: poetry 9 | layout: main-horizontal 10 | focus: true 11 | panes: 12 | - focus: True 13 | - blank 14 | - blank 15 | - blank 16 | options: 17 | main-pane-height: 67% 18 | - window_name: poetry-core 19 | start_directory: ../poetry-core 20 | layout: main-horizontal 21 | panes: 22 | - focus: True 23 | - blank 24 | - blank 25 | - blank 26 | options: 27 | main-pane-height: 67% 28 | - window_name: installer 29 | start_directory: ../install.python-poetry.org/ 30 | layout: main-horizontal 31 | panes: 32 | - focus: True 33 | - blank 34 | - blank 35 | - blank 36 | options: 37 | main-pane-height: 67% 38 | -------------------------------------------------------------------------------- /projects.yaml: -------------------------------------------------------------------------------- 1 | session_name: projects 2 | start_directory: ~/work 3 | before_script: 4 | vcspull sync g gp-libs tmuxp libtmux vcspull libvcs django_slugify_procsesor unihan unihan-etl cihai 5 | cihai-cli 6 | windows: 7 | - window_name: gp-libs 8 | start_directory: ~/work/python/gp-libs 9 | layout: main-horizontal 10 | focus: true 11 | panes: 12 | - shell_command: 13 | - pane 14 | focus: True 15 | - pane 16 | - pane 17 | - pane 18 | options: 19 | main-pane-height: 67% 20 | - window_name: tmuxp 21 | start_directory: ~/work/python/tmuxp 22 | layout: main-horizontal 23 | focus: true 24 | panes: 25 | - shell_command: 26 | - pane 27 | focus: True 28 | - pane 29 | - pane 30 | - pane 31 | options: 32 | main-pane-height: 67% 33 | - window_name: libtmux 34 | start_directory: ~/work/python/libtmux 35 | layout: main-horizontal 36 | focus: true 37 | panes: 38 | - shell_command: 39 | - pane 40 | focus: True 41 | - pane 42 | - pane 43 | - pane 44 | options: 45 | main-pane-height: 67% 46 | - window_name: g 47 | start_directory: ~/work/python/g 48 | layout: main-horizontal 49 | focus: true 50 | panes: 51 | - shell_command: 52 | - pane 53 | focus: True 54 | - pane 55 | - pane 56 | - pane 57 | options: 58 | main-pane-height: 67% 59 | - window_name: vcspull 60 | start_directory: ~/work/python/vcspull 61 | layout: main-horizontal 62 | focus: true 63 | panes: 64 | - shell_command: 65 | - pane 66 | focus: True 67 | - pane 68 | - pane 69 | - pane 70 | options: 71 | main-pane-height: 67% 72 | - window_name: libvcs 73 | start_directory: ~/work/python/libvcs 74 | layout: main-horizontal 75 | focus: true 76 | panes: 77 | - shell_command: 78 | - pane 79 | focus: True 80 | - pane 81 | - pane 82 | - pane 83 | options: 84 | main-pane-height: 67% 85 | - window_name: django-slugify-processor 86 | start_directory: ~/work/python/django-slugify-processor 87 | layout: main-horizontal 88 | focus: true 89 | panes: 90 | - shell_command: 91 | - pane 92 | focus: True 93 | - pane 94 | - pane 95 | - pane 96 | options: 97 | main-pane-height: 67% 98 | - window_name: django-docutils 99 | start_directory: ~/work/python/django-docutils 100 | layout: main-horizontal 101 | focus: true 102 | panes: 103 | - shell_command: 104 | - pane 105 | focus: True 106 | - pane 107 | - pane 108 | - pane 109 | options: 110 | main-pane-height: 67% 111 | - window_name: unihan-etl 112 | start_directory: ~/work/cihai/unihan-etl 113 | layout: main-horizontal 114 | focus: true 115 | panes: 116 | - shell_command: 117 | - pane 118 | focus: True 119 | - pane 120 | - pane 121 | - pane 122 | options: 123 | main-pane-height: 67% 124 | - window_name: unihan-db 125 | start_directory: ~/work/cihai/unihan-db 126 | layout: main-horizontal 127 | focus: true 128 | panes: 129 | - shell_command: 130 | - pane 131 | focus: True 132 | - pane 133 | - pane 134 | - pane 135 | options: 136 | main-pane-height: 67% 137 | - window_name: cihai 138 | start_directory: ~/work/cihai/cihai 139 | layout: main-horizontal 140 | focus: true 141 | panes: 142 | - shell_command: 143 | - pane 144 | focus: True 145 | - pane 146 | - pane 147 | - pane 148 | options: 149 | main-pane-height: 67% 150 | - window_name: cihai-cli 151 | start_directory: ~/work/cihai/cihai-cli 152 | layout: main-horizontal 153 | focus: true 154 | panes: 155 | - shell_command: 156 | - pane 157 | focus: True 158 | - pane 159 | - pane 160 | - pane 161 | options: 162 | main-pane-height: 67% 163 | -------------------------------------------------------------------------------- /pyterm/bootstrap_env.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | cwd = os.path.dirname(__file__) 6 | project_root = os.path.dirname(cwd) 7 | 8 | sys.path.insert(0, project_root) 9 | 10 | from _bootstrap_util import * 11 | 12 | 13 | def main(): 14 | pymod_exists('virtualenv', msg=( 15 | 'Virtualenv is required for this bootstrap to run.\n' 16 | 'Install virtualenv via:\n' 17 | '\t$ [sudo] pip install virtualenv' 18 | ), throw=True) 19 | 20 | pymod_exists('pip', msg=( 21 | 'pip is required for this bootstrap to run.\n' 22 | 'Find instructions on how to install at: %s' % 23 | 'http://pip.readthedocs.org/en/latest/installing.html' 24 | ), throw=True) 25 | 26 | prompt_toolkit = Project( 27 | project_dir='~/study/python/python-prompt-toolkit/', 28 | virtualenv_dir='.venv/' 29 | ) 30 | prompt_toolkit.setup() 31 | 32 | pyvim = Project( 33 | project_dir='~/study/python/pyvim', 34 | virtualenv_dir='.venv/', 35 | ) 36 | pyvim.setup() 37 | pyvim.env.install(prompt_toolkit.project_dir, options=['-e']) 38 | 39 | 40 | ptpython = Project( 41 | project_dir='~/study/python/ptpython/', 42 | virtualenv_dir='.venv/' 43 | ) 44 | ptpython.setup() 45 | ptpython.env.install(prompt_toolkit.project_dir, options=['-e']) 46 | 47 | ptpdb = Project( 48 | project_dir='~/study/python/ptpdb/', 49 | virtualenv_dir='.venv/' 50 | ) 51 | ptpdb.setup() 52 | ptpdb.env.install(prompt_toolkit.project_dir, options=['-e']) 53 | 54 | pymux = Project( 55 | project_dir='~/study/python/pymux/', 56 | virtualenv_dir='.venv/' 57 | ) 58 | pymux.setup() 59 | pymux.env.install(prompt_toolkit.project_dir, options=['-e']) 60 | 61 | pymux = Project( 62 | project_dir='~/work/python/profiling/', 63 | virtualenv_dir='.venv/' 64 | ) 65 | pymux.setup() 66 | 67 | if os.environ.get('REPL', False): 68 | from ptpython.repl import embed 69 | embed(globals(), locals()) 70 | 71 | if __name__ == '__main__': 72 | main() 73 | -------------------------------------------------------------------------------- /pyterm/pyterm.yaml: -------------------------------------------------------------------------------- 1 | session_name: pyterm 2 | start_directory: ~/study/python/ # load session relative to config location (project root). 3 | before_script: ~/.dot-config/.tmuxp/pyterm/bootstrap_env.py # ./ to load relative to project root. 4 | windows: 5 | - window_name: python-prompt-toolkit 6 | focus: True 7 | layout: main-horizontal 8 | options: 9 | main-pane-height: 67% 10 | shell_command_before: 11 | - '[ -d .venv -a -f .venv/bin/activate ] && source .venv/bin/activate' 12 | start_directory: python-prompt-toolkit/ 13 | panes: 14 | - focus: true 15 | - pane 16 | - pane 17 | - window_name: pyvim 18 | layout: main-horizontal 19 | options: 20 | main-pane-height: 67% 21 | shell_command_before: 22 | - '[ -d .venv -a -f .venv/bin/activate ] && source .venv/bin/activate' 23 | start_directory: pyvim/ 24 | panes: 25 | - focus: true 26 | - pane 27 | - pane 28 | - window_name: pymux 29 | layout: main-horizontal 30 | options: 31 | main-pane-height: 67% 32 | shell_command_before: 33 | - '[ -d .venv -a -f .venv/bin/activate ] && source .venv/bin/activate' 34 | start_directory: pymux/ 35 | panes: 36 | - focus: true 37 | - pane 38 | - pane 39 | - window_name: ptpdb 40 | layout: main-horizontal 41 | options: 42 | main-pane-height: 67% 43 | shell_command_before: 44 | - '[ -d .venv -a -f .venv/bin/activate ] && source .venv/bin/activate' 45 | start_directory: ptpdb/ 46 | panes: 47 | - focus: true 48 | - pane 49 | - pane 50 | - window_name: ptpython 51 | layout: main-horizontal 52 | options: 53 | main-pane-height: 67% 54 | shell_command_before: 55 | - '[ -d .venv -a -f .venv/bin/activate ] && source .venv/bin/activate' 56 | start_directory: ptpython/ 57 | panes: 58 | - focus: true 59 | - pane 60 | - pane 61 | - window_name: profiling 62 | layout: main-horizontal 63 | options: 64 | main-pane-height: 67% 65 | shell_command_before: 66 | - '[ -d .venv -a -f .venv/bin/activate ] && source .venv/bin/activate' 67 | start_directory: ~/work/python/profiling/ 68 | panes: 69 | - focus: true 70 | - pane 71 | - pane 72 | -------------------------------------------------------------------------------- /python/anyvcs.yaml: -------------------------------------------------------------------------------- 1 | session_name: anyvcs 2 | start_directory: ~/workspace/anyvcs 3 | windows: 4 | - window_name: anyvcs 5 | focus: True 6 | layout: main-horizontal 7 | options: 8 | main-pane-height: 67% 9 | shell_command_before: 10 | - command -v virtualenv >/dev/null 2>&1 || { pip install virtualenv; } 11 | - '[ -d .env -a -f .env/bin/activate ] && source .env/bin/activate || virtualenv .env' 12 | - '[ ! -d .env/build ] || rm -rf .env/build' 13 | panes: 14 | - shell_command: 15 | - reset 16 | - vim 17 | - :Ex 18 | focus: true 19 | - pane 20 | - shell_command: 21 | - command -v .env/bin/anyvcs >/dev/null 2>&1 || { pip install -e .; } 22 | - command -v watching_testrunner >/dev/null 2>&1 || { pip install watching_testrunner; } 23 | - watching_testrunner --basepath ./ --pattern="*.py" 'python tests.py' 24 | - window_name: docs 25 | layout: main-horizontal 26 | options: 27 | main-pane-height: 67% 28 | shell_command_before: 29 | - command -v virtualenv >/dev/null 2>&1 || { pip install virtualenv; } 30 | - '[ -d .env -a -f .env/bin/activate ] && source .env/bin/activate || virtualenv .env' 31 | - '[ ! -d .env/build ] || rm -rf .env/build' 32 | - command -v .env/bin/anyvcs >/dev/null 2>&1 || { pip install -e .; } 33 | - cd ./doc 34 | panes: 35 | - shell_command: 36 | - reset 37 | - vim 38 | - :Ex 39 | focus: true 40 | - pwd 41 | - echo 'docs built to '; python -m SimpleHTTPServer 8012 42 | - shell_command: 43 | - command -v sphinx-quickstart >/dev/null 2>&1 || { pip install -r requirements.pip; } 44 | - command -v watching_testrunner >/dev/null 2>&1 || { pip install watching_testrunner; } 45 | - watching_testrunner --basepath ./ --pattern="*.rst" 'make html' 46 | -------------------------------------------------------------------------------- /python/bootstrap_env.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ENV variables accepted: 3 | # PYBOOTSTRAP_DIR: directory of your configs 4 | if [ "$ZSH_EVAL_CONTEXT" = "toplevel" ] \ 5 | || ([ -n $BASH_VERSION ] && [ $0 != "$BASH_SOURCE" ] ) \ 6 | ; then 7 | sourced=on 8 | else 9 | sourced=off 10 | fi 11 | 12 | if [ -n "$ZSH_VERSION" ]; then 13 | setopt shwordsplit 14 | fi 15 | 16 | # In case quitting from script while sourcing 17 | _quit() { 18 | if [ "$sourced" = "on" ]; then 19 | return $1 20 | else 21 | exit $1 22 | fi 23 | } 24 | 25 | # TODO: bootstrap bootstrap, check for pip, install pystrap 26 | 27 | # this step is needed because only shell can source into an environment. 28 | #project_config_dir="$( python bootstrap_env.py $@ --get-project-config)" 29 | 30 | my_needed_commands="git python" 31 | 32 | missing_counter=0 33 | for needed_command in $my_needed_commands; do 34 | if ! command -v "$needed_command" >/dev/null 2>&1; then 35 | echo "Command not found in PATH: $needed_command\n" >&2 36 | missing_counter=$(( missing_counter += 1 )) 37 | fi 38 | done 39 | 40 | if [ $missing_counter -gt 0 ]; then 41 | echo "Minimum $missing_counter commands are missing in PATH, aborting.\n" >&2 42 | _quit 1 43 | fi 44 | 45 | if env | grep -q ^VIRTUAL_ENV= 46 | then 47 | in_virtualenv="in_virtualenv" 48 | fi 49 | 50 | if [ -n "$in_virtualenv" ]; then 51 | echo "You are already in a virtualenv"; 52 | _quit 1 53 | fi 54 | 55 | if command -v virtualenv > /dev/null 2>&1 56 | then 57 | has_virtualenv="has_virtualenv" 58 | fi 59 | 60 | if env | grep -q ^PYENV_ROOT= 61 | then 62 | has_pyenv="has_pyenv" 63 | fi 64 | 65 | 66 | if env | grep -q ^PYENV_VIRTUALENV_INIT= 67 | then 68 | has_pyenv_virtualenv="has_pyenv_virtualenv" 69 | fi 70 | 71 | if env | grep -q ^VIRTUALENVWRAPPER_SCRIPT= 72 | then 73 | has_virtualenvwrapper="has_virtualenvwrapper" 74 | fi 75 | 76 | # user outside of virtualenv without virtualenv installed. 77 | if [ ! -n "$in_virtualenv" ] && [ ! -n "$has_virtualenv" ]; then 78 | cat </dev/null 2>&1 || { pip install virtualenv; } 11 | - '[ -d .env -a -f .env/bin/activate ] && source .env/bin/activate || virtualenv .env' 12 | - '[ ! -d .env/build ] || rm -rf .env/build' 13 | panes: 14 | - shell_command: 15 | - reset 16 | - vim 17 | - :Ex 18 | focus: true 19 | - pane 20 | - shell_command: 21 | - command -v .env/bin/warehouse >/dev/null 2>&1 || { pip install -e .; } 22 | - command -v watching_testrunner >/dev/null 2>&1 || { pip install watching_testrunner; } 23 | - command -v py.test >/dev/null 2>&1 || { pip install pytest; pip install -r dev-requirements.txt; } 24 | - watching_testrunner --basepath ./ --pattern="*.py" 'py.test' 25 | - window_name: docs 26 | layout: main-horizontal 27 | options: 28 | main-pane-height: 67% 29 | shell_command_before: 30 | - command -v virtualenv >/dev/null 2>&1 || { pip install virtualenv; } 31 | - '[ -d .env -a -f .env/bin/activate ] && source .env/bin/activate || virtualenv .env' 32 | - '[ ! -d .env/build ] || rm -rf .env/build' 33 | - command -v .env/bin/warehouse >/dev/null 2>&1 || { pip install -e .; } 34 | - cd ./doc 35 | panes: 36 | - shell_command: 37 | - reset 38 | - vim 39 | - :Ex 40 | focus: true 41 | - pwd 42 | - echo 'docs built to '; python -m SimpleHTTPServer 8013 43 | - shell_command: 44 | - command -v sphinx-quickstart >/dev/null 2>&1 || { pip install -r requirements.pip; } 45 | - command -v watching_testrunner >/dev/null 2>&1 || { pip install watching_testrunner; } 46 | - watching_testrunner --basepath ./ --pattern="*.rst" 'make html' 47 | -------------------------------------------------------------------------------- /rust-study.yaml: -------------------------------------------------------------------------------- 1 | session_name: rust-study 2 | windows: 3 | - window_name: learning-rust 4 | start_directory: ~/study/rust/learning-rust/ 5 | layout: main-horizontal 6 | focus: true 7 | panes: 8 | - shell_command: pane 9 | focus: true 10 | - pane 11 | - pane 12 | - pane 13 | options: 14 | main-pane-height: 67% 15 | - window_name: learning-rust-python 16 | start_directory: ~/study/rust/learning-rust-python/ 17 | layout: main-horizontal 18 | panes: 19 | - shell_command: pane 20 | focus: true 21 | - pane 22 | - pane 23 | - pane 24 | options: 25 | main-pane-height: 67% 26 | - window_name: learning-rust-nodejs 27 | start_directory: ~/study/rust/learning-rust-nodejs/ 28 | layout: main-horizontal 29 | panes: 30 | - shell_command: pane 31 | focus: true 32 | - pane 33 | - pane 34 | - pane 35 | options: 36 | main-pane-height: 67% 37 | - window_name: rustlings 38 | start_directory: ~/study/rust/rustlings 39 | layout: main-horizontal 40 | panes: 41 | - shell_command: pane 42 | focus: true 43 | - pane 44 | - pane 45 | - pane 46 | options: 47 | main-pane-height: 67% 48 | -------------------------------------------------------------------------------- /rustacean.yaml: -------------------------------------------------------------------------------- 1 | session_name: rustacean 2 | windows: 3 | - window_name: biome 4 | start_directory: ~/work/rust/biome/ 5 | layout: main-horizontal 6 | focus: true 7 | panes: 8 | - shell_command: pane 9 | focus: true 10 | - pane 11 | - pane 12 | - pane 13 | options: 14 | main-pane-height: 67% 15 | 16 | - window_name: ruff 17 | start_directory: ~/study/rust/ruff/ 18 | layout: main-horizontal 19 | panes: 20 | - shell_command: pane 21 | focus: true 22 | - pane 23 | - pane 24 | - pane 25 | options: 26 | main-pane-height: 67% 27 | 28 | - window_name: uv 29 | start_directory: ~/study/rust/uv/ 30 | layout: main-horizontal 31 | panes: 32 | - shell_command: pane 33 | focus: true 34 | - pane 35 | - pane 36 | - pane 37 | options: 38 | main-pane-height: 67% 39 | 40 | - window_name: pydantic 41 | start_directory: ~/study/python/pydantic/ 42 | layout: main-horizontal 43 | panes: 44 | - shell_command: pane 45 | focus: true 46 | - pane 47 | - pane 48 | - pane 49 | options: 50 | main-pane-height: 67% 51 | 52 | - window_name: pydantic-core 53 | start_directory: ~/study/python/pydantic-core/ 54 | layout: main-horizontal 55 | panes: 56 | - shell_command: pane 57 | focus: true 58 | - pane 59 | - pane 60 | - pane 61 | options: 62 | main-pane-height: 67% 63 | 64 | - window_name: pydantic-extra-types 65 | start_directory: ~/study/python/pydantic-extra-types/ 66 | layout: main-horizontal 67 | panes: 68 | - shell_command: pane 69 | focus: true 70 | - pane 71 | - pane 72 | - pane 73 | options: 74 | main-pane-height: 67% 75 | -------------------------------------------------------------------------------- /saltstack.yaml: -------------------------------------------------------------------------------- 1 | session_name: saltstack 2 | start_directory: ~/study/salt/salt 3 | windows: 4 | - window_name: salt 5 | layout: main-horizontal 6 | focus: true 7 | panes: 8 | - focus: True 9 | - pane 10 | - pane 11 | options: 12 | main-pane-height: 67% 13 | -------------------------------------------------------------------------------- /scripts/poetry-before-script.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | poetry install --no-ansi --no-interaction &2> /dev/null 3 | -------------------------------------------------------------------------------- /study.yaml: -------------------------------------------------------------------------------- 1 | session_name: study 2 | windows: 3 | - window_name: learning-dsa 4 | start_directory: ~/study/python/learning-dsa/ 5 | layout: main-horizontal 6 | focus: true 7 | panes: 8 | - shell_command: pane 9 | focus: true 10 | - pane 11 | - pane 12 | - pane 13 | options: 14 | main-pane-height: 67% 15 | - window_name: learning-asyncio 16 | start_directory: ~/study/python/learning-asyncio/ 17 | layout: main-horizontal 18 | panes: 19 | - shell_command: pane 20 | focus: true 21 | - pane 22 | - pane 23 | - pane 24 | options: 25 | main-pane-height: 67% 26 | - window_name: learning-litestar 27 | start_directory: ~/study/python/learning-litestar/ 28 | layout: main-horizontal 29 | panes: 30 | - shell_command: pane 31 | focus: true 32 | - pane 33 | - pane 34 | - pane 35 | options: 36 | main-pane-height: 67% 37 | - window_name: reenvisioning-django 38 | start_directory: ~/study/python/reenvisioning-django/ 39 | layout: main-horizontal 40 | panes: 41 | - shell_command: pane 42 | focus: true 43 | - pane 44 | - pane 45 | - pane 46 | options: 47 | main-pane-height: 67% 48 | - window_name: learning-pytest-internals 49 | start_directory: ~/study/python/learning-pytest-internals/ 50 | layout: main-horizontal 51 | panes: 52 | - shell_command: pane 53 | focus: true 54 | - pane 55 | - pane 56 | - pane 57 | options: 58 | main-pane-height: 67% 59 | --------------------------------------------------------------------------------