configure tmux
This commit is contained in:
parent
41078ea61b
commit
b57fae1530
442 changed files with 22755 additions and 1 deletions
|
@ -130,3 +130,7 @@ export PATH
|
||||||
export EDITOR=vim
|
export EDITOR=vim
|
||||||
|
|
||||||
source <(/opt/homebrew/bin/starship init zsh --print-full-init)
|
source <(/opt/homebrew/bin/starship init zsh --print-full-init)
|
||||||
|
|
||||||
|
if [ -x "$(command -v tmux)" ] && [ -n "${DISPLAY}" ] && [ -z "${TMUX}" ]; then
|
||||||
|
exec tmux new-session -A -s ${USER} >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
|
|
@ -130,3 +130,7 @@ export EDITOR=vim
|
||||||
eval "$(starship init zsh)"
|
eval "$(starship init zsh)"
|
||||||
|
|
||||||
test -e "$HOME/.shellfishrc" && source "$HOME/.shellfishrc"
|
test -e "$HOME/.shellfishrc" && source "$HOME/.shellfishrc"
|
||||||
|
|
||||||
|
if [ -x "$(command -v tmux)" ] && [ -n "${DISPLAY}" ] && [ -z "${TMUX}" ]; then
|
||||||
|
exec tmux new-session -A -s ${USER} >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
|
6
README.md
Normal file
6
README.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
https://gist.github.com/rbudiharso/53821b3222c4e7a5f7695d8d13cc6058
|
||||||
|
|
||||||
|
For Install new tmux addons run this
|
||||||
|
~~~
|
||||||
|
TMUX_PLUGIN_MANAGER_PATH=~/.tmux/plugins .tmux/plugins/tpm/scripts/install_plugins.sh
|
||||||
|
~~~
|
|
@ -1 +0,0 @@
|
||||||
set -g mouse on
|
|
38
dot_tmux.conf.tmpl
Normal file
38
dot_tmux.conf.tmpl
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
set -g mouse on
|
||||||
|
|
||||||
|
set -g default-terminal "tmux-256color"
|
||||||
|
set -sa terminal-overrides ",xterm-termite:Tc"
|
||||||
|
|
||||||
|
set -g history-limit 10000
|
||||||
|
|
||||||
|
set -g @plugin 'tmux-plugins/tpm'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-pain-control'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-copycat'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-yank'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
|
||||||
|
set -g @plugin 'soyuka/tmux-current-pane-hostname'
|
||||||
|
set -g @plugin "arcticicestudio/nord-tmux"
|
||||||
|
|
||||||
|
run -b '~/.tmux/plugins/tpm/tpm'
|
||||||
|
|
||||||
|
set -g @nord_tmux_no_patched_font "1"
|
||||||
|
set -g @nord_tmux_show_status_content "0"
|
||||||
|
set -g status-style "bg=#4c566a,fg=#eceff4"
|
||||||
|
set -g status-left "#[fg=#bf616a,bg=#ebcb8b,bold] #S "
|
||||||
|
set -g status-right "#{prefix_highlight} #[bg=#a3be8c,fg=black,bold] #U #[bg=#ebcb8b,fg=#bf616a,bold] #h "
|
||||||
|
setw -g window-status-format "#[fg=#81a1c1,bg=#4c566a] #I:#W "
|
||||||
|
setw -g window-status-current-format "#[fg=#2e3440,bg=#81a1c1,bold] #I:#W "
|
||||||
|
setw -g window-status-separator ""
|
||||||
|
|
||||||
|
{{ if eq .chezmoi.os "darwin" -}}
|
||||||
|
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy && wl-paste -n | wl-copy -p"
|
||||||
|
bind-key p run "wl-paste -n | tmux load-buffer - ; tmux paste-buffer"
|
||||||
|
{{ else if eq .chezmoi.os "linux" -}}
|
||||||
|
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy && wl-paste -n | wl-copy -p"
|
||||||
|
bind-key p run "wl-paste -n | tmux load-buffer - ; tmux paste-buffer"
|
||||||
|
{{ end -}}
|
||||||
|
|
||||||
|
# More friendly split pane
|
||||||
|
bind-key h split-window -h
|
||||||
|
bind-key v split-window -v
|
140
dot_tmux/plugins/nord-tmux/changelog.md
Normal file
140
dot_tmux/plugins/nord-tmux/changelog.md
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
<p align="center"><a href="https://www.nordtheme.com/ports/tmux" target="_blank"><img src="https://raw.githubusercontent.com/nordtheme/web/main/assets/images/ports/tmux/repository-hero.svg?sanitize=true"/></a></p>
|
||||||
|
|
||||||
|
<p align="center"><a href="https://github.com/nordtheme/tmux/releases/latest"><img src="https://img.shields.io/github/release/nordtheme/tmux.svg?style=flat-square&label=Release&logo=github&logoColor=eceff4&colorA=4c566a&colorB=88c0d0"/></a> <a href="https://www.nordtheme.com/docs/ports/tmux"><img src="https://img.shields.io/github/release/nordtheme/tmux.svg?style=flat-square&label=Docs&colorA=4c566a&colorB=88c0d0&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI%2BCiAgICA8cGF0aCBmaWxsPSIjZDhkZWU5IiBkPSJNMTMuNzQ2IDIuODEzYS42Ny42NyAwIDAgMC0uNTU5LS4xMzNMOCAzLjg0OGwtNS4xODgtMS4xOGEuNjY5LjY2OSAwIDAgMC0uNTcuMTMzLjY3Ny42NzcgMCAwIDAtLjI0Mi41MzF2OC4xMzNjLS4wMDguMzIuMjEuNTk4LjUyLjY2OGw1LjMzMiAxLjE5OWguMjk2bDUuMzMyLTEuMmEuNjY4LjY2OCAwIDAgMCAuNTItLjY2N1YzLjMzMmEuNjU5LjY1OSAwIDAgMC0uMjU0LS41MnpNMy4zMzIgNC4xNjhsNCAuODk4djYuNzY2bC00LS44OTh6bTkuMzM2IDYuNzY2bC00IC44OThWNS4wNjZsNC0uODk4em0wIDAiLz4KPC9zdmc%2BCg%3D%3D"/></a></p>
|
||||||
|
|
||||||
|
<p align="center">Changelog for <a href="https://www.nordtheme.com/ports/tmux">Nord tmux</a> — An arctic, north-bluish clean and elegant <a href="https://tmux.github.io" target="_blank">tmux</a> color theme.</p>
|
||||||
|
|
||||||
|
<!--lint disable no-duplicate-headings-->
|
||||||
|
|
||||||
|
# 0.3.0
|
||||||
|
|
||||||
|
![Release Date: 2019-06-03](https://img.shields.io/badge/Release_Date-2019--06--03-88C0D0.svg?style=flat-square) [![Project Board](https://img.shields.io/badge/Project_Board-0.03.0-88C0D0.svg?style=flat-square)](https://github.com/orgs/nordtheme/projects/1/views/10) [![Milestone](https://img.shields.io/badge/Milestone-0.03.0-88C0D0.svg?style=flat-square)](https://github.com/nordtheme/tmux/milestone/4)
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
**Nord Docs Transition** — #36 ⇄ #37 (⊶ 6101cf85)
|
||||||
|
↠ Transferred all documentations, assets and from „Nord tmux“ to [Nord Docs][nord]
|
||||||
|
Please see the [corresponding issue in the Nord Docs repository][nord-docs#153] to get an overview of what has changed for Nord tmux and what has been done to migrate to Nord Docs.
|
||||||
|
|
||||||
|
###### Landing Page
|
||||||
|
|
||||||
|
<p align="center"><a href="https://www.nordtheme.com/ports/tmux" target="_blank"><img src="https://user-images.githubusercontent.com/7836623/58762743-23bed700-8553-11e9-8094-dc82e8eea6bd.png" alt="Preview: Nord tmux Port Project Landing Page"/></a></p>
|
||||||
|
|
||||||
|
###### Landing Page Docs
|
||||||
|
|
||||||
|
<p align="center"><a href="https://www.nordtheme.com/docs/ports/tmux" target="_blank"><img src="https://user-images.githubusercontent.com/7836623/58762745-29b4b800-8553-11e9-9b2c-076577593a9c.png" alt="Preview: Nord tmux Docs Landing Page"/></a></p>
|
||||||
|
|
||||||
|
###### Installation & Activation Docs
|
||||||
|
|
||||||
|
<p align="center"><a href="https://www.nordtheme.com/docs/ports/tmux/installation" target="_blank"><img src="https://user-images.githubusercontent.com/7836623/58762754-3f29e200-8553-11e9-88ae-336f7a1ed999.png" alt="Preview: Nord tmux Installation & Activation Docs Page"/></a></p>
|
||||||
|
|
||||||
|
###### Configuration Docs
|
||||||
|
|
||||||
|
<p align="center"><a href="https://www.nordtheme.com/docs/ports/tmux/configuration" target="_blank"><img src="https://user-images.githubusercontent.com/7836623/58762760-451fc300-8553-11e9-861c-1a0925d20d66.png" alt="Preview: Nord tmux Configuration Docs Page"/></a></p>
|
||||||
|
|
||||||
|
###### Plugin Support Docs
|
||||||
|
|
||||||
|
<p align="center"><a href="https://www.nordtheme.com/docs/ports/tmux/customization" target="_blank"><img src="https://user-images.githubusercontent.com/7836623/58762761-4ea92b00-8553-11e9-929a-14dfd6690b36.png" alt="Preview: Nord tmux Plugin Support Docs Page"/></a></p>
|
||||||
|
|
||||||
|
**Patched Font Characters** — #5 ⇄ #11 (⊶ 0809657f) by [@petrhosek][gh-user-petrhosek]
|
||||||
|
↠ Added a new theme configuration to [disable patched fonts for the default status content][nord-docs-config-font-no-patched] by setting the `@nord_tmux_no_patched_font` variable to `1`.
|
||||||
|
It can be used facing rendering problems with incompatible terminals or fonts.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
set -g @nord_tmux_no_patched_font "1"
|
||||||
|
```
|
||||||
|
|
||||||
|
<p align="center"><a href="https://www.nordtheme.com/docs/ports/tmux/configuration#patched-font-characters" target="_blank"><img src="https://raw.githubusercontent.com/nordtheme/web/main/src/assets/images/ports/tmux/config-no-patched-font.png"/></a></p>
|
||||||
|
|
||||||
|
**Optional Status Bar Content** — #7, #10 ⇄ #8, #12 (⊶ 27754979) by [@tsroten][gh-user-tsroten] and [@rgcr][gh-user-rgcr]
|
||||||
|
↠ Added a new theme configuration to [disable the default predefined status bar content][nord-docs-config-default-content], allowing to customize the status content, e.g. adding other plugins or adjust the layout, by setting the `@nord_tmux_show_status_content` variable to `0`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
set -g @nord_tmux_show_status_content "0"
|
||||||
|
```
|
||||||
|
|
||||||
|
<p align="center"><a href="https://www.nordtheme.com/docs/ports/tmux/configuration#default-status-bar-content" target="_blank"><img src="https://raw.githubusercontent.com/nordtheme/web/main/src/assets/images/ports/tmux/config-no-status-bar-content.png"/></a></p>
|
||||||
|
|
||||||
|
## Improvements
|
||||||
|
|
||||||
|
**Respect User's Status Bar Positioning** — #13 ⇄ #14 (⊶ ee5542c5) by [@drzel][gh-user-drzel]
|
||||||
|
↠ Removed the `status-position` property in order to respect the user's preferred status bar positioning configuration instead of overriding it.
|
||||||
|
|
||||||
|
**More Spacing** — #16 (⊶ 2da9466c) by [@dylnmc][gh-user-dylnmc]
|
||||||
|
↠ Added a space character to the first and last status bar element in order to improve the visual appearance to make it look not so squeezed together.
|
||||||
|
|
||||||
|
<p align="center"><p>Before</p>
|
||||||
|
|
||||||
|
<p align="center"><img src="https://user-images.githubusercontent.com/7635158/32998484-6a5ccc88-cd69-11e7-87bd-7b947c977fd1.png"/></p>
|
||||||
|
|
||||||
|
<p align="center"><p>After</p>
|
||||||
|
|
||||||
|
<p align="center"><img src="https://user-images.githubusercontent.com/7635158/32998486-6e7240a0-cd69-11e7-8ef1-b3b2d69fea2c.png"/></p>
|
||||||
|
|
||||||
|
## Bug Fixes
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
**Typo In `source-file` Command** — #32 (⊶ 72b0b3fb) by [@rememberYou][gh-user-rememberyou]
|
||||||
|
↠ Fixed a typo in the README for the `source-file` command.
|
||||||
|
|
||||||
|
## Tasks
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
**More Spacing** — #16 (⊶ 2da9466c) by [@dylnmc][gh-user-dylnmc]
|
||||||
|
↠ Added a space character to the first and last status bar element in order to improve the visual appearance to make it look not so squeezed together.
|
||||||
|
|
||||||
|
**MIT License** — #19 ⇄ #20 (⊶ 4d39639a)
|
||||||
|
↠ Adapted to the MIT license migration of the Nord project. Detailed information can be found in the main task ticket [nordtheme/nord#55][].
|
||||||
|
|
||||||
|
# 0.2.0
|
||||||
|
|
||||||
|
_2017-04-22_
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
### Plugin Support
|
||||||
|
|
||||||
|
❯ Implemented support for the [tmux-prefix-highlight](https://github.com/tmux-plugins/tmux-prefix-highlight) _prefix_- and `copy-mode` status indicator. (@kepbod, #3, 166c8956)
|
||||||
|
|
||||||
|
<p align="center"><img src="https://raw.githubusercontent.com/nordtheme/tmux/develop/src/assets/scrot-plugin-support-tmux-prefix-highlight.png"/><br><img src="https://raw.githubusercontent.com/nordtheme/tmux/develop/src/assets/scrot-plugin-support-tmux-prefix-highlight-copy-mode.png"/></p>
|
||||||
|
|
||||||
|
# 0.1.1
|
||||||
|
|
||||||
|
_2017-04-21_
|
||||||
|
|
||||||
|
## Bug Fixes
|
||||||
|
|
||||||
|
❯ Fixed the plugin to be not loadable due to the missing `#!/usr/bin/env bash` hashbang and `+x` permission flag for the plugin loader [`nord.tmux`](https://github.com/nordtheme/tmux/blob/develop/nord.tmux) which caused `tpm` to exit with code `126`. (@svengreb, #4, c049da5e)
|
||||||
|
|
||||||
|
# 0.1.0
|
||||||
|
|
||||||
|
_2017-04-20_
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
Detailed information about features and install instructions can be found in the [README](https://github.com/nordtheme/tmux/blob/develop/readme.md#installation).
|
||||||
|
|
||||||
|
❯ Implemented the main color theme file [`nord.conf`](https://github.com/nordtheme/tmux/blob/develop/src/nord.conf). (@svengreb, #1, e759aedc)
|
||||||
|
|
||||||
|
<p align="center"><img src="https://raw.githubusercontent.com/nordtheme/tmux/develop/src/assets/scrot-top.png"/></p>
|
||||||
|
|
||||||
|
❯ Implemented the [`tpm`](https://github.com/tmux-plugins/tpm) plugin loader [`nord.tmux`](https://github.com/nordtheme/tmux/blob/develop/nord.tmux). (@svengreb, #2, e58b52e9)
|
||||||
|
|
||||||
|
# 0.0.0
|
||||||
|
|
||||||
|
_2016-04-20_
|
||||||
|
❯ **Project Initialization**
|
||||||
|
|
||||||
|
[nordtheme/nord#55]: https://github.com/nordtheme/nord/issues/55
|
||||||
|
[gh-user-drzel]: https://github.com/drzel
|
||||||
|
[gh-user-dylnmc]: https://github.com/dylnmc
|
||||||
|
[gh-user-petrhosek]: https://github.com/petrhosek
|
||||||
|
[gh-user-rememberyou]: https://github.com/rememberYou
|
||||||
|
[gh-user-rgcr]: https://github.com/rgcr
|
||||||
|
[gh-user-tsroten]: https://github.com/tsroten
|
||||||
|
[nord-docs-config-default-content]: https://www.nordtheme.com/docs/ports/tmux/configuration#default-status-bar-content
|
||||||
|
[nord-docs-config-font-no-patched]: https://www.nordtheme.com/docs/ports/tmux/configuration#patched-font-characters
|
||||||
|
[nord-docs#153]: https://github.com/nordtheme/web/pull/153
|
||||||
|
[nord]: https://www.nordtheme.com
|
27
dot_tmux/plugins/nord-tmux/dot_editorconfig
Normal file
27
dot_tmux/plugins/nord-tmux/dot_editorconfig
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
# Configurations for EditorConfig.
|
||||||
|
# See https://editorconfig.org/#file-format-details for more details.
|
||||||
|
|
||||||
|
# +--------------------+
|
||||||
|
# + Base Configuration +
|
||||||
|
# +--------------------+
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
indent_size = 2
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
max_line_length = 160
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
# +-----------+
|
||||||
|
# + Languages +
|
||||||
|
# +-----------+
|
||||||
|
# +--- Markdown ---+
|
||||||
|
[*.{md}]
|
||||||
|
max_line_length = off
|
||||||
|
trim_trailing_whitespace = false
|
14
dot_tmux/plugins/nord-tmux/dot_eslintignore
Normal file
14
dot_tmux/plugins/nord-tmux/dot_eslintignore
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
# Path match pattern to ignore (i.e. not lint) certain files and folders.
|
||||||
|
# References:
|
||||||
|
# 1. https://eslint.org/docs/latest/use/configure/ignore
|
||||||
|
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Explicitly include specific "dotfiles".
|
||||||
|
# ESLint automatically applies ignore pattern for "dotfiles" by default to prevent accidentally lint over paths like
|
||||||
|
# `.git` or any other critical paths.
|
||||||
|
!**/.eslintrc.js
|
||||||
|
!.remarkrc.mjs
|
32
dot_tmux/plugins/nord-tmux/dot_eslintrc.js
Normal file
32
dot_tmux/plugins/nord-tmux/dot_eslintrc.js
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
* This source code is licensed under the Creative Commons Attribution-ShareAlike 4.0 International license found in the license file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configurations for ESLint.
|
||||||
|
* @see https://eslint.org/docs/latest/use/configure
|
||||||
|
* @see https://eslint.org/docs/latest/use/configure/#using-configuration-files
|
||||||
|
* @see https://eslint.org/docs/latest/use/configure/#specifying-environments
|
||||||
|
* @see https://eslint.org/docs/latest/rules
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
extends: [
|
||||||
|
"@svengreb/eslint-config-base",
|
||||||
|
/*
|
||||||
|
* Enable support for projects using Prettier.
|
||||||
|
* Note that this must always be placed after the `@svengreb/eslint-config-base` preset to take precedence, otherwise it won't prevent errors
|
||||||
|
* due to useless and possibly conflicting rules!
|
||||||
|
*/
|
||||||
|
"@svengreb/eslint-config-base/prettier",
|
||||||
|
],
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
files: ["*.js"],
|
||||||
|
rules: {
|
||||||
|
"capitalized-comments": "off",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
1
dot_tmux/plugins/nord-tmux/dot_git/HEAD
Normal file
1
dot_tmux/plugins/nord-tmux/dot_git/HEAD
Normal file
|
@ -0,0 +1 @@
|
||||||
|
ref: refs/heads/develop
|
0
dot_tmux/plugins/nord-tmux/dot_git/branches/.keep
Normal file
0
dot_tmux/plugins/nord-tmux/dot_git/branches/.keep
Normal file
13
dot_tmux/plugins/nord-tmux/dot_git/config
Normal file
13
dot_tmux/plugins/nord-tmux/dot_git/config
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
[core]
|
||||||
|
repositoryformatversion = 0
|
||||||
|
filemode = true
|
||||||
|
bare = false
|
||||||
|
logallrefupdates = true
|
||||||
|
[submodule]
|
||||||
|
active = .
|
||||||
|
[remote "origin"]
|
||||||
|
url = https://git::@github.com/arcticicestudio/nord-tmux
|
||||||
|
fetch = +refs/heads/develop:refs/remotes/origin/develop
|
||||||
|
[branch "develop"]
|
||||||
|
remote = origin
|
||||||
|
merge = refs/heads/develop
|
1
dot_tmux/plugins/nord-tmux/dot_git/description
Normal file
1
dot_tmux/plugins/nord-tmux/dot_git/description
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Unnamed repository; edit this file 'description' to name the repository.
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to check the commit log message taken by
|
||||||
|
# applypatch from an e-mail message.
|
||||||
|
#
|
||||||
|
# The hook should exit with non-zero status after issuing an
|
||||||
|
# appropriate message if it wants to stop the commit. The hook is
|
||||||
|
# allowed to edit the commit message file.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "applypatch-msg".
|
||||||
|
|
||||||
|
. git-sh-setup
|
||||||
|
commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
|
||||||
|
test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
|
||||||
|
:
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to check the commit log message.
|
||||||
|
# Called by "git commit" with one argument, the name of the file
|
||||||
|
# that has the commit message. The hook should exit with non-zero
|
||||||
|
# status after issuing an appropriate message if it wants to stop the
|
||||||
|
# commit. The hook is allowed to edit the commit message file.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "commit-msg".
|
||||||
|
|
||||||
|
# Uncomment the below to add a Signed-off-by line to the message.
|
||||||
|
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
|
||||||
|
# hook is more suited to it.
|
||||||
|
#
|
||||||
|
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||||
|
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
||||||
|
|
||||||
|
# This example catches duplicate Signed-off-by lines.
|
||||||
|
|
||||||
|
test "" = "$(grep '^Signed-off-by: ' "$1" |
|
||||||
|
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
|
||||||
|
echo >&2 Duplicate Signed-off-by lines.
|
||||||
|
exit 1
|
||||||
|
}
|
|
@ -0,0 +1,174 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use IPC::Open2;
|
||||||
|
|
||||||
|
# An example hook script to integrate Watchman
|
||||||
|
# (https://facebook.github.io/watchman/) with git to speed up detecting
|
||||||
|
# new and modified files.
|
||||||
|
#
|
||||||
|
# The hook is passed a version (currently 2) and last update token
|
||||||
|
# formatted as a string and outputs to stdout a new update token and
|
||||||
|
# all files that have been modified since the update token. Paths must
|
||||||
|
# be relative to the root of the working tree and separated by a single NUL.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "query-watchman" and set
|
||||||
|
# 'git config core.fsmonitor .git/hooks/query-watchman'
|
||||||
|
#
|
||||||
|
my ($version, $last_update_token) = @ARGV;
|
||||||
|
|
||||||
|
# Uncomment for debugging
|
||||||
|
# print STDERR "$0 $version $last_update_token\n";
|
||||||
|
|
||||||
|
# Check the hook interface version
|
||||||
|
if ($version ne 2) {
|
||||||
|
die "Unsupported query-fsmonitor hook version '$version'.\n" .
|
||||||
|
"Falling back to scanning...\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
my $git_work_tree = get_working_dir();
|
||||||
|
|
||||||
|
my $retry = 1;
|
||||||
|
|
||||||
|
my $json_pkg;
|
||||||
|
eval {
|
||||||
|
require JSON::XS;
|
||||||
|
$json_pkg = "JSON::XS";
|
||||||
|
1;
|
||||||
|
} or do {
|
||||||
|
require JSON::PP;
|
||||||
|
$json_pkg = "JSON::PP";
|
||||||
|
};
|
||||||
|
|
||||||
|
launch_watchman();
|
||||||
|
|
||||||
|
sub launch_watchman {
|
||||||
|
my $o = watchman_query();
|
||||||
|
if (is_work_tree_watched($o)) {
|
||||||
|
output_result($o->{clock}, @{$o->{files}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub output_result {
|
||||||
|
my ($clockid, @files) = @_;
|
||||||
|
|
||||||
|
# Uncomment for debugging watchman output
|
||||||
|
# open (my $fh, ">", ".git/watchman-output.out");
|
||||||
|
# binmode $fh, ":utf8";
|
||||||
|
# print $fh "$clockid\n@files\n";
|
||||||
|
# close $fh;
|
||||||
|
|
||||||
|
binmode STDOUT, ":utf8";
|
||||||
|
print $clockid;
|
||||||
|
print "\0";
|
||||||
|
local $, = "\0";
|
||||||
|
print @files;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub watchman_clock {
|
||||||
|
my $response = qx/watchman clock "$git_work_tree"/;
|
||||||
|
die "Failed to get clock id on '$git_work_tree'.\n" .
|
||||||
|
"Falling back to scanning...\n" if $? != 0;
|
||||||
|
|
||||||
|
return $json_pkg->new->utf8->decode($response);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub watchman_query {
|
||||||
|
my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty')
|
||||||
|
or die "open2() failed: $!\n" .
|
||||||
|
"Falling back to scanning...\n";
|
||||||
|
|
||||||
|
# In the query expression below we're asking for names of files that
|
||||||
|
# changed since $last_update_token but not from the .git folder.
|
||||||
|
#
|
||||||
|
# To accomplish this, we're using the "since" generator to use the
|
||||||
|
# recency index to select candidate nodes and "fields" to limit the
|
||||||
|
# output to file names only. Then we're using the "expression" term to
|
||||||
|
# further constrain the results.
|
||||||
|
my $last_update_line = "";
|
||||||
|
if (substr($last_update_token, 0, 1) eq "c") {
|
||||||
|
$last_update_token = "\"$last_update_token\"";
|
||||||
|
$last_update_line = qq[\n"since": $last_update_token,];
|
||||||
|
}
|
||||||
|
my $query = <<" END";
|
||||||
|
["query", "$git_work_tree", {$last_update_line
|
||||||
|
"fields": ["name"],
|
||||||
|
"expression": ["not", ["dirname", ".git"]]
|
||||||
|
}]
|
||||||
|
END
|
||||||
|
|
||||||
|
# Uncomment for debugging the watchman query
|
||||||
|
# open (my $fh, ">", ".git/watchman-query.json");
|
||||||
|
# print $fh $query;
|
||||||
|
# close $fh;
|
||||||
|
|
||||||
|
print CHLD_IN $query;
|
||||||
|
close CHLD_IN;
|
||||||
|
my $response = do {local $/; <CHLD_OUT>};
|
||||||
|
|
||||||
|
# Uncomment for debugging the watch response
|
||||||
|
# open ($fh, ">", ".git/watchman-response.json");
|
||||||
|
# print $fh $response;
|
||||||
|
# close $fh;
|
||||||
|
|
||||||
|
die "Watchman: command returned no output.\n" .
|
||||||
|
"Falling back to scanning...\n" if $response eq "";
|
||||||
|
die "Watchman: command returned invalid output: $response\n" .
|
||||||
|
"Falling back to scanning...\n" unless $response =~ /^\{/;
|
||||||
|
|
||||||
|
return $json_pkg->new->utf8->decode($response);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub is_work_tree_watched {
|
||||||
|
my ($output) = @_;
|
||||||
|
my $error = $output->{error};
|
||||||
|
if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) {
|
||||||
|
$retry--;
|
||||||
|
my $response = qx/watchman watch "$git_work_tree"/;
|
||||||
|
die "Failed to make watchman watch '$git_work_tree'.\n" .
|
||||||
|
"Falling back to scanning...\n" if $? != 0;
|
||||||
|
$output = $json_pkg->new->utf8->decode($response);
|
||||||
|
$error = $output->{error};
|
||||||
|
die "Watchman: $error.\n" .
|
||||||
|
"Falling back to scanning...\n" if $error;
|
||||||
|
|
||||||
|
# Uncomment for debugging watchman output
|
||||||
|
# open (my $fh, ">", ".git/watchman-output.out");
|
||||||
|
# close $fh;
|
||||||
|
|
||||||
|
# Watchman will always return all files on the first query so
|
||||||
|
# return the fast "everything is dirty" flag to git and do the
|
||||||
|
# Watchman query just to get it over with now so we won't pay
|
||||||
|
# the cost in git to look up each individual file.
|
||||||
|
my $o = watchman_clock();
|
||||||
|
$error = $output->{error};
|
||||||
|
|
||||||
|
die "Watchman: $error.\n" .
|
||||||
|
"Falling back to scanning...\n" if $error;
|
||||||
|
|
||||||
|
output_result($o->{clock}, ("/"));
|
||||||
|
$last_update_token = $o->{clock};
|
||||||
|
|
||||||
|
eval { launch_watchman() };
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
die "Watchman: $error.\n" .
|
||||||
|
"Falling back to scanning...\n" if $error;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_working_dir {
|
||||||
|
my $working_dir;
|
||||||
|
if ($^O =~ 'msys' || $^O =~ 'cygwin') {
|
||||||
|
$working_dir = Win32::GetCwd();
|
||||||
|
$working_dir =~ tr/\\/\//;
|
||||||
|
} else {
|
||||||
|
require Cwd;
|
||||||
|
$working_dir = Cwd::cwd();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $working_dir;
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to prepare a packed repository for use over
|
||||||
|
# dumb transports.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "post-update".
|
||||||
|
|
||||||
|
exec git update-server-info
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to verify what is about to be committed
|
||||||
|
# by applypatch from an e-mail message.
|
||||||
|
#
|
||||||
|
# The hook should exit with non-zero status after issuing an
|
||||||
|
# appropriate message if it wants to stop the commit.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-applypatch".
|
||||||
|
|
||||||
|
. git-sh-setup
|
||||||
|
precommit="$(git rev-parse --git-path hooks/pre-commit)"
|
||||||
|
test -x "$precommit" && exec "$precommit" ${1+"$@"}
|
||||||
|
:
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to verify what is about to be committed.
|
||||||
|
# Called by "git commit" with no arguments. The hook should
|
||||||
|
# exit with non-zero status after issuing an appropriate message if
|
||||||
|
# it wants to stop the commit.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-commit".
|
||||||
|
|
||||||
|
if git rev-parse --verify HEAD >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
against=HEAD
|
||||||
|
else
|
||||||
|
# Initial commit: diff against an empty tree object
|
||||||
|
against=$(git hash-object -t tree /dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If you want to allow non-ASCII filenames set this variable to true.
|
||||||
|
allownonascii=$(git config --type=bool hooks.allownonascii)
|
||||||
|
|
||||||
|
# Redirect output to stderr.
|
||||||
|
exec 1>&2
|
||||||
|
|
||||||
|
# Cross platform projects tend to avoid non-ASCII filenames; prevent
|
||||||
|
# them from being added to the repository. We exploit the fact that the
|
||||||
|
# printable range starts at the space character and ends with tilde.
|
||||||
|
if [ "$allownonascii" != "true" ] &&
|
||||||
|
# Note that the use of brackets around a tr range is ok here, (it's
|
||||||
|
# even required, for portability to Solaris 10's /usr/bin/tr), since
|
||||||
|
# the square bracket bytes happen to fall in the designated range.
|
||||||
|
test $(git diff --cached --name-only --diff-filter=A -z $against |
|
||||||
|
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
|
||||||
|
then
|
||||||
|
cat <<\EOF
|
||||||
|
Error: Attempt to add a non-ASCII file name.
|
||||||
|
|
||||||
|
This can cause problems if you want to work with people on other platforms.
|
||||||
|
|
||||||
|
To be portable it is advisable to rename the file.
|
||||||
|
|
||||||
|
If you know what you are doing you can disable this check using:
|
||||||
|
|
||||||
|
git config hooks.allownonascii true
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If there are whitespace errors, print the offending file names and fail.
|
||||||
|
exec git diff-index --check --cached $against --
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to verify what is about to be committed.
|
||||||
|
# Called by "git merge" with no arguments. The hook should
|
||||||
|
# exit with non-zero status after issuing an appropriate message to
|
||||||
|
# stderr if it wants to stop the merge commit.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-merge-commit".
|
||||||
|
|
||||||
|
. git-sh-setup
|
||||||
|
test -x "$GIT_DIR/hooks/pre-commit" &&
|
||||||
|
exec "$GIT_DIR/hooks/pre-commit"
|
||||||
|
:
|
|
@ -0,0 +1,53 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# An example hook script to verify what is about to be pushed. Called by "git
|
||||||
|
# push" after it has checked the remote status, but before anything has been
|
||||||
|
# pushed. If this script exits with a non-zero status nothing will be pushed.
|
||||||
|
#
|
||||||
|
# This hook is called with the following parameters:
|
||||||
|
#
|
||||||
|
# $1 -- Name of the remote to which the push is being done
|
||||||
|
# $2 -- URL to which the push is being done
|
||||||
|
#
|
||||||
|
# If pushing without using a named remote those arguments will be equal.
|
||||||
|
#
|
||||||
|
# Information about the commits which are being pushed is supplied as lines to
|
||||||
|
# the standard input in the form:
|
||||||
|
#
|
||||||
|
# <local ref> <local oid> <remote ref> <remote oid>
|
||||||
|
#
|
||||||
|
# This sample shows how to prevent push of commits where the log message starts
|
||||||
|
# with "WIP" (work in progress).
|
||||||
|
|
||||||
|
remote="$1"
|
||||||
|
url="$2"
|
||||||
|
|
||||||
|
zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0')
|
||||||
|
|
||||||
|
while read local_ref local_oid remote_ref remote_oid
|
||||||
|
do
|
||||||
|
if test "$local_oid" = "$zero"
|
||||||
|
then
|
||||||
|
# Handle delete
|
||||||
|
:
|
||||||
|
else
|
||||||
|
if test "$remote_oid" = "$zero"
|
||||||
|
then
|
||||||
|
# New branch, examine all commits
|
||||||
|
range="$local_oid"
|
||||||
|
else
|
||||||
|
# Update to existing branch, examine new commits
|
||||||
|
range="$remote_oid..$local_oid"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for WIP commit
|
||||||
|
commit=$(git rev-list -n 1 --grep '^WIP' "$range")
|
||||||
|
if test -n "$commit"
|
||||||
|
then
|
||||||
|
echo >&2 "Found WIP commit in $local_ref, not pushing"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,169 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 2008 Junio C Hamano
|
||||||
|
#
|
||||||
|
# The "pre-rebase" hook is run just before "git rebase" starts doing
|
||||||
|
# its job, and can prevent the command from running by exiting with
|
||||||
|
# non-zero status.
|
||||||
|
#
|
||||||
|
# The hook is called with the following parameters:
|
||||||
|
#
|
||||||
|
# $1 -- the upstream the series was forked from.
|
||||||
|
# $2 -- the branch being rebased (or empty when rebasing the current branch).
|
||||||
|
#
|
||||||
|
# This sample shows how to prevent topic branches that are already
|
||||||
|
# merged to 'next' branch from getting rebased, because allowing it
|
||||||
|
# would result in rebasing already published history.
|
||||||
|
|
||||||
|
publish=next
|
||||||
|
basebranch="$1"
|
||||||
|
if test "$#" = 2
|
||||||
|
then
|
||||||
|
topic="refs/heads/$2"
|
||||||
|
else
|
||||||
|
topic=`git symbolic-ref HEAD` ||
|
||||||
|
exit 0 ;# we do not interrupt rebasing detached HEAD
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$topic" in
|
||||||
|
refs/heads/??/*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
exit 0 ;# we do not interrupt others.
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Now we are dealing with a topic branch being rebased
|
||||||
|
# on top of master. Is it OK to rebase it?
|
||||||
|
|
||||||
|
# Does the topic really exist?
|
||||||
|
git show-ref -q "$topic" || {
|
||||||
|
echo >&2 "No such branch $topic"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Is topic fully merged to master?
|
||||||
|
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
|
||||||
|
if test -z "$not_in_master"
|
||||||
|
then
|
||||||
|
echo >&2 "$topic is fully merged to master; better remove it."
|
||||||
|
exit 1 ;# we could allow it, but there is no point.
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Is topic ever merged to next? If so you should not be rebasing it.
|
||||||
|
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
|
||||||
|
only_next_2=`git rev-list ^master ${publish} | sort`
|
||||||
|
if test "$only_next_1" = "$only_next_2"
|
||||||
|
then
|
||||||
|
not_in_topic=`git rev-list "^$topic" master`
|
||||||
|
if test -z "$not_in_topic"
|
||||||
|
then
|
||||||
|
echo >&2 "$topic is already up to date with master"
|
||||||
|
exit 1 ;# we could allow it, but there is no point.
|
||||||
|
else
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
|
||||||
|
/usr/bin/perl -e '
|
||||||
|
my $topic = $ARGV[0];
|
||||||
|
my $msg = "* $topic has commits already merged to public branch:\n";
|
||||||
|
my (%not_in_next) = map {
|
||||||
|
/^([0-9a-f]+) /;
|
||||||
|
($1 => 1);
|
||||||
|
} split(/\n/, $ARGV[1]);
|
||||||
|
for my $elem (map {
|
||||||
|
/^([0-9a-f]+) (.*)$/;
|
||||||
|
[$1 => $2];
|
||||||
|
} split(/\n/, $ARGV[2])) {
|
||||||
|
if (!exists $not_in_next{$elem->[0]}) {
|
||||||
|
if ($msg) {
|
||||||
|
print STDERR $msg;
|
||||||
|
undef $msg;
|
||||||
|
}
|
||||||
|
print STDERR " $elem->[1]\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
' "$topic" "$not_in_next" "$not_in_master"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
<<\DOC_END
|
||||||
|
|
||||||
|
This sample hook safeguards topic branches that have been
|
||||||
|
published from being rewound.
|
||||||
|
|
||||||
|
The workflow assumed here is:
|
||||||
|
|
||||||
|
* Once a topic branch forks from "master", "master" is never
|
||||||
|
merged into it again (either directly or indirectly).
|
||||||
|
|
||||||
|
* Once a topic branch is fully cooked and merged into "master",
|
||||||
|
it is deleted. If you need to build on top of it to correct
|
||||||
|
earlier mistakes, a new topic branch is created by forking at
|
||||||
|
the tip of the "master". This is not strictly necessary, but
|
||||||
|
it makes it easier to keep your history simple.
|
||||||
|
|
||||||
|
* Whenever you need to test or publish your changes to topic
|
||||||
|
branches, merge them into "next" branch.
|
||||||
|
|
||||||
|
The script, being an example, hardcodes the publish branch name
|
||||||
|
to be "next", but it is trivial to make it configurable via
|
||||||
|
$GIT_DIR/config mechanism.
|
||||||
|
|
||||||
|
With this workflow, you would want to know:
|
||||||
|
|
||||||
|
(1) ... if a topic branch has ever been merged to "next". Young
|
||||||
|
topic branches can have stupid mistakes you would rather
|
||||||
|
clean up before publishing, and things that have not been
|
||||||
|
merged into other branches can be easily rebased without
|
||||||
|
affecting other people. But once it is published, you would
|
||||||
|
not want to rewind it.
|
||||||
|
|
||||||
|
(2) ... if a topic branch has been fully merged to "master".
|
||||||
|
Then you can delete it. More importantly, you should not
|
||||||
|
build on top of it -- other people may already want to
|
||||||
|
change things related to the topic as patches against your
|
||||||
|
"master", so if you need further changes, it is better to
|
||||||
|
fork the topic (perhaps with the same name) afresh from the
|
||||||
|
tip of "master".
|
||||||
|
|
||||||
|
Let's look at this example:
|
||||||
|
|
||||||
|
o---o---o---o---o---o---o---o---o---o "next"
|
||||||
|
/ / / /
|
||||||
|
/ a---a---b A / /
|
||||||
|
/ / / /
|
||||||
|
/ / c---c---c---c B /
|
||||||
|
/ / / \ /
|
||||||
|
/ / / b---b C \ /
|
||||||
|
/ / / / \ /
|
||||||
|
---o---o---o---o---o---o---o---o---o---o---o "master"
|
||||||
|
|
||||||
|
|
||||||
|
A, B and C are topic branches.
|
||||||
|
|
||||||
|
* A has one fix since it was merged up to "next".
|
||||||
|
|
||||||
|
* B has finished. It has been fully merged up to "master" and "next",
|
||||||
|
and is ready to be deleted.
|
||||||
|
|
||||||
|
* C has not merged to "next" at all.
|
||||||
|
|
||||||
|
We would want to allow C to be rebased, refuse A, and encourage
|
||||||
|
B to be deleted.
|
||||||
|
|
||||||
|
To compute (1):
|
||||||
|
|
||||||
|
git rev-list ^master ^topic next
|
||||||
|
git rev-list ^master next
|
||||||
|
|
||||||
|
if these match, topic has not merged in next at all.
|
||||||
|
|
||||||
|
To compute (2):
|
||||||
|
|
||||||
|
git rev-list master..topic
|
||||||
|
|
||||||
|
if this is empty, it is fully merged to "master".
|
||||||
|
|
||||||
|
DOC_END
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to make use of push options.
|
||||||
|
# The example simply echoes all push options that start with 'echoback='
|
||||||
|
# and rejects all pushes when the "reject" push option is used.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-receive".
|
||||||
|
|
||||||
|
if test -n "$GIT_PUSH_OPTION_COUNT"
|
||||||
|
then
|
||||||
|
i=0
|
||||||
|
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
|
||||||
|
do
|
||||||
|
eval "value=\$GIT_PUSH_OPTION_$i"
|
||||||
|
case "$value" in
|
||||||
|
echoback=*)
|
||||||
|
echo "echo from the pre-receive-hook: ${value#*=}" >&2
|
||||||
|
;;
|
||||||
|
reject)
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
i=$((i + 1))
|
||||||
|
done
|
||||||
|
fi
|
|
@ -0,0 +1,42 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to prepare the commit log message.
|
||||||
|
# Called by "git commit" with the name of the file that has the
|
||||||
|
# commit message, followed by the description of the commit
|
||||||
|
# message's source. The hook's purpose is to edit the commit
|
||||||
|
# message file. If the hook fails with a non-zero status,
|
||||||
|
# the commit is aborted.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "prepare-commit-msg".
|
||||||
|
|
||||||
|
# This hook includes three examples. The first one removes the
|
||||||
|
# "# Please enter the commit message..." help message.
|
||||||
|
#
|
||||||
|
# The second includes the output of "git diff --name-status -r"
|
||||||
|
# into the message, just before the "git status" output. It is
|
||||||
|
# commented because it doesn't cope with --amend or with squashed
|
||||||
|
# commits.
|
||||||
|
#
|
||||||
|
# The third example adds a Signed-off-by line to the message, that can
|
||||||
|
# still be edited. This is rarely a good idea.
|
||||||
|
|
||||||
|
COMMIT_MSG_FILE=$1
|
||||||
|
COMMIT_SOURCE=$2
|
||||||
|
SHA1=$3
|
||||||
|
|
||||||
|
/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
|
||||||
|
|
||||||
|
# case "$COMMIT_SOURCE,$SHA1" in
|
||||||
|
# ,|template,)
|
||||||
|
# /usr/bin/perl -i.bak -pe '
|
||||||
|
# print "\n" . `git diff --cached --name-status -r`
|
||||||
|
# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
|
||||||
|
# *) ;;
|
||||||
|
# esac
|
||||||
|
|
||||||
|
# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||||
|
# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
|
||||||
|
# if test -z "$COMMIT_SOURCE"
|
||||||
|
# then
|
||||||
|
# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
|
||||||
|
# fi
|
|
@ -0,0 +1,78 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# An example hook script to update a checked-out tree on a git push.
|
||||||
|
#
|
||||||
|
# This hook is invoked by git-receive-pack(1) when it reacts to git
|
||||||
|
# push and updates reference(s) in its repository, and when the push
|
||||||
|
# tries to update the branch that is currently checked out and the
|
||||||
|
# receive.denyCurrentBranch configuration variable is set to
|
||||||
|
# updateInstead.
|
||||||
|
#
|
||||||
|
# By default, such a push is refused if the working tree and the index
|
||||||
|
# of the remote repository has any difference from the currently
|
||||||
|
# checked out commit; when both the working tree and the index match
|
||||||
|
# the current commit, they are updated to match the newly pushed tip
|
||||||
|
# of the branch. This hook is to be used to override the default
|
||||||
|
# behaviour; however the code below reimplements the default behaviour
|
||||||
|
# as a starting point for convenient modification.
|
||||||
|
#
|
||||||
|
# The hook receives the commit with which the tip of the current
|
||||||
|
# branch is going to be updated:
|
||||||
|
commit=$1
|
||||||
|
|
||||||
|
# It can exit with a non-zero status to refuse the push (when it does
|
||||||
|
# so, it must not modify the index or the working tree).
|
||||||
|
die () {
|
||||||
|
echo >&2 "$*"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Or it can make any necessary changes to the working tree and to the
|
||||||
|
# index to bring them to the desired state when the tip of the current
|
||||||
|
# branch is updated to the new commit, and exit with a zero status.
|
||||||
|
#
|
||||||
|
# For example, the hook can simply run git read-tree -u -m HEAD "$1"
|
||||||
|
# in order to emulate git fetch that is run in the reverse direction
|
||||||
|
# with git push, as the two-tree form of git read-tree -u -m is
|
||||||
|
# essentially the same as git switch or git checkout that switches
|
||||||
|
# branches while keeping the local changes in the working tree that do
|
||||||
|
# not interfere with the difference between the branches.
|
||||||
|
|
||||||
|
# The below is a more-or-less exact translation to shell of the C code
|
||||||
|
# for the default behaviour for git's push-to-checkout hook defined in
|
||||||
|
# the push_to_deploy() function in builtin/receive-pack.c.
|
||||||
|
#
|
||||||
|
# Note that the hook will be executed from the repository directory,
|
||||||
|
# not from the working tree, so if you want to perform operations on
|
||||||
|
# the working tree, you will have to adapt your code accordingly, e.g.
|
||||||
|
# by adding "cd .." or using relative paths.
|
||||||
|
|
||||||
|
if ! git update-index -q --ignore-submodules --refresh
|
||||||
|
then
|
||||||
|
die "Up-to-date check failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! git diff-files --quiet --ignore-submodules --
|
||||||
|
then
|
||||||
|
die "Working directory has unstaged changes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# This is a rough translation of:
|
||||||
|
#
|
||||||
|
# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX
|
||||||
|
if git cat-file -e HEAD 2>/dev/null
|
||||||
|
then
|
||||||
|
head=HEAD
|
||||||
|
else
|
||||||
|
head=$(git hash-object -t tree --stdin </dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! git diff-index --quiet --cached --ignore-submodules $head --
|
||||||
|
then
|
||||||
|
die "Working directory has staged changes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! git read-tree -u -m "$commit"
|
||||||
|
then
|
||||||
|
die "Could not update working tree to new HEAD"
|
||||||
|
fi
|
|
@ -0,0 +1,77 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# An example hook script to validate a patch (and/or patch series) before
|
||||||
|
# sending it via email.
|
||||||
|
#
|
||||||
|
# The hook should exit with non-zero status after issuing an appropriate
|
||||||
|
# message if it wants to prevent the email(s) from being sent.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "sendemail-validate".
|
||||||
|
#
|
||||||
|
# By default, it will only check that the patch(es) can be applied on top of
|
||||||
|
# the default upstream branch without conflicts in a secondary worktree. After
|
||||||
|
# validation (successful or not) of the last patch of a series, the worktree
|
||||||
|
# will be deleted.
|
||||||
|
#
|
||||||
|
# The following config variables can be set to change the default remote and
|
||||||
|
# remote ref that are used to apply the patches against:
|
||||||
|
#
|
||||||
|
# sendemail.validateRemote (default: origin)
|
||||||
|
# sendemail.validateRemoteRef (default: HEAD)
|
||||||
|
#
|
||||||
|
# Replace the TODO placeholders with appropriate checks according to your
|
||||||
|
# needs.
|
||||||
|
|
||||||
|
validate_cover_letter () {
|
||||||
|
file="$1"
|
||||||
|
# TODO: Replace with appropriate checks (e.g. spell checking).
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
validate_patch () {
|
||||||
|
file="$1"
|
||||||
|
# Ensure that the patch applies without conflicts.
|
||||||
|
git am -3 "$file" || return
|
||||||
|
# TODO: Replace with appropriate checks for this patch
|
||||||
|
# (e.g. checkpatch.pl).
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
validate_series () {
|
||||||
|
# TODO: Replace with appropriate checks for the whole series
|
||||||
|
# (e.g. quick build, coding style checks, etc.).
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
# main -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if test "$GIT_SENDEMAIL_FILE_COUNTER" = 1
|
||||||
|
then
|
||||||
|
remote=$(git config --default origin --get sendemail.validateRemote) &&
|
||||||
|
ref=$(git config --default HEAD --get sendemail.validateRemoteRef) &&
|
||||||
|
worktree=$(mktemp --tmpdir -d sendemail-validate.XXXXXXX) &&
|
||||||
|
git worktree add -fd --checkout "$worktree" "refs/remotes/$remote/$ref" &&
|
||||||
|
git config --replace-all sendemail.validateWorktree "$worktree"
|
||||||
|
else
|
||||||
|
worktree=$(git config --get sendemail.validateWorktree)
|
||||||
|
fi || {
|
||||||
|
echo "sendemail-validate: error: failed to prepare worktree" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
unset GIT_DIR GIT_WORK_TREE
|
||||||
|
cd "$worktree" &&
|
||||||
|
|
||||||
|
if grep -q "^diff --git " "$1"
|
||||||
|
then
|
||||||
|
validate_patch "$1"
|
||||||
|
else
|
||||||
|
validate_cover_letter "$1"
|
||||||
|
fi &&
|
||||||
|
|
||||||
|
if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL"
|
||||||
|
then
|
||||||
|
git config --unset-all sendemail.validateWorktree &&
|
||||||
|
trap 'git worktree remove -ff "$worktree"' EXIT &&
|
||||||
|
validate_series
|
||||||
|
fi
|
|
@ -0,0 +1,128 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to block unannotated tags from entering.
|
||||||
|
# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "update".
|
||||||
|
#
|
||||||
|
# Config
|
||||||
|
# ------
|
||||||
|
# hooks.allowunannotated
|
||||||
|
# This boolean sets whether unannotated tags will be allowed into the
|
||||||
|
# repository. By default they won't be.
|
||||||
|
# hooks.allowdeletetag
|
||||||
|
# This boolean sets whether deleting tags will be allowed in the
|
||||||
|
# repository. By default they won't be.
|
||||||
|
# hooks.allowmodifytag
|
||||||
|
# This boolean sets whether a tag may be modified after creation. By default
|
||||||
|
# it won't be.
|
||||||
|
# hooks.allowdeletebranch
|
||||||
|
# This boolean sets whether deleting branches will be allowed in the
|
||||||
|
# repository. By default they won't be.
|
||||||
|
# hooks.denycreatebranch
|
||||||
|
# This boolean sets whether remotely creating branches will be denied
|
||||||
|
# in the repository. By default this is allowed.
|
||||||
|
#
|
||||||
|
|
||||||
|
# --- Command line
|
||||||
|
refname="$1"
|
||||||
|
oldrev="$2"
|
||||||
|
newrev="$3"
|
||||||
|
|
||||||
|
# --- Safety check
|
||||||
|
if [ -z "$GIT_DIR" ]; then
|
||||||
|
echo "Don't run this script from the command line." >&2
|
||||||
|
echo " (if you want, you could supply GIT_DIR then run" >&2
|
||||||
|
echo " $0 <ref> <oldrev> <newrev>)" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
|
||||||
|
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Config
|
||||||
|
allowunannotated=$(git config --type=bool hooks.allowunannotated)
|
||||||
|
allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch)
|
||||||
|
denycreatebranch=$(git config --type=bool hooks.denycreatebranch)
|
||||||
|
allowdeletetag=$(git config --type=bool hooks.allowdeletetag)
|
||||||
|
allowmodifytag=$(git config --type=bool hooks.allowmodifytag)
|
||||||
|
|
||||||
|
# check for no description
|
||||||
|
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
|
||||||
|
case "$projectdesc" in
|
||||||
|
"Unnamed repository"* | "")
|
||||||
|
echo "*** Project description file hasn't been set" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# --- Check types
|
||||||
|
# if $newrev is 0000...0000, it's a commit to delete a ref.
|
||||||
|
zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0')
|
||||||
|
if [ "$newrev" = "$zero" ]; then
|
||||||
|
newrev_type=delete
|
||||||
|
else
|
||||||
|
newrev_type=$(git cat-file -t $newrev)
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$refname","$newrev_type" in
|
||||||
|
refs/tags/*,commit)
|
||||||
|
# un-annotated tag
|
||||||
|
short_refname=${refname##refs/tags/}
|
||||||
|
if [ "$allowunannotated" != "true" ]; then
|
||||||
|
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
|
||||||
|
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/tags/*,delete)
|
||||||
|
# delete tag
|
||||||
|
if [ "$allowdeletetag" != "true" ]; then
|
||||||
|
echo "*** Deleting a tag is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/tags/*,tag)
|
||||||
|
# annotated tag
|
||||||
|
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
|
||||||
|
then
|
||||||
|
echo "*** Tag '$refname' already exists." >&2
|
||||||
|
echo "*** Modifying a tag is not allowed in this repository." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/heads/*,commit)
|
||||||
|
# branch
|
||||||
|
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
|
||||||
|
echo "*** Creating a branch is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/heads/*,delete)
|
||||||
|
# delete branch
|
||||||
|
if [ "$allowdeletebranch" != "true" ]; then
|
||||||
|
echo "*** Deleting a branch is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/remotes/*,commit)
|
||||||
|
# tracking branch
|
||||||
|
;;
|
||||||
|
refs/remotes/*,delete)
|
||||||
|
# delete tracking branch
|
||||||
|
if [ "$allowdeletebranch" != "true" ]; then
|
||||||
|
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Anything else (is there anything else?)
|
||||||
|
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# --- Finished
|
||||||
|
exit 0
|
BIN
dot_tmux/plugins/nord-tmux/dot_git/index
Normal file
BIN
dot_tmux/plugins/nord-tmux/dot_git/index
Normal file
Binary file not shown.
6
dot_tmux/plugins/nord-tmux/dot_git/info/exclude
Normal file
6
dot_tmux/plugins/nord-tmux/dot_git/info/exclude
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# git ls-files --others --exclude-from=.git/info/exclude
|
||||||
|
# Lines that start with '#' are comments.
|
||||||
|
# For a project mostly in C, the following would be a good set of
|
||||||
|
# exclude patterns (uncomment them if you want to use them):
|
||||||
|
# *.[oa]
|
||||||
|
# *~
|
1
dot_tmux/plugins/nord-tmux/dot_git/logs/HEAD
Normal file
1
dot_tmux/plugins/nord-tmux/dot_git/logs/HEAD
Normal file
|
@ -0,0 +1 @@
|
||||||
|
0000000000000000000000000000000000000000 f7b6da07ab55fe32ee5f7d62da56d8e5ac691a92 Simon Rieger <rieger@netzlink.com> 1699878736 +0100 clone: from https://github.com/arcticicestudio/nord-tmux
|
|
@ -0,0 +1 @@
|
||||||
|
0000000000000000000000000000000000000000 f7b6da07ab55fe32ee5f7d62da56d8e5ac691a92 Simon Rieger <rieger@netzlink.com> 1699878736 +0100 clone: from https://github.com/arcticicestudio/nord-tmux
|
|
@ -0,0 +1 @@
|
||||||
|
0000000000000000000000000000000000000000 f7b6da07ab55fe32ee5f7d62da56d8e5ac691a92 Simon Rieger <rieger@netzlink.com> 1699878736 +0100 clone: from https://github.com/arcticicestudio/nord-tmux
|
0
dot_tmux/plugins/nord-tmux/dot_git/objects/info/.keep
Normal file
0
dot_tmux/plugins/nord-tmux/dot_git/objects/info/.keep
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
2
dot_tmux/plugins/nord-tmux/dot_git/packed-refs
Normal file
2
dot_tmux/plugins/nord-tmux/dot_git/packed-refs
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# pack-refs with: peeled fully-peeled sorted
|
||||||
|
f7b6da07ab55fe32ee5f7d62da56d8e5ac691a92 refs/remotes/origin/develop
|
1
dot_tmux/plugins/nord-tmux/dot_git/refs/heads/develop
Normal file
1
dot_tmux/plugins/nord-tmux/dot_git/refs/heads/develop
Normal file
|
@ -0,0 +1 @@
|
||||||
|
f7b6da07ab55fe32ee5f7d62da56d8e5ac691a92
|
|
@ -0,0 +1 @@
|
||||||
|
ref: refs/remotes/origin/develop
|
1
dot_tmux/plugins/nord-tmux/dot_git/refs/tags/v0.1.0
Normal file
1
dot_tmux/plugins/nord-tmux/dot_git/refs/tags/v0.1.0
Normal file
|
@ -0,0 +1 @@
|
||||||
|
4279c6531d50413299746fb5621799dd7eabd7ec
|
12
dot_tmux/plugins/nord-tmux/dot_gitattributes
Normal file
12
dot_tmux/plugins/nord-tmux/dot_gitattributes
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
# Configuration to define attributes per path.
|
||||||
|
#
|
||||||
|
# References:
|
||||||
|
# 1. https://git-scm.com/docs/gitattributes
|
||||||
|
# 2. https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes#Keyword-Expansion
|
||||||
|
|
||||||
|
# Automatically perform line feed (LF) normalization for files detected as text and
|
||||||
|
# leave all files detected as binary untouched.
|
||||||
|
* text=auto eol=lf
|
14
dot_tmux/plugins/nord-tmux/dot_github/codeowners
Normal file
14
dot_tmux/plugins/nord-tmux/dot_github/codeowners
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
# Configuration for the GitHub feature to automatically request reviews from the code owners
|
||||||
|
# when a pull request changes any owned files.
|
||||||
|
#
|
||||||
|
# References:
|
||||||
|
# 1. https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#codeowners-file-location
|
||||||
|
# 2. https://github.com/blog/2392-introducing-code-owners
|
||||||
|
|
||||||
|
# +----------------------+
|
||||||
|
# + Core Team Code Owner +
|
||||||
|
# +----------------------+
|
||||||
|
* @svengreb
|
10
dot_tmux/plugins/nord-tmux/dot_gitignore
Normal file
10
dot_tmux/plugins/nord-tmux/dot_gitignore
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
# Path match pattern to intentionally ignore untracked files and directories.
|
||||||
|
# See https://git-scm.com/docs/gitignore for more details.
|
||||||
|
|
||||||
|
# +---------+
|
||||||
|
# + Node.js +
|
||||||
|
# +---------+
|
||||||
|
node_modules/
|
13
dot_tmux/plugins/nord-tmux/dot_husky/executable_pre-commit
Normal file
13
dot_tmux/plugins/nord-tmux/dot_husky/executable_pre-commit
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the Creative Commons Attribution-ShareAlike 4.0 International license found in the license file.
|
||||||
|
|
||||||
|
# Git "pre-commit" hook for husky.
|
||||||
|
# References:
|
||||||
|
# 1. https://github.com/typicode/husky
|
||||||
|
# 2. https://git-scm.com/docs/githooks#_pre_commit
|
||||||
|
|
||||||
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
|
npm exec lint-staged
|
8
dot_tmux/plugins/nord-tmux/dot_mailmap
Normal file
8
dot_tmux/plugins/nord-tmux/dot_mailmap
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
# Configuration for the Git mail mapping feature to coalesce together commits by the same person in the shortlog,
|
||||||
|
# where their name and/or email address was spelled differently or has been changed.
|
||||||
|
# See https://git-scm.com/docs/git-shortlog#_mapping_authors for more details.
|
||||||
|
Sven Greb <development@svengreb.de>
|
||||||
|
Sven Greb <development@svengreb.de> <development@arcticicestudio.com>
|
25
dot_tmux/plugins/nord-tmux/dot_npmrc
Normal file
25
dot_tmux/plugins/nord-tmux/dot_npmrc
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
# Configurations for npm.
|
||||||
|
# See https://docs.npmjs.com/cli/v7/configuring-npm/npmrc for more details.
|
||||||
|
|
||||||
|
# Disable the vulnerability auditing and checks which includes often way too many false-positives, insignificant
|
||||||
|
# problems that are only for local development, and many other warnings that are overhelming.
|
||||||
|
# Use dedicated vulnerability tools instead to filter and identify issue that really impact the project.
|
||||||
|
# References:
|
||||||
|
# 1. https://docs.npmjs.com/cli/v9/commands/npm-audit
|
||||||
|
audit=false
|
||||||
|
|
||||||
|
# Only use a lockfile for single-consumer projects, like applications, but not for multi-consumer projects like
|
||||||
|
# libraries.
|
||||||
|
# It helps to pin dependency versions, improves the security through integrity checksums, prevents possible errors
|
||||||
|
# caused by updated transitive dependencies and allows to get deterministic build results, but it can hide problems in
|
||||||
|
# multi-consumer projects when any later versions of a used dependency, or its transitive dependencies, is not
|
||||||
|
# compatible with the own project anymore.
|
||||||
|
package-lock=true
|
||||||
|
|
||||||
|
# Do not resolve to the latest minor and patch updates.
|
||||||
|
# Automatically pin dependencies to exact versions instead of resolving to latest minor and patch updates.
|
||||||
|
# This prevents possible errors caused by updated transitive dependencies.
|
||||||
|
save-exact=true
|
8
dot_tmux/plugins/nord-tmux/dot_prettierignore
Normal file
8
dot_tmux/plugins/nord-tmux/dot_prettierignore
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
# Path match pattern to ignore (i.e. not reformat) certain files and folders.
|
||||||
|
# See https://prettier.io/docs/en/ignore for more details.
|
||||||
|
|
||||||
|
.husky/_/
|
||||||
|
node_modules/
|
8
dot_tmux/plugins/nord-tmux/dot_remarkignore
Normal file
8
dot_tmux/plugins/nord-tmux/dot_remarkignore
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
# Path match pattern to ignore when searching for files.
|
||||||
|
# See https://github.com/unifiedjs/unified-engine/blob/HEAD/doc/ignore.md for more details.
|
||||||
|
|
||||||
|
node_modules/
|
||||||
|
license
|
13
dot_tmux/plugins/nord-tmux/dot_remarkrc.mjs
Normal file
13
dot_tmux/plugins/nord-tmux/dot_remarkrc.mjs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
* This source code is licensed under the MIT license found in the license file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configurations for remark-lint.
|
||||||
|
* @see https://github.com/remarkjs/remark-lint
|
||||||
|
* @see https://remark.js.org
|
||||||
|
*/
|
||||||
|
export default {
|
||||||
|
plugins: ["@svengreb/remark-preset-lint"],
|
||||||
|
};
|
53
dot_tmux/plugins/nord-tmux/executable_nord.tmux
Normal file
53
dot_tmux/plugins/nord-tmux/executable_nord.tmux
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
NORD_TMUX_COLOR_THEME_FILE=src/nord.conf
|
||||||
|
NORD_TMUX_VERSION=0.3.0
|
||||||
|
NORD_TMUX_STATUS_CONTENT_FILE="src/nord-status-content.conf"
|
||||||
|
NORD_TMUX_STATUS_CONTENT_NO_PATCHED_FONT_FILE="src/nord-status-content-no-patched-font.conf"
|
||||||
|
NORD_TMUX_STATUS_CONTENT_OPTION="@nord_tmux_show_status_content"
|
||||||
|
NORD_TMUX_STATUS_CONTENT_DATE_FORMAT="@nord_tmux_date_format"
|
||||||
|
NORD_TMUX_NO_PATCHED_FONT_OPTION="@nord_tmux_no_patched_font"
|
||||||
|
_current_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
|
__cleanup() {
|
||||||
|
unset -v NORD_TMUX_COLOR_THEME_FILE NORD_TMUX_VERSION
|
||||||
|
unset -v NORD_TMUX_STATUS_CONTENT_FILE NORD_TMUX_STATUS_CONTENT_NO_PATCHED_FONT_FILE
|
||||||
|
unset -v NORD_TMUX_STATUS_CONTENT_OPTION NORD_TMUX_NO_PATCHED_FONT_OPTION
|
||||||
|
unset -v NORD_TMUX_STATUS_CONTENT_DATE_FORMAT
|
||||||
|
unset -v _current_dir
|
||||||
|
unset -f __load __cleanup
|
||||||
|
tmux set-environment -gu NORD_TMUX_STATUS_TIME_FORMAT
|
||||||
|
tmux set-environment -gu NORD_TMUX_STATUS_DATE_FORMAT
|
||||||
|
}
|
||||||
|
|
||||||
|
__load() {
|
||||||
|
tmux source-file "$_current_dir/$NORD_TMUX_COLOR_THEME_FILE"
|
||||||
|
|
||||||
|
local status_content=$(tmux show-option -gqv "$NORD_TMUX_STATUS_CONTENT_OPTION")
|
||||||
|
local no_patched_font=$(tmux show-option -gqv "$NORD_TMUX_NO_PATCHED_FONT_OPTION")
|
||||||
|
local date_format=$(tmux show-option -gqv "$NORD_TMUX_STATUS_CONTENT_DATE_FORMAT")
|
||||||
|
|
||||||
|
if [ "$(tmux show-option -gqv "clock-mode-style")" == '12' ]; then
|
||||||
|
tmux set-environment -g NORD_TMUX_STATUS_TIME_FORMAT "%I:%M %p"
|
||||||
|
else
|
||||||
|
tmux set-environment -g NORD_TMUX_STATUS_TIME_FORMAT "%H:%M"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$date_format" ]; then
|
||||||
|
tmux set-environment -g NORD_TMUX_STATUS_DATE_FORMAT "%Y-%m-%d"
|
||||||
|
else
|
||||||
|
tmux set-environment -g NORD_TMUX_STATUS_DATE_FORMAT "$date_format"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$status_content" != "0" ]; then
|
||||||
|
if [ "$no_patched_font" != "1" ]; then
|
||||||
|
tmux source-file "$_current_dir/$NORD_TMUX_STATUS_CONTENT_FILE"
|
||||||
|
else
|
||||||
|
tmux source-file "$_current_dir/$NORD_TMUX_STATUS_CONTENT_NO_PATCHED_FONT_FILE"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
__load
|
||||||
|
__cleanup
|
21
dot_tmux/plugins/nord-tmux/license
Normal file
21
dot_tmux/plugins/nord-tmux/license
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016-present Sven Greb <development@svengreb.de> (https://www.svengreb.de)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
15
dot_tmux/plugins/nord-tmux/lint-staged.config.js
Normal file
15
dot_tmux/plugins/nord-tmux/lint-staged.config.js
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
* This source code is licensed under the MIT license found in the license file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configurations for lint-staged.
|
||||||
|
* @see https://github.com/okonet/lint-staged#configuration
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
"*.{json,tmux}": "prettier --check --ignore-unknown --no-editorconfig",
|
||||||
|
"*.{js,mjs}": ["eslint", "prettier --check --ignore-unknown --no-editorconfig"],
|
||||||
|
"*.md": ["remark --no-stdout", "prettier --check --ignore-unknown --no-editorconfig"],
|
||||||
|
".husky/pre-*": "prettier --check --ignore-unknown --no-editorconfig",
|
||||||
|
};
|
7354
dot_tmux/plugins/nord-tmux/package-lock.json
generated
Normal file
7354
dot_tmux/plugins/nord-tmux/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
51
dot_tmux/plugins/nord-tmux/package.json
Normal file
51
dot_tmux/plugins/nord-tmux/package.json
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
{
|
||||||
|
"name": "@nordtheme/tmux",
|
||||||
|
"version": "0.3.0",
|
||||||
|
"description": "An arctic, north-bluish clean and elegant tmux color theme",
|
||||||
|
"author": {
|
||||||
|
"name": "Sven Greb",
|
||||||
|
"email": "development@svengreb.de",
|
||||||
|
"url": "https://www.svengreb.de"
|
||||||
|
},
|
||||||
|
"homepage": "https://www.nordtheme.com/ports/tmux",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/nordtheme/tmux.git"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/nordtheme/tmux/issues"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"private": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=15.13",
|
||||||
|
"npm": ">=7.7"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"format": "run-s format:*",
|
||||||
|
"format:js": "eslint --fix .",
|
||||||
|
"format:pretty": "prettier --ignore-unknown --no-editorconfig --write \"**\"",
|
||||||
|
"lint": "run-s lint:js lint:md lint:pretty",
|
||||||
|
"lint:ci": "run-s --continue-on-error lint:js lint:md lint:ci:pretty",
|
||||||
|
"lint:ci:pretty": "prettier --check --ignore-unknown --loglevel silent --no-editorconfig --no-error-on-unmatched-pattern \"**\"",
|
||||||
|
"lint:js": "eslint .",
|
||||||
|
"lint:md": "remark --no-stdout . .github/",
|
||||||
|
"lint:pretty": "prettier --check --ignore-unknown --no-editorconfig \"**\"",
|
||||||
|
"prepare:husky": "husky install",
|
||||||
|
"prepare": "run-s prepare:*"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@svengreb/eslint-config-base": ">=0.12.0 <=1.0.0",
|
||||||
|
"@svengreb/remark-preset-lint": ">=0.5.0 <1.0.0",
|
||||||
|
"eslint": "8.39.0",
|
||||||
|
"eslint-config-prettier": "8.8.0",
|
||||||
|
"eslint-plugin-import": "2.27.5",
|
||||||
|
"eslint-plugin-prettier": "4.2.1",
|
||||||
|
"husky": "8.0.3",
|
||||||
|
"lint-staged": "13.2.2",
|
||||||
|
"npm-run-all": "4.1.5",
|
||||||
|
"prettier": "2.8.8",
|
||||||
|
"prettier-plugin-sh": "0.12.8",
|
||||||
|
"remark-cli": "11.0.0"
|
||||||
|
}
|
||||||
|
}
|
24
dot_tmux/plugins/nord-tmux/prettier.config.js
Normal file
24
dot_tmux/plugins/nord-tmux/prettier.config.js
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
* This source code is licensed under the MIT license found in the license file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configurations for Prettier.
|
||||||
|
* @see https://prettier.io/docs/en/configuration.html
|
||||||
|
* @see https://prettier.io/docs/en/options.html
|
||||||
|
* @see https://prettier.io/docs/en/options.html#parser
|
||||||
|
* @see https://prettier.io/docs/en/plugins.html
|
||||||
|
* @see https://github.com/un-ts/prettier/tree/master/packages/sh
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
printWidth: 160,
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
files: [".husky/*", "*.tmux"],
|
||||||
|
options: {
|
||||||
|
parser: "sh",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
169
dot_tmux/plugins/nord-tmux/readme.md
Normal file
169
dot_tmux/plugins/nord-tmux/readme.md
Normal file
|
@ -0,0 +1,169 @@
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://www.nordtheme.com/ports/tmux" target="_blank">
|
||||||
|
<picture>
|
||||||
|
<source srcset="https://raw.githubusercontent.com/nordtheme/web/main/assets/images/ports/tmux/repository-hero.svg?sanitize=true" width="100%" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" />
|
||||||
|
<img srcset="https://raw.githubusercontent.com/nordtheme/web/main/assets/images/ports/tmux/repository-hero.svg?sanitize=true" width="100%" />
|
||||||
|
</picture>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/nordtheme/tmux/releases/latest" target="_blank">
|
||||||
|
<img src="https://img.shields.io/github/release/nordtheme/tmux.svg?style=flat-square&label=Release&logo=github&logoColor=eceff4&colorA=4c566a&colorB=88c0d0"/>
|
||||||
|
</a>
|
||||||
|
<a href="https://www.nordtheme.com/docs/ports/tmux" target="_blank">
|
||||||
|
<img src="https://img.shields.io/github/release/nordtheme/tmux.svg?style=flat-square&label=Docs&colorA=4c566a&colorB=88c0d0&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI%2BCiAgICA8cGF0aCBmaWxsPSIjZDhkZWU5IiBkPSJNMTMuNzQ2IDIuODEzYS42Ny42NyAwIDAgMC0uNTU5LS4xMzNMOCAzLjg0OGwtNS4xODgtMS4xOGEuNjY5LjY2OSAwIDAgMC0uNTcuMTMzLjY3Ny42NzcgMCAwIDAtLjI0Mi41MzF2OC4xMzNjLS4wMDguMzIuMjEuNTk4LjUyLjY2OGw1LjMzMiAxLjE5OWguMjk2bDUuMzMyLTEuMmEuNjY4LjY2OCAwIDAgMCAuNTItLjY2N1YzLjMzMmEuNjU5LjY1OSAwIDAgMC0uMjU0LS41MnpNMy4zMzIgNC4xNjhsNCAuODk4djYuNzY2bC00LS44OTh6bTkuMzM2IDYuNzY2bC00IC44OThWNS4wNjZsNC0uODk4em0wIDAiLz4KPC9zdmc%2BCg%3D%3D"/>
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/nordtheme/tmux/blob/develop/changelog.md" target="_blank">
|
||||||
|
<img src="https://img.shields.io/github/release/nordtheme/tmux.svg?style=flat-square&label=Changelog&logo=github&logoColor=eceff4&colorA=4c566a&colorB=88c0d0"/>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/svengreb/styleguide-javascript/releases/latest" target="_blank">
|
||||||
|
<img src="https://img.shields.io/github/release/svengreb/styleguide-javascript.svg?style=flat-square&label=JavaScript%20Style%20Guide&logoColor=eceff4&colorA=4c566a&colorB=88c0d0&logo=javascript"/>
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/svengreb/styleguide-markdown/releases/latest" target="_blank">
|
||||||
|
<img src="https://img.shields.io/github/release/svengreb/styleguide-markdown.svg?style=flat-square&label=Markdown%20Style%20Guide&colorA=4c566a&colorB=88c0d0&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzOSIgaGVpZ2h0PSIzOSIgdmlld0JveD0iMCAwIDM5IDM5Ij48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNEOERFRTkiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNMS41IDEuNWgzNnYzNmgtMzZ6Ii8%2BPHBhdGggZmlsbD0iI0Q4REVFOSIgZD0iTTIwLjY4MyAyNS42NTVsNS44NzItMTMuNDhoLjU2Nmw1Ljg3MyAxMy40OGgtMS45OTZsLTQuMTU5LTEwLjA1Ni00LjE2MSAxMC4wNTZoLTEuOTk1em0tMi42OTYgMGwtMTMuNDgtNS44NzJ2LS41NjZsMTMuNDgtNS44NzJ2MS45OTVMNy45MzEgMTkuNWwxMC4wNTYgNC4xNnoiLz48L3N2Zz4%3D"/>
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/svengreb/styleguide-git/releases/latest" target="_blank">
|
||||||
|
<img src="https://img.shields.io/github/release/svengreb/styleguide-git.svg?style=flat-square&label=Git%20Style%20Guide&logoColor=eceff4&colorA=4c566a&colorB=88c0d0&logo=git"/>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/nordtheme/nord/releases/tag/v0.2.0" target="_blank">
|
||||||
|
<img src="https://img.shields.io/static/v1.svg?style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAACUklEQVRIibXUQUiTcRjH8e+zvaO0AgPd1mDmNvFVI+ng1UNU1wiDoEIIoUNUdOkQUkER1KWTnRJCLyZBIdEhQvAWQVp5KN9X3bskmHunYbeZbu/TaWXRdOLrc3ue5/f/f/6nP+xwycy8m6y0LGqg0N7UsLB+9jmdbQwZQaNawPBKpCstA3g/7fRCl5k68P7PLNjplRgBQtUAYjmuCriqDP690RqQK8A3WSt1mmZsqbyyM+4pVc5tcvdxYD+W46qVdif/l7Ac95bluGo57piqBqt58e+zaXfSclwNbBQyE+F7KKPAMTuzeGcrQLk2BEREV41dvYAD2jeddrt9BQA6DtYtC3QDKyIM2pmlVl+Bublc2ExGpgS9BuxTLT2byuX2+AYUJTAyPq6GmYwOIPoEOLy7IAO+AYgejTW5dwF2UbiM8kGVs9NO/qo/AGRV5Ybl5E4mEokVT0rdwHdBH9pOvmvbgCd6GlgDGZqddVPtydg8aC9gKDqybaA9EX2nyHWgrhTkxUQ2W9uajL4U0QdAbNsAQFsy3C8wBHTsXQk+BmhpitwE3vgCANSGVi8pfATO207uooh4hqc9vgHxeLzgeXIG+KFIv5Ve7GxujuZ9AwAONYfnVLUHCCHec9vO1vsKALSloq9A7gONhILDm/2yWwYAzETDbeC1wgk7k+/bKCuW4yqwDIxtGBSGzURktNzbdrZeQ8EJIA76CJXCP/kLCpEyUE2VVLWnLRV9Wh7MZPJHPNW3QE2lQ0YgSKpKgLWiV1zftyTCn758XUwZ4lUEdrx+ASW88rx2UJY8AAAAAElFTkSuQmCC&label=Nord&message=v0.2.0&colorA=4c566a&colorB=88c0d0"/>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">An arctic, north-bluish clean and elegant <a href="https://tmux.github.io" target="_blank">tmux</a> color theme.</p>
|
||||||
|
|
||||||
|
<p align="center">Designed for a fluent and clear workflow based on the <a href="https://www.nordtheme.com" target="_blank">Nord</a> color palette.</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://www.nordtheme.com/ports/tmux" target="_blank">
|
||||||
|
<img src="https://raw.githubusercontent.com/nordtheme/web/main/assets/images/ports/tmux/overview.png"/>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
Visit the [official website][nord-home] to learn all about the [fluidly merging appearance][nord-home#intro] features, details and elements of [UI elements][nord-home#ui-elements], the [various theme configurations][nord-home#configurations] and the [support for plugins][nord-home#plugin-support].
|
||||||
|
|
||||||
|
Learn about the [installation and activation][nord-docs-home-install], how to [configure][nord-docs-home-config] the theme and [supported plugins][nord-docs-home-plugins] from the [official documentations][nord-docs-home].
|
||||||
|
|
||||||
|
### Quick Start
|
||||||
|
|
||||||
|
Thanks to existing plugin managers for tmux, Nord tmux can be installed for all platforms in a uniform way within a few lines of codes. The recommended manager is [tpm][gh-tmux-plugins/tpm], but any other manager like [tundle][gh-javier-lopez/tundle] can also be used.
|
||||||
|
|
||||||
|
To automatically download and activate Nord tmux, follow the install instructions for [tpm][gh-tmux-plugins/tpm] and
|
||||||
|
|
||||||
|
1. add `set -g @plugin "nordtheme/tmux"` to your [`tmux.conf`][tmux-man-tmux.conf], by default `.tmux.conf` located in your [home directory][wiki-home_dir]
|
||||||
|
2. press the default key binding `prefix` + <kbd>I</kbd> to fetch- and install the plugin
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<picture>
|
||||||
|
<img src="https://raw.githubusercontent.com/nordtheme/web/main/assets/images/ports/tmux/installation-tpm.png" />
|
||||||
|
</picture>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
See the Nord tmux's documentation for [more installation options][nord-docs-home-install] and how to [set it up manually][nord-docs-home-install#manual].
|
||||||
|
Also see [_tpm's_ install instructions][gh-tpm-docs-install-plugins] for more details.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
<p><strong>Your terminal. Your style.</strong></p>
|
||||||
|
<p>The unified UI element design provides a clutter-free and fluidly merging appearance.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://www.nordtheme.com/ports/tmux#intro" target="_blank">
|
||||||
|
<img src="https://raw.githubusercontent.com/nordtheme/web/main/assets/images/ports/tmux/ui-fluid-appearance-vim.png" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://www.nordtheme.com/ports/tmux#introduction" target="_blank">
|
||||||
|
<img src="https://raw.githubusercontent.com/nordtheme/web/main/assets/images/ports/tmux/ui-fluid-appearance-gotop.png" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
<p><strong>Uniform design with beautiful UI elements.</strong></p>
|
||||||
|
<p>The themed UI elements provide a fluid and unobtrusive transition from the terminal to the tmux status bar.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://www.nordtheme.com/ports/tmux#ui-elements" target="_blank">
|
||||||
|
<img src="https://raw.githubusercontent.com/nordtheme/web/main/assets/images/ports/tmux/ui-clock.png" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div align="center"><p><strong>Take your favorite plugins with you.</strong></p><p>The theme supports popular plugins for a fluid and unobtrusive user interface transition.</p></div>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://www.nordtheme.com/ports/tmux#plugin-support" target="_blank">
|
||||||
|
<img src="https://raw.githubusercontent.com/nordtheme/web/main/assets/images/ports/tmux/plugins-tmux-prefix-highlight.png" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Nord is an open source project and we love to receive contributions from the [community][nord-comm]!
|
||||||
|
|
||||||
|
There are many ways to contribute, from [writing- and improving documentation and tutorials][nord-contrib-guide-docs], [reporting bugs][nord-contrib-guide-bugs], [submitting enhancement suggestions][nord-contrib-guide-enhance] that can be added to Nord by [submitting pull requests][nord-contrib-guide-pr].
|
||||||
|
|
||||||
|
Please take a moment to read Nord's full [contributing guide][nord-contrib-guide] to learn about the development process, the project's used [styleguides][nord-contrib-guide-styles], [branch organization][nord-contrib-guide-branching] and [versioning][nord-contrib-guide-versioning] model.
|
||||||
|
|
||||||
|
The guide also includes information about [minimal, complete, and verifiable examples][nord-contrib-guide-mcve] and other ways to contribute to the project like [improving existing issues][nord-contrib-guide-impr-issues] and [giving feedback on issues and pull requests][nord-contrib-guide-feedback].
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<picture>
|
||||||
|
<source srcset="https://raw.githubusercontent.com/nordtheme/assets/main/static/images/elements/separators/iceberg/footer/dark/spaced.svg" width="100%" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" />
|
||||||
|
<source srcset="https://raw.githubusercontent.com/nordtheme/assets/main/static/images/elements/separators/iceberg/footer/light/spaced.svg" width="100%" media="(prefers-color-scheme: dark)" />
|
||||||
|
<img src="https://raw.githubusercontent.com/nordtheme/assets/main/static/images/elements/separators/iceberg/footer/dark/spaced.svg" width="100%" />
|
||||||
|
</picture>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
Copyright © 2016-present <a href="https://www.svengreb.de" target="_blank">Sven Greb</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/nordtheme/tmux/blob/develop/license" target="_blank">
|
||||||
|
<img src="https://img.shields.io/static/v1.svg?style=flat-square&label=License&message=MIT&logoColor=eceff4&colorA=4c566a&colorB=88c0d0"/>
|
||||||
|
</a>
|
||||||
|
<a href="https://www.svengreb.de">
|
||||||
|
<img src="https://img.shields.io/static/v1.svg?style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAABMklEQVQ4jcWQvUoDQRRGz52s5IfVIiDWPkGKFFaCIVaGdIagjcFAwICFb7DvIK6QQlNpY2UQLMQVBbEQ0SewFkGbKCQmOzaTJay7/lR+zTAf9xwuF/47Mv45rdezqWEq72v/RWZnHgqOMwDwHMfSj085JSqb6Pu38we7r18E3nqzhmYbsE11rxKsAvhDfQiSM30XYbOw57YDwfnaRl6U3ABWaMNn806H+oGPzBX3d+4UgChZiYBHYBgGsBLoKoAyhR0x9G20Zmpc4P1ZoMQDcwMNclFrdhBKv6M5WWi7ZQGtjEUn35IV4OwnVjSX/WGmKqCDDUa5rmyle3bvGFiMg3WGUsF1u0EXHoqTRMGRgkAy2eugKZrqijRLYThWANBpNDL2h3UE0J0YLJdbrfe42f/NJ0wqY7/KcXKPAAAAAElFTkSuQmCC&label=lovely%20crafted%20in&message=Germany&colorA=4c566a&colorB=88c0d0"/>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
[gh-javier-lopez/tundle]: https://github.com/javier-lopez/tundle
|
||||||
|
[gh-tmux-plugins/tpm]: https://github.com/tmux-plugins/tpm
|
||||||
|
[gh-tpm-docs-install-plugins]: https://github.com/tmux-plugins/tpm#installing-plugins
|
||||||
|
[nord-comm]: https://www.nordtheme.com/community
|
||||||
|
[nord-contrib-guide-branching]: https://github.com/nordtheme/.github/blob/main/contributing.md#branch-organization
|
||||||
|
[nord-contrib-guide-bugs]: https://github.com/nordtheme/.github/blob/main/contributing.md#bug-reports
|
||||||
|
[nord-contrib-guide-docs]: https://github.com/nordtheme/.github/blob/main/contributing.md#documentations
|
||||||
|
[nord-contrib-guide-enhance]: https://github.com/nordtheme/.github/blob/main/contributing.md#enhancement-suggestions
|
||||||
|
[nord-contrib-guide-feedback]: https://github.com/nordtheme/.github/blob/main/contributing.md#feedback
|
||||||
|
[nord-contrib-guide-impr-issues]: https://github.com/nordtheme/.github/blob/main/contributing.md#improve-issues
|
||||||
|
[nord-contrib-guide-mcve]: https://github.com/nordtheme/.github/blob/main/contributing.md#mcve
|
||||||
|
[nord-contrib-guide-pr]: https://github.com/nordtheme/.github/blob/main/contributing.md#pull-requests
|
||||||
|
[nord-contrib-guide-styles]: https://github.com/nordtheme/.github/blob/main/contributing.md#style-guides
|
||||||
|
[nord-contrib-guide-versioning]: https://github.com/nordtheme/.github/blob/main/contributing.md#versioning
|
||||||
|
[nord-contrib-guide]: https://github.com/nordtheme/.github/blob/main/contributing.md
|
||||||
|
[nord-docs-home-config]: https://www.nordtheme.com/docs/ports/tmux/configuration
|
||||||
|
[nord-docs-home-install]: https://www.nordtheme.com/docs/ports/tmux/installation
|
||||||
|
[nord-docs-home-install#manual]: https://www.nordtheme.com/docs/ports/tmux/installation#manual
|
||||||
|
[nord-docs-home-plugins]: https://www.nordtheme.com/docs/ports/tmux/plugin-support
|
||||||
|
[nord-docs-home]: https://www.nordtheme.com/docs/ports/tmux
|
||||||
|
[nord-home]: https://www.nordtheme.com/ports/tmux
|
||||||
|
[nord-home#configurations]: https://www.nordtheme.com/ports/tmux#configurations
|
||||||
|
[nord-home#intro]: https://www.nordtheme.com/ports/tmux#intro
|
||||||
|
[nord-home#plugin-support]: https://www.nordtheme.com/ports/tmux#plugin-support
|
||||||
|
[nord-home#ui-elements]: https://www.nordtheme.com/ports/tmux#ui-elements
|
||||||
|
[tmux-man-tmux.conf]: http://man.openbsd.org/OpenBSD-current/man1/tmux.1#FILES
|
||||||
|
[wiki-home_dir]: https://en.wikipedia.org/wiki/Home_directory
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
#+----------------+
|
||||||
|
#+ Plugin Support +
|
||||||
|
#+----------------+
|
||||||
|
#+--- tmux-prefix-highlight ---+
|
||||||
|
set -g @prefix_highlight_copy_mode_attr "fg=black,bg=brightcyan"
|
||||||
|
|
||||||
|
#+--------+
|
||||||
|
#+ Status +
|
||||||
|
#+--------+
|
||||||
|
#+--- Bars ---+
|
||||||
|
set -g status-left "#[fg=black,bg=blue,bold] #S "
|
||||||
|
set -g status-right "#{prefix_highlight}#[fg=white,bg=brightblack] ${NORD_TMUX_STATUS_DATE_FORMAT} #[fg=white,bg=brightblack,nobold,noitalics,nounderscore]|#[fg=white,bg=brightblack] ${NORD_TMUX_STATUS_TIME_FORMAT} #[fg=cyan,bg=brightblack,nobold,noitalics,nounderscore] #[fg=black,bg=cyan,bold] #H "
|
||||||
|
|
||||||
|
#+--- Windows ---+
|
||||||
|
set -g window-status-format " #[fg=white,bg=brightblack]#I #[fg=white,bg=brightblack]#W #F"
|
||||||
|
set -g window-status-current-format " #[fg=black,bg=cyan]#I#[fg=black,bg=cyan,nobold,noitalics,nounderscore] #[fg=black,bg=cyan]#W #F"
|
||||||
|
set -g window-status-separator ""
|
22
dot_tmux/plugins/nord-tmux/src/nord-status-content.conf
Normal file
22
dot_tmux/plugins/nord-tmux/src/nord-status-content.conf
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
#+----------------+
|
||||||
|
#+ Plugin Support +
|
||||||
|
#+----------------+
|
||||||
|
#+--- tmux-prefix-highlight ---+
|
||||||
|
set -g @prefix_highlight_output_prefix "#[fg=brightcyan]#[bg=black]#[nobold]#[noitalics]#[nounderscore]#[bg=brightcyan]#[fg=black]"
|
||||||
|
set -g @prefix_highlight_output_suffix ""
|
||||||
|
set -g @prefix_highlight_copy_mode_attr "fg=brightcyan,bg=black,bold"
|
||||||
|
|
||||||
|
#+--------+
|
||||||
|
#+ Status +
|
||||||
|
#+--------+
|
||||||
|
#+--- Bars ---+
|
||||||
|
set -g status-left "#[fg=black,bg=blue,bold] #S #[fg=blue,bg=black,nobold,noitalics,nounderscore]"
|
||||||
|
set -g status-right "#{prefix_highlight}#[fg=brightblack,bg=black,nobold,noitalics,nounderscore]#[fg=white,bg=brightblack] ${NORD_TMUX_STATUS_DATE_FORMAT} #[fg=white,bg=brightblack,nobold,noitalics,nounderscore]#[fg=white,bg=brightblack] ${NORD_TMUX_STATUS_TIME_FORMAT} #[fg=cyan,bg=brightblack,nobold,noitalics,nounderscore]#[fg=black,bg=cyan,bold] #H "
|
||||||
|
|
||||||
|
#+--- Windows ---+
|
||||||
|
set -g window-status-format "#[fg=black,bg=brightblack,nobold,noitalics,nounderscore] #[fg=white,bg=brightblack]#I #[fg=white,bg=brightblack,nobold,noitalics,nounderscore] #[fg=white,bg=brightblack]#W #F #[fg=brightblack,bg=black,nobold,noitalics,nounderscore]"
|
||||||
|
set -g window-status-current-format "#[fg=black,bg=cyan,nobold,noitalics,nounderscore] #[fg=black,bg=cyan]#I #[fg=black,bg=cyan,nobold,noitalics,nounderscore] #[fg=black,bg=cyan]#W #F #[fg=cyan,bg=black,nobold,noitalics,nounderscore]"
|
||||||
|
set -g window-status-separator ""
|
43
dot_tmux/plugins/nord-tmux/src/nord.conf
Normal file
43
dot_tmux/plugins/nord-tmux/src/nord.conf
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# Copyright (c) 2016-present Sven Greb <development@svengreb.de>
|
||||||
|
# This source code is licensed under the MIT license found in the license file.
|
||||||
|
|
||||||
|
#+----------------+
|
||||||
|
#+ Plugin Support +
|
||||||
|
#+----------------+
|
||||||
|
#+--- tmux-prefix-highlight ---+
|
||||||
|
set -g @prefix_highlight_fg black
|
||||||
|
set -g @prefix_highlight_bg brightcyan
|
||||||
|
|
||||||
|
#+---------+
|
||||||
|
#+ Options +
|
||||||
|
#+---------+
|
||||||
|
set -g status-interval 1
|
||||||
|
set -g status on
|
||||||
|
|
||||||
|
#+--------+
|
||||||
|
#+ Status +
|
||||||
|
#+--------+
|
||||||
|
#+--- Layout ---+
|
||||||
|
set -g status-justify left
|
||||||
|
|
||||||
|
#+--- Colors ---+
|
||||||
|
set -g status-style bg=black,fg=white
|
||||||
|
|
||||||
|
#+-------+
|
||||||
|
#+ Panes +
|
||||||
|
#+-------+
|
||||||
|
set -g pane-border-style bg=default,fg=brightblack
|
||||||
|
set -g pane-active-border-style bg=default,fg=blue
|
||||||
|
set -g display-panes-colour black
|
||||||
|
set -g display-panes-active-colour brightblack
|
||||||
|
|
||||||
|
#+------------+
|
||||||
|
#+ Clock Mode +
|
||||||
|
#+------------+
|
||||||
|
setw -g clock-mode-colour cyan
|
||||||
|
|
||||||
|
#+----------+
|
||||||
|
#+ Messages +
|
||||||
|
#+---------+
|
||||||
|
set -g message-style bg=brightblack,fg=cyan
|
||||||
|
set -g message-command-style bg=brightblack,fg=cyan
|
88
dot_tmux/plugins/tmux-copycat/CHANGELOG.md
Normal file
88
dot_tmux/plugins/tmux-copycat/CHANGELOG.md
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
### master
|
||||||
|
|
||||||
|
### v3.0.0, Nov 01, 2017
|
||||||
|
- if installed use `gawk` instead of `awk` (@metcalfc)
|
||||||
|
- add stored search for matching git SHAs (@jbnicolai)
|
||||||
|
- move documentation from github wiki to `docs/` folder
|
||||||
|
- support for tmux 2.4+, not compatible with tmux 2.3 and earlier (@thalesmello)
|
||||||
|
|
||||||
|
### v2.1.0, Jan 01, 2015
|
||||||
|
- combine send-keys calls to reduce flickering (@toupeira)
|
||||||
|
- add `file:///` prefix for local file url's (@vellvisher)
|
||||||
|
- add `git://` type url
|
||||||
|
|
||||||
|
### v2.0.0, Oct 16, 2014
|
||||||
|
- add tmux options for default searches
|
||||||
|
- use `session_id` instead of `session_name` in the copycat file name (solution
|
||||||
|
provided by @toupeira)
|
||||||
|
- use `grep -E` and remove eval (@toupeira)
|
||||||
|
|
||||||
|
### v1.1.0, Sep 29, 2014
|
||||||
|
- add IP address search
|
||||||
|
- enhance url search with git and ftp urls
|
||||||
|
|
||||||
|
### v1.0.0, Aug 31, 2014
|
||||||
|
- simplify file search stored regex
|
||||||
|
- match files starting with dot
|
||||||
|
- improve README - add more relevant related plugins
|
||||||
|
- do not use `copycat_clear_search` method when in copycat mode. It was causing
|
||||||
|
mysterious issues for some users.
|
||||||
|
- update `README.md` - warning about a breaking mapping
|
||||||
|
- remove rails request stored search `C-r`
|
||||||
|
|
||||||
|
### v0.1.0, Aug 02, 2014
|
||||||
|
- remove note about git history issue
|
||||||
|
- url saved search includes `#` character
|
||||||
|
- improve stored search handling
|
||||||
|
- update README and document addding custom stored searches
|
||||||
|
|
||||||
|
### v0.0.7, Jul 31, 2014
|
||||||
|
- add customization section to the readme (@soli)
|
||||||
|
- remove screencast from the project. The video is too bit and plugin download
|
||||||
|
is slow because of that. The video is moved to the separate `screencast`
|
||||||
|
branch.
|
||||||
|
- run test suite on 2 vagrant VMs: ubuntu and centos
|
||||||
|
|
||||||
|
### v0.0.6, Jul 28, 2014
|
||||||
|
- update video script
|
||||||
|
- update readme and invite for code contributions
|
||||||
|
- update dockerfile with it's purpose
|
||||||
|
- add test suite `README` file
|
||||||
|
- add screencast original document to git
|
||||||
|
- add video directory `README` file
|
||||||
|
- update readme to reflect github organization change
|
||||||
|
- add a screencast link to the readme
|
||||||
|
|
||||||
|
### v0.0.5, Jul 24, 2014
|
||||||
|
- improve stored file matching search
|
||||||
|
- fix wrong result highlighting for lines that have \r, \n chars
|
||||||
|
- another improvement to file matching search: changed regex strategy to be
|
||||||
|
"inclusive"
|
||||||
|
- add test suite
|
||||||
|
- update readme to show how test suite is started
|
||||||
|
|
||||||
|
### v0.0.4, Jul 9, 2014
|
||||||
|
- bugfix for incorrect result highlighting
|
||||||
|
- optimize and improve the function that centers the result vertically on the
|
||||||
|
screen
|
||||||
|
- fix OS X awk bug: awk variable content can't start with `=` char
|
||||||
|
- fix a bug with wrong result highlighting caused by using `printf`
|
||||||
|
- fix a bug with wrong result highlighting caused by a bug in OSX `grep`
|
||||||
|
- improve URL matching regex. Matches don't include quotes anymore.
|
||||||
|
|
||||||
|
### v0.0.3, Jun 29, 2014
|
||||||
|
- add notifications about the first and last match
|
||||||
|
- improve "jump correction" handling by fetching the precise window height
|
||||||
|
- improve result vertical centering & fix a related bug
|
||||||
|
|
||||||
|
### v0.0.2, Jun 26, 2014
|
||||||
|
- search results are always at the bottom of the page. If possible center the
|
||||||
|
result, or provide maximum possible padding.
|
||||||
|
- refactoring in `copycat_jump.sh` - extract 2 constants to file global variables
|
||||||
|
- improve file matching regex. `master...origin/master` is not detected as a
|
||||||
|
string.
|
||||||
|
|
||||||
|
### v0.0.1, Jun 25, 2014
|
||||||
|
- first version, plugin working
|
19
dot_tmux/plugins/tmux-copycat/LICENSE.md
Normal file
19
dot_tmux/plugins/tmux-copycat/LICENSE.md
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright (C) 2014 Bruno Sutic
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
||||||
|
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
146
dot_tmux/plugins/tmux-copycat/README.md
Normal file
146
dot_tmux/plugins/tmux-copycat/README.md
Normal file
|
@ -0,0 +1,146 @@
|
||||||
|
# Tmux copycat
|
||||||
|
|
||||||
|
[![Build Status](https://travis-ci.org/tmux-plugins/tmux-copycat.svg?branch=master)](https://travis-ci.org/tmux-plugins/tmux-copycat)
|
||||||
|
|
||||||
|
**NOTE: [tmux 3.1 adds support for native regex searches](https://raw.githubusercontent.com/tmux/tmux/3.1/CHANGES).
|
||||||
|
This is great news because it means a big part of 'tmux-copycat' is now
|
||||||
|
available natively! Use this plugin only if you need its other features.**
|
||||||
|
|
||||||
|
This plugin enables:
|
||||||
|
|
||||||
|
- regex searches (native support added in tmux 3.1)
|
||||||
|
- search result highlighting
|
||||||
|
- predefined searches
|
||||||
|
|
||||||
|
Predefined searches are plugin killer feature. It speeds the workflow and
|
||||||
|
reduces mouse usage with Tmux.
|
||||||
|
|
||||||
|
It works even better when paired with
|
||||||
|
[tmux yank](https://github.com/tmux-plugins/tmux-yank). Tested and working on
|
||||||
|
Linux, OSX and Cygwin.
|
||||||
|
|
||||||
|
### Screencast
|
||||||
|
|
||||||
|
[![screencast screenshot](/video/screencast_img.png)](https://vimeo.com/101867689)
|
||||||
|
|
||||||
|
#### Search
|
||||||
|
|
||||||
|
- `prefix + /` - regex search (strings work too)
|
||||||
|
|
||||||
|
Example search entries:
|
||||||
|
|
||||||
|
- `foo` - searches for string `foo`
|
||||||
|
- `[0-9]+` - regex search for numbers
|
||||||
|
|
||||||
|
Grep is used for searching.<br/>
|
||||||
|
Searches are case insensitive.<br/>
|
||||||
|
|
||||||
|
#### Predefined searches
|
||||||
|
|
||||||
|
- `prefix + ctrl-f` - simple *f*ile search
|
||||||
|
- `prefix + ctrl-g` - jumping over *g*it status files (best used after `git status` command)
|
||||||
|
- `prefix + alt-h` - jumping over SHA-1/SHA-256 hashes (best used after `git log` command)
|
||||||
|
- `prefix + ctrl-u` - *u*rl search (http, ftp and git urls)
|
||||||
|
- `prefix + ctrl-d` - number search (mnemonic d, as digit)
|
||||||
|
- `prefix + alt-i` - *i*p address search
|
||||||
|
|
||||||
|
These start "copycat mode" and jump to first match.
|
||||||
|
|
||||||
|
#### "Copycat mode" bindings
|
||||||
|
|
||||||
|
These are enabled when you search with copycat:
|
||||||
|
|
||||||
|
- `n` - jumps to the next match
|
||||||
|
- `N` - jumps to the previous match
|
||||||
|
|
||||||
|
To copy a highlighted match:
|
||||||
|
|
||||||
|
- `Enter` - if you're using Tmux `vi` mode
|
||||||
|
- `ctrl-w` or `alt-w` - if you're using Tmux `emacs` mode
|
||||||
|
|
||||||
|
Copying a highlighted match will take you "out" of copycat mode. Paste with
|
||||||
|
`prefix + ]` (this is Tmux default paste).
|
||||||
|
|
||||||
|
Copying highlighted matches can be enhanced with
|
||||||
|
[tmux yank](https://github.com/tmux-plugins/tmux-yank).
|
||||||
|
|
||||||
|
### Installation with [Tmux Plugin Manager](https://github.com/tmux-plugins/tpm) (recommended)
|
||||||
|
|
||||||
|
Add plugin to the list of TPM plugins in `.tmux.conf`:
|
||||||
|
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-copycat'
|
||||||
|
|
||||||
|
Hit `prefix + I` to fetch the plugin and source it. You should now be able to
|
||||||
|
use the plugin.
|
||||||
|
|
||||||
|
Optional (but recommended) install `gawk` via your package manager of choice
|
||||||
|
for better UTF-8 character support.
|
||||||
|
|
||||||
|
### Manual Installation
|
||||||
|
|
||||||
|
Clone the repo:
|
||||||
|
|
||||||
|
$ git clone https://github.com/tmux-plugins/tmux-copycat ~/clone/path
|
||||||
|
|
||||||
|
Add this line to the bottom of `.tmux.conf`:
|
||||||
|
|
||||||
|
run-shell ~/clone/path/copycat.tmux
|
||||||
|
|
||||||
|
Reload TMUX environment with: `$ tmux source-file ~/.tmux.conf`. You should now
|
||||||
|
be able to use the plugin.
|
||||||
|
|
||||||
|
Optional (but recommended) install `gawk` via your package manager of choice
|
||||||
|
for better UTF-8 character support.
|
||||||
|
|
||||||
|
### Installation for Tmux 2.3 and earlier
|
||||||
|
|
||||||
|
Due to the changes in tmux, the latest version of this plugin doesn't support
|
||||||
|
tmux 2.3 and earlier. It is recommended you upgrade to tmux version 2.4 or
|
||||||
|
later. If you must continue using older version, please follow
|
||||||
|
[these steps for installation](docs/installation_for_tmux_2.3.md).
|
||||||
|
|
||||||
|
### Limitations
|
||||||
|
|
||||||
|
This plugin has some known limitations. Please read about it
|
||||||
|
[here](docs/limitations.md).
|
||||||
|
|
||||||
|
### Docs
|
||||||
|
|
||||||
|
- Most of the behavior of tmux-copycat can be customized via tmux options.
|
||||||
|
[Check out the full options list](docs/customizations.md).
|
||||||
|
- To speed up the workflow you can define new bindings in `.tmux.conf` for
|
||||||
|
searches you use often, more info [here](docs/defining_new_stored_searches.md)
|
||||||
|
|
||||||
|
### Other goodies
|
||||||
|
|
||||||
|
`tmux-copycat` works great with:
|
||||||
|
|
||||||
|
- [tmux-yank](https://github.com/tmux-plugins/tmux-yank) - enables copying
|
||||||
|
highlighted text to system clipboard
|
||||||
|
- [tmux-open](https://github.com/tmux-plugins/tmux-open) - a plugin for quickly
|
||||||
|
opening a highlighted file or a url
|
||||||
|
- [tmux-continuum](https://github.com/tmux-plugins/tmux-continuum) - automatic
|
||||||
|
restoring and continuous saving of tmux env
|
||||||
|
|
||||||
|
### Test suite
|
||||||
|
|
||||||
|
This plugin has a pretty extensive integration test suite that runs on
|
||||||
|
[travis](https://travis-ci.org/tmux-plugins/tmux-copycat).
|
||||||
|
|
||||||
|
When run locally, it depends on `vagrant`. Run it with:
|
||||||
|
|
||||||
|
# within project top directory
|
||||||
|
$ ./run-tests
|
||||||
|
|
||||||
|
### Contributions and new features
|
||||||
|
|
||||||
|
Bug fixes and contributions are welcome.
|
||||||
|
|
||||||
|
Feel free to suggest new features, via github issues.
|
||||||
|
|
||||||
|
If you have a bigger idea you'd like to work on, please get in touch, also via
|
||||||
|
github issues.
|
||||||
|
|
||||||
|
### License
|
||||||
|
|
||||||
|
[MIT](LICENSE.md)
|
8
dot_tmux/plugins/tmux-copycat/Vagrantfile
vendored
Normal file
8
dot_tmux/plugins/tmux-copycat/Vagrantfile
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
VAGRANTFILE_API_VERSION = '2'
|
||||||
|
|
||||||
|
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||||
|
config.vm.define :ubuntu_two_five do |ubuntu|
|
||||||
|
ubuntu.vm.box = 'hashicorp/precise32'
|
||||||
|
ubuntu.vm.provision 'shell', path: 'vagrant_ubuntu_provisioning_two_five.sh'
|
||||||
|
end
|
||||||
|
end
|
26
dot_tmux/plugins/tmux-copycat/docs/customizations.md
Normal file
26
dot_tmux/plugins/tmux-copycat/docs/customizations.md
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# Customizations
|
||||||
|
|
||||||
|
Most of the behavior of tmux-copycat can be customized via tmux options.<br/>
|
||||||
|
To set a value, just put `set -g @option 'value'` in your `.tmux.conf` before
|
||||||
|
loading the tmux-copycat plugin.
|
||||||
|
|
||||||
|
Other options:
|
||||||
|
|
||||||
|
- `@copycat_search` (default `/`) defines the key-binding used (after prefix) to
|
||||||
|
start an interactive search.
|
||||||
|
- `@copycat_next` (default `n`) defines the key (without prefix) used to jump to
|
||||||
|
next search result.
|
||||||
|
- `@copycat_prev` (default `N`) defines the key (without prefix) used to jump to
|
||||||
|
previous search result.
|
||||||
|
|
||||||
|
Options for predefined searches:
|
||||||
|
|
||||||
|
- `@copycat_git_special` (default `C-g`) git status search
|
||||||
|
- `@copycat_file_search` (default `C-f`) file search
|
||||||
|
- `@copycat_url_search` (default `C-u`) url search
|
||||||
|
- `@copycat_digit_search` (default `C-d`) digit search
|
||||||
|
- `@copycat_hash_search` (default `M-h`) SHA-1 hash search
|
||||||
|
- `@copycat_ip_search` (default `M-i`) IP address search
|
||||||
|
|
||||||
|
Example: to remap default file search to use `C-t` put
|
||||||
|
`set -g @copycat_file_search 'C-t'` in `.tmux.conf`.
|
|
@ -0,0 +1,40 @@
|
||||||
|
# Defining new stored searches
|
||||||
|
|
||||||
|
To speed up the workflow you can define new bindings in `.tmux.conf` for
|
||||||
|
searches you use often.
|
||||||
|
|
||||||
|
After adding any of the below snippets, make sure to reload your tmux
|
||||||
|
configuration:
|
||||||
|
|
||||||
|
# type this in the terminal
|
||||||
|
$ tmux source-file ~/.tmux.conf
|
||||||
|
|
||||||
|
Dummy examples (just for testing):
|
||||||
|
|
||||||
|
* `prefix + ctrl-t` example string search
|
||||||
|
|
||||||
|
set -g @copycat_search_C-t 'search me'
|
||||||
|
|
||||||
|
* `prefix + alt-t` example regex search
|
||||||
|
|
||||||
|
set -g @copycat_search_M-t 'regex search[[:alnum:]]\*'
|
||||||
|
|
||||||
|
### Useful searches
|
||||||
|
|
||||||
|
* `prefix + ctrl-e` in the Rails log output searches for previous request start
|
||||||
|
|
||||||
|
set -g @copycat_search_C-e '^Processing[[:space:]]by[[:space:]][^[:space:]]*'
|
||||||
|
|
||||||
|
* `prefix + D` searches for numbers at the *beginning* of line.<br/>
|
||||||
|
Useful with `$ pgrep -lf process` command to quickly select process PID.
|
||||||
|
|
||||||
|
set -g @copycat_search_D '^[[:digit:]]+'
|
||||||
|
|
||||||
|
* `prefix + G` searches for git commit SHA1.<br/>
|
||||||
|
Works for both the short (5 chars) and full (40 chars) versions.
|
||||||
|
|
||||||
|
set -g @copycat_search_G '\b[0-9a-f]{5,40}\b'
|
||||||
|
|
||||||
|
|
||||||
|
Have your own custom search? Please share it in
|
||||||
|
[the discussion](https://github.com/tmux-plugins/tmux-copycat/issues/57).
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Installation for Tmux 2.3 and earlier
|
||||||
|
|
||||||
|
The installation steps for Tmux 2.3 are based on
|
||||||
|
[manual installation](https://github.com/tmux-plugins/tmux-copycat#manual-installation)
|
||||||
|
steps, with the addition of using `tmux-23` branch.
|
||||||
|
|
||||||
|
Create tmux plugins dir:
|
||||||
|
|
||||||
|
$ mkdir -p ~/.tmux/plugins
|
||||||
|
|
||||||
|
Clone the repo:
|
||||||
|
|
||||||
|
$ git clone -b tmux-23 https://github.com/tmux-plugins/tmux-copycat ~/.tmux/plugins/tmux-copycat
|
||||||
|
|
||||||
|
Add this line to the bottom of `.tmux.conf`:
|
||||||
|
|
||||||
|
run-shell ~/clone/path/copycat.tmux
|
||||||
|
|
||||||
|
Reload TMUX environment with: `$ tmux source-file ~/.tmux.conf`. You should now
|
||||||
|
be able to use the plugin.
|
24
dot_tmux/plugins/tmux-copycat/docs/limitations.md
Normal file
24
dot_tmux/plugins/tmux-copycat/docs/limitations.md
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# Limitations
|
||||||
|
|
||||||
|
- This plugin tries hard to consistently enable "marketed" features. It uses some
|
||||||
|
hacks to go beyond the APIs Tmux provides. Because of this, it might have some
|
||||||
|
"rough edges" and there's nothing that can be done.
|
||||||
|
|
||||||
|
Examples: non-perfect file and url matching and selection. That said, usage
|
||||||
|
should be fine in +90% cases.
|
||||||
|
|
||||||
|
- feel free to report search cases you think should work, but are not
|
||||||
|
(provide examples pls!). I'm open to the idea of adding more saved searches.
|
||||||
|
|
||||||
|
- Tmux `vi` copy mode works faster than `emacs`. If you don't have a preference
|
||||||
|
yet and to speed up `tmux_copycat`, I recommend putting this in `.tmux.conf`
|
||||||
|
to set Tmux copy mode to `vi`:
|
||||||
|
|
||||||
|
set -g mode-keys vi
|
||||||
|
|
||||||
|
- remapping `Escape` key in copy mode will break the plugin. If you have this
|
||||||
|
in your `.tmux.conf`, please consider removing it:
|
||||||
|
|
||||||
|
bind -t vi-copy Escape cancel
|
||||||
|
|
||||||
|
After removing this key binding, don't forget to restart tmux server!
|
1
dot_tmux/plugins/tmux-copycat/dot_git/HEAD
Normal file
1
dot_tmux/plugins/tmux-copycat/dot_git/HEAD
Normal file
|
@ -0,0 +1 @@
|
||||||
|
ref: refs/heads/master
|
0
dot_tmux/plugins/tmux-copycat/dot_git/branches/.keep
Normal file
0
dot_tmux/plugins/tmux-copycat/dot_git/branches/.keep
Normal file
13
dot_tmux/plugins/tmux-copycat/dot_git/config
Normal file
13
dot_tmux/plugins/tmux-copycat/dot_git/config
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
[core]
|
||||||
|
repositoryformatversion = 0
|
||||||
|
filemode = true
|
||||||
|
bare = false
|
||||||
|
logallrefupdates = true
|
||||||
|
[submodule]
|
||||||
|
active = .
|
||||||
|
[remote "origin"]
|
||||||
|
url = https://git::@github.com/tmux-plugins/tmux-copycat
|
||||||
|
fetch = +refs/heads/master:refs/remotes/origin/master
|
||||||
|
[branch "master"]
|
||||||
|
remote = origin
|
||||||
|
merge = refs/heads/master
|
1
dot_tmux/plugins/tmux-copycat/dot_git/description
Normal file
1
dot_tmux/plugins/tmux-copycat/dot_git/description
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Unnamed repository; edit this file 'description' to name the repository.
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to check the commit log message taken by
|
||||||
|
# applypatch from an e-mail message.
|
||||||
|
#
|
||||||
|
# The hook should exit with non-zero status after issuing an
|
||||||
|
# appropriate message if it wants to stop the commit. The hook is
|
||||||
|
# allowed to edit the commit message file.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "applypatch-msg".
|
||||||
|
|
||||||
|
. git-sh-setup
|
||||||
|
commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
|
||||||
|
test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
|
||||||
|
:
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to check the commit log message.
|
||||||
|
# Called by "git commit" with one argument, the name of the file
|
||||||
|
# that has the commit message. The hook should exit with non-zero
|
||||||
|
# status after issuing an appropriate message if it wants to stop the
|
||||||
|
# commit. The hook is allowed to edit the commit message file.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "commit-msg".
|
||||||
|
|
||||||
|
# Uncomment the below to add a Signed-off-by line to the message.
|
||||||
|
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
|
||||||
|
# hook is more suited to it.
|
||||||
|
#
|
||||||
|
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||||
|
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
||||||
|
|
||||||
|
# This example catches duplicate Signed-off-by lines.
|
||||||
|
|
||||||
|
test "" = "$(grep '^Signed-off-by: ' "$1" |
|
||||||
|
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
|
||||||
|
echo >&2 Duplicate Signed-off-by lines.
|
||||||
|
exit 1
|
||||||
|
}
|
|
@ -0,0 +1,174 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use IPC::Open2;
|
||||||
|
|
||||||
|
# An example hook script to integrate Watchman
|
||||||
|
# (https://facebook.github.io/watchman/) with git to speed up detecting
|
||||||
|
# new and modified files.
|
||||||
|
#
|
||||||
|
# The hook is passed a version (currently 2) and last update token
|
||||||
|
# formatted as a string and outputs to stdout a new update token and
|
||||||
|
# all files that have been modified since the update token. Paths must
|
||||||
|
# be relative to the root of the working tree and separated by a single NUL.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "query-watchman" and set
|
||||||
|
# 'git config core.fsmonitor .git/hooks/query-watchman'
|
||||||
|
#
|
||||||
|
my ($version, $last_update_token) = @ARGV;
|
||||||
|
|
||||||
|
# Uncomment for debugging
|
||||||
|
# print STDERR "$0 $version $last_update_token\n";
|
||||||
|
|
||||||
|
# Check the hook interface version
|
||||||
|
if ($version ne 2) {
|
||||||
|
die "Unsupported query-fsmonitor hook version '$version'.\n" .
|
||||||
|
"Falling back to scanning...\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
my $git_work_tree = get_working_dir();
|
||||||
|
|
||||||
|
my $retry = 1;
|
||||||
|
|
||||||
|
my $json_pkg;
|
||||||
|
eval {
|
||||||
|
require JSON::XS;
|
||||||
|
$json_pkg = "JSON::XS";
|
||||||
|
1;
|
||||||
|
} or do {
|
||||||
|
require JSON::PP;
|
||||||
|
$json_pkg = "JSON::PP";
|
||||||
|
};
|
||||||
|
|
||||||
|
launch_watchman();
|
||||||
|
|
||||||
|
sub launch_watchman {
|
||||||
|
my $o = watchman_query();
|
||||||
|
if (is_work_tree_watched($o)) {
|
||||||
|
output_result($o->{clock}, @{$o->{files}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub output_result {
|
||||||
|
my ($clockid, @files) = @_;
|
||||||
|
|
||||||
|
# Uncomment for debugging watchman output
|
||||||
|
# open (my $fh, ">", ".git/watchman-output.out");
|
||||||
|
# binmode $fh, ":utf8";
|
||||||
|
# print $fh "$clockid\n@files\n";
|
||||||
|
# close $fh;
|
||||||
|
|
||||||
|
binmode STDOUT, ":utf8";
|
||||||
|
print $clockid;
|
||||||
|
print "\0";
|
||||||
|
local $, = "\0";
|
||||||
|
print @files;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub watchman_clock {
|
||||||
|
my $response = qx/watchman clock "$git_work_tree"/;
|
||||||
|
die "Failed to get clock id on '$git_work_tree'.\n" .
|
||||||
|
"Falling back to scanning...\n" if $? != 0;
|
||||||
|
|
||||||
|
return $json_pkg->new->utf8->decode($response);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub watchman_query {
|
||||||
|
my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty')
|
||||||
|
or die "open2() failed: $!\n" .
|
||||||
|
"Falling back to scanning...\n";
|
||||||
|
|
||||||
|
# In the query expression below we're asking for names of files that
|
||||||
|
# changed since $last_update_token but not from the .git folder.
|
||||||
|
#
|
||||||
|
# To accomplish this, we're using the "since" generator to use the
|
||||||
|
# recency index to select candidate nodes and "fields" to limit the
|
||||||
|
# output to file names only. Then we're using the "expression" term to
|
||||||
|
# further constrain the results.
|
||||||
|
my $last_update_line = "";
|
||||||
|
if (substr($last_update_token, 0, 1) eq "c") {
|
||||||
|
$last_update_token = "\"$last_update_token\"";
|
||||||
|
$last_update_line = qq[\n"since": $last_update_token,];
|
||||||
|
}
|
||||||
|
my $query = <<" END";
|
||||||
|
["query", "$git_work_tree", {$last_update_line
|
||||||
|
"fields": ["name"],
|
||||||
|
"expression": ["not", ["dirname", ".git"]]
|
||||||
|
}]
|
||||||
|
END
|
||||||
|
|
||||||
|
# Uncomment for debugging the watchman query
|
||||||
|
# open (my $fh, ">", ".git/watchman-query.json");
|
||||||
|
# print $fh $query;
|
||||||
|
# close $fh;
|
||||||
|
|
||||||
|
print CHLD_IN $query;
|
||||||
|
close CHLD_IN;
|
||||||
|
my $response = do {local $/; <CHLD_OUT>};
|
||||||
|
|
||||||
|
# Uncomment for debugging the watch response
|
||||||
|
# open ($fh, ">", ".git/watchman-response.json");
|
||||||
|
# print $fh $response;
|
||||||
|
# close $fh;
|
||||||
|
|
||||||
|
die "Watchman: command returned no output.\n" .
|
||||||
|
"Falling back to scanning...\n" if $response eq "";
|
||||||
|
die "Watchman: command returned invalid output: $response\n" .
|
||||||
|
"Falling back to scanning...\n" unless $response =~ /^\{/;
|
||||||
|
|
||||||
|
return $json_pkg->new->utf8->decode($response);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub is_work_tree_watched {
|
||||||
|
my ($output) = @_;
|
||||||
|
my $error = $output->{error};
|
||||||
|
if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) {
|
||||||
|
$retry--;
|
||||||
|
my $response = qx/watchman watch "$git_work_tree"/;
|
||||||
|
die "Failed to make watchman watch '$git_work_tree'.\n" .
|
||||||
|
"Falling back to scanning...\n" if $? != 0;
|
||||||
|
$output = $json_pkg->new->utf8->decode($response);
|
||||||
|
$error = $output->{error};
|
||||||
|
die "Watchman: $error.\n" .
|
||||||
|
"Falling back to scanning...\n" if $error;
|
||||||
|
|
||||||
|
# Uncomment for debugging watchman output
|
||||||
|
# open (my $fh, ">", ".git/watchman-output.out");
|
||||||
|
# close $fh;
|
||||||
|
|
||||||
|
# Watchman will always return all files on the first query so
|
||||||
|
# return the fast "everything is dirty" flag to git and do the
|
||||||
|
# Watchman query just to get it over with now so we won't pay
|
||||||
|
# the cost in git to look up each individual file.
|
||||||
|
my $o = watchman_clock();
|
||||||
|
$error = $output->{error};
|
||||||
|
|
||||||
|
die "Watchman: $error.\n" .
|
||||||
|
"Falling back to scanning...\n" if $error;
|
||||||
|
|
||||||
|
output_result($o->{clock}, ("/"));
|
||||||
|
$last_update_token = $o->{clock};
|
||||||
|
|
||||||
|
eval { launch_watchman() };
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
die "Watchman: $error.\n" .
|
||||||
|
"Falling back to scanning...\n" if $error;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_working_dir {
|
||||||
|
my $working_dir;
|
||||||
|
if ($^O =~ 'msys' || $^O =~ 'cygwin') {
|
||||||
|
$working_dir = Win32::GetCwd();
|
||||||
|
$working_dir =~ tr/\\/\//;
|
||||||
|
} else {
|
||||||
|
require Cwd;
|
||||||
|
$working_dir = Cwd::cwd();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $working_dir;
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to prepare a packed repository for use over
|
||||||
|
# dumb transports.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "post-update".
|
||||||
|
|
||||||
|
exec git update-server-info
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to verify what is about to be committed
|
||||||
|
# by applypatch from an e-mail message.
|
||||||
|
#
|
||||||
|
# The hook should exit with non-zero status after issuing an
|
||||||
|
# appropriate message if it wants to stop the commit.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-applypatch".
|
||||||
|
|
||||||
|
. git-sh-setup
|
||||||
|
precommit="$(git rev-parse --git-path hooks/pre-commit)"
|
||||||
|
test -x "$precommit" && exec "$precommit" ${1+"$@"}
|
||||||
|
:
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to verify what is about to be committed.
|
||||||
|
# Called by "git commit" with no arguments. The hook should
|
||||||
|
# exit with non-zero status after issuing an appropriate message if
|
||||||
|
# it wants to stop the commit.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-commit".
|
||||||
|
|
||||||
|
if git rev-parse --verify HEAD >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
against=HEAD
|
||||||
|
else
|
||||||
|
# Initial commit: diff against an empty tree object
|
||||||
|
against=$(git hash-object -t tree /dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If you want to allow non-ASCII filenames set this variable to true.
|
||||||
|
allownonascii=$(git config --type=bool hooks.allownonascii)
|
||||||
|
|
||||||
|
# Redirect output to stderr.
|
||||||
|
exec 1>&2
|
||||||
|
|
||||||
|
# Cross platform projects tend to avoid non-ASCII filenames; prevent
|
||||||
|
# them from being added to the repository. We exploit the fact that the
|
||||||
|
# printable range starts at the space character and ends with tilde.
|
||||||
|
if [ "$allownonascii" != "true" ] &&
|
||||||
|
# Note that the use of brackets around a tr range is ok here, (it's
|
||||||
|
# even required, for portability to Solaris 10's /usr/bin/tr), since
|
||||||
|
# the square bracket bytes happen to fall in the designated range.
|
||||||
|
test $(git diff --cached --name-only --diff-filter=A -z $against |
|
||||||
|
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
|
||||||
|
then
|
||||||
|
cat <<\EOF
|
||||||
|
Error: Attempt to add a non-ASCII file name.
|
||||||
|
|
||||||
|
This can cause problems if you want to work with people on other platforms.
|
||||||
|
|
||||||
|
To be portable it is advisable to rename the file.
|
||||||
|
|
||||||
|
If you know what you are doing you can disable this check using:
|
||||||
|
|
||||||
|
git config hooks.allownonascii true
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If there are whitespace errors, print the offending file names and fail.
|
||||||
|
exec git diff-index --check --cached $against --
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to verify what is about to be committed.
|
||||||
|
# Called by "git merge" with no arguments. The hook should
|
||||||
|
# exit with non-zero status after issuing an appropriate message to
|
||||||
|
# stderr if it wants to stop the merge commit.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-merge-commit".
|
||||||
|
|
||||||
|
. git-sh-setup
|
||||||
|
test -x "$GIT_DIR/hooks/pre-commit" &&
|
||||||
|
exec "$GIT_DIR/hooks/pre-commit"
|
||||||
|
:
|
|
@ -0,0 +1,53 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# An example hook script to verify what is about to be pushed. Called by "git
|
||||||
|
# push" after it has checked the remote status, but before anything has been
|
||||||
|
# pushed. If this script exits with a non-zero status nothing will be pushed.
|
||||||
|
#
|
||||||
|
# This hook is called with the following parameters:
|
||||||
|
#
|
||||||
|
# $1 -- Name of the remote to which the push is being done
|
||||||
|
# $2 -- URL to which the push is being done
|
||||||
|
#
|
||||||
|
# If pushing without using a named remote those arguments will be equal.
|
||||||
|
#
|
||||||
|
# Information about the commits which are being pushed is supplied as lines to
|
||||||
|
# the standard input in the form:
|
||||||
|
#
|
||||||
|
# <local ref> <local oid> <remote ref> <remote oid>
|
||||||
|
#
|
||||||
|
# This sample shows how to prevent push of commits where the log message starts
|
||||||
|
# with "WIP" (work in progress).
|
||||||
|
|
||||||
|
remote="$1"
|
||||||
|
url="$2"
|
||||||
|
|
||||||
|
zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0')
|
||||||
|
|
||||||
|
while read local_ref local_oid remote_ref remote_oid
|
||||||
|
do
|
||||||
|
if test "$local_oid" = "$zero"
|
||||||
|
then
|
||||||
|
# Handle delete
|
||||||
|
:
|
||||||
|
else
|
||||||
|
if test "$remote_oid" = "$zero"
|
||||||
|
then
|
||||||
|
# New branch, examine all commits
|
||||||
|
range="$local_oid"
|
||||||
|
else
|
||||||
|
# Update to existing branch, examine new commits
|
||||||
|
range="$remote_oid..$local_oid"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for WIP commit
|
||||||
|
commit=$(git rev-list -n 1 --grep '^WIP' "$range")
|
||||||
|
if test -n "$commit"
|
||||||
|
then
|
||||||
|
echo >&2 "Found WIP commit in $local_ref, not pushing"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,169 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 2008 Junio C Hamano
|
||||||
|
#
|
||||||
|
# The "pre-rebase" hook is run just before "git rebase" starts doing
|
||||||
|
# its job, and can prevent the command from running by exiting with
|
||||||
|
# non-zero status.
|
||||||
|
#
|
||||||
|
# The hook is called with the following parameters:
|
||||||
|
#
|
||||||
|
# $1 -- the upstream the series was forked from.
|
||||||
|
# $2 -- the branch being rebased (or empty when rebasing the current branch).
|
||||||
|
#
|
||||||
|
# This sample shows how to prevent topic branches that are already
|
||||||
|
# merged to 'next' branch from getting rebased, because allowing it
|
||||||
|
# would result in rebasing already published history.
|
||||||
|
|
||||||
|
publish=next
|
||||||
|
basebranch="$1"
|
||||||
|
if test "$#" = 2
|
||||||
|
then
|
||||||
|
topic="refs/heads/$2"
|
||||||
|
else
|
||||||
|
topic=`git symbolic-ref HEAD` ||
|
||||||
|
exit 0 ;# we do not interrupt rebasing detached HEAD
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$topic" in
|
||||||
|
refs/heads/??/*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
exit 0 ;# we do not interrupt others.
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Now we are dealing with a topic branch being rebased
|
||||||
|
# on top of master. Is it OK to rebase it?
|
||||||
|
|
||||||
|
# Does the topic really exist?
|
||||||
|
git show-ref -q "$topic" || {
|
||||||
|
echo >&2 "No such branch $topic"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Is topic fully merged to master?
|
||||||
|
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
|
||||||
|
if test -z "$not_in_master"
|
||||||
|
then
|
||||||
|
echo >&2 "$topic is fully merged to master; better remove it."
|
||||||
|
exit 1 ;# we could allow it, but there is no point.
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Is topic ever merged to next? If so you should not be rebasing it.
|
||||||
|
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
|
||||||
|
only_next_2=`git rev-list ^master ${publish} | sort`
|
||||||
|
if test "$only_next_1" = "$only_next_2"
|
||||||
|
then
|
||||||
|
not_in_topic=`git rev-list "^$topic" master`
|
||||||
|
if test -z "$not_in_topic"
|
||||||
|
then
|
||||||
|
echo >&2 "$topic is already up to date with master"
|
||||||
|
exit 1 ;# we could allow it, but there is no point.
|
||||||
|
else
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
|
||||||
|
/usr/bin/perl -e '
|
||||||
|
my $topic = $ARGV[0];
|
||||||
|
my $msg = "* $topic has commits already merged to public branch:\n";
|
||||||
|
my (%not_in_next) = map {
|
||||||
|
/^([0-9a-f]+) /;
|
||||||
|
($1 => 1);
|
||||||
|
} split(/\n/, $ARGV[1]);
|
||||||
|
for my $elem (map {
|
||||||
|
/^([0-9a-f]+) (.*)$/;
|
||||||
|
[$1 => $2];
|
||||||
|
} split(/\n/, $ARGV[2])) {
|
||||||
|
if (!exists $not_in_next{$elem->[0]}) {
|
||||||
|
if ($msg) {
|
||||||
|
print STDERR $msg;
|
||||||
|
undef $msg;
|
||||||
|
}
|
||||||
|
print STDERR " $elem->[1]\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
' "$topic" "$not_in_next" "$not_in_master"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
<<\DOC_END
|
||||||
|
|
||||||
|
This sample hook safeguards topic branches that have been
|
||||||
|
published from being rewound.
|
||||||
|
|
||||||
|
The workflow assumed here is:
|
||||||
|
|
||||||
|
* Once a topic branch forks from "master", "master" is never
|
||||||
|
merged into it again (either directly or indirectly).
|
||||||
|
|
||||||
|
* Once a topic branch is fully cooked and merged into "master",
|
||||||
|
it is deleted. If you need to build on top of it to correct
|
||||||
|
earlier mistakes, a new topic branch is created by forking at
|
||||||
|
the tip of the "master". This is not strictly necessary, but
|
||||||
|
it makes it easier to keep your history simple.
|
||||||
|
|
||||||
|
* Whenever you need to test or publish your changes to topic
|
||||||
|
branches, merge them into "next" branch.
|
||||||
|
|
||||||
|
The script, being an example, hardcodes the publish branch name
|
||||||
|
to be "next", but it is trivial to make it configurable via
|
||||||
|
$GIT_DIR/config mechanism.
|
||||||
|
|
||||||
|
With this workflow, you would want to know:
|
||||||
|
|
||||||
|
(1) ... if a topic branch has ever been merged to "next". Young
|
||||||
|
topic branches can have stupid mistakes you would rather
|
||||||
|
clean up before publishing, and things that have not been
|
||||||
|
merged into other branches can be easily rebased without
|
||||||
|
affecting other people. But once it is published, you would
|
||||||
|
not want to rewind it.
|
||||||
|
|
||||||
|
(2) ... if a topic branch has been fully merged to "master".
|
||||||
|
Then you can delete it. More importantly, you should not
|
||||||
|
build on top of it -- other people may already want to
|
||||||
|
change things related to the topic as patches against your
|
||||||
|
"master", so if you need further changes, it is better to
|
||||||
|
fork the topic (perhaps with the same name) afresh from the
|
||||||
|
tip of "master".
|
||||||
|
|
||||||
|
Let's look at this example:
|
||||||
|
|
||||||
|
o---o---o---o---o---o---o---o---o---o "next"
|
||||||
|
/ / / /
|
||||||
|
/ a---a---b A / /
|
||||||
|
/ / / /
|
||||||
|
/ / c---c---c---c B /
|
||||||
|
/ / / \ /
|
||||||
|
/ / / b---b C \ /
|
||||||
|
/ / / / \ /
|
||||||
|
---o---o---o---o---o---o---o---o---o---o---o "master"
|
||||||
|
|
||||||
|
|
||||||
|
A, B and C are topic branches.
|
||||||
|
|
||||||
|
* A has one fix since it was merged up to "next".
|
||||||
|
|
||||||
|
* B has finished. It has been fully merged up to "master" and "next",
|
||||||
|
and is ready to be deleted.
|
||||||
|
|
||||||
|
* C has not merged to "next" at all.
|
||||||
|
|
||||||
|
We would want to allow C to be rebased, refuse A, and encourage
|
||||||
|
B to be deleted.
|
||||||
|
|
||||||
|
To compute (1):
|
||||||
|
|
||||||
|
git rev-list ^master ^topic next
|
||||||
|
git rev-list ^master next
|
||||||
|
|
||||||
|
if these match, topic has not merged in next at all.
|
||||||
|
|
||||||
|
To compute (2):
|
||||||
|
|
||||||
|
git rev-list master..topic
|
||||||
|
|
||||||
|
if this is empty, it is fully merged to "master".
|
||||||
|
|
||||||
|
DOC_END
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to make use of push options.
|
||||||
|
# The example simply echoes all push options that start with 'echoback='
|
||||||
|
# and rejects all pushes when the "reject" push option is used.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-receive".
|
||||||
|
|
||||||
|
if test -n "$GIT_PUSH_OPTION_COUNT"
|
||||||
|
then
|
||||||
|
i=0
|
||||||
|
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
|
||||||
|
do
|
||||||
|
eval "value=\$GIT_PUSH_OPTION_$i"
|
||||||
|
case "$value" in
|
||||||
|
echoback=*)
|
||||||
|
echo "echo from the pre-receive-hook: ${value#*=}" >&2
|
||||||
|
;;
|
||||||
|
reject)
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
i=$((i + 1))
|
||||||
|
done
|
||||||
|
fi
|
|
@ -0,0 +1,42 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to prepare the commit log message.
|
||||||
|
# Called by "git commit" with the name of the file that has the
|
||||||
|
# commit message, followed by the description of the commit
|
||||||
|
# message's source. The hook's purpose is to edit the commit
|
||||||
|
# message file. If the hook fails with a non-zero status,
|
||||||
|
# the commit is aborted.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "prepare-commit-msg".
|
||||||
|
|
||||||
|
# This hook includes three examples. The first one removes the
|
||||||
|
# "# Please enter the commit message..." help message.
|
||||||
|
#
|
||||||
|
# The second includes the output of "git diff --name-status -r"
|
||||||
|
# into the message, just before the "git status" output. It is
|
||||||
|
# commented because it doesn't cope with --amend or with squashed
|
||||||
|
# commits.
|
||||||
|
#
|
||||||
|
# The third example adds a Signed-off-by line to the message, that can
|
||||||
|
# still be edited. This is rarely a good idea.
|
||||||
|
|
||||||
|
COMMIT_MSG_FILE=$1
|
||||||
|
COMMIT_SOURCE=$2
|
||||||
|
SHA1=$3
|
||||||
|
|
||||||
|
/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
|
||||||
|
|
||||||
|
# case "$COMMIT_SOURCE,$SHA1" in
|
||||||
|
# ,|template,)
|
||||||
|
# /usr/bin/perl -i.bak -pe '
|
||||||
|
# print "\n" . `git diff --cached --name-status -r`
|
||||||
|
# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
|
||||||
|
# *) ;;
|
||||||
|
# esac
|
||||||
|
|
||||||
|
# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||||
|
# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
|
||||||
|
# if test -z "$COMMIT_SOURCE"
|
||||||
|
# then
|
||||||
|
# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
|
||||||
|
# fi
|
|
@ -0,0 +1,78 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# An example hook script to update a checked-out tree on a git push.
|
||||||
|
#
|
||||||
|
# This hook is invoked by git-receive-pack(1) when it reacts to git
|
||||||
|
# push and updates reference(s) in its repository, and when the push
|
||||||
|
# tries to update the branch that is currently checked out and the
|
||||||
|
# receive.denyCurrentBranch configuration variable is set to
|
||||||
|
# updateInstead.
|
||||||
|
#
|
||||||
|
# By default, such a push is refused if the working tree and the index
|
||||||
|
# of the remote repository has any difference from the currently
|
||||||
|
# checked out commit; when both the working tree and the index match
|
||||||
|
# the current commit, they are updated to match the newly pushed tip
|
||||||
|
# of the branch. This hook is to be used to override the default
|
||||||
|
# behaviour; however the code below reimplements the default behaviour
|
||||||
|
# as a starting point for convenient modification.
|
||||||
|
#
|
||||||
|
# The hook receives the commit with which the tip of the current
|
||||||
|
# branch is going to be updated:
|
||||||
|
commit=$1
|
||||||
|
|
||||||
|
# It can exit with a non-zero status to refuse the push (when it does
|
||||||
|
# so, it must not modify the index or the working tree).
|
||||||
|
die () {
|
||||||
|
echo >&2 "$*"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Or it can make any necessary changes to the working tree and to the
|
||||||
|
# index to bring them to the desired state when the tip of the current
|
||||||
|
# branch is updated to the new commit, and exit with a zero status.
|
||||||
|
#
|
||||||
|
# For example, the hook can simply run git read-tree -u -m HEAD "$1"
|
||||||
|
# in order to emulate git fetch that is run in the reverse direction
|
||||||
|
# with git push, as the two-tree form of git read-tree -u -m is
|
||||||
|
# essentially the same as git switch or git checkout that switches
|
||||||
|
# branches while keeping the local changes in the working tree that do
|
||||||
|
# not interfere with the difference between the branches.
|
||||||
|
|
||||||
|
# The below is a more-or-less exact translation to shell of the C code
|
||||||
|
# for the default behaviour for git's push-to-checkout hook defined in
|
||||||
|
# the push_to_deploy() function in builtin/receive-pack.c.
|
||||||
|
#
|
||||||
|
# Note that the hook will be executed from the repository directory,
|
||||||
|
# not from the working tree, so if you want to perform operations on
|
||||||
|
# the working tree, you will have to adapt your code accordingly, e.g.
|
||||||
|
# by adding "cd .." or using relative paths.
|
||||||
|
|
||||||
|
if ! git update-index -q --ignore-submodules --refresh
|
||||||
|
then
|
||||||
|
die "Up-to-date check failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! git diff-files --quiet --ignore-submodules --
|
||||||
|
then
|
||||||
|
die "Working directory has unstaged changes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# This is a rough translation of:
|
||||||
|
#
|
||||||
|
# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX
|
||||||
|
if git cat-file -e HEAD 2>/dev/null
|
||||||
|
then
|
||||||
|
head=HEAD
|
||||||
|
else
|
||||||
|
head=$(git hash-object -t tree --stdin </dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! git diff-index --quiet --cached --ignore-submodules $head --
|
||||||
|
then
|
||||||
|
die "Working directory has staged changes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! git read-tree -u -m "$commit"
|
||||||
|
then
|
||||||
|
die "Could not update working tree to new HEAD"
|
||||||
|
fi
|
|
@ -0,0 +1,77 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# An example hook script to validate a patch (and/or patch series) before
|
||||||
|
# sending it via email.
|
||||||
|
#
|
||||||
|
# The hook should exit with non-zero status after issuing an appropriate
|
||||||
|
# message if it wants to prevent the email(s) from being sent.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "sendemail-validate".
|
||||||
|
#
|
||||||
|
# By default, it will only check that the patch(es) can be applied on top of
|
||||||
|
# the default upstream branch without conflicts in a secondary worktree. After
|
||||||
|
# validation (successful or not) of the last patch of a series, the worktree
|
||||||
|
# will be deleted.
|
||||||
|
#
|
||||||
|
# The following config variables can be set to change the default remote and
|
||||||
|
# remote ref that are used to apply the patches against:
|
||||||
|
#
|
||||||
|
# sendemail.validateRemote (default: origin)
|
||||||
|
# sendemail.validateRemoteRef (default: HEAD)
|
||||||
|
#
|
||||||
|
# Replace the TODO placeholders with appropriate checks according to your
|
||||||
|
# needs.
|
||||||
|
|
||||||
|
validate_cover_letter () {
|
||||||
|
file="$1"
|
||||||
|
# TODO: Replace with appropriate checks (e.g. spell checking).
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
validate_patch () {
|
||||||
|
file="$1"
|
||||||
|
# Ensure that the patch applies without conflicts.
|
||||||
|
git am -3 "$file" || return
|
||||||
|
# TODO: Replace with appropriate checks for this patch
|
||||||
|
# (e.g. checkpatch.pl).
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
validate_series () {
|
||||||
|
# TODO: Replace with appropriate checks for the whole series
|
||||||
|
# (e.g. quick build, coding style checks, etc.).
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
# main -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if test "$GIT_SENDEMAIL_FILE_COUNTER" = 1
|
||||||
|
then
|
||||||
|
remote=$(git config --default origin --get sendemail.validateRemote) &&
|
||||||
|
ref=$(git config --default HEAD --get sendemail.validateRemoteRef) &&
|
||||||
|
worktree=$(mktemp --tmpdir -d sendemail-validate.XXXXXXX) &&
|
||||||
|
git worktree add -fd --checkout "$worktree" "refs/remotes/$remote/$ref" &&
|
||||||
|
git config --replace-all sendemail.validateWorktree "$worktree"
|
||||||
|
else
|
||||||
|
worktree=$(git config --get sendemail.validateWorktree)
|
||||||
|
fi || {
|
||||||
|
echo "sendemail-validate: error: failed to prepare worktree" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
unset GIT_DIR GIT_WORK_TREE
|
||||||
|
cd "$worktree" &&
|
||||||
|
|
||||||
|
if grep -q "^diff --git " "$1"
|
||||||
|
then
|
||||||
|
validate_patch "$1"
|
||||||
|
else
|
||||||
|
validate_cover_letter "$1"
|
||||||
|
fi &&
|
||||||
|
|
||||||
|
if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL"
|
||||||
|
then
|
||||||
|
git config --unset-all sendemail.validateWorktree &&
|
||||||
|
trap 'git worktree remove -ff "$worktree"' EXIT &&
|
||||||
|
validate_series
|
||||||
|
fi
|
|
@ -0,0 +1,128 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to block unannotated tags from entering.
|
||||||
|
# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "update".
|
||||||
|
#
|
||||||
|
# Config
|
||||||
|
# ------
|
||||||
|
# hooks.allowunannotated
|
||||||
|
# This boolean sets whether unannotated tags will be allowed into the
|
||||||
|
# repository. By default they won't be.
|
||||||
|
# hooks.allowdeletetag
|
||||||
|
# This boolean sets whether deleting tags will be allowed in the
|
||||||
|
# repository. By default they won't be.
|
||||||
|
# hooks.allowmodifytag
|
||||||
|
# This boolean sets whether a tag may be modified after creation. By default
|
||||||
|
# it won't be.
|
||||||
|
# hooks.allowdeletebranch
|
||||||
|
# This boolean sets whether deleting branches will be allowed in the
|
||||||
|
# repository. By default they won't be.
|
||||||
|
# hooks.denycreatebranch
|
||||||
|
# This boolean sets whether remotely creating branches will be denied
|
||||||
|
# in the repository. By default this is allowed.
|
||||||
|
#
|
||||||
|
|
||||||
|
# --- Command line
|
||||||
|
refname="$1"
|
||||||
|
oldrev="$2"
|
||||||
|
newrev="$3"
|
||||||
|
|
||||||
|
# --- Safety check
|
||||||
|
if [ -z "$GIT_DIR" ]; then
|
||||||
|
echo "Don't run this script from the command line." >&2
|
||||||
|
echo " (if you want, you could supply GIT_DIR then run" >&2
|
||||||
|
echo " $0 <ref> <oldrev> <newrev>)" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
|
||||||
|
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Config
|
||||||
|
allowunannotated=$(git config --type=bool hooks.allowunannotated)
|
||||||
|
allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch)
|
||||||
|
denycreatebranch=$(git config --type=bool hooks.denycreatebranch)
|
||||||
|
allowdeletetag=$(git config --type=bool hooks.allowdeletetag)
|
||||||
|
allowmodifytag=$(git config --type=bool hooks.allowmodifytag)
|
||||||
|
|
||||||
|
# check for no description
|
||||||
|
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
|
||||||
|
case "$projectdesc" in
|
||||||
|
"Unnamed repository"* | "")
|
||||||
|
echo "*** Project description file hasn't been set" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# --- Check types
|
||||||
|
# if $newrev is 0000...0000, it's a commit to delete a ref.
|
||||||
|
zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0')
|
||||||
|
if [ "$newrev" = "$zero" ]; then
|
||||||
|
newrev_type=delete
|
||||||
|
else
|
||||||
|
newrev_type=$(git cat-file -t $newrev)
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$refname","$newrev_type" in
|
||||||
|
refs/tags/*,commit)
|
||||||
|
# un-annotated tag
|
||||||
|
short_refname=${refname##refs/tags/}
|
||||||
|
if [ "$allowunannotated" != "true" ]; then
|
||||||
|
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
|
||||||
|
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/tags/*,delete)
|
||||||
|
# delete tag
|
||||||
|
if [ "$allowdeletetag" != "true" ]; then
|
||||||
|
echo "*** Deleting a tag is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/tags/*,tag)
|
||||||
|
# annotated tag
|
||||||
|
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
|
||||||
|
then
|
||||||
|
echo "*** Tag '$refname' already exists." >&2
|
||||||
|
echo "*** Modifying a tag is not allowed in this repository." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/heads/*,commit)
|
||||||
|
# branch
|
||||||
|
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
|
||||||
|
echo "*** Creating a branch is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/heads/*,delete)
|
||||||
|
# delete branch
|
||||||
|
if [ "$allowdeletebranch" != "true" ]; then
|
||||||
|
echo "*** Deleting a branch is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/remotes/*,commit)
|
||||||
|
# tracking branch
|
||||||
|
;;
|
||||||
|
refs/remotes/*,delete)
|
||||||
|
# delete tracking branch
|
||||||
|
if [ "$allowdeletebranch" != "true" ]; then
|
||||||
|
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Anything else (is there anything else?)
|
||||||
|
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# --- Finished
|
||||||
|
exit 0
|
BIN
dot_tmux/plugins/tmux-copycat/dot_git/index
Normal file
BIN
dot_tmux/plugins/tmux-copycat/dot_git/index
Normal file
Binary file not shown.
6
dot_tmux/plugins/tmux-copycat/dot_git/info/exclude
Normal file
6
dot_tmux/plugins/tmux-copycat/dot_git/info/exclude
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# git ls-files --others --exclude-from=.git/info/exclude
|
||||||
|
# Lines that start with '#' are comments.
|
||||||
|
# For a project mostly in C, the following would be a good set of
|
||||||
|
# exclude patterns (uncomment them if you want to use them):
|
||||||
|
# *.[oa]
|
||||||
|
# *~
|
1
dot_tmux/plugins/tmux-copycat/dot_git/logs/HEAD
Normal file
1
dot_tmux/plugins/tmux-copycat/dot_git/logs/HEAD
Normal file
|
@ -0,0 +1 @@
|
||||||
|
0000000000000000000000000000000000000000 d7f7e6c1de0bc0d6915f4beea5be6a8a42045c09 Simon Rieger <rieger@netzlink.com> 1699878732 +0100 clone: from https://github.com/tmux-plugins/tmux-copycat
|
|
@ -0,0 +1 @@
|
||||||
|
0000000000000000000000000000000000000000 d7f7e6c1de0bc0d6915f4beea5be6a8a42045c09 Simon Rieger <rieger@netzlink.com> 1699878732 +0100 clone: from https://github.com/tmux-plugins/tmux-copycat
|
|
@ -0,0 +1 @@
|
||||||
|
0000000000000000000000000000000000000000 d7f7e6c1de0bc0d6915f4beea5be6a8a42045c09 Simon Rieger <rieger@netzlink.com> 1699878732 +0100 clone: from https://github.com/tmux-plugins/tmux-copycat
|
0
dot_tmux/plugins/tmux-copycat/dot_git/objects/info/.keep
Normal file
0
dot_tmux/plugins/tmux-copycat/dot_git/objects/info/.keep
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
2
dot_tmux/plugins/tmux-copycat/dot_git/packed-refs
Normal file
2
dot_tmux/plugins/tmux-copycat/dot_git/packed-refs
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# pack-refs with: peeled fully-peeled sorted
|
||||||
|
d7f7e6c1de0bc0d6915f4beea5be6a8a42045c09 refs/remotes/origin/master
|
1
dot_tmux/plugins/tmux-copycat/dot_git/refs/heads/master
Normal file
1
dot_tmux/plugins/tmux-copycat/dot_git/refs/heads/master
Normal file
|
@ -0,0 +1 @@
|
||||||
|
d7f7e6c1de0bc0d6915f4beea5be6a8a42045c09
|
|
@ -0,0 +1 @@
|
||||||
|
ref: refs/remotes/origin/master
|
1
dot_tmux/plugins/tmux-copycat/dot_git/refs/tags/v0.0.1
Normal file
1
dot_tmux/plugins/tmux-copycat/dot_git/refs/tags/v0.0.1
Normal file
|
@ -0,0 +1 @@
|
||||||
|
695404b910484c742eec5c920d393963a0270997
|
1
dot_tmux/plugins/tmux-copycat/dot_git/refs/tags/v0.0.2
Normal file
1
dot_tmux/plugins/tmux-copycat/dot_git/refs/tags/v0.0.2
Normal file
|
@ -0,0 +1 @@
|
||||||
|
5d66a57b6f014663d5618cfaf5d21b590e2b4595
|
1
dot_tmux/plugins/tmux-copycat/dot_git/refs/tags/v0.0.3
Normal file
1
dot_tmux/plugins/tmux-copycat/dot_git/refs/tags/v0.0.3
Normal file
|
@ -0,0 +1 @@
|
||||||
|
de224a5b0c82124bd91afbd00411c89374963bf6
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue