This is an installer for my core dotfiles.
The easiest way to install myd0t is to use the self-extracting installer from the releases page. It will automatically install any dependencies that are missing.
You can also clone this repo (with --recursive
since it's using git
submodules) and run myd0t.py
yourself.
- Gentoo
- Ubuntu
- Debian
- Raspbian (Raspberry Pi OS)
- CentOS
- Fedora
- Arch Linux
- AlmaLinux
- Rocky Linux
Use the latest (stable) version, I do not care about ancient systems.
Other distributions should work fine, but some automatisms won't:
- missing packages need to be installed manually
- the global default editor cannot be set automatically
- you need to update the global vimrc manually
Since adding another distribution is easy, feel free to open an issue or even send a PR if your favorite distribution is not listed.
At some point I'll hopefully write something more detailed here... for now this list is all you'll get:
- tmux config
- zsh config (see its repo for details)
- git config with useful aliases
- vim config, and setting vim as the default editor
- gnome terminal config (if you use a GUI on your system)
And if you are a new colleague of me who I conviced to use this, I'll just show you in person why using my dotfiles is a good idea, especially if you don't already have your own fancy configs!
Well, about writing something more detailed.. still not going to happen. But for those who never used tmux or zsh there's still some explaining needed, and pointing to its docs is too lazy even for me, not to mention that the zsh docs are huge and somewhat hard to navigate unless you spend a weekend on familiarizing yourself with the shell (and even then you probably don't remember much except what you use all the time).
tmux
is a (better) replacement for tabs and tab-like functionality in your GUI
terminal emulator. This is why myd0t actually removes the key bindings to create
new tabs in the terminal or switch tabs there.
The "prefix" key for tmux commands is CTRL+a (often also written as ^a
or
C-a
), unless you are nesting sessions (usually a root shell running tmux
inside a non-root tmux window), in which case the prefix is ^b
instead.
So if a tmux command itself also requires the CTRL key, you do not need to
release it and press it again (modifier keys like CTRL, SHIFT and ALT are
not sent past the terminal at all, they only modify what gets sent when
pressing another key). For example, ^a
is the bining for last-window
,
so to switch between the current window and the previous one, you can simply
press CTRL and then hit a
twice.
On the other hand, if a command does not use the CTRL key, make sure to
release both CTRL
and a
before pressing the actual command's key.
The most important tmux key bindings are:
c
- create a new window,
- rename the current window (useful for ones you keep for a long time)"
- split the current window/pane vertically%
- split the current window/pane horizontallyq
- show the pane indexes; you have 1 second to press the corresponding number if you want to switch to itz
- zoom in the current pane; do it again if want to zoom out- cursor keys - switch to the pane that's positioned next to the current one in the direction of the key you used
- CTRL + cursor keys - resize the current pane
There are some very useful aliases, which save you typing:
..
will go up one level (shortcut forcd ..
)...
will go up two levels instead of onecd
will go to your home directory^l
clears your windows (no need to writeclear
)^d
closes your shell (or aborts an input prompt); you'll never need to writeexit
in your shell
You do not need to cd
to other directories to view/edit a file or list their
contents. Just like in any other shell, ll ../foo
etc. work justfine and allow you
to stay in the directory you are in. If you do change directories because you need
to do more, then cd -
will bring you back to the previous directory. You can also
tab-complete right after entering cd -
to select one of the other directories you
have been in before.
If you want to run a command you used before, ^r
will enter reverse history search.
Pressing ^r
again after entering a search term will go back through all matching
entries; if you went too far you can also go forward again using ^s
. Wildcards can
be used, so if you want to search for a command using such chars you need to escape
them with a backslash.
zsh has very powerful tab completion. To kill a single process by name, you can write
kill whatever
and then tab-complete; this will show you a process list from which
you can then select the PID to kill.
It can also complete partial paths. Let's say you want to do to ~/dev/myapp/src
.
Instead of typing cd ~/dev/myapp/src
(or recalling it from history), you can
simply write cd ~/d/m/s
and tab-complete. If there's only one match, it'll be
replaced with the full path. But this example probably wasn't the best one, because
changing to your main project's directory is something you probably DO want to recall
from history!
The shell has lots of key bindings, but some are much more common than others.
CTRL+left/right
- jump one word left/rightALT+left/right
- jump one arg left/right (honors quotes/backslashes)ALT+del/backspace
- delete one arg to the right/left (doesn't work in all terminals)^w
- delete the word on the left of the cursor^f
- delete until the previous slash (great for paths)^-
- undoALT+q
- stash away whatever command you just entered for one round. That lets you run one command, and then the old one reappears. This is great if you entered a command and then realize that you needed to do something else first. You can use this shortcut as often as you want, but maybe at some point you really do want to execute that original command?
If you do Python development, you really want to use the auto-venv functionality
which automatically loads a virtualenv based on the directory you are in. It is
configured by creating a file ~/.autovenv
with content like this:
DEFAULT ~/.myenv
/tmp IGNORE
~/dev/myproject env
~/dev/otherproject .venv
This autovenv config will result in the following behavior:
- by default, the virtualenv
~/.myenv
is loaded (you need to create it if you plan to use the config above) - if you are inside
~/dev/myproject
(or any subdirectory of it),~/dev/myproject/env
will be loaded - if you are somewhere inside
~/dev/otherproject
, then the venv from.venv
will be loaded - if you are inside
/tmp
, then the functionality is completely disabled, this means that whatever virtualenv was active remains active, and if you manually activate some other virtualenv, changing directories won't deactivate/activate any other virtualenv.
You hopefully know some basic vimming, but if not: ESC switches from insert/replace
mode to command mode, and then you can use :x
to save+exit, or :q!
to just exit
without saving. /foo
will search for foo
, and :%s/old/new/g
will replace all
occurrences or old
with new
in the whole file.
You should also really use vim when writing git commit messages, as it highlights overly long first lines or a non-empty second lines in a very notable way. Again, myd0t configures vim as your default editor so git will use it as well.
Of course you can always fork this repo - that lets you track your customizations in Git and easily share them between machines.
But if you just want to add some extra configuration on a single machine, simply use the user config files which are provided for tmux and zsh. The paths are displayed during installation, and these files are preserved even when re-running the myd0t installer.