Unix environment setup. Custom vim, bash, tmux, and a few other misc option files. Basically yet another dotfiles repo, but with some twists/unconventional aspects.
This document is probably out of date.
Some of these are set automatically, but if set manually, should override the default.
Set in file | Option | Possible values | Description | Set after or before sourcing |
---|---|---|---|---|
Shell or rc | WINDOW_CUSTOM_NAME |
string | Prepended to title of window, useful for naming windows for a session. Include a training space to give a gap before the short path | |
.bashrc |
LITE_SYSTEM |
1 or unset | Says this system is a bit slow. Disables some things, including bash's git prompt. | Before |
.bashrc |
USENF |
1 or unset | Affects whether vim uses powerline and nerd symbols. Change this depending on your current font. | Before |
.bashrc |
USEPF |
1 or 0 | Affects whether vim uses powerline symbols. Change this depending on your current font. | Before |
.bashrc |
COLORTERM |
truecolor, 24bit, 16, 256 | Mostly used for vim. Advertises your term capabilities. 16 is useful if the term's colours are customised, eg for solarized, and you want to use them instead of a 256 colourscheme | Before |
.bashrc |
TERM_PROGRAM |
whatever you want | By default only a few terms set this. Just gets passed to SSH. Used for identifying term capabilities. | Before |
.bashrc |
LPUSERNAME |
Lastpass login email | Either | |
.bashrc |
NOTMUX |
set or unset | Affects whether TMUX will start up automatically if there is no display | Before |
.bashrc |
TMUX_ALLOW_DETACH |
set or unset | Whether tmux replaces the shell via exec, or starts on top of it. If unset, detaching exits the shell session. Good for debugging. | Before |
.bashrc |
HOMEBREW_PREFIX |
path to brew folder | . | Before |
.bashrc |
COLOURSCHEME |
Name of current preferred colourscheme. Append _light or _dark to specify vim background. |
UK spelling to avoid possible clobber. | Before |
.bashrc |
CLIP_PROGRAM_COPY |
a command | Accepts input on stdin and sends it to clipboard. Used for ctrl+c in vim insert if clipboard not enabled. | Before |
.bashrc |
CLIP_PROGRAM_PASTE |
a command | Outputs clipboard to stdout. Used for ctrl+v in vim insert if clipboard not enabled. | Before |
.bashrc |
PACKCMD |
a package manager command | Forces pack aliases to use the specified cmd as the package manager. |
Any |
.vimrc |
colorSch |
Name of preferred vim colourscheme | Allows overriding from term scheme/default of solarized | Before |
.vimrc |
g:backgroundColour |
"light" or "dark" | Sets vim theme to light or dark | Before |
.vimrc |
ideMode |
1 or 0 | Enables heavy vim plugins, linting, snippets, etc. | Before |
.vimrc |
liteMode |
1 or 0 | Only loads lighter plugins. Good for quick editing. | Before |
.vimrc |
noPlugins |
1 or 0 | Don't load any vim plugins. | Before |
.vimrc |
g:termColors |
same as COLORTERM |
Allows vim-specific override for COLORTERM | Before |
.vimrc |
g:slow_writes |
1 or empty | Tweaks a few options (mainly insertleave autosave) for systems where writes are slow | Before |
.vimrc |
g:minimumUI |
1 or empty | Tries to remove most UI decorations to give maximum size for text | Before |
Edit TERMOPTIONS
and append any env variables you want to be passed through SSH.
Editor bindings are mostly in mappings.vim
, with some in functions.vim
. Mappings for plugins are kept with the plugin settings, in the various files in plugins/
.
There is a dictionary in mappings.vim
with all IDE-related mappings, which are used for relevant plugins.
All systems for arranging views should behave in as similar a fashion as possible, with similar bindings. Tmux is the base analogy, and the associated view metaphors are summarized in this table:
Tmux term | Window manager/desktop metaphor term | Vim term |
---|---|---|
Pane | Window | Split |
Window* | Tab within tabbed window | unlisted buffer |
Session | Desktop/workspace | Tab |
Client? | Monitor | Client? |
*
Windows and sessions behave very similarly in tmux, so this doesn't quite work perfectly.
Mappings for manipulating/moving between these 3 should be as similar as possible, just with a different prefix/modifier key, with some exceptions.
Operations that are often repeated several times, like resizing or rearranging views, should use a different mode if possible.
Operations that occur rarely can be on prefixes, or use modes if need be. Modes should create a visual change when active, and be exitable with esc
or pressing the mode key again.
Arrow keys are used for resizing, generally.
Brackets []
are used for moving between sessions/clients. Angle brackets <>
are used for swapping between sessions/clients.
Operations that change state are usually modified with shift
Table shows bindings for the different modes, with #
representing the modifier, %
representing the prefix/mode change.
*
indicates it is repeatable/becomes a mode. !
indicates it is only available within a mode/after prefix.
Window manager prefix is winkey/super/option
prefix is modifier + w
, vim mode change/prefix is <C-w>
, tmux prefix is <C-s>
(C-b
is awkward, and C-a
overrides increment in vim).
Actions with arrow keys don't use the prefix in vim (Resizing, moving to next).
Not everything works in every context.
Action | Binding |
---|---|
Focus [left, right, above, below] pane1 | <#-[hlkj]> |
Focus [next, previous] window | *<#-[right,left]> |
Focus [next, previous] session | *<#-[up,down]> |
! Expand current pane (Behaviour differs between programmes here) |
*%<S-[down,right]> |
! Contract current pane |
*%<S-[up,left]> |
! Contract/expand pane in other direction (if permitted) |
*%<S-C-[up,down,left,right]> |
! Swap pane with next container |
%<S-[hjkl]> |
! Push pane into next container |
%<S-#-[hjkl]> |
! Zoom/fullscreen pane |
%f |
! Minimize/pause/hide |
%z |
! Rotate tree |
%r |
! Rotate tree backwards |
%<S-r> |
Close pane (not vim) | !x /#x |
Windowm manager only Action | Binding |
---|---|
Float pane | %u |
Open browser | #b |
Open file explorer | #e |
Open terminal | <C-A-t> and <#-return> |
Float next pane created | %<C-u> |
Pin pane | %p |
Use tiling layout | %<S-t> |
Use floating layout | %<S-u> |
Use monocle/tabbed layout | %<S-m> |
Float next window | %<c-u> |
Focus [next,prev] desktop | <#-[[,]]> |
Focus desktop [number] | <#-[number]> |
Focus previously focussed desktop (^ ) |
<#-S-6> |
Focus [prev,next] monitor | <#-A-[[,]]> |
Move pane to [next,prev] desktop | <S-#-[[,]]> |
Move pane to [next,prev] desktop and focus | %<[[,]]> |
Move pane to [next,prev] desktop and focus | %<C-#-[[,]]> |
Move pane to desktop [num] | %[num] |
jump to desktop [num] | <#-[num]> |
Move desktop to [next,prev] monitor | %<S-A-[[,]]> |
Move desktop to [next,prev] monitor and focus | %<C-A-[[,]]> |
Move desktop [left,right] on monitor | %[<,>] |
Create desktop | %n |
Delete desktop | %<S-n> |
1 Vim and tmux share ctrl
as the modifier here. Tmux also allows this after prefix, just in case the vim plugin isn't working.
- One window fullscreen (ie i3's 'tabbed' mode): Monacle (m)
- Tiling/binary layout: Tiling (t)
- Floating: Untiled (u)
- Pin/make sticky/keep on top: Pin (p)
Sourced from ide_plugins.vim
. Check there for the latest.
let g:IDE_mappings = {
\ "allActions" : "<leader>ia",
\ "rename" : "<leader>in",
\ "references" : "<leader>ir",
\ "references2" : "gr",
\ "refactor" : "<leader>if",
\ "definition" : "<leader>id",
\ "definition2" : "gd",
\ "type-definition" : "gy",
\ "implementation" : "<leader>ii",
\ "implementation2" : "gi",
\ "documentation" : "K",
\ "documentation2" : "gh",
\ "documentation3" : "<leader>ih",
\ "codeAction" : "<leader>eca",
\ "codeActionSelected" : "<leader>eca",
\ "codelensAction" : "<leader>ecl",
\ "fix" : "<leader>ef",
\ "listErrs" : "<leader>el",
\ "complete" : "<plug>Non-existant",
\ "reformat" : "<plug>Non-existant",
\}
The install system, starting with Install.sh
, and the nature of the files in the directories, which are kept separate to stop them getting too big, and to an extent keep them modular.
Main way install.sh
works is that it adds a line to the relevant dotfile in your home dir, and that line sources the primary dotfile in the repo. That then sources all further files. This obviously requires the system to support includign other dotfiles. In particular, window managers never seem to like that, so orthogonal setup scripts are included for these.
The ssh system, that sets several options relating to your current term capabilities, and passes them to your ssh system (including tmux!). Tell the server that you have a truecolor
terminal!
A system for adding ssh keys and unlocking them from the lastpass password manager
pack
a generic package manager wrapper. Supports brew, apt, yum and pacman for basic functions.
A system that keeps airline's theme up to date with vim's.
- Try to adapt to a large variety of versions, screen sizes and setups automatically, so things "just work" without having to add too much to local .vimrcs
- All of the font and colour specifications can be overwritten in the local dotfile, either before or after the line sourcing the repo dotfile.
- Allow vim and unix to be used as a high-powered IDE
- Don't sacrifice the ability to use vim as a quick, light editor (achieved by modular plugin install levels -
idevim
vsvim
vsqvim
vsvi
commands.
argument -u
uninstalls, but that may not always guarantee the system will be left the exact same as it was before. Probably just might not delete all files it creates (e.g. fonts)
Asks for which user of the script you are. WW
is the only answer that installs the files in editors/vim
.
Vim assumes that, if you have one of the listed nerd-fonts installed, you're using them in your console.
Note that aliases and functions are kept separate. An 'alias' you might miss, for example, is ;q in bash (or any readline app). This will (assuming vi-mode is still active) replace the current line with exit
, allowing you to then press enter and exit the app. This is more reliable than :q, because it replaces the line contents. It also doesn't require pressing shift.