diff --git a/TODO.md b/TODO.md index 0de8611..b3fbb7c 100644 --- a/TODO.md +++ b/TODO.md @@ -1,4 +1,6 @@ # TODO -- Remove brewfiles and use the `dots` app instead. -- Add helix to `dots` app. \ No newline at end of file +- Remove brewfiles and use the `dots` cli manager instead. +- Add tmux plugins to dots cli manager. +- Add tmux-powerline linking to `dots` cli manager. + diff --git a/tmux/tmux-powerline/config.sh b/tmux/tmux-powerline/config.sh new file mode 100644 index 0000000..eb3f25a --- /dev/null +++ b/tmux/tmux-powerline/config.sh @@ -0,0 +1,201 @@ +# Default configuration file for tmux-powerline. +# Modeline { +# vi: foldmarker={,} foldmethod=marker foldlevel=0 tabstop=4 filetype=sh +# } + +# General { + # Show which segment fails and its exit code. + export TMUX_POWERLINE_DEBUG_MODE_ENABLED="false" + # Use patched font symbols. + export TMUX_POWERLINE_PATCHED_FONT_IN_USE="true" + + # The theme to use. + export TMUX_POWERLINE_THEME="mhoush" + # Overlay directory to look for themes. There you can put your own themes outside the repo. Fallback will still be the "themes" directory in the repo. + export TMUX_POWERLINE_DIR_USER_THEMES="${XDG_CONFIG_HOME:-$HOME/.config}/tmux-powerline/themes" + # Overlay directory to look for segments. There you can put your own segments outside the repo. Fallback will still be the "segments" directory in the repo. + export TMUX_POWERLINE_DIR_USER_SEGMENTS="${XDG_CONFIG_HOME:-$HOME/.config}/tmux-powerline/segments" + + # The initial visibility of the status bar. Can be {"on, off"}. + export TMUX_POWERLINE_STATUS_VISIBILITY="on" + # The status bar refresh interval in seconds. + # Note that events that force-refresh the status bar (such as window renaming) will ignore this. + export TMUX_POWERLINE_STATUS_INTERVAL="1" + # The location of the window list. Can be {"absolute-centre, centre, left, right"}. + # Note that "absolute-centre" is only supported on `tmux -V` >= 3.2. + export TMUX_POWERLINE_STATUS_JUSTIFICATION="centre" + + # The maximum length of the left status bar. + export TMUX_POWERLINE_STATUS_LEFT_LENGTH="60" + # The maximum length of the right status bar. + export TMUX_POWERLINE_STATUS_RIGHT_LENGTH="90" + + # Uncomment these if you want to enable tmux bindings for muting (hiding) one of the status bars. + # E.g. this example binding would mute the left status bar when pressing followed by Ctrl-[ + #export TMUX_POWERLINE_MUTE_LEFT_KEYBINDING="C-[" + #export TMUX_POWERLINE_MUTE_RIGHT_KEYBINDING="C-]" +# } + +# battery.sh { + # How to display battery remaining. Can be {percentage, cute}. + export TMUX_POWERLINE_SEG_BATTERY_TYPE="percentage" + # How may hearts to show if cute indicators are used. + export TMUX_POWERLINE_SEG_BATTERY_NUM_HEARTS="5" +# } + +# date.sh { + # date(1) format for the date. If you don't, for some reason, like ISO 8601 format you might want to have "%D" or "%m/%d/%Y". + export TMUX_POWERLINE_SEG_DATE_FORMAT="%F" +# } + +# disk_usage.sh { + # Filesystem to retrieve disk space information. Any from the filesystems available (run "df | awk '{print }'" to check them). + export TMUX_POWERLINE_SEG_DISK_USAGE_FILESYSTEM="/" +# } + +# earthquake.sh { + # The data provider to use. Currently only "goo" is supported. + export TMUX_POWERLINE_SEG_EARTHQUAKE_DATA_PROVIDER="goo" + # How often to update the earthquake data in seconds. + # Note: This is not an early warning detector, use this + # to be informed about recent earthquake magnitudes in your + # area. If this is too often, goo may decide to ban you form + # their server + export TMUX_POWERLINE_SEG_EARTHQUAKE_UPDATE_PERIOD="600" + # Only display information when earthquakes are within this many minutes + export TMUX_POWERLINE_SEG_EARTHQUAKE_ALERT_TIME_WINDOW="60" + # Display time with this format + export TMUX_POWERLINE_SEG_EARTHQUAKE_TIME_FORMAT='(%H:%M)' + # Display only if magnitude is greater or equal to this number + export TMUX_POWERLINE_SEG_EARTHQUAKE_MIN_MAGNITUDE="3" +# } + +# hostname.sh { + # Use short or long format for the hostname. Can be {"short, long"}. + export TMUX_POWERLINE_SEG_HOSTNAME_FORMAT="short" +# } + +# macos_notification_count.sh { + # App ids to query in notification center, separated by space + # To get the app id that is associated with a specific app run: + # sqlite3 -list "/var/folders/f1/rvv29ht91w15bk13tdcd339m0000gn/0//com.apple.notificationcenter/db/db" 'select * from app_info' + # The first column contains the app ids + # "5" is the app id of Messages.app + # Only "banner" notifications are supported (see settings in the notification center) + export TMUX_POWERLINE_SEG_MACOS_NOTIFICATION_COUNT_APPIDS="5" + # Notification symbol + export TMUX_POWERLINE_SEG_MACOS_NOTIFICATION_COUNT_CHAR="💬" +# } + +# mailcount.sh { + # Mailbox type to use. Can be any of {apple_mail, gmail, maildir, mbox, mailcheck} + export TMUX_POWERLINE_SEG_MAILCOUNT_MAILBOX_TYPE="" + + ## Gmail + # Enter your Gmail username here WITH OUT @gmail.com.( OR @domain) + export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_USERNAME="" + # Google password. Recomenned to use application specific password (https://accounts.google.com/b/0/IssuedAuthSubTokens) Leave this empty to get password from OS X keychain. + # For OSX users : MAKE SURE that you add a key to the keychain in the format as follows + # Keychain Item name : http:// + # Account name : @ + # Password : Your password ( Once again, try to use 2 step-verification and application-specific password) + # See http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833 for more info. + export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_PASSWORD="" + # Domain name that will complete your email. For normal GMail users it probably is "gmail.com but can be "foo.tld" for Google Apps users. + export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER="gmail.com" + # How often in minutes to check for new mails. + export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL="5" + + ## Maildir + # Path to the maildir to check. + export TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX="/Users/michael/.mail/inbox/new" + + ## mbox + # Path to the mbox to check. + export TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX="" + + ## mailcheck + # Optional path to mailcheckrc + export TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC="/Users/michael/.mailcheckrc" +# } + +# now_playing.sh { + # Music player to use. Can be any of {audacious, banshee, cmus, itunes, lastfm, mocp, mpd, mpd_simple, pithos, playerctl, rdio, rhythmbox, spotify, spotify_wine, file}. + export TMUX_POWERLINE_SEG_NOW_PLAYING_MUSIC_PLAYER="spotify" + # File to be read in case the song is being read from a file + export TMUX_POWERLINE_SEG_NOW_PLAYING_FILE_NAME="" + # Maximum output length. + export TMUX_POWERLINE_SEG_NOW_PLAYING_MAX_LEN="40" + # How to handle too long strings. Can be {trim, roll}. + export TMUX_POWERLINE_SEG_NOW_PLAYING_TRIM_METHOD="trim" + # Charcters per second to roll if rolling trim method is used. + export TMUX_POWERLINE_SEG_NOW_PLAYING_ROLL_SPEED="2" + + # Hostname for MPD server in the format "[password@]host" + export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_HOST="localhost" + # Port the MPD server is running on. + export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_PORT="6600" + # Song display format for mpd_simple. See mpc(1) for delimiters. + export TMUX_POWERLINE_SEG_NOW_PLAYING_MPD_SIMPLE_FORMAT="%artist% - %title%" + # Song display format for playerctl. see "Format Strings" in playerctl(1). + export TMUX_POWERLINE_SEG_NOW_PLAYING_PLAYERCTL_FORMAT="{{ artist }} - {{ title }}" + # Song display format for rhythmbox. see "FORMATS" in rhythmbox-client(1). + export TMUX_POWERLINE_SEG_NOW_PLAYING_RHYTHMBOX_FORMAT="%aa - %tt" + + # Last.fm + # Set up steps for Last.fm + # 1. Make sure jq(1) is installed on the system. + # 2. Create a new API application at https://www.last.fm/api/account/create (name it tmux-powerline) and copy the API key and insert it below in the setting TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_API_KEY + # 3. Make sure the API can access your recently played song by going to you user privacy settings https://www.last.fm/settings/privacy and make sure "Hide recent listening information" is UNCHECKED. + # Username for Last.fm if that music player is used. + export TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_USERNAME="" + # API Key for the API. + export TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_API_KEY="" + # How often in seconds to update the data from last.fm. + export TMUX_POWERLINE_SEG_NOW_PLAYING_LASTFM_UPDATE_PERIOD="30" + # Fancy char to display before now playing track + export TMUX_POWERLINE_SEG_NOW_PLAYING_NOTE_CHAR="♫" +# } + +# pwd.sh { + # Maximum length of output. + export TMUX_POWERLINE_SEG_PWD_MAX_LEN="40" +# } + +# time.sh { + # date(1) format for the time. Americans might want to have "%I:%M %p". + export TMUX_POWERLINE_SEG_TIME_FORMAT="%I:%M %p" +# } + +# tmux_session_info.sh { + # Session info format to feed into the command: tmux display-message -p + # For example, if FORMAT is '[ #S ]', the command is: tmux display-message -p '[ #S ]' + export TMUX_POWERLINE_SEG_TMUX_SESSION_INFO_FORMAT="#S:#I.#P" +# } + +# utc_time.sh { + # date(1) format for the UTC time. + export TMUX_POWERLINE_SEG_UTC_TIME_FORMAT="%H:%M %Z" +# } + +# vcs_branch.sh { + # Max length of the branch name. + export TMUX_POWERLINE_SEG_VCS_BRANCH_MAX_LEN="24" +# } + +# weather.sh { + # The data provider to use. Currently only "yahoo" is supported. + export TMUX_POWERLINE_SEG_WEATHER_DATA_PROVIDER="yrno" + # What unit to use. Can be any of {c,f,k}. + export TMUX_POWERLINE_SEG_WEATHER_UNIT="c" + # How often to update the weather in seconds. + export TMUX_POWERLINE_SEG_WEATHER_UPDATE_PERIOD="600" + # Name of GNU grep binary if in PATH, or path to it. + export TMUX_POWERLINE_SEG_WEATHER_GREP="grep" + # Location of the JSON parser, jq + export TMUX_POWERLINE_SEG_WEATHER_JSON="jq" + # Your location + # Latitude and Longtitude for use with yr.no + TMUX_POWERLINE_SEG_WEATHER_LAT="" + TMUX_POWERLINE_SEG_WEATHER_LON="" +# } diff --git a/tmux/tmux-powerline/themes/mhoush.sh b/tmux/tmux-powerline/themes/mhoush.sh new file mode 100644 index 0000000..135be17 --- /dev/null +++ b/tmux/tmux-powerline/themes/mhoush.sh @@ -0,0 +1,113 @@ +# Default Theme + +if patched_font_in_use; then + TMUX_POWERLINE_SEPARATOR_LEFT_BOLD="" + TMUX_POWERLINE_SEPARATOR_LEFT_THIN="" + TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD="" + TMUX_POWERLINE_SEPARATOR_RIGHT_THIN="" +else + TMUX_POWERLINE_SEPARATOR_LEFT_BOLD="◀" + TMUX_POWERLINE_SEPARATOR_LEFT_THIN="❮" + TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD="▶" + TMUX_POWERLINE_SEPARATOR_RIGHT_THIN="❯" +fi + +TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR=${TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR:-'235'} +TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR=${TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR:-'255'} + +TMUX_POWERLINE_DEFAULT_LEFTSIDE_SEPARATOR=${TMUX_POWERLINE_DEFAULT_LEFTSIDE_SEPARATOR:-$TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD} +TMUX_POWERLINE_DEFAULT_RIGHTSIDE_SEPARATOR=${TMUX_POWERLINE_DEFAULT_RIGHTSIDE_SEPARATOR:-$TMUX_POWERLINE_SEPARATOR_LEFT_BOLD} + +# See man tmux.conf for additional formatting options for the status line. +# The `format regular` and `format inverse` functions are provided as conveniences + +if [ -z $TMUX_POWERLINE_WINDOW_STATUS_CURRENT ]; then + TMUX_POWERLINE_WINDOW_STATUS_CURRENT=( + "#[$(format inverse)]" \ + "$TMUX_POWERLINE_DEFAULT_LEFTSIDE_SEPARATOR" \ + " #I#F " \ + "$TMUX_POWERLINE_SEPARATOR_RIGHT_THIN" \ + " #W " \ + "#[$(format regular)]" \ + "$TMUX_POWERLINE_DEFAULT_LEFTSIDE_SEPARATOR" + ) +fi + +if [ -z $TMUX_POWERLINE_WINDOW_STATUS_STYLE ]; then + TMUX_POWERLINE_WINDOW_STATUS_STYLE=( + "$(format regular)" + ) +fi + +if [ -z $TMUX_POWERLINE_WINDOW_STATUS_FORMAT ]; then + TMUX_POWERLINE_WINDOW_STATUS_FORMAT=( + "#[$(format regular)]" \ + " #I#{?window_flags,#F, } " \ + "$TMUX_POWERLINE_SEPARATOR_RIGHT_THIN" \ + " #W " + ) +fi + +# Format: segment_name background_color foreground_color [non_default_separator] [separator_background_color] [separator_foreground_color] [spacing_disable] [separator_disable] +# +# * background_color and foreground_color. Formats: +# * Named colors (chech man page of tmux for complete list) e.g. black, red, green, yellow, blue, magenta, cyan, white +# * a hexadecimal RGB string e.g. #ffffff +# * 'default' for the defalt tmux color. +# * non_default_separator - specify an alternative character for this segment's separator +# * separator_background_color - specify a unique background color for the separator +# * separator_foreground_color - specify a unique foreground color for the separator +# * spacing_disable - remove space on left, right or both sides of the segment: +# * "left_disable" - disable space on the left +# * "right_disable" - disable space on the right +# * "both_disable" - disable spaces on both sides +# * - any other character/string produces no change to default behavior (eg "none", "X", etc.) +# +# * separator_disable - disables drawing a separator on this segment, very useful for segments +# with dynamic background colours (eg tmux_mem_cpu_load): +# * "separator_disable" - disables the separator +# * - any other character/string produces no change to default behavior +# +# Example segment with separator disabled and right space character disabled: +# "hostname 33 0 {TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD} 33 0 right_disable separator_disable" +# +# Note that although redundant the non_default_separator, separator_background_color and +# separator_foreground_color options must still be specified so that appropriate index +# of options to support the spacing_disable and separator_disable features can be used + +if [ -z $TMUX_POWERLINE_LEFT_STATUS_SEGMENTS ]; then + TMUX_POWERLINE_LEFT_STATUS_SEGMENTS=( + "tmux_session_info 148 234" \ + "hostname 33 0" \ + #"ifstat 30 255" \ + #"ifstat_sys 30 255" \ + #"lan_ip 24 255 ${TMUX_POWERLINE_SEPARATOR_RIGHT_THIN}" \ + #"wan_ip 24 255" \ + "vcs_branch 29 88" \ + "pwd 89 211" \ + #"vcs_compare 60 255" \ + "vcs_staged 64 255" \ + "vcs_modified 9 255" \ + #"vcs_others 245 0" \ + ) +fi + +if [ -z $TMUX_POWERLINE_RIGHT_STATUS_SEGMENTS ]; then + TMUX_POWERLINE_RIGHT_STATUS_SEGMENTS=( + #"earthquake 3 0" \ + "macos_notification_count 29 255" \ + #"mailcount 9 255" \ + "now_playing 234 37" \ + #"cpu 240 136" \ + #"load 237 167" \ + #"tmux_mem_cpu_load 234 136" \ + "battery 137 127" \ + #"weather 37 255" \ + #"rainbarf 0 ${TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR}" \ + #"xkb_layout 125 117" \ + "date_day 235 136" \ + "date 235 136 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \ + "time 235 136 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \ + #"utc_time 235 136 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \ + ) +fi diff --git a/tmux/.tmux.conf b/tmux/tmux.conf similarity index 84% rename from tmux/.tmux.conf rename to tmux/tmux.conf index ec30bc4..4b6fc13 100644 --- a/tmux/.tmux.conf +++ b/tmux/tmux.conf @@ -66,7 +66,13 @@ bind -n S-Right next-window # reload new changes -bind-key R source-file ~/.tmux.conf\; \display-message "source-file done" +bind-key R source-file ~/.config/tmux/tmux.conf\; \display-message "source-file done" + +######################################## Plugins ######################################## +set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'tmux-plugins/tmux-sensible' +set -g @plugin 'sainnhe/tmux-fzf' +set -g @plugin 'erikw/tmux-powerline' # Create a single default session - because a session is created here, tmux @@ -79,5 +85,6 @@ bind-key R source-file ~/.tmux.conf\; \display-message "source-file done" #neww -d -nmutt 'exec mutt' #setw -t0:2 aggressive-resize on #neww -d -#neww -d -#neww -d +#neww -d neww -d + +run '~/.config/tmux/plugins/tpm/tpm' diff --git a/zsh/config/.zshrc b/zsh/config/.zshrc index a62d674..6346f95 100644 --- a/zsh/config/.zshrc +++ b/zsh/config/.zshrc @@ -187,13 +187,17 @@ alias ga='git add' alias gcb='git checkout -b' alias gco='git checkout' alias gcm='git commit -a -m' +#alias gl() { git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit } #alias gma() { git add . && git commit -m "$1" } alias gp='git push' alias gs='git status' alias l='ls -lah --color=auto' alias reload='exec zsh -l' +alias t='tmux' +alias tls='tmux list-sessions' alias temp='cd $(mktemp -d)' alias vi='nvim' +alias n='unset VIMINIT && unset MYVIMRC && /opt/homebrew/bin/nvim' alias nvim='unset VIMINIT && unset MYVIMRC && /opt/homebrew/bin/nvim' alias nvim-mhoush='NVIM_APPNAME=m-housh && nvim' alias nvim-kickstart='NVIM_APPNAME=kickstart /opt/homebrew/bin/nvim' diff --git a/zsh/config/zsh-aliases b/zsh/config/zsh-aliases index 91d1ada..d9d097a 100644 --- a/zsh/config/zsh-aliases +++ b/zsh/config/zsh-aliases @@ -24,7 +24,7 @@ alias cdots() { cd "${HOME}/.dotfiles" } alias zdots="vi ${ZDOTDIR}" # open dotfiles in nvim editor -alias dots="vi $DOTFILES" +#alias dots="vi $DOTFILES" # print the banner #alias banner() { clear && cat < "$ZDOTDIR/banner" }