diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b10bce3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.zwc +.zcompdump* +.zsh_history diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..cae67dd --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "zsh/.zprezto"] + path = zsh/.zprezto + url = https://github.com/sorin-ionescu/prezto.git diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md new file mode 100644 index 0000000..dd890fd --- /dev/null +++ b/DEPENDENCIES.md @@ -0,0 +1,32 @@ +# System Dependencies + +## Core + +| Tool | Arch | Debian/Ubuntu | Fedora | Notes | +|------|------|---------------|--------|-------| +| git | git | git | git | | +| zsh | zsh | zsh | zsh | | +| neovim | neovim | neovim | neovim | 0.9+ required | +| ripgrep | ripgrep | ripgrep | ripgrep | fzf-lua, grug-far | +| fd | fd | fd-find | fd-find | fzf-lua | +| fzf | fzf | fzf | fzf | | +| a Nerd Font | ttf-firacode-nerd | fonts-firacode | fira-code-fonts | nvim-web-devicons, lualine | + +## Neovim LSPs and tools (mason is disabled) + +| Tool | Arch | Debian/Ubuntu | Fedora | Notes | +|------|------|---------------|--------|-------| +| clangd | clang | clangd | clang-tools-extra | C/C++ LSP | +| rust-analyzer | rust-analyzer | rust-analyzer | rust-analyzer | Rust LSP (rustaceanvim) | +| lua-language-server | lua-language-server | — | — | `cargo install` or GitHub release | +| stylua | stylua | — | — | `cargo install stylua` | +| cmake | cmake | cmake | cmake | cmake-tools.nvim | + +## Typst support (optional) + +| Tool | Arch | Debian/Ubuntu | Fedora | Notes | +|------|------|---------------|--------|-------| +| tinymist | tinymist | — | — | `cargo install tinymist` | +| websocat | websocat | — | — | `cargo install websocat` or GitHub release | + +Packages marked — are not in the default repos; install via `cargo install` or from GitHub releases. diff --git a/.config/gammastep/config.ini b/config/gammastep/config.ini similarity index 100% rename from .config/gammastep/config.ini rename to config/gammastep/config.ini diff --git a/.config/i3/config b/config/i3/config similarity index 100% rename from .config/i3/config rename to config/i3/config diff --git a/.config/i3/volume b/config/i3/volume similarity index 100% rename from .config/i3/volume rename to config/i3/volume diff --git a/config/nvim/.gitignore b/config/nvim/.gitignore new file mode 100644 index 0000000..cc5457a --- /dev/null +++ b/config/nvim/.gitignore @@ -0,0 +1,8 @@ +tt.* +.tests +doc/tags +debug +.repro +foo.* +*.log +data diff --git a/config/nvim/.neoconf.json b/config/nvim/.neoconf.json new file mode 100644 index 0000000..7c48087 --- /dev/null +++ b/config/nvim/.neoconf.json @@ -0,0 +1,15 @@ +{ + "neodev": { + "library": { + "enabled": true, + "plugins": true + } + }, + "neoconf": { + "plugins": { + "lua_ls": { + "enabled": true + } + } + } +} diff --git a/config/nvim/LICENSE b/config/nvim/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/config/nvim/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/config/nvim/README.md b/config/nvim/README.md new file mode 100644 index 0000000..185280b --- /dev/null +++ b/config/nvim/README.md @@ -0,0 +1,4 @@ +# 💤 LazyVim + +A starter template for [LazyVim](https://github.com/LazyVim/LazyVim). +Refer to the [documentation](https://lazyvim.github.io/installation) to get started. diff --git a/config/nvim/init.lua b/config/nvim/init.lua new file mode 100644 index 0000000..2514f9e --- /dev/null +++ b/config/nvim/init.lua @@ -0,0 +1,2 @@ +-- bootstrap lazy.nvim, LazyVim and your plugins +require("config.lazy") diff --git a/config/nvim/lazy-lock.json b/config/nvim/lazy-lock.json new file mode 100644 index 0000000..2c81bfe --- /dev/null +++ b/config/nvim/lazy-lock.json @@ -0,0 +1,51 @@ +{ + "LazyVim": { "branch": "main", "commit": "83d90f339defdb109a6ede333865a66ffc7ef6aa" }, + "SchemaStore.nvim": { "branch": "main", "commit": "250aed7415ddd6cb3ea321490c7b35094ed9148d" }, + "blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" }, + "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, + "catppuccin": { "branch": "main", "commit": "426dbebe06b5c69fd846ceb17b42e12f890aedf1" }, + "clangd_extensions.nvim": { "branch": "main", "commit": "78c2ecd659d54972be17aa6ba2deac3c53223b80" }, + "cmake-tools.nvim": { "branch": "master", "commit": "bac6ba2354a52c61f731c751cdb0f4e24669bf0d" }, + "conform.nvim": { "branch": "master", "commit": "086a40dc7ed8242c03be9f47fbcee68699cc2395" }, + "flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" }, + "friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" }, + "fzf-lua": { "branch": "main", "commit": "834246377489f9a1e6d4df570a7874a48c644b56" }, + "gitsigns.nvim": { "branch": "main", "commit": "6d808f99bd63303646794406e270bd553ad7792e" }, + "grug-far.nvim": { "branch": "main", "commit": "21604255d0e8f9968322f61f2b6c09e5efe1285a" }, + "gruvbox.nvim": { "branch": "main", "commit": "154eb5ff5b96d0641307113fa385eaf0d36d9796" }, + "hex.nvim": { "branch": "master", "commit": "b46e63356a69e8d6f046c38a9708d55d17f15038" }, + "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, + "lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" }, + "lualine.nvim": { "branch": "master", "commit": "a905eeebc4e63fdc48b5135d3bf8aea5618fb21c" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" }, + "mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" }, + "matchparen.nvim": { "branch": "main", "commit": "1a2dcbd026bf99b20b89345883d54823f80a2bee" }, + "mini.ai": { "branch": "main", "commit": "43eb2074843950a3a25aae56a5f41362ec043bfa" }, + "mini.icons": { "branch": "main", "commit": "bac6317300e205335df425296570d84322730067" }, + "mini.nvim": { "branch": "main", "commit": "418ef4930ddabe80f449c6f1323f8b6abb172d1c" }, + "mini.pairs": { "branch": "main", "commit": "42387c7fe68fc0b6e95eaf37f1bb76e7bffaa0d9" }, + "neo-tree.nvim": { "branch": "main", "commit": "4d0828d95adaf4250c1373d2cd9318d3509712b7" }, + "noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" }, + "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, + "nvim-ansible": { "branch": "main", "commit": "c7f595d568b588942d4d0c37b5cd6cae3764a148" }, + "nvim-highlight-colors": { "branch": "main", "commit": "e2cb22089cc2358b2b995c09578224f142de6039" }, + "nvim-lint": { "branch": "master", "commit": "eab58b48eb11d7745c11c505e0f3057165902461" }, + "nvim-lspconfig": { "branch": "master", "commit": "4b7fbaa239c5db6b36f424a4521ca9f1a401be33" }, + "nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" }, + "nvim-treesitter-textobjects": { "branch": "main", "commit": "851e865342e5a4cb1ae23d31caf6e991e1c99f1e" }, + "nvim-ts-autotag": { "branch": "main", "commit": "88c1453db4ba7dd24131086fe51fdf74e587d275" }, + "nvim-web-devicons": { "branch": "master", "commit": "c72328a5494b4502947a022fe69c0c47e53b6aa6" }, + "persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" }, + "plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" }, + "render-markdown.nvim": { "branch": "main", "commit": "0fd43fb4b1f073931c4b481f5f3b7cea3749e190" }, + "rustaceanvim": { "branch": "master", "commit": "88575b98bb9937fb9983ddec5e532b67e75ce677" }, + "snacks.nvim": { "branch": "main", "commit": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e" }, + "todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" }, + "tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" }, + "trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" }, + "ts-comments.nvim": { "branch": "main", "commit": "123a9fb12e7229342f807ec9e6de478b1102b041" }, + "typst-preview.nvim": { "branch": "master", "commit": "325036ee145ca51d9efb145c09ac16bce3bc8b7d" }, + "venv-selector.nvim": { "branch": "main", "commit": "bcb2f58533c59b01565285eba49693f00bc460f5" }, + "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }, + "yuck.vim": { "branch": "master", "commit": "9b5e0370f70cc30383e1dabd6c215475915fe5c3" } +} diff --git a/config/nvim/lazyvim.json b/config/nvim/lazyvim.json new file mode 100644 index 0000000..3e38e24 --- /dev/null +++ b/config/nvim/lazyvim.json @@ -0,0 +1,16 @@ +{ + "extras": [ + "lazyvim.plugins.extras.formatting.black", + "lazyvim.plugins.extras.lang.ansible", + "lazyvim.plugins.extras.lang.clangd", + "lazyvim.plugins.extras.lang.go", + "lazyvim.plugins.extras.lang.python", + "lazyvim.plugins.extras.lang.terraform", + "lazyvim.plugins.extras.lang.yaml" + ], + "install_version": 7, + "news": { + "NEWS.md": "11866" + }, + "version": 8 +} \ No newline at end of file diff --git a/config/nvim/lua/config/autocmds.lua b/config/nvim/lua/config/autocmds.lua new file mode 100644 index 0000000..5cfdcda --- /dev/null +++ b/config/nvim/lua/config/autocmds.lua @@ -0,0 +1,19 @@ +-- Autocmds are automatically loaded on the VeryLazy event +-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua +-- Add any additional autocmds here + +local function augroup(name) + return vim.api.nvim_create_augroup("lazyvim_" .. name, { clear = true }) +end + +vim.api.nvim_create_autocmd("VimEnter", { + group = augroup("autoupdate"), + callback = function() + require("lazy").update({ + show = false, + }) + end, +}) + +require("nvim-highlight-colors").turnOn() +require("hex").setup() diff --git a/config/nvim/lua/config/keymaps.lua b/config/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..2c134f7 --- /dev/null +++ b/config/nvim/lua/config/keymaps.lua @@ -0,0 +1,3 @@ +-- Keymaps are automatically loaded on the VeryLazy event +-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua +-- Add any additional keymaps here diff --git a/config/nvim/lua/config/lazy.lua b/config/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..29a8b8f --- /dev/null +++ b/config/nvim/lua/config/lazy.lua @@ -0,0 +1,44 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + +if not (vim.uv or vim.loop).fs_stat(lazypath) then + -- bootstrap lazy.nvim + -- stylua: ignore + vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", + lazypath }) +end +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup({ + spec = { + -- add LazyVim and import its plugins + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "plugins" }, + }, + defaults = { + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. + -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. + lazy = false, + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = false, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + }, + install = { colorscheme = { "tokyonight", "habamax" } }, + checker = { enabled = false }, -- automatically check for plugin updates + performance = { + rtp = { + -- disable some rtp plugins + disabled_plugins = { + "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + "matchparen" + }, + }, + }, +}) diff --git a/config/nvim/lua/config/options.lua b/config/nvim/lua/config/options.lua new file mode 100644 index 0000000..117067c --- /dev/null +++ b/config/nvim/lua/config/options.lua @@ -0,0 +1,35 @@ +-- Options are automatically loaded before lazy.nvim startup +-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua +-- Add any additional options here + +vim.g.mapleader = " " +vim.g.autoformat = true +-- vim.g.loaded_netrwPlugin = 0 + +local opt = vim.opt +opt.tabstop = 4 +opt.shiftwidth = 4 +opt.expandtab = true +opt.smarttab = true +opt.copyindent = true +opt.autoindent = true +opt.syntax = "on" +opt.encoding = "utf-8" +opt.number = true +opt.list = true +opt.mouse = "a" +opt.pumblend = 10 +opt.cursorline = true +opt.confirm = true +opt.conceallevel = 0 +opt.clipboard = "unnamedplus" +opt.termguicolors = true +opt.undofile = true +opt.undolevels = 10000 +opt.updatetime = 200 +opt.spell = true +opt.spelllang = { "en_gb" } +opt.autochdir = false +opt.number = true +opt.relativenumber = false +--opt.switchbuf = "usetab" diff --git a/config/nvim/lua/plugins/cmake.lua b/config/nvim/lua/plugins/cmake.lua new file mode 100644 index 0000000..7c49ccb --- /dev/null +++ b/config/nvim/lua/plugins/cmake.lua @@ -0,0 +1,5 @@ +return { + "Civitasv/cmake-tools.nvim", + ft = { "cmake", "cpp", "c" }, + opts = {} +} diff --git a/config/nvim/lua/plugins/color-highlight.lua b/config/nvim/lua/plugins/color-highlight.lua new file mode 100644 index 0000000..ea8dce7 --- /dev/null +++ b/config/nvim/lua/plugins/color-highlight.lua @@ -0,0 +1,3 @@ +return { + { "brenoprata10/nvim-highlight-colors" }, +} diff --git a/config/nvim/lua/plugins/colorscheme.lua b/config/nvim/lua/plugins/colorscheme.lua new file mode 100644 index 0000000..f206ac3 --- /dev/null +++ b/config/nvim/lua/plugins/colorscheme.lua @@ -0,0 +1,12 @@ +return { + -- add gruvbox + { "ellisonleao/gruvbox.nvim" }, + + -- Configure LazyVim to load gruvbox + { + "LazyVim/LazyVim", + opts = { + colorscheme = "gruvbox", + }, + }, +} diff --git a/config/nvim/lua/plugins/example.lua b/config/nvim/lua/plugins/example.lua new file mode 100644 index 0000000..8b7eabc --- /dev/null +++ b/config/nvim/lua/plugins/example.lua @@ -0,0 +1,238 @@ +-- since this is just an example spec, don't actually load anything here and return an empty spec +-- stylua: ignore +if true then return {} end + +-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim +-- +-- In your plugin files, you can: +-- * add extra plugins +-- * disable/enabled LazyVim plugins +-- * override the configuration of LazyVim plugins +return { + -- add gruvbox + { "ellisonleao/gruvbox.nvim" }, + + -- Configure LazyVim to load gruvbox + { + "LazyVim/LazyVim", + opts = { + colorscheme = "gruvbox", + }, + }, + + -- change trouble config + { + "folke/trouble.nvim", + -- opts will be merged with the parent spec + opts = { use_diagnostic_signs = true }, + }, + + -- disable trouble + { "folke/trouble.nvim", enabled = false }, + + -- override nvim-cmp and add cmp-emoji + { + "hrsh7th/nvim-cmp", + dependencies = { "hrsh7th/cmp-emoji" }, + ---@param opts cmp.ConfigSchema + opts = function(_, opts) + table.insert(opts.sources, { name = "emoji" }) + end, + }, + + -- change some telescope options and a keymap to browse plugin files + { + "nvim-telescope/telescope.nvim", + keys = { + -- add a keymap to browse plugin files + -- stylua: ignore + { + "fp", + function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end, + desc = "Find Plugin File", + }, + }, + -- change some options + opts = { + defaults = { + layout_strategy = "horizontal", + layout_config = { prompt_position = "top" }, + sorting_strategy = "ascending", + winblend = 0, + }, + }, + }, + + -- add pyright to lspconfig + { + "neovim/nvim-lspconfig", + ---@class PluginLspOpts + opts = { + ---@type lspconfig.options + servers = { + -- pyright will be automatically installed with mason and loaded with lspconfig + pyright = {}, + }, + }, + }, + + -- add tsserver and setup with typescript.nvim instead of lspconfig + { + "neovim/nvim-lspconfig", + dependencies = { + "jose-elias-alvarez/typescript.nvim", + init = function() + require("lazyvim.util").lsp.on_attach(function(_, buffer) + -- stylua: ignore + vim.keymap.set( "n", "co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" }) + vim.keymap.set("n", "cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer }) + end) + end, + }, + ---@class PluginLspOpts + opts = { + ---@type lspconfig.options + servers = { + -- tsserver will be automatically installed with mason and loaded with lspconfig + tsserver = {}, + }, + -- you can do any additional lsp server setup here + -- return true if you don't want this server to be setup with lspconfig + ---@type table + setup = { + -- example to setup with typescript.nvim + tsserver = function(_, opts) + require("typescript").setup({ server = opts }) + return true + end, + -- Specify * to use this function as a fallback for any server + -- ["*"] = function(server, opts) end, + }, + }, + }, + + -- for typescript, LazyVim also includes extra specs to properly setup lspconfig, + -- treesitter, mason and typescript.nvim. So instead of the above, you can use: + { import = "lazyvim.plugins.extras.lang.typescript" }, + + -- add more treesitter parsers + { + "nvim-treesitter/nvim-treesitter", + opts = { + ensure_installed = { + "bash", + "html", + "javascript", + "json", + "lua", + "markdown", + "markdown_inline", + "python", + "query", + "regex", + "tsx", + "typescript", + "vim", + "yaml", + }, + }, + }, + + -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above + -- would overwrite `ensure_installed` with the new value. + -- If you'd rather extend the default config, use the code below instead: + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + -- add tsx and treesitter + vim.list_extend(opts.ensure_installed, { + "tsx", + "typescript", + }) + end, + }, + + -- the opts function can also be used to change the default opts: + { + "nvim-lualine/lualine.nvim", + event = "VeryLazy", + opts = function(_, opts) + table.insert(opts.sections.lualine_x, "😄") + end, + }, + + -- or you can return new options to override all the defaults + { + "nvim-lualine/lualine.nvim", + event = "VeryLazy", + opts = function() + return { + --[[add your custom lualine config here]] + } + end, + }, + + -- use mini.starter instead of alpha + { import = "lazyvim.plugins.extras.ui.mini-starter" }, + + -- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc + { import = "lazyvim.plugins.extras.lang.json" }, + + -- add any tools you want to have installed below + { + "williamboman/mason.nvim", + opts = { + ensure_installed = { + "stylua", + "shellcheck", + "shfmt", + "flake8", + }, + }, + }, + + -- Use for completion and snippets (supertab) + { + "hrsh7th/nvim-cmp", + dependencies = { + "hrsh7th/cmp-emoji", + }, + ---@param opts cmp.ConfigSchema + opts = function(_, opts) + local has_words_before = function() + unpack = unpack or table.unpack + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil + end + + local cmp = require("cmp") + + opts.mapping = vim.tbl_extend("force", opts.mapping, { + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif vim.snippet.active({ direction = 1 }) then + vim.schedule(function() + vim.snippet.jump(1) + end) + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif vim.snippet.active({ direction = -1 }) then + vim.schedule(function() + vim.snippet.jump(-1) + end) + else + fallback() + end + end, { "i", "s" }), + }) + end, + }, +} diff --git a/config/nvim/lua/plugins/hexedit.lua b/config/nvim/lua/plugins/hexedit.lua new file mode 100644 index 0000000..181f90d --- /dev/null +++ b/config/nvim/lua/plugins/hexedit.lua @@ -0,0 +1 @@ +return { 'RaafatTurki/hex.nvim' } diff --git a/config/nvim/lua/plugins/lsp.lua b/config/nvim/lua/plugins/lsp.lua new file mode 100644 index 0000000..e20529b --- /dev/null +++ b/config/nvim/lua/plugins/lsp.lua @@ -0,0 +1,21 @@ +return { + { + "neovim/nvim-lspconfig", + opts = { + servers = { + clangd = { + cmd = { + "clangd", + "--background-index", + "--clang-tidy", + "--header-insertion=iwyu", + "--completion-style=detailed", + "--function-arg-placeholders", + "--fallback-style=llvm", + "--enable-config", + }, + }, + }, + }, + }, +} diff --git a/config/nvim/lua/plugins/lualine.lua b/config/nvim/lua/plugins/lualine.lua new file mode 100644 index 0000000..9c901bc --- /dev/null +++ b/config/nvim/lua/plugins/lualine.lua @@ -0,0 +1,14 @@ +return { + { + "nvim-lualine/lualine.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + event = "VeryLazy", + opts = function() + return { + theme = "gruvbox_dark", + section_separators = "", + component_separators = "", + } + end, + }, +} diff --git a/config/nvim/lua/plugins/mason.lua b/config/nvim/lua/plugins/mason.lua new file mode 100644 index 0000000..6ac2ec7 --- /dev/null +++ b/config/nvim/lua/plugins/mason.lua @@ -0,0 +1,4 @@ +return { + { "mason-org/mason-lspconfig.nvim", enabled = false }, + { "mason-org/mason.nvim", enabled = false }, +} diff --git a/config/nvim/lua/plugins/matchparen.lua b/config/nvim/lua/plugins/matchparen.lua new file mode 100644 index 0000000..1ccf3c0 --- /dev/null +++ b/config/nvim/lua/plugins/matchparen.lua @@ -0,0 +1,6 @@ +return { + "monkoose/matchparen.nvim", + config = function() + require("matchparen").setup() + end, +} diff --git a/config/nvim/lua/plugins/render-markdown.lua b/config/nvim/lua/plugins/render-markdown.lua new file mode 100644 index 0000000..283ba7a --- /dev/null +++ b/config/nvim/lua/plugins/render-markdown.lua @@ -0,0 +1,10 @@ +return { + 'MeanderingProgrammer/render-markdown.nvim', + ft = "markdown", + dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-mini/mini.nvim' }, -- if you use the mini.nvim suite + -- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-mini/mini.icons' }, -- if you use standalone mini plugins + -- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, -- if you prefer nvim-web-devicons + ---@module 'render-markdown' + ---@type render.md.UserConfig + opts = {}, +} diff --git a/config/nvim/lua/plugins/rustacean.lua b/config/nvim/lua/plugins/rustacean.lua new file mode 100644 index 0000000..849db6e --- /dev/null +++ b/config/nvim/lua/plugins/rustacean.lua @@ -0,0 +1,5 @@ +return { + "mrcjkb/rustaceanvim", + version = "^6", -- Recommended + lazy = false, -- This plugin is already lazy +} diff --git a/config/nvim/lua/plugins/typst-preview.lua b/config/nvim/lua/plugins/typst-preview.lua new file mode 100644 index 0000000..9e4a5d1 --- /dev/null +++ b/config/nvim/lua/plugins/typst-preview.lua @@ -0,0 +1,12 @@ +return { + "chomosuke/typst-preview.nvim", + lazy = false, -- or ft = 'typst' + version = "1.*", + dependencies_bin = { + ["tinymist"] = "/usr/bin/tinymist", + ["websocat"] = "/usr/bin/websocat", + }, + build = function() + require("typst-preview").update() + end, +} diff --git a/config/nvim/lua/plugins/venv-selector.lua b/config/nvim/lua/plugins/venv-selector.lua new file mode 100644 index 0000000..2e4f3cc --- /dev/null +++ b/config/nvim/lua/plugins/venv-selector.lua @@ -0,0 +1,13 @@ +return { + "linux-cultist/venv-selector.nvim", + cmd = "VenvSelect", + enable = false, + opts = { + options = { + notify_user_on_venv_activation = true, + }, + }, + -- Call config for Python files and load the cached venv automatically + ft = "python", + keys = { { "cv", ":VenvSelect", desc = "Select VirtualEnv", ft = "python" } }, +} diff --git a/config/nvim/lua/plugins/yuck.lua b/config/nvim/lua/plugins/yuck.lua new file mode 100644 index 0000000..1a0b397 --- /dev/null +++ b/config/nvim/lua/plugins/yuck.lua @@ -0,0 +1,3 @@ +return { + { "elkowar/yuck.vim" }, +} diff --git a/config/nvim/stylua.toml b/config/nvim/stylua.toml new file mode 100644 index 0000000..5d6c50d --- /dev/null +++ b/config/nvim/stylua.toml @@ -0,0 +1,3 @@ +indent_type = "Spaces" +indent_width = 2 +column_width = 120 \ No newline at end of file diff --git a/.config/picom/picom.conf b/config/picom/picom.conf similarity index 100% rename from .config/picom/picom.conf rename to config/picom/picom.conf diff --git a/.config/rofi/config b/config/rofi/config similarity index 100% rename from .config/rofi/config rename to config/rofi/config diff --git a/.config/sway/config b/config/sway/config similarity index 100% rename from .config/sway/config rename to config/sway/config diff --git a/.config/waybar/config b/config/waybar/config similarity index 100% rename from .config/waybar/config rename to config/waybar/config diff --git a/config/zsh/.zprezto/.editorconfig b/config/zsh/.zprezto/.editorconfig new file mode 100644 index 0000000..42dd37a --- /dev/null +++ b/config/zsh/.zprezto/.editorconfig @@ -0,0 +1,9 @@ +[*] +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +[{.gitattributes,.gitignore,.gitmodules}] +indent_style = tab diff --git a/config/zsh/.zprezto/.github/ISSUE_TEMPLATE.md b/config/zsh/.zprezto/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..e39ca09 --- /dev/null +++ b/config/zsh/.zprezto/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,24 @@ + + +### Description + + +### Expected behavior + + + +### Actual behavior + + + +### Steps to Reproduce + +1. [First Step] +2. [Second Step] +3. [and so on...] + +### Versions + + - Prezto commit: + - ZSH version: + - OS information: diff --git a/config/zsh/.zprezto/.github/PULL_REQUEST_TEMPLATE.md b/config/zsh/.zprezto/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..b8548b6 --- /dev/null +++ b/config/zsh/.zprezto/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,10 @@ +Please be sure to check out our [contributing guidelines](https://github.com/sorin-ionescu/prezto/blob/master/CONTRIBUTING.md) +before submitting your pull request. + +Fixes # + +## Proposed Changes + + - + - + - diff --git a/config/zsh/.zprezto/.gitignore b/config/zsh/.zprezto/.gitignore new file mode 100644 index 0000000..05e53b6 --- /dev/null +++ b/config/zsh/.zprezto/.gitignore @@ -0,0 +1,4 @@ +*.zwc +*.zwc.old +modules/*/cache.zsh +contrib diff --git a/config/zsh/.zprezto/.gitmodules b/config/zsh/.zprezto/.gitmodules new file mode 100644 index 0000000..6b99d77 --- /dev/null +++ b/config/zsh/.zprezto/.gitmodules @@ -0,0 +1,31 @@ +[submodule "modules/autosuggestions/external"] + path = modules/autosuggestions/external + url = https://github.com/zsh-users/zsh-autosuggestions.git +[submodule "modules/history-substring-search/external"] + path = modules/history-substring-search/external + url = https://github.com/zsh-users/zsh-history-substring-search.git +[submodule "modules/syntax-highlighting/external"] + path = modules/syntax-highlighting/external + url = https://github.com/zsh-users/zsh-syntax-highlighting.git +[submodule "modules/completion/external"] + path = modules/completion/external + url = https://github.com/zsh-users/zsh-completions.git +[submodule "modules/prompt/external/powerline"] + path = modules/prompt/external/powerline + url = https://github.com/davidjrice/prezto_powerline.git +[submodule "modules/prompt/external/agnoster"] + path = modules/prompt/external/agnoster + url = https://github.com/agnoster/agnoster-zsh-theme.git +[submodule "modules/prompt/external/pure"] + path = modules/prompt/external/pure + url = https://github.com/sindresorhus/pure.git +[submodule "modules/fasd/external"] + path = modules/fasd/external + url = https://github.com/whjvenyl/fasd.git +[submodule "modules/prompt/external/async"] + path = modules/prompt/external/async + url = https://github.com/mafredri/zsh-async.git +[submodule "modules/prompt/external/powerlevel10k"] + path = modules/prompt/external/powerlevel10k + url = https://github.com/romkatv/powerlevel10k.git + shallow = true diff --git a/config/zsh/.zprezto/CONTRIBUTING.md b/config/zsh/.zprezto/CONTRIBUTING.md new file mode 100644 index 0000000..6bcb36b --- /dev/null +++ b/config/zsh/.zprezto/CONTRIBUTING.md @@ -0,0 +1,74 @@ +# Contributing + +This project would not exist without all of its users and [contributors][1]. + +If you have ideas on how to make the configuration easier to maintain or +improve its performance, do not hesitate to fork and send pull requests. + +## Issue Reporting + +- Check that the issue has not already been reported. +- Check that the issue has not already been fixed in the latest code. +- Open an issue with a clear title and description in grammatically correct, + complete sentences. + +## Pull Request + +- Read [how to properly contribute to open source projects on GitHub][2]. +- Use a topic branch to easily amend a pull request later, if necessary. +- Write [good commit messages][3]. +- Squash commits on the topic branch before opening a pull request. +- Use the same coding style and spacing. +- Open a [pull request][4] that relates to but one subject with a clear title + and description in grammatically correct, complete sentences. + +### Code Style + +This project follows the [Google Shell Style Guide][5] when possible. However, +there are a number of additional things to keep in mind. + +- Local variables should be used whenever possible. +- Prefer `zstyle` over environment variables for configuration. +- Prefer (( ... )) over [[ ... ]] for arithmetic expression. +- Use the function keyword to define functions. +- The 80 character hard limit can be waived for readability. + +### Using an Alternative *zprezto* Directory + +To work on Prezto without affecting your current configuration: + +```sh +mkdir devel-zprezto +cd devel-zprezto +git clone --recursive https://github.com/sorin-ionescu/prezto.git .zprezto +ZDOTDIR=$(pwd) +echo "Your development ZDOTDIR is $ZDOTDIR" +setopt EXTENDED_GLOB +for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do + ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}" +done +``` + +Then to start zsh in this development environment you will run: + +```console +ZDOTDIR=/path/to/devel-zprezto zsh +``` + +### Modules + +- A *README.md* must be present. +- Large functions must be placed in a *functions* directory. +- Functions that take arguments must have completion. + +### Themes + +- A screenshots section must be present in the file header. +- The pull request description must have [embedded screenshots][6]. + +[1]: https://github.com/sorin-ionescu/prezto/contributors +[2]: https://gun.io/blog/how-to-github-fork-branch-and-pull-request +[3]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html +[4]: https://help.github.com/articles/using-pull-requests +[5]: https://google.github.io/styleguide/shell.xml +[6]: https://github.github.com/gfm/#images diff --git a/config/zsh/.zprezto/LICENSE b/config/zsh/.zprezto/LICENSE new file mode 100644 index 0000000..d417147 --- /dev/null +++ b/config/zsh/.zprezto/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2009-2011 Robby Russell and contributors +Copyright (c) 2011-2017 Sorin Ionescu and contributors + +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 diff --git a/config/zsh/.zprezto/README.md b/config/zsh/.zprezto/README.md new file mode 100644 index 0000000..40163fa --- /dev/null +++ b/config/zsh/.zprezto/README.md @@ -0,0 +1,160 @@ +# Prezto — Instantly Awesome Zsh + +Prezto is the configuration framework for [Zsh][1]; it enriches the command line +interface environment with sane defaults, aliases, functions, auto completion, +and prompt themes. + +## Installation + +### Manual + +Prezto will work with any recent release of Zsh, but the minimum required +version is **4.3.11**. + +01. Launch Zsh: + + ```console + zsh + ``` + +02. Clone the repository: + + ```console + git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto" + ``` + +
+ Optional: Installing in $XDG_CONFIG_HOME + + Optionally, if you already have `$XDG_CONFIG_HOME` configured (usually as + _`$HOME/.config`_ by default) and intend to install Prezto under + _`$XDG_CONFIG_HOME/zsh`_ instead, you can clone the repository there and + configure `$ZDOTDIR` separately if not already configured. + + - Clone the repository: + + ```console + git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-${XDG_CONFIG_HOME:-$HOME/.config}/zsh}/.zprezto" + ``` + + - Configure `$XDG_CONFIG_HOME` and `$ZDOTDIR` in _`$HOME/.zshenv`_: + + ```sh + export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:=$HOME/.config}" + [[ -d $XDG_CONFIG_HOME/zsh ]] && export ZDOTDIR="$XDG_CONFIG_HOME/zsh" + source "$ZDOTDIR/.zshenv" + ``` + +
+ +03. Create a new Zsh configuration by copying/linking the Zsh configuration + files provided: + + ```console + setopt EXTENDED_GLOB + for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do + ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}" + done + ``` + + **Note:** If you already have any of the given configuration files, `ln` in + the above operation will cause an error. In simple cases, you can load + Prezto by adding the line `source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"` to + the bottom of your _`${ZDOTDIR:-$HOME}/.zshrc`_ and keep the rest of your + Zsh configuration intact. For more complicated setups, we recommend that you + back up your original configs and replace them with the provided Prezto + [_`runcoms`_][10]. + +04. Set Zsh as your default shell: + + ```console + chsh -s /bin/zsh + ``` + +05. Open a new Zsh terminal window or tab. + +### Troubleshooting + +If you are not able to find certain commands after switching to Prezto, modify +the `PATH` variable in _`${ZDOTDIR:-$HOME}/.zprofile`_ then open a new Zsh +terminal window or tab. + +## Updating + +Run `zprezto-update` to automatically check if there is an update to Prezto. +If there are no file conflicts, Prezto and its submodules will be automatically +updated. If there are conflicts you will be instructed to go into the +`$ZPREZTODIR` directory and resolve them yourself. + +To pull the latest changes and update submodules manually: + +```console +cd $ZPREZTODIR +git pull +git submodule sync --recursive +git submodule update --init --recursive +``` + +## Usage + +Prezto has many features disabled by default. Read the source code and the +accompanying README files to learn about what is available. + +### Modules + +01. Browse [_`modules`_][9] to see what is available. +02. Load the modules you need in _`${ZDOTDIR:-$HOME}/.zpreztorc`_ and then open + a new Zsh terminal window or tab. + +### Themes + +01. For a list of themes, type `prompt -l`. +02. To preview a theme, type `prompt -p name`. +03. Load the theme you like in _`${ZDOTDIR:-$HOME}/.zpreztorc`_ and then + open a new Zsh terminal window or tab. + + ![sorin theme][2] + Note that the [_`git`_][11] module may be required for special symbols to + appear, such as those on the right of the above image. Add `'git'` to the + `pmodule` list (under `zstyle ':prezto:load' pmodule \` in your + _`${ZDOTDIR:-$HOME}/.zpreztorc`_) to enable this module. + +### External Modules + +01. By default modules will be loaded from [_`/modules`_][9] and _`/contrib`_. +02. Additional module directories can be added to the + `:prezto:load:pmodule-dirs` setting in _`${ZDOTDIR:-$HOME}/.zpreztorc`_. + + Note that module names need to be unique or they will cause an error when + loading. + + ```sh + zstyle ':prezto:load' pmodule-dirs $HOME/.zprezto-contrib + ``` + +## Customization + +The project is managed via [Git][3]. We highly recommend that you fork this +project so that you can commit your changes and push them to your fork on +[GitHub][4] to preserve them. If you do not know how to use Git, follow this +[tutorial][5] and bookmark this [reference][6]. + +## Resources + +The [Zsh Reference Card][7] and the [zsh-lovers][8] man page are indispensable. + +## License + +This project is licensed under the MIT License. + +[1]: https://www.zsh.org +[2]: https://i.imgur.com/nrGV6pg.png "sorin theme" +[3]: https://git-scm.com +[4]: https://github.com +[5]: https://gitimmersion.com +[6]: https://git.github.io/git-reference/ +[7]: http://www.bash2zsh.com/zsh_refcard/refcard.pdf +[8]: https://grml.org/zsh/zsh-lovers.html +[9]: modules#readme +[10]: runcoms#readme +[11]: modules/git#readme diff --git a/config/zsh/.zprezto/init.zsh b/config/zsh/.zprezto/init.zsh new file mode 100644 index 0000000..edd2838 --- /dev/null +++ b/config/zsh/.zprezto/init.zsh @@ -0,0 +1,197 @@ +# +# Initializes Prezto. +# +# Authors: +# Sorin Ionescu +# + +# +# Version Check +# + +# Check for the minimum supported version. +min_zsh_version='4.3.11' +if ! autoload -Uz is-at-least || ! is-at-least "$min_zsh_version"; then + printf "prezto: old shell detected, minimum required: %s\n" "$min_zsh_version" >&2 + return 1 +fi +unset min_zsh_version + +# zprezto convenience updater +# The function is surrounded by ( ) instead of { } so it starts in a subshell +# and won't affect the environment of the calling shell +function zprezto-update { + ( + function cannot-fast-forward { + local STATUS="$1" + [[ -n "${STATUS}" ]] && printf "%s\n" "${STATUS}" + printf "Unable to fast-forward the changes. You can fix this by " + printf "running\ncd '%s' and then\n'git pull' " "${ZPREZTODIR}" + printf "to manually pull and possibly merge in changes\n" + } + builtin cd -q -- "${ZPREZTODIR}" || return 7 + local orig_branch="$(git symbolic-ref HEAD 2> /dev/null | cut -d '/' -f 3)" + if [[ "$orig_branch" == "master" ]]; then + git fetch || return "$?" + local UPSTREAM=$(git rev-parse '@{u}') + local LOCAL=$(git rev-parse HEAD) + local REMOTE=$(git rev-parse "$UPSTREAM") + local BASE=$(git merge-base HEAD "$UPSTREAM") + if [[ $LOCAL == $REMOTE ]]; then + printf "There are no updates.\n" + return 0 + elif [[ $LOCAL == $BASE ]]; then + printf "There is an update available. Trying to pull.\n\n" + if git pull --ff-only; then + printf "Syncing submodules\n" + git submodule sync --recursive + git submodule update --init --recursive + return $? + else + cannot-fast-forward + return 1 + fi + elif [[ $REMOTE == $BASE ]]; then + cannot-fast-forward "Commits in master that aren't in upstream." + return 1 + else + cannot-fast-forward "Upstream and local have diverged." + return 1 + fi + else + printf "zprezto install at '%s' is not on the master branch " "${ZPREZTODIR}" + printf "(you're on '%s')\nUnable to automatically update.\n" "${orig_branch}" + return 1 + fi + return 1 + ) +} +# +# Module Loader +# + +# Loads Prezto modules. +function pmodload { + local -a pmodules + local -a pmodule_dirs + local -a locations + local pmodule + local pmodule_location + local pfunction_glob='^([_.]*|prompt_*_setup|README*|*~)(-.N:t)' + + # Load in any additional directories and warn if they don't exist + zstyle -a ':prezto:load' pmodule-dirs 'user_pmodule_dirs' + for user_dir in "$user_pmodule_dirs[@]"; do + if [[ ! -d "$user_dir" ]]; then + echo "$0: Missing user module dir: $user_dir" + fi + done + + pmodule_dirs=("$ZPREZTODIR/modules" "$ZPREZTODIR/contrib" "$user_pmodule_dirs[@]") + + # $argv is overridden in the anonymous function. + pmodules=("$argv[@]") + + # Load Prezto modules. + for pmodule in "$pmodules[@]"; do + if zstyle -t ":prezto:module:$pmodule" loaded 'yes' 'no'; then + continue + else + locations=(${pmodule_dirs:+${^pmodule_dirs}/$pmodule(-/FN)}) + if (( ${#locations} > 1 )); then + if ! zstyle -t ':prezto:load' pmodule-allow-overrides 'yes'; then + print "$0: conflicting module locations: $locations" + continue + fi + elif (( ${#locations} < 1 )); then + print "$0: no such module: $pmodule" + continue + fi + + # Grab the full path to this module + pmodule_location=${locations[-1]} + + # Add functions to $fpath. + fpath=(${pmodule_location}/functions(-/FN) $fpath) + + function { + local pfunction + + # Extended globbing is needed for listing autoloadable function directories. + setopt LOCAL_OPTIONS EXTENDED_GLOB + + # Load Prezto functions. + for pfunction in ${pmodule_location}/functions/$~pfunction_glob; do + autoload -Uz "$pfunction" + done + } + + if [[ -s "${pmodule_location}/init.zsh" ]]; then + source "${pmodule_location}/init.zsh" + elif [[ -s "${pmodule_location}/${pmodule}.plugin.zsh" ]]; then + source "${pmodule_location}/${pmodule}.plugin.zsh" + fi + + if (( $? == 0 )); then + zstyle ":prezto:module:$pmodule" loaded 'yes' + else + # Remove the $fpath entry. + fpath[(r)${pmodule_location}/functions]=() + + function { + local pfunction + + # Extended globbing is needed for listing autoloadable function + # directories. + setopt LOCAL_OPTIONS EXTENDED_GLOB + + # Unload Prezto functions. + for pfunction in ${pmodule_location}/functions/$~pfunction_glob; do + unfunction "$pfunction" + done + } + + zstyle ":prezto:module:$pmodule" loaded 'no' + fi + fi + done +} + +# +# Prezto Initialization +# + +# This finds the directory prezto is installed to so plugin managers don't need +# to rely on dirty hacks to force prezto into a directory. Additionally, it +# needs to be done here because inside the pmodload function ${0:h} evaluates to +# the current directory of the shell rather than the prezto dir. +ZPREZTODIR=${0:h} + +# Source the Prezto configuration file. +if [[ -s "${ZDOTDIR:-$HOME}/.zpreztorc" ]]; then + source "${ZDOTDIR:-$HOME}/.zpreztorc" +fi + +# Disable color and theme in dumb terminals. +if [[ $TERM == dumb ]]; then + zstyle ':prezto:*:*' color 'no' + zstyle ':prezto:module:prompt' theme 'off' +fi + +# Load Zsh modules. +zstyle -a ':prezto:load' zmodule 'zmodules' +for zmodule ("$zmodules[@]") zmodload "zsh/${(z)zmodule}" +unset zmodule{s,} + +# Load more specific 'run-help' function from $fpath. +(( $+aliases[run-help] )) && unalias run-help && autoload -Uz run-help + +# Autoload Zsh functions. +zstyle -a ':prezto:load' zfunction 'zfunctions' +for zfunction ("$zfunctions[@]") autoload -Uz "$zfunction" +unset zfunction{s,} + +# Load Prezto modules. +zstyle -a ':prezto:load' pmodule 'pmodules' +pmodload "$pmodules[@]" +unset pmodules diff --git a/config/zsh/.zprezto/modules/README.md b/config/zsh/.zprezto/modules/README.md new file mode 100644 index 0000000..cc9dfb1 --- /dev/null +++ b/config/zsh/.zprezto/modules/README.md @@ -0,0 +1,166 @@ +# Modules + +Load modules in _`${ZDOTDIR:-$HOME}/.zpreztorc`_. The order matters. + +```sh +zstyle ':prezto:load' pmodule 'environment' 'terminal' +``` + +## Archive + +Provides functions to list and extract archives. + +## Autosuggestions + +Integrates zsh-autosuggestions into Prezto. + +## Command-Not-Found + +Loads the command-not-found tool on macOS or Debian-based distributions. + +## Completion + +Loads and configures TAB completion and provides additional +completions from the zsh-completions project. + +## Directory + +Sets directory options and defines directory aliases. + +## DNF + +Defines _dnf_ aliases. + +## Dpkg + +Defines _dpkg_ aliases and functions. + +## Editor + +Sets key bindings. + +## Emacs + +Enables Emacs dependency management. + +## Environment + +Sets general shell options and defines environment variables. + +## Fasd + +Maintains a frequently used file and directory list for fast access. + +## Git + +Enhances the Git distributed version control system by providing aliases, +functions and by exposing repository status information to prompts. + +## GNU Utility + +Provides for the interactive use of GNU utilities on non-GNU systems. + +## GPG + +Provides for an easier use of GPG by setting up gpg-agent. + +## Haskell + +Enables local Haskell package installation. + +## Helper + +Provides helper functions for developing modules. + +## History + +Sets history options and defines history aliases. + +## History Substring Search + +Integrates zsh-history-substring-search into Prezto. + +## Homebrew + +Defines Homebrew aliases. + +## MacPorts + +Defines MacPorts aliases and adds MacPorts directories to path variables. + +## Node.js + +Provides utility functions for Node.js and loads npm completion. + +## OCaml + +Initializes OCaml package management. + +## OSX + +Defines macOS aliases and functions. + +## Pacman + +Provides aliases and functions for the Pacman package manager and frontends. + +## Perl + +Enables local Perl module installation on macOS and defines alises. + +## Prompt + +Loads prompt themes. + +## Python + +Enables local Python and local Python package installation. + +## Ruby on Rails + +Defines Ruby on Rails aliases. + +## Rsync + +Defines rsync aliases. + +## Ruby + +Configures Ruby local gem installation, loads version managers, and defines +aliases. + +## GNU Screen + +Defines GNU Screen aliases and provides for auto launching it at start-up. + +## Spectrum + +Provides for easier use of 256 colors and effects. + +## SSH + +Provides for an easier use of SSH by setting up ssh-agent. + +## Syntax Highlighting + +Integrates zsh-syntax-highlighting into Prezto. + +## Terminal + +Sets terminal window and tab titles. + +## Tmux + +Defines tmux aliases and provides for auto launching it at start-up. + +## Utility + +Defines general aliases and functions. + +## Wake-on-LAN + +This module provides a wrapper around the wakeonlan tool. + +## Yum + +Defines yum aliases. diff --git a/config/zsh/.zprezto/modules/archive/README.md b/config/zsh/.zprezto/modules/archive/README.md new file mode 100644 index 0000000..be63788 --- /dev/null +++ b/config/zsh/.zprezto/modules/archive/README.md @@ -0,0 +1,53 @@ +# Archive + +Provides functions to create, list, and extract archives. + +This module must be loaded _before_ the [_`completion`_][1] module so that the +provided completion definitions are loaded automatically by _`completion`_ +module. + +## Functions + +- `archive` creates an archive based on the provided archive name. +- `lsarchive` lists the contents of one or more archives. +- `unarchive` extracts the contents of one or more archives. + +## Supported Formats + +The following archive formats are supported when the required utilities are +installed: + +- _.tar.gz_, _.tgz_ require `tar` (optionally `pigz`). +- _.tar.bz2_, _.tbz_ require `tar` (optionally `pbzip2`). +- _.tar.xz_, _.txz_ require `tar` with _xz_ support. +- _.tar.zma_, _.tlz_ require `tar` with _lzma_ support. +- _.tar_ requires `tar`. +- _.gz_ requires `gunzip`. +- _.bz2_ requires `bunzip2`. +- _.xz_ requires `unxz`. +- _.lzma_ requires `unlzma`. +- _.Z_ requires `uncompress`. +- _.zip_, _.jar_ requires `unzip`. +- _.rar_ requires `rar` (needed for `archive` support), `unrar` or `lsar` and `unar`. +- _.7z_ requires `7za`. +- _.deb_ requires `ar`, `tar`. + +Additionally, if `pigz` and/or `pbzip2` are installed, `archive` will use them +over their traditional counterparts, `gzip` and `bzip2` respectively, to take +full advantage of all available CPU cores for compression. + +## Alternatives + +Specifically on macOS, [The Unarchiver][2] provides a similar command line tool +which doesn't depend on a number of other programs being installed. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][3]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) +- [Matt Hamilton](https://github.com/Eriner) + +[1]: ../completion#readme +[2]: https://theunarchiver.com/command-line +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/archive/functions/_lsarchive b/config/zsh/.zprezto/modules/archive/functions/_lsarchive new file mode 100644 index 0000000..bcbfbd6 --- /dev/null +++ b/config/zsh/.zprezto/modules/archive/functions/_lsarchive @@ -0,0 +1,13 @@ +#compdef lsarchive +#autoload + +# +# Completes lsarchive. +# +# Authors: +# Sorin Ionescu +# + +_arguments \ + '(-v --verbose)'{-v,--remove}'[verbose archive listing]' \ + "*::archive file:_files -g '(#i)*.(tar|tgz|tbz|tbz2|txz|tlz|gz|bz2|xz|lzma|Z|zip|zst|jar|rar|7z)(-.)'" && return 0 diff --git a/config/zsh/.zprezto/modules/archive/functions/_unarchive b/config/zsh/.zprezto/modules/archive/functions/_unarchive new file mode 100644 index 0000000..6a940b1 --- /dev/null +++ b/config/zsh/.zprezto/modules/archive/functions/_unarchive @@ -0,0 +1,13 @@ +#compdef unarchive +#autoload + +# +# Completes unarchive. +# +# Authors: +# Sorin Ionescu +# + +_arguments \ + '(-r --remove)'{-r,--remove}'[remove archive]' \ + "*::archive file:_files -g '(#i)*.(tar|tgz|tbz|tbz2|txz|tlz|gz|bz2|xz|lzma|Z|zip|zst|jar|rar|7z|deb)(-.)'" && return 0 diff --git a/config/zsh/.zprezto/modules/archive/functions/archive b/config/zsh/.zprezto/modules/archive/functions/archive new file mode 100644 index 0000000..b6f9523 --- /dev/null +++ b/config/zsh/.zprezto/modules/archive/functions/archive @@ -0,0 +1,75 @@ +# +# Creates archive file +# +# Authors: +# Matt Hamilton +# + +# function archive { + +local archive_name path_to_archive _gzip_bin _bzip2_bin _xz_bin _zstd_bin + +if (( $# < 2 )); then + cat >&2 < +# + +# function lsarchive { + +local verbose + +if (( $# == 0 )); then + cat >&2 <. +EOF +fi + +if [[ "$1" == "-v" || "$1" == "--verbose" ]]; then + verbose=0 + shift +fi + +while (( $# > 0 )); do + if [[ ! -s "$1" ]]; then + print "$0: file not valid: $1" >&2 + shift + continue + fi + + case "$1:l" in + (*.tar.gz|*.tgz) tar t${verbose:+v}vzf "$1" ;; + (*.tar.bz2|*.tbz|*.tbz2) tar t${verbose:+v}jf "$1" ;; + (*.tar.xz|*.txz) tar --xz --help &> /dev/null \ + && tar --xz -t${verbose:+v}f "$1" \ + || xzcat "$1" | tar t${verbose:+v}f - ;; + (*.tar.zma|*.tlz) tar --lzma --help &> /dev/null \ + && tar --lzma -t${verbose:+v}f "$1" \ + || lzcat "$1" | tar x${verbose:+v}f - ;; + (*.tar.zst|*.tzst) tar -I zstd -t${verbose:+v}f "$1" ;; + (*.tar) tar t${verbose:+v}f "$1" ;; + (*.zip|*.jar) unzip -l${verbose:+v} "$1" ;; + (*.rar) ( (( $+commands[unrar] )) \ + && unrar ${${verbose:+v}:-l} "$1" ) \ + || ( (( $+commands[rar] )) \ + && rar ${${verbose:+v}:-l} "$1" ) \ + || lsar ${verbose:+-l} "$1" ;; + (*.7z) 7za l "$1" ;; + (*) + print "$0: cannot list: $1" >&2 + success=1 + ;; + esac + + shift +done + +# } diff --git a/config/zsh/.zprezto/modules/archive/functions/unarchive b/config/zsh/.zprezto/modules/archive/functions/unarchive new file mode 100644 index 0000000..3e58b86 --- /dev/null +++ b/config/zsh/.zprezto/modules/archive/functions/unarchive @@ -0,0 +1,111 @@ +# +# Extracts the contents of archives. +# +# Authors: +# Sorin Ionescu +# + +# function unarchive { + +local remove_archive +local success +local file_name +local file_path +local extract_dir +local _gzip_bin _bzip2_bin _xz_bin _zstd_bin + +if (( $# == 0 )); then + cat >&2 <. +EOF +fi + +remove_archive=1 +if [[ "$1" == "-r" || "$1" == "--remove" ]]; then + remove_archive=0 + shift +fi + +# here, we check for dropin/multi-threaded replacements +# this should eventually be moved to modules/archive/init.zsh +# as a global alias +if (( $+commands[unpigz] )); then + _gzip_bin='unpigz' +else + _gzip_bin='gunzip' +fi + +if (( $+commands[pixz] )); then + _xz_bin='pixz -d' +else + _xz_bin='xz' +fi + +if (( $+commands[lbunzip2] )); then + _bzip2_bin='lbunzip2' +elif (( $+commands[pbunzip2] )); then + _bzip2_bin='pbunzip2' +else + _bzip2_bin='bunzip2' +fi + +_zstd_bin='zstd' + +while (( $# > 0 )); do + if [[ ! -s "$1" ]]; then + print "$0: file not valid: $1" >&2 + shift + continue + fi + + success=0 + file_name="${1:t}" + file_path="${1:A}" + extract_dir="${file_name:r}" + case "$1:l" in + (*.tar.gz|*.tgz) tar -xvf "$1" --use-compress-program="${_gzip_bin}" ;; + (*.tar.bz2|*.tbz|*.tbz2) tar -xvf "$1" --use-compress-program="${_bzip2_bin}" ;; + (*.tar.xz|*.txz) tar -xvf "$1" --use-compress-program="${_xz_bin}" ;; + (*.tar.zma|*.tlz) tar --lzma --help &> /dev/null \ + && tar --lzma -xvf "$1" \ + || lzcat "$1" | tar -xvf - ;; + (*.tar.zst|*.tzst) tar -xvf "$1" --use-compress-program="${_zstd_bin}" ;; + (*.tar) tar -xvf "$1" ;; + (*.gz) gunzip "$1" ;; + (*.bz2) bunzip2 "$1" ;; + (*.xz) unxz "$1" ;; + (*.lzma) unlzma "$1" ;; + (*.Z) uncompress "$1" ;; + (*.zip|*.jar) unzip "$1" -d $extract_dir ;; + (*.rar) ( (( $+commands[unrar] )) \ + && unrar x -ad "$1" ) \ + || ( (( $+commands[rar] )) \ + && rar x -ad "$1" ) \ + || unar -d "$1" ;; + (*.7z) 7za x "$1" ;; + (*.deb) + mkdir -p "$extract_dir/control" + mkdir -p "$extract_dir/data" + cd "$extract_dir"; ar vx "${file_path}" > /dev/null + cd control; tar xvf ../control.tar.* + cd ../data; tar xvf ../data.tar.* + cd ..; rm control.tar.* data.tar.* debian-binary + cd .. + ;; + (*) + print "$0: cannot extract: $1" >&2 + success=1 + ;; + esac + + (( success = $success > 0 ? $success : $? )) + (( $success == 0 )) && (( $remove_archive == 0 )) && rm "$1" + shift +done + +# } diff --git a/config/zsh/.zprezto/modules/autosuggestions/README.md b/config/zsh/.zprezto/modules/autosuggestions/README.md new file mode 100644 index 0000000..8aedb31 --- /dev/null +++ b/config/zsh/.zprezto/modules/autosuggestions/README.md @@ -0,0 +1,62 @@ +# Autosuggestions + +Integrates [zsh-autosuggestions][1] into Prezto, which implements the +[Fish shell][2]'s autosuggestions feature, where the user can type in any part +of a previously entered command and Zsh suggests commands as you type based on +history and completions. + +If this module is used in conjunction with the [_`syntax-highlighting`_][3] +module, this module must be loaded _after_ the _`syntax-highlighting`_ module. + +Additionally, if this module is used in conjunction with the +[_`history-substring-search`_][4] module, this module must be loaded _after_ the +_`history-substring-search`_ module as well. + +To elaborate, the relative order of loading the modules would be +_`syntax-highlighting`_, _`history-substring-search`_ and _`autosuggestions`_. + +## Contributors + +New features and bug fixes should be submitted to the [zsh-autosuggestions][1] +project according to its rules and regulations. This module will be synchronized +against it. + +## Settings + +### Highlighting + +If colors are enabled, _autosuggestions_ will automatically highlight +positive results. + +To enable highlighting for this module only, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:autosuggestions' color 'yes' +``` + +To set the query found color, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:autosuggestions:color' found '' +``` + +## Troubleshooting + +### Autosuggestions from previous sessions don't show up + +For autosuggestions from previous shell sessions to work, please make sure you +also have the `history` module enabled. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][5]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/tarruda/zsh-autosuggestions +[2]: https://fishshell.com +[3]: ../syntax-highlighting#readme +[4]: ../history-substring-search#readme +[5]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/autosuggestions/init.zsh b/config/zsh/.zprezto/modules/autosuggestions/init.zsh new file mode 100644 index 0000000..a3a772e --- /dev/null +++ b/config/zsh/.zprezto/modules/autosuggestions/init.zsh @@ -0,0 +1,35 @@ +# +# Integrates zsh-autosuggestions into Prezto. +# +# Authors: +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'editor' + +# Source module files. +source "${0:h}/external/zsh-autosuggestions.zsh" || return 1 + +# +# Highlighting +# + +# Set highlight color, default 'fg=8'. +zstyle -s ':prezto:module:autosuggestions:color' found \ + 'ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE' || ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8' + +# Disable highlighting. +if ! zstyle -t ':prezto:module:autosuggestions' color; then + ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='' +fi + +# +# Key Bindings +# + +if [[ -n "$key_info" ]]; then + # vi + bindkey -M viins "$key_info[Control]F" vi-forward-word + bindkey -M viins "$key_info[Control]E" vi-add-eol +fi diff --git a/config/zsh/.zprezto/modules/command-not-found/README.md b/config/zsh/.zprezto/modules/command-not-found/README.md new file mode 100644 index 0000000..a44b1b6 --- /dev/null +++ b/config/zsh/.zprezto/modules/command-not-found/README.md @@ -0,0 +1,31 @@ +# Command-Not-Found + +When you try to use a command that is not available locally, searches the +package manager for a package offering that command and suggests the proper +install command. + +Debian and Arch Linux based distributions use the [`command-not-found`][1] tool. + +macOS uses Homebrew's [`command-not-found` clone][2]. This module will +automatically load it without needing to manually source `handler.sh` from +`.zshrc` per the [instructions][3]. + +Note: Prior to [Homebrew 4.6.12][4], you may have also needed to tap the +[`command-not-found` Homebrew repository][5]. This will still work as a +fallback when the `command-not-found` handler can't be detected in Homebrew +core, but the repository has been deprecated and may print a warning. After +upgrading Homebrew, it can be untapped. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][6]._ + +- [Joseph Booker](https://github.com/sargas) +- [Indrajit Raychaudhuri](https://github.com/indrajitr) + +[1]: https://code.launchpad.net/command-not-found +[2]: https://docs.brew.sh/Command-Not-Found +[3]: https://docs.brew.sh/Command-Not-Found#install +[4]: https://github.com/Homebrew/brew/releases/tag/4.6.12 +[5]: https://github.com/Homebrew/homebrew-command-not-found +[6]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/command-not-found/init.zsh b/config/zsh/.zprezto/modules/command-not-found/init.zsh new file mode 100644 index 0000000..601986a --- /dev/null +++ b/config/zsh/.zprezto/modules/command-not-found/init.zsh @@ -0,0 +1,34 @@ +# +# Displays installation information for not found commands. +# +# Authors: +# Joseph Jon Booker +# Indrajit Raychaudhuri +# + +# Load command-not-found on Debian-based distributions. +if [[ -s /etc/zsh_command_not_found ]]; then + source /etc/zsh_command_not_found +# Load command-not-found on Arch Linux-based distributions. +elif [[ -s /usr/share/doc/pkgfile/command-not-found.zsh ]]; then + source /usr/share/doc/pkgfile/command-not-found.zsh +# Load command-not-found on macOS when Homebrew is present. Check explicitly +# for MacOS, since homebrew can be installed on Linux as a supplementary PM +elif [[ "$OSTYPE" =~ ^darwin ]] && (( $+commands[brew] )); then + homebrew_repo=${HOMEBREW_REPOSITORY:-$commands[brew]:A:h:h} + # Look for handler in Homebrew core (as of >=4.6.12), then in Taps (< 4.6.12) + for hb_cnf_handler in "$homebrew_repo"/{Library/Homebrew/command-not-found/handler.sh,Taps/homebrew/homebrew-command-not-found/handler.sh}; do + if [ -f "$hb_cnf_handler" ]; then + source "$hb_cnf_handler" + unset hb_cnf_handler homebrew_repo + break + fi + done + if [ -n "$hb_cnf_handler" ]; then + unset hb_cnf_handler homebrew_repo + return 1 + fi +# Return if requirements are not found. +else + return 1 +fi diff --git a/config/zsh/.zprezto/modules/completion/README.md b/config/zsh/.zprezto/modules/completion/README.md new file mode 100644 index 0000000..cdce9e5 --- /dev/null +++ b/config/zsh/.zprezto/modules/completion/README.md @@ -0,0 +1,55 @@ +# Completion + +Loads and configures TAB completion and provides additional +completions from the [zsh-completions][1] project. + +This module must be loaded late _after_ the _`utility`_ module and all other +modules that provide completion definitions. + +## Options + +- `COMPLETE_IN_WORD` complete from both ends of a word. +- `ALWAYS_TO_END` move cursor to the end of a completed word. +- `PATH_DIRS` perform path search even on command names with slashes. +- `AUTO_MENU` show completion menu on a successive TAB press. +- `AUTO_LIST` automatically list choices on ambiguous completion. +- `AUTO_PARAM_SLASH` if completed parameter is a directory, add a trailing + slash (`/`). +- `EXTENDED_GLOB` needed for file modification glob modifiers with _compinit_. +- `MENU_COMPLETE` do not autoselect the first completion entry. +- `FLOW_CONTROL` disable start/stop characters in shell editor. + +## Variables + +- `LS_COLORS` used by default for Zsh [standard style][2] 'list-colors'. + +## Settings + +### Ignore _`/etc/hosts`_ Entries + +To ignore certain entries from static _`/etc/hosts`_ for host completion, add +the following lines in _`${ZDOTDIR:-$HOME}/.zpreztorc`_ with the IP addresses of +the hosts as they appear in _`/etc/hosts`_. Both IP address and the associated +hostname(s) will be ignored during host completion. However, some of the entries +ignored from _`/etc/hosts`_ still might appear during completion because of +their presence in _ssh_ configuration or history). + +```sh +zstyle ':prezto:module:completion:*:hosts' etc-host-ignores \ + '0.0.0.0' '127.0.0.1' +``` + +## Contributors + +Completions should be submitted to the [zsh-completions][1] project according to +its rules and regulations. This module will be synchronized against it. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][3]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/zsh-users/zsh-completions +[2]: https://zsh.sourceforge.net/Doc/Release/Completion-System.html#Standard-Styles +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/completion/init.zsh b/config/zsh/.zprezto/modules/completion/init.zsh new file mode 100644 index 0000000..7f5de86 --- /dev/null +++ b/config/zsh/.zprezto/modules/completion/init.zsh @@ -0,0 +1,190 @@ +# +# Sets completion options. +# +# Authors: +# Robby Russell +# Sorin Ionescu +# + +# Return if requirements are not found. +if [[ $TERM == dumb ]]; then + return 1 +fi + +# Add zsh-completions to $fpath. +fpath=(${0:h}/external/src $fpath) + +# Add completion for keg-only brewed curl on macOS when available. +if (( $+commands[brew] )); then + brew_prefix=${HOMEBREW_PREFIX:-${HOMEBREW_REPOSITORY:-$commands[brew]:A:h:h}} + # $HOMEBREW_PREFIX defaults to $HOMEBREW_REPOSITORY but is explicitly set to + # /usr/local when $HOMEBREW_REPOSITORY is /usr/local/Homebrew. + # https://github.com/Homebrew/brew/blob/2a850e02d8f2dedcad7164c2f4b95d340a7200bb/bin/brew#L66-L69 + [[ $brew_prefix == '/usr/local/Homebrew' ]] && brew_prefix=$brew_prefix:h + fpath=($brew_prefix/opt/curl/share/zsh/site-functions(/N) $fpath) + unset brew_prefix +fi + +# +# Options +# + +setopt COMPLETE_IN_WORD # Complete from both ends of a word. +setopt ALWAYS_TO_END # Move cursor to the end of a completed word. +setopt PATH_DIRS # Perform path search even on command names with slashes. +setopt AUTO_MENU # Show completion menu on a successive tab press. +setopt AUTO_LIST # Automatically list choices on ambiguous completion. +setopt AUTO_PARAM_SLASH # If completed parameter is a directory, add a trailing slash. +setopt EXTENDED_GLOB # Needed for file modification glob modifiers with compinit. +unsetopt MENU_COMPLETE # Do not autoselect the first completion entry. +unsetopt FLOW_CONTROL # Disable start/stop characters in shell editor. + +# +# Variables +# + +# Standard style used by default for 'list-colors' +LS_COLORS=${LS_COLORS:-'di=34:ln=35:so=32:pi=33:ex=31:bd=36;01:cd=33;01:su=31;40;07:sg=36;40;07:tw=32;40;07:ow=33;40;07:'} + +# +# Initialization +# + +# Load and initialize the completion system ignoring insecure directories with a +# cache time of 20 hours, so it should almost always regenerate the first time a +# shell is opened each day. +autoload -Uz compinit +_comp_path="${XDG_CACHE_HOME:-$HOME/.cache}/prezto/zcompdump" +# #q expands globs in conditional expressions +if [[ $_comp_path(#qNmh-20) ]]; then + # -C (skip function check) implies -i (skip security check). + compinit -C -d "$_comp_path" +else + mkdir -p "$_comp_path:h" + compinit -i -d "$_comp_path" + # Keep $_comp_path younger than cache time even if it isn't regenerated. + touch "$_comp_path" +fi +unset _comp_path + +# +# Styles +# + +# Defaults. +zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} +zstyle ':completion:*:default' list-prompt '%S%M matches%s' + +# Use caching to make completion for commands such as dpkg and apt usable. +zstyle ':completion::complete:*' use-cache on +zstyle ':completion::complete:*' cache-path "${XDG_CACHE_HOME:-$HOME/.cache}/prezto/zcompcache" + +# Case-insensitive (all), partial-word, and then substring completion. +if zstyle -t ':prezto:module:completion:*' case-sensitive; then + zstyle ':completion:*' matcher-list 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' + setopt CASE_GLOB +else + zstyle ':completion:*' matcher-list 'm:{[:lower:]}={[:upper:]}' 'm:{[:upper:]}={[:lower:]}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' + unsetopt CASE_GLOB +fi + +# Group matches and describe. +zstyle ':completion:*:*:*:*:*' menu select +zstyle ':completion:*:matches' group 'yes' +zstyle ':completion:*:options' description 'yes' +zstyle ':completion:*:options' auto-description '%d' +zstyle ':completion:*:corrections' format ' %F{green}-- %d (errors: %e) --%f' +zstyle ':completion:*:descriptions' format ' %F{yellow}-- %d --%f' +zstyle ':completion:*:messages' format ' %F{purple} -- %d --%f' +zstyle ':completion:*:warnings' format ' %F{red}-- no matches found --%f' +zstyle ':completion:*' format ' %F{yellow}-- %d --%f' +zstyle ':completion:*' group-name '' +zstyle ':completion:*' verbose yes + +# Fuzzy match mistyped completions. +zstyle ':completion:*' completer _complete _match _approximate +zstyle ':completion:*:match:*' original only +zstyle ':completion:*:approximate:*' max-errors 1 numeric + +# Increase the number of errors based on the length of the typed word. But make +# sure to cap (at 7) the max-errors to avoid hanging. +zstyle -e ':completion:*:approximate:*' max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3>7?7:($#PREFIX+$#SUFFIX)/3))numeric)' + +# Don't complete unavailable commands. +zstyle ':completion:*:functions' ignored-patterns '(_*|pre(cmd|exec))' + +# Array completion element sorting. +zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters + +# Directories +zstyle ':completion:*:*:cd:*' tag-order local-directories directory-stack path-directories +zstyle ':completion:*:*:cd:*:directory-stack' menu yes select +zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand' +zstyle ':completion:*' squeeze-slashes true + +# History +zstyle ':completion:*:history-words' stop yes +zstyle ':completion:*:history-words' remove-all-dups yes +zstyle ':completion:*:history-words' list false +zstyle ':completion:*:history-words' menu yes + +# Environment Variables +zstyle ':completion::*:(-command-|export):*' fake-parameters ${${${_comps[(I)-value-*]#*,}%%,*}:#-*-} + +# Populate hostname completion. But allow ignoring custom entries from static +# */etc/hosts* which might be uninteresting. +zstyle -a ':prezto:module:completion:*:hosts' etc-host-ignores '_etc_host_ignores' + +zstyle -e ':completion:*:hosts' hosts 'reply=( + ${=${=${=${${(f)"$(cat {/etc/ssh/ssh_,~/.ssh/}known_hosts(|2)(N) 2> /dev/null)"}%%[#| ]*}//\]:[0-9]*/ }//,/ }//\[/ } + ${=${(f)"$(cat /etc/hosts(|)(N) <<(ypcat hosts 2> /dev/null))"}%%(\#${_etc_host_ignores:+|${(j:|:)~_etc_host_ignores}})*} + ${=${${${${(@M)${(f)"$(cat ~/.ssh/config 2> /dev/null)"}:#Host *}#Host }:#*\**}:#*\?*}} +)' + +# Don't complete uninteresting users... +zstyle ':completion:*:*:*:users' ignored-patterns \ + adm amanda apache avahi beaglidx bin cacti canna clamav daemon \ + dbus distcache dovecot fax ftp games gdm gkrellmd gopher \ + hacluster haldaemon halt hsqldb ident junkbust ldap lp mail \ + mailman mailnull mldonkey mysql nagios \ + named netdump news nfsnobody nobody nscd ntp nut nx openvpn \ + operator pcap postfix postgres privoxy pulse pvm quagga radvd \ + rpc rpcuser rpm shutdown squid sshd sync uucp vcsa xfs '_*' + +# ... unless we really want to. +zstyle '*' single-ignored show + +# Ignore multiple entries. +zstyle ':completion:*:(rm|kill|diff):*' ignore-line other +zstyle ':completion:*:rm:*' file-patterns '*:all-files' + +# Kill +zstyle ':completion:*:*:*:*:processes' command 'ps -u $LOGNAME -o pid,user,command -w' +zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;36=0=01' +zstyle ':completion:*:*:kill:*' menu yes select +zstyle ':completion:*:*:kill:*' force-list always +zstyle ':completion:*:*:kill:*' insert-ids single + +# Man +zstyle ':completion:*:manuals' separate-sections true +zstyle ':completion:*:manuals.(^1*)' insert-sections true + +# Media Players +zstyle ':completion:*:*:mpg123:*' file-patterns '*.(mp3|MP3):mp3\ files *(-/):directories' +zstyle ':completion:*:*:mpg321:*' file-patterns '*.(mp3|MP3):mp3\ files *(-/):directories' +zstyle ':completion:*:*:ogg123:*' file-patterns '*.(ogg|OGG|flac):ogg\ files *(-/):directories' +zstyle ':completion:*:*:mocp:*' file-patterns '*.(wav|WAV|mp3|MP3|ogg|OGG|flac):ogg\ files *(-/):directories' + +# Mutt +if [[ -s "$HOME/.mutt/aliases" ]]; then + zstyle ':completion:*:*:mutt:*' menu yes select + zstyle ':completion:*:mutt:*' users ${${${(f)"$(<"$HOME/.mutt/aliases")"}#alias[[:space:]]}%%[[:space:]]*} +fi + +# SSH/SCP/RSYNC +zstyle ':completion:*:(ssh|scp|rsync):*' tag-order 'hosts:-host:host hosts:-domain:domain hosts:-ipaddr:ip\ address *' +zstyle ':completion:*:(scp|rsync):*' group-order users files all-files hosts-domain hosts-host hosts-ipaddr +zstyle ':completion:*:ssh:*' group-order users hosts-domain hosts-host users hosts-ipaddr +zstyle ':completion:*:(ssh|scp|rsync):*:hosts-host' ignored-patterns '*(.|:)*' loopback ip6-loopback localhost ip6-localhost broadcasthost +zstyle ':completion:*:(ssh|scp|rsync):*:hosts-domain' ignored-patterns '<->.<->.<->.<->' '^[-[:alnum:]]##(.[-[:alnum:]]##)##' '*@*' +zstyle ':completion:*:(ssh|scp|rsync):*:hosts-ipaddr' ignored-patterns '^(<->.<->.<->.<->|(|::)([[:xdigit:].]##:(#c,2))##(|%*))' '127.0.0.<->' '255.255.255.255' '::1' 'fe80::*' diff --git a/config/zsh/.zprezto/modules/directory/README.md b/config/zsh/.zprezto/modules/directory/README.md new file mode 100644 index 0000000..8603d9f --- /dev/null +++ b/config/zsh/.zprezto/modules/directory/README.md @@ -0,0 +1,37 @@ +# Directory + +Sets directory options and defines directory aliases. + +## Options + +- `AUTO_CD` auto changes to a directory without typing `cd`. +- `AUTO_PUSHD` pushes the old directory onto the stack on `cd`. +- `PUSHD_IGNORE_DUPS` does not store duplicates in the stack. +- `PUSHD_SILENT` does not print the directory stack after `pushd` or `popd`. +- `PUSHD_TO_HOME` pushes to the home directory when no argument is given. +- `CDABLE_VARS` changes directory to a path stored in a variable. +- `MULTIOS` writes to multiple descriptors. +- `EXTENDED_GLOB` uses extended globbing syntax. +- `CLOBBER` does not overwrite existing files with `>` and `>>`. Use `>!` and + `>>!` to bypass. + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:directory:alias' skip 'yes' +``` + +- `d` prints the contents of the directory stack. +- `1 ... 9` changes the directory to the **n** previous one. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][1]._ + +- [James Cox](https://github.com/imajes) +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/directory/init.zsh b/config/zsh/.zprezto/modules/directory/init.zsh new file mode 100644 index 0000000..caf08d2 --- /dev/null +++ b/config/zsh/.zprezto/modules/directory/init.zsh @@ -0,0 +1,32 @@ +# +# Sets directory options and defines directory aliases. +# +# Authors: +# James Cox +# Sorin Ionescu +# + +# +# Options +# + +setopt AUTO_CD # Auto changes to a directory without typing cd. +setopt AUTO_PUSHD # Push the old directory onto the stack on cd. +setopt PUSHD_IGNORE_DUPS # Do not store duplicates in the stack. +setopt PUSHD_SILENT # Do not print the directory stack after pushd or popd. +setopt PUSHD_TO_HOME # Push to home directory when no argument is given. +setopt CDABLE_VARS # Change directory to a path stored in a variable. +setopt MULTIOS # Write to multiple descriptors. +setopt EXTENDED_GLOB # Use extended globbing syntax. +unsetopt CLOBBER # Do not overwrite existing files with > and >>. + # Use >! and >>! to bypass. + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:directory:alias' skip; then + alias -- -='cd -' + alias d='dirs -v' + for index ({1..9}) alias "$index"="cd +${index}"; unset index +fi diff --git a/config/zsh/.zprezto/modules/dnf/README.md b/config/zsh/.zprezto/modules/dnf/README.md new file mode 100644 index 0000000..91a35e8 --- /dev/null +++ b/config/zsh/.zprezto/modules/dnf/README.md @@ -0,0 +1,25 @@ +# DNF + +Defines [dnf][1] aliases. + +## Aliases + +- `dnfc` removes package(s) and leaves. +- `dnfi` installs package(s). +- `dnfh` displays history. +- `dnfl` lists packages. +- `dnfL` lists installed packages. +- `dnfq` displays package information. +- `dnfr` removes package(s). +- `dnfs` searches for a package. +- `dnfu` updates packages. +- `dnfU` upgrades packages. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][2]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://fedoraproject.org/wiki/Features/DNF +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/dnf/init.zsh b/config/zsh/.zprezto/modules/dnf/init.zsh new file mode 100644 index 0000000..7a40142 --- /dev/null +++ b/config/zsh/.zprezto/modules/dnf/init.zsh @@ -0,0 +1,28 @@ +# +# Defines dnf aliases. +# +# Authors: +# FireWave +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[dnf] )); then + return 1 +fi + +# +# Aliases +# + +alias dnfc='sudo dnf clean all' # Cleans the cache. +alias dnfh='dnf history' # Displays history. +alias dnfi='sudo dnf install' # Installs package(s). +alias dnfl='dnf list' # Lists packages. +alias dnfL='dnf list installed' # Lists installed packages. +alias dnfq='dnf info' # Displays package information. +alias dnfr='sudo dnf remove' # Removes package(s). +alias dnfs='dnf search' # Searches for a package. +alias dnfu='sudo dnf update' # Updates packages. +alias dnfU='sudo dnf upgrade' # Upgrades packages. + diff --git a/config/zsh/.zprezto/modules/docker/README.md b/config/zsh/.zprezto/modules/docker/README.md new file mode 100644 index 0000000..f193dc6 --- /dev/null +++ b/config/zsh/.zprezto/modules/docker/README.md @@ -0,0 +1,196 @@ +# Docker + +Defines [Docker][1] aliases and functions. + +## Aliases + +### Docker + +- `dk` is short for `docker` +- `dka` Attach to a running container +- `dkb` Build an image from a Dockerfile +- `dkd` Inspect changes on a container's filesystem +- `dkdf` Show docker filesystem usage +- `dke` Run a command in a running container +- `dkE` Run an interactive command in a running container +- `dkh` Show the history of an image +- `dki` List images +- `dkin` Return low-level information on a container, image or task +- `dkk` Kill a running container +- `dkl` Fetch the logs of a container +- `dkli` Log in to a Docker registry +- `dklo` Log out from a Docker registry +- `dkls` is alias for `dkps` +- `dkp` Pause all processes within one or more containers +- `dkP` Unpause all processes within one or more containers +- `dkpl` Pull an image or a repository from a registry +- `dkph` Push an image or a repository to a registry +- `dkps` List containers +- `dkpsa` List all containers (default lists just running) +- `dkr` Run a command in a new container +- `dkR` Run an interactive command in a new container and automatically remove + the container when it exits +- `dkRe` like `dkR` and set entry point to `/bin/bash` +- `dkrm` Remove one or more containers +- `dkrmi` Remove one or more images +- `dkrmC` Clean up exited containers +- `dkrmI` Clean up dangling images +- `dkrmV` Clean up unused volumes ( Docker >= 1.9 ) +- `dkrn` Rename a container +- `dks` Start one or more stopped containers +- `dkS` Restart a container +- `dkss` Display a live stream of container(s) resource usage statistics +- `dksv` Save one or more images to a tar archive (streamed to STDOUT by + default) +- `dkt` Tag an image into a repository +- `dktop` Display the running processes of a container +- `dkup` Update configuration of one or more containers +- `dkV` Manage Docker volumes +- `dkv` Show the Docker version information +- `dkw` Block until a container stops, then print its exit code +- `dkx` Stop a running container + +#### container (C) + +- `dkC` Manage containers +- `dkCa` Attach to a running container +- `dkCcp` Copy files/folders between a container and the local filesystem +- `dkCd` Inspect changes on a container's filesystem +- `dkCe` Run a command in a running container +- `dkCin` Display detailed information on one or more containers +- `dkCk` Kill one or more running containers +- `dkCl` Fetch the logs of a container +- `dkCls` List containers +- `dkCp` Pause all processes within one or more containers +- `dkCpr` Remove all stopped containers +- `dkCrn` Rename a container +- `dkCS` Restart one or more containers +- `dkCrm` Remove one or more containers +- `dkCr` Run a command in a new container +- `dkCR` Run an interactive command in a new container and automatically remove + the container when it exits +- `dkCRe` like `dkCR` and set entry point to `/bin/bash` +- `dkCs` Start one or more stopped containers +- `dkCss` Display a live stream of container(s) resource usage statistics +- `dkCx` Stop one or more running containers +- `dkCtop` Display the running processes of a container +- `dkCP` Unpause all processes within one or more containers +- `dkCup` Update configuration of one or more containers +- `dkCw` Block until one or more containers stop, then print their exit codes + +#### image (I) + +- `dkI` Manage images +- `dkIb` Build an image from a Dockerfile +- `dkIh` Show the history of an image +- `dkIim` Import the contents from a tarball to create a filesystem image +- `dkIin` Display detailed information on one or more images +- `dkIls` List images +- `dkIpr` Remove unused images +- `dkIpl` Pull an image or a repository from a registry +- `dkIph` Push an image or a repository to a registry +- `dkIrm` Remove one or more images +- `dkIsv` Save one or more images to a tar archive (streamed to STDOUT by + default) +- `dkIt` Tag an image into a repository + +#### volume (V) + +- `dkV` Manage volumes +- `dkVin` Display detailed information on one or more volumes +- `dkVls` List volumes +- `dkVpr` Remove all unused volumes +- `dkVrm` Remove one or more volumes + +#### network (N) + +- `dkN` Manage networks +- `dkNs` Connect a container to a network +- `dkNx` Disconnects a container from a network +- `dkNin` Displays detailed information on a network +- `dkNls` Lists all the networks created by the user +- `dkNpr` Remove all unused networks +- `dkNrm` Deletes one or more networks + +#### system (Y) + +- `dkY` Manage Docker +- `dkYdf` Show docker filesystem usage +- `dkYpr` Remove unused data + +#### stack (K) + +- `dkK` Manage Docker stacks +- `dkKls` List stacks +- `dkKps` List the tasks in the stack +- `dkKrm` Remove the stack + +#### swarm (W) + +- `dkW` Manage Docker Swarm + +### Docker Machine + +- `dkm` is short for `docker-machine` +- `dkma` Get or set the active machine +- `dkmcp` Copy files between machines +- `dkmd` Set up the default machine ; alowing you to use `dkme` without + arguments +- `dkme` Set up the environment for the Docker client (eg: `dkme staging` to + toggle to staging) +- `dkmin` Inspect information about a machine +- `dkmip` Get the IP address of a machine +- `dkmk` Kill a machine +- `dkmls` List machines +- `dkmpr` Re-provision existing machines +- `dkmps` is alias for `dkmls` +- `dkmrg` Regenerate TLS Certificates for a machine +- `dkmrm` Remove a machine +- `dkms` Start a machine +- `dkmsh` Log into or run a command on a machine with SSH +- `dkmst` Get the status of a machine +- `dkmS` Restart a machine +- `dkmu` Get the URL of a machine +- `dkmup` Upgrade a machine to the latest version of Docker +- `dkmV` Show the Docker Machine version or a machine docker version +- `dkmx` Stop a machine + +### Docker Compose + +- `dkc` is short for `docker-compose` +- `dkcb` Build or rebuild services +- `dkcB` Build or rebuild services and do not use cache when building the image +- `dkcd` Stop and remove containers, networks, images, and volumes +- `dkce` Execute a command in a running container +- `dkck` Kill containers +- `dkcl` View output from containers +- `dkcls` is alias for `dkcps` +- `dkcp` Pause services +- `dkcP` Unpause services +- `dkcpl` Pull service images +- `dkcph` Push service images +- `dkcps` List containers +- `dkcr` Run a one-off command +- `dkcR` Run a one-off command and remove container after run. +- `dkcrm` Remove stopped containers +- `dkcs` Start services +- `dkcsc` Set number of containers for a service +- `dkcS` Restart services +- `dkcu` Create and start containers +- `dkcU` Create and start containers in detached mode: Run containers in the + background, print new container names +- `dkcV` Show the Docker-Compose version information +- `dkcx` Stop services + +## Support + +If you're having problems, use the [Prezto issue tracker][2]. + +## Acknowledgements + +This module is a copy of [akarzim/zsh-docker-aliases][3] by [François Vantomme][4] (MIT License). + +[1]: https://www.docker.com/ +[2]: https://github.com/zsh-users/prezto/issues +[3]: https://github.com/akarzim/zsh-docker-aliases +[4]: https://github.com/akarzim diff --git a/config/zsh/.zprezto/modules/docker/alias.zsh b/config/zsh/.zprezto/modules/docker/alias.zsh new file mode 100644 index 0000000..12eb254 --- /dev/null +++ b/config/zsh/.zprezto/modules/docker/alias.zsh @@ -0,0 +1,177 @@ +# +# Defines Docker aliases. +# +# Author: +# François Vantomme +# + +# +# Aliases +# + +# Docker +alias dk='docker' +alias dka='docker attach' +alias dkb='docker build' +alias dkd='docker diff' +alias dkdf='docker system df' +alias dke='docker exec' +alias dkE='docker exec -it' +alias dkh='docker history' +alias dki='docker images' +alias dkin='docker inspect' +alias dkim='docker import' +alias dkk='docker kill' +alias dkl='docker logs' +alias dkli='docker login' +alias dklo='docker logout' +alias dkls='docker ps' +alias dkp='docker pause' +alias dkP='docker unpause' +alias dkpl='docker pull' +alias dkph='docker push' +alias dkps='docker ps' +alias dkpsa='docker ps -a' +alias dkr='docker run' +alias dkR='docker run -it --rm' +alias dkRe='docker run -it --rm --entrypoint /bin/bash' +alias dkRM='docker system prune' +alias dkrm='docker rm' +alias dkrmi='docker rmi' +alias dkrn='docker rename' +alias dks='docker start' +alias dkS='docker restart' +alias dkss='docker stats' +alias dksv='docker save' +alias dkt='docker tag' +alias dktop='docker top' +alias dkup='docker update' +alias dkV='docker volume' +alias dkv='docker version' +alias dkw='docker wait' +alias dkx='docker stop' + +## Container (C) +alias dkC='docker container' +alias dkCa='docker container attach' +alias dkCcp='docker container cp' +alias dkCd='docker container diff' +alias dkCe='docker container exec' +alias dkCin='docker container inspect' +alias dkCk='docker container kill' +alias dkCl='docker container logs' +alias dkCls='docker container ls' +alias dkCp='docker container pause' +alias dkCpr='docker container prune' +alias dkCrn='docker container rename' +alias dkCS='docker container restart' +alias dkCrm='docker container rm' +alias dkCr='docker container run' +alias dkCR='docker container run -it --rm' +alias dkCRe='docker container run -it --rm --entrypoint /bin/bash' +alias dkCs='docker container start' +alias dkCss='docker container stats' +alias dkCx='docker container stop' +alias dkCtop='docker container top' +alias dkCP='docker container unpause' +alias dkCup='docker container update' +alias dkCw='docker container wait' + +## Image (I) +alias dkI='docker image' +alias dkIb='docker image build' +alias dkIh='docker image history' +alias dkIim='docker image import' +alias dkIin='docker image inspect' +alias dkIls='docker image ls' +alias dkIpr='docker image prune' +alias dkIpl='docker image pull' +alias dkIph='docker image push' +alias dkIrm='docker image rm' +alias dkIsv='docker image save' +alias dkIt='docker image tag' + +## Volume (V) +alias dkV='docker volume' +alias dkVin='docker volume inspect' +alias dkVls='docker volume ls' +alias dkVpr='docker volume prune' +alias dkVrm='docker volume rm' + +## Network (N) +alias dkN='docker network' +alias dkNs='docker network connect' +alias dkNx='docker network disconnect' +alias dkNin='docker network inspect' +alias dkNls='docker network ls' +alias dkNpr='docker network prune' +alias dkNrm='docker network rm' + +## System (Y) +alias dkY='docker system' +alias dkYdf='docker system df' +alias dkYpr='docker system prune' + +## Stack (K) +alias dkK='docker stack' +alias dkKls='docker stack ls' +alias dkKps='docker stack ps' +alias dkKrm='docker stack rm' + +## Swarm (W) +alias dkW='docker swarm' + +## CleanUp (rm) +# Clean up exited containers (docker < 1.13) +alias dkrmC='docker rm $(docker ps -qaf status=exited)' +# Clean up dangling images (docker < 1.13) +alias dkrmI='docker rmi $(docker images -qf dangling=true)' +# Clean up dangling volumes (docker < 1.13) +alias dkrmV='docker volume rm $(docker volume ls -qf dangling=true)' + + +# Docker Machine (m) +alias dkm='docker-machine' +alias dkma='docker-machine active' +alias dkmcp='docker-machine scp' +alias dkmin='docker-machine inspect' +alias dkmip='docker-machine ip' +alias dkmk='docker-machine kill' +alias dkmls='docker-machine ls' +alias dkmpr='docker-machine provision' +alias dkmps='docker-machine ps' +alias dkmrg='docker-machine regenerate-certs' +alias dkmrm='docker-machine rm' +alias dkms='docker-machine start' +alias dkmsh='docker-machine ssh' +alias dkmst='docker-machine status' +alias dkmS='docker-machine restart' +alias dkmu='docker-machine url' +alias dkmup='docker-machine upgrade' +alias dkmv='docker-machine version' +alias dkmx='docker-machine stop' + +# Docker Compose (c) +alias dkc='docker compose' +alias dkcb='docker compose build' +alias dkcB='docker compose build --no-cache' +alias dkcd='docker compose down' +alias dkce='docker compose exec' +alias dkck='docker compose kill' +alias dkcl='docker compose logs' +alias dkcls='docker compose ps' +alias dkcp='docker compose pause' +alias dkcP='docker compose unpause' +alias dkcpl='docker compose pull' +alias dkcph='docker compose push' +alias dkcps='docker compose ps' +alias dkcr='docker compose run' +alias dkcR='docker compose run --rm' +alias dkcrm='docker compose rm' +alias dkcs='docker compose start' +alias dkcsc='docker compose scale' +alias dkcS='docker compose restart' +alias dkcu='docker compose up' +alias dkcU='docker compose up -d' +alias dkcv='docker compose version' +alias dkcx='docker compose stop' diff --git a/config/zsh/.zprezto/modules/docker/init.zsh b/config/zsh/.zprezto/modules/docker/init.zsh new file mode 100644 index 0000000..8ad6bfd --- /dev/null +++ b/config/zsh/.zprezto/modules/docker/init.zsh @@ -0,0 +1,57 @@ +# +# Defines Docker aliases. +# +# Author: +# François Vantomme +# + +# Return if requirements are not found. +if (( ! $+commands[docker] )); then + return 1 +fi + +# +# Functions +# + +# Set Docker Machine environment +function dkme { + if (( ! $+commands[docker-machine] )); then + return 1 + fi + + eval $(docker-machine env $1) +} + +# Set Docker Machine default machine +function dkmd { + if (( ! $+commands[docker-machine] )); then + return 1 + fi + + pushd ~/.docker/machine/machines + + if [[ ! -d $1 ]]; then + echo "Docker machine '$1' does not exists. Abort." + popd + return 1 + fi + + if [[ -L default ]]; then + eval $(rm -f default) + elif [[ -d default ]]; then + echo "A default machine already exists. Abort." + popd + return 1 + elif [[ -e default ]]; then + echo "A file named 'default' already exists. Abort." + popd + return 1 + fi + + eval $(ln -s $1 default) + popd +} + +# Source module files. +source "${0:h}/alias.zsh" diff --git a/config/zsh/.zprezto/modules/dpkg/README.md b/config/zsh/.zprezto/modules/dpkg/README.md new file mode 100644 index 0000000..4df9230 --- /dev/null +++ b/config/zsh/.zprezto/modules/dpkg/README.md @@ -0,0 +1,37 @@ +# Dpkg + +Defines [_dpkg_][1] aliases and functions. + +## Aliases + +- `debc` cleans the cache. +- `debf` displays a file's package. +- `debi` installs packages from repositories. +- `debI` installs packages from files. +- `debq` displays package information. +- `debu` updates the package lists. +- `debU` upgrades outdated packages. +- `debx` removes packages. +- `debX` removes packages, their configuration, and unneeded dependencies. +- `debs` searches for packages. +- `deb-build` creates a basic deb package. +- `deb-kclean` removes all kernel images and headers, except for the ones in + use. + +## Functions + +- `deb-clone` generates a script that can be used to duplicate a `dpkg`-based + system. +- `deb-history` displays `dpkg` history. +- `deb-kbuild` makes a `dpkg` Linux kernel package. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][2]._ + +- [Daniel Bolton](https://github.com/dbb) +- [Benjamin Boudreau](https://github.com/dreur) +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://wiki.debian.org/Teams/Dpkg +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/dpkg/functions/deb-clone b/config/zsh/.zprezto/modules/dpkg/functions/deb-clone new file mode 100644 index 0000000..a767bd3 --- /dev/null +++ b/config/zsh/.zprezto/modules/dpkg/functions/deb-clone @@ -0,0 +1,29 @@ +# +# Generates a script that can be used to duplicate a dpkg-based system. +# +# Authors: +# Daniel Bolton +# Sorin Ionescu +# + +# function deb-clone { + +local clone_script="${0}.sh" +local package_list=$( + perl \ + -m 'AptPkg::Cache' \ + -e ' + $c=AptPkg::Cache->new; + for (keys %$c) { + push @a, $_ if $c->{$_}->{'CurrentState'} eq 'Installed'; + } + print "$_ " for sort @a; + ' +) + +rm "$clone_script" +print '#!/bin/sh\n' > "$clone_script" +print "aptitude install ${package_list}\n" >> "$clone_script" +chmod +x "$clone_script" + +# } diff --git a/config/zsh/.zprezto/modules/dpkg/functions/deb-history b/config/zsh/.zprezto/modules/dpkg/functions/deb-history new file mode 100644 index 0000000..a1369de --- /dev/null +++ b/config/zsh/.zprezto/modules/dpkg/functions/deb-history @@ -0,0 +1,40 @@ +# +# Displays dpkg history. +# +# Authors: +# Peter Leung +# Benjamin Boudreau +# Sorin Ionescu +# + +# function deb-history { + +case "$1" in + (install) + zgrep --no-filename 'install ' $(ls -rt /var/log/dpkg*) + ;; + (upgrade|remove) + zgrep --no-filename "$1" $(ls -rt /var/log/dpkg*) + ;; + (rollback) + zgrep --no-filename upgrade $(ls -rt /var/log/dpkg*) \ + | grep "$2" -A10000000 \ + | grep "$3" -B10000000 \ + | awk '{print $4"="$5}' + ;; + (list) + zcat $(ls -rt /var/log/dpkg*) + ;; + (*) + cat >&2 < +# Sorin Ionescu +# + +# function deb-kbuild { + +make-kpkg clean +MAKEFLAGS='' time fakeroot make-kpkg \ + --append-to-version '-custom' \ + --revision "$(date +"%Y%m%d")" \ + kernel_image \ + kernel_headers + +# } diff --git a/config/zsh/.zprezto/modules/dpkg/init.zsh b/config/zsh/.zprezto/modules/dpkg/init.zsh new file mode 100644 index 0000000..69d524f --- /dev/null +++ b/config/zsh/.zprezto/modules/dpkg/init.zsh @@ -0,0 +1,57 @@ +# +# Defines dpkg aliases. +# +# Authors: +# Daniel Bolton +# Benjamin Boudreau +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[dpkg] && ! $+commands[apt-get] )); then + return 1 +fi + +# +# Aliases +# + +# Cleans the cache. +alias debc='sudo apt-get clean && sudo apt-get autoclean' + +# Displays a file's package. +alias debf='apt-file search --regexp' + +# Installs packages from repositories. +alias debi='sudo apt-get install' + +# Installs packages from files. +alias debI='sudo dpkg -i' + +# Displays package information. +alias debq='apt-cache show' + +# Updates the package lists. +alias debu='sudo apt-get update' + +# Upgrades outdated packages. +alias debU='sudo apt-get update && sudo apt-get dist-upgrade' + +# Removes packages. +alias debx='sudo apt-get remove' + +# Removes packages, their configuration, and unneeded dependencies. +alias debX='sudo apt-get remove --purge && sudo apt-get autoremove --purge' + +# Searches for packages. +if (( $+commands[aptitude] )); then + alias debs='aptitude -F "* %p -> %d \n(%v/%V)" --no-gui --disable-columns search' +else + alias debs='apt-cache search' +fi + +# Creates a basic deb package. +alias deb-build='time dpkg-buildpackage -rfakeroot -us -uc' + +# Removes all kernel images and headers, except for the ones in use. +alias deb-kclean='sudo aptitude remove -P "?and(~i~nlinux-(ima|hea) ?not(~n$(uname -r)))"' diff --git a/config/zsh/.zprezto/modules/editor/README.md b/config/zsh/.zprezto/modules/editor/README.md new file mode 100644 index 0000000..a1c1852 --- /dev/null +++ b/config/zsh/.zprezto/modules/editor/README.md @@ -0,0 +1,113 @@ +# Editor + +Sets editor specific key bindings options and variables. + +## Options + +- `BEEP` beep on error in line editor. + +## Variables + +- `WORDCHARS` treat a given set of characters as part of a word. + +## Settings + +### Wordchars + +To change what characters are considered part of a word, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:editor' wordchars +``` + +Defaults to `*?_-.[]~&;!#$%^(){}<>`. + +### Key bindings + +To enable key bindings, add the following to _`${ZDOTDIR:-$HOME}/.zpreztorc`_, +and replace `''` with `'emacs'` or `'vi'`. + +```sh +zstyle ':prezto:module:editor' key-bindings '' +``` + +### Dot Expansion + +To enable the auto conversion of .... to ../.., add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:editor' dot-expansion 'yes' +``` + +### PS Context + +To enable the prompt context to be set, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:editor' ps-context 'yes' +``` + +## Theming + +To indicate when the editor is in the primary keymap (emacs or viins), add +the following to your `theme_prompt_setup` function. + +```sh +zstyle ':prezto:module:editor:info:keymap:primary' format '>>>' +``` + +To indicate when the editor is in the primary keymap (emacs or viins) insert +mode, add the following to your `theme_prompt_setup` function. + +```sh +zstyle ':prezto:module:editor:info:keymap:primary:insert' format 'I' +``` + +To indicate when the editor is in the primary keymap (emacs or viins) overwrite +mode, add the following to your `theme_prompt_setup` function. + +```sh +zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format 'O' +``` + +To indicate when the editor is in the alternate keymap (vicmd), add the +following to your `theme_prompt_setup` function. + +```sh +zstyle ':prezto:module:editor:info:keymap:alternate' format '<<<' +``` + +To indicate when the editor is completing, add the following to your +`theme_prompt_setup` function. + +```sh +zstyle ':prezto:module:editor:info:completing' format '...' +``` + +Then add `$editor_info[context]`, where context is _keymap_, _insert_, or +_overwrite_, to `$PROMPT` or `$RPROMPT`. + +## Convenience Functions + +### bindkey-all + +Provides a function `bindkey-all` which can be useful for checking how all of +the keys are bound. Normal `bindkey` command will only list the keys bound for +one keymap, which is not as useful if you want to grep through the output. The +keymap's names go to stderr so when you grep through `bindkey-all`'s output you +will still see the headings and can tell which keymap each binding goes to. + +It will also pass through arguments so you can use bindkey-all to set bindings +for all keymaps at once. If provided arguments it will _not_ print out the +names of each of the keymaps, and just run the command for each keymap. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][1]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/editor/init.zsh b/config/zsh/.zprezto/modules/editor/init.zsh new file mode 100644 index 0000000..39e38d8 --- /dev/null +++ b/config/zsh/.zprezto/modules/editor/init.zsh @@ -0,0 +1,457 @@ +# +# Sets key bindings. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if [[ "$TERM" == 'dumb' ]]; then + return 1 +fi + +# +# Options +# + +setopt BEEP # Beep on error in line editor. + +# +# Variables +# + +# Treat these characters as part of a word. +zstyle -s ':prezto:module:editor' wordchars 'WORDCHARS' \ + || WORDCHARS='*?_-.[]~&;!#$%^(){}<>' + +# Use human-friendly identifiers. +zmodload zsh/terminfo +typeset -gA key_info +key_info=( + 'Control' '\C-' + 'ControlLeft' '\e[1;5D \e[5D \e\e[D \eOd' + 'ControlRight' '\e[1;5C \e[5C \e\e[C \eOc' + 'ControlPageUp' '\e[5;5~' + 'ControlPageDown' '\e[6;5~' + 'Escape' '\e' + 'Meta' '\M-' + 'Backspace' "^?" + 'Delete' "^[[3~" + 'F1' "$terminfo[kf1]" + 'F2' "$terminfo[kf2]" + 'F3' "$terminfo[kf3]" + 'F4' "$terminfo[kf4]" + 'F5' "$terminfo[kf5]" + 'F6' "$terminfo[kf6]" + 'F7' "$terminfo[kf7]" + 'F8' "$terminfo[kf8]" + 'F9' "$terminfo[kf9]" + 'F10' "$terminfo[kf10]" + 'F11' "$terminfo[kf11]" + 'F12' "$terminfo[kf12]" + 'Insert' "$terminfo[kich1]" + 'Home' "$terminfo[khome]" + 'PageUp' "$terminfo[kpp]" + 'End' "$terminfo[kend]" + 'PageDown' "$terminfo[knp]" + 'Up' "$terminfo[kcuu1]" + 'Left' "$terminfo[kcub1]" + 'Down' "$terminfo[kcud1]" + 'Right' "$terminfo[kcuf1]" + 'BackTab' "$terminfo[kcbt]" +) + +# Set empty $key_info values to an invalid UTF-8 sequence to induce silent +# bindkey failure. +for key in "${(k)key_info[@]}"; do + if [[ -z "$key_info[$key]" ]]; then + key_info[$key]='�' + fi +done + +# +# External Editor +# + +# Allow command line editing in an external editor. +autoload -Uz edit-command-line +zle -N edit-command-line + +# +# Functions +# +# Runs bindkey but for all of the keymaps. Running it with no arguments will +# print out the mappings for all of the keymaps. +function bindkey-all { + local keymap + for keymap in "${(@f)$(bindkey -l)}"; do + [[ "$#" -eq 0 ]] && printf "#### %s\n" "${keymap}" 1>&2 + bindkey -M "${keymap}" "$@" + done +} +# Exposes information about the Zsh Line Editor via the $editor_info associative +# array. +function editor-info { + # Ensure that we're going to set the editor-info for prompts that + # are prezto managed and/or compatible. + if zstyle -t ':prezto:module:prompt' managed; then + # Clean up previous $editor_info. + unset editor_info + typeset -gA editor_info + + if [[ "$KEYMAP" == 'vicmd' ]]; then + zstyle -s ':prezto:module:editor:info:keymap:alternate' format 'REPLY' + editor_info[keymap]="$REPLY" + else + zstyle -s ':prezto:module:editor:info:keymap:primary' format 'REPLY' + editor_info[keymap]="$REPLY" + + if [[ "$ZLE_STATE" == *overwrite* ]]; then + zstyle -s ':prezto:module:editor:info:keymap:primary:overwrite' format 'REPLY' + editor_info[overwrite]="$REPLY" + else + zstyle -s ':prezto:module:editor:info:keymap:primary:insert' format 'REPLY' + editor_info[overwrite]="$REPLY" + fi + fi + + unset REPLY + zle zle-reset-prompt + fi +} +zle -N editor-info + +# Reset the prompt based on the current context and +# the ps-context option. +function zle-reset-prompt { + if zstyle -t ':prezto:module:editor' ps-context; then + # If we aren't within one of the specified contexts, then we want to reset + # the prompt with the appropriate editor_info[keymap] if there is one. + if [[ $CONTEXT != (select|cont) ]]; then + zle reset-prompt + zle -R + fi + else + zle reset-prompt + zle -R + fi +} +zle -N zle-reset-prompt + +# Updates editor information when the keymap changes. +function zle-keymap-select { + zle editor-info +} +zle -N zle-keymap-select + +# Enables terminal application mode and updates editor information. +function zle-line-init { + # The terminal must be in application mode when ZLE is active for $terminfo + # values to be valid. + if (( $+terminfo[smkx] )); then + # Enable terminal application mode. + echoti smkx + fi + + # Update editor information. + zle editor-info +} +zle -N zle-line-init + +# Disables terminal application mode and updates editor information. +function zle-line-finish { + # The terminal must be in application mode when ZLE is active for $terminfo + # values to be valid. + if (( $+terminfo[rmkx] )); then + # Disable terminal application mode. + echoti rmkx + fi + + # Update editor information. + zle editor-info +} +zle -N zle-line-finish + +# Toggles emacs overwrite mode and updates editor information. +function overwrite-mode { + zle .overwrite-mode + zle editor-info +} +zle -N overwrite-mode + +# Enters vi insert mode and updates editor information. +function vi-insert { + zle .vi-insert + zle editor-info +} +zle -N vi-insert + +# Moves to the first non-blank character then enters vi insert mode and updates +# editor information. +function vi-insert-bol { + zle .vi-insert-bol + zle editor-info +} +zle -N vi-insert-bol + +# Enters vi replace mode and updates editor information. +function vi-replace { + zle .vi-replace + zle editor-info +} +zle -N vi-replace + +# Expands .... to ../.. +function expand-dot-to-parent-directory-path { + if [[ $LBUFFER = *.. ]]; then + LBUFFER+='/..' + else + LBUFFER+='.' + fi +} +zle -N expand-dot-to-parent-directory-path + +# Displays an indicator when completing. +function expand-or-complete-with-indicator { + local indicator + zstyle -s ':prezto:module:editor:info:completing' format 'indicator' + + # This is included to work around a bug in zsh which shows up when interacting + # with multi-line prompts. + if [[ -z "$indicator" ]]; then + zle expand-or-complete + return + fi + + print -Pn "$indicator" + zle expand-or-complete + zle redisplay +} +zle -N expand-or-complete-with-indicator + +# Inserts 'sudo ' at the beginning of the line. +function prepend-sudo { + if [[ "$BUFFER" != su(do|)\ * ]]; then + BUFFER="sudo $BUFFER" + (( CURSOR += 5 )) + fi +} +zle -N prepend-sudo + +# Expand aliases +function glob-alias { + zle _expand_alias + zle expand-word + zle magic-space +} +zle -N glob-alias + +# Toggle the comment character at the start of the line. This is meant to work +# around a buggy implementation of pound-insert in zsh. +# +# This is currently only used for the emacs keys because vi-pound-insert has +# been reported to work properly. +function pound-toggle { + if [[ "$BUFFER" = '#'* ]]; then + # Because of an oddity in how zsh handles the cursor when the buffer size + # changes, we need to make this check before we modify the buffer and let + # zsh handle moving the cursor back if it's past the end of the line. + if [[ $CURSOR != $#BUFFER ]]; then + (( CURSOR -= 1 )) + fi + BUFFER="${BUFFER:1}" + else + BUFFER="#$BUFFER" + (( CURSOR += 1 )) + fi +} +zle -N pound-toggle + +# Reset to default key bindings. +bindkey -d + +# +# Emacs Key Bindings +# + +for key in "$key_info[Escape]"{B,b} "${(s: :)key_info[ControlLeft]}" \ + "${key_info[Escape]}${key_info[Left]}" + bindkey -M emacs "$key" emacs-backward-word +for key in "$key_info[Escape]"{F,f} "${(s: :)key_info[ControlRight]}" \ + "${key_info[Escape]}${key_info[Right]}" + bindkey -M emacs "$key" emacs-forward-word + +# Kill to the beginning of the line. +for key in "$key_info[Escape]"{K,k} + bindkey -M emacs "$key" backward-kill-line + +# Redo. +bindkey -M emacs "$key_info[Escape]_" redo + +# Search previous character. +bindkey -M emacs "$key_info[Control]X$key_info[Control]B" vi-find-prev-char + +# Match bracket. +bindkey -M emacs "$key_info[Control]X$key_info[Control]]" vi-match-bracket + +# Edit command in an external editor. +bindkey -M emacs "$key_info[Control]X$key_info[Control]E" edit-command-line + +if (( $+widgets[history-incremental-pattern-search-backward] )); then + bindkey -M emacs "$key_info[Control]R" \ + history-incremental-pattern-search-backward + bindkey -M emacs "$key_info[Control]S" \ + history-incremental-pattern-search-forward +fi + +# Toggle comment at the start of the line. Note that we use pound-toggle which +# is similar to pount insert, but meant to work around some issues that were +# being seen in iTerm. +bindkey -M emacs "$key_info[Escape];" pound-toggle + + +# +# Vi Key Bindings +# + +# Edit command in an external editor emacs style (v is used for visual mode) +bindkey -M vicmd "$key_info[Control]X$key_info[Control]E" edit-command-line + +# Undo/Redo +bindkey -M vicmd "u" undo +bindkey -M viins "$key_info[Control]_" undo +bindkey -M vicmd "$key_info[Control]R" redo + +if (( $+widgets[history-incremental-pattern-search-backward] )); then + bindkey -M vicmd "?" history-incremental-pattern-search-backward + bindkey -M vicmd "/" history-incremental-pattern-search-forward +else + bindkey -M vicmd "?" history-incremental-search-backward + bindkey -M vicmd "/" history-incremental-search-forward +fi + +# Toggle comment at the start of the line. +bindkey -M vicmd "#" vi-pound-insert + +# +# Emacs and Vi Key Bindings +# + +# Unbound keys in vicmd and viins mode will cause really odd things to happen +# such as the casing of all the characters you have typed changing or other +# undefined things. In emacs mode they just insert a tilde, but bind these keys +# in the main keymap to a noop op so if there is no keybind in the users mode +# it will fall back and do nothing. +function _prezto-zle-noop { ; } +zle -N _prezto-zle-noop +local -a unbound_keys +unbound_keys=( + "${key_info[F1]}" + "${key_info[F2]}" + "${key_info[F3]}" + "${key_info[F4]}" + "${key_info[F5]}" + "${key_info[F6]}" + "${key_info[F7]}" + "${key_info[F8]}" + "${key_info[F9]}" + "${key_info[F10]}" + "${key_info[F11]}" + "${key_info[F12]}" + "${key_info[PageUp]}" + "${key_info[PageDown]}" + "${key_info[ControlPageUp]}" + "${key_info[ControlPageDown]}" +) +for keymap in $unbound_keys; do + bindkey -M viins "${keymap}" _prezto-zle-noop + bindkey -M vicmd "${keymap}" _prezto-zle-noop +done + +# Keybinds for all keymaps +for keymap in 'emacs' 'viins' 'vicmd'; do + bindkey -M "$keymap" "$key_info[Home]" beginning-of-line + bindkey -M "$keymap" "$key_info[End]" end-of-line +done + +# Keybinds for all vi keymaps +for keymap in viins vicmd; do + # Ctrl + Left and Ctrl + Right bindings to forward/backward word + for key in "${(s: :)key_info[ControlLeft]}" + bindkey -M "$keymap" "$key" vi-backward-word + for key in "${(s: :)key_info[ControlRight]}" + bindkey -M "$keymap" "$key" vi-forward-word +done + +# Keybinds for emacs and vi insert mode +for keymap in 'emacs' 'viins'; do + bindkey -M "$keymap" "$key_info[Insert]" overwrite-mode + bindkey -M "$keymap" "$key_info[Delete]" delete-char + bindkey -M "$keymap" "$key_info[Backspace]" backward-delete-char + + bindkey -M "$keymap" "$key_info[Left]" backward-char + bindkey -M "$keymap" "$key_info[Right]" forward-char + + # Expand history on space. + bindkey -M "$keymap" ' ' magic-space + + # Clear screen. + bindkey -M "$keymap" "$key_info[Control]L" clear-screen + + # Expand command name to full path. + for key in "$key_info[Escape]"{E,e} + bindkey -M "$keymap" "$key" expand-cmd-path + + # Duplicate the previous word. + for key in "$key_info[Escape]"{M,m} + bindkey -M "$keymap" "$key" copy-prev-shell-word + + # Use a more flexible push-line. + for key in "$key_info[Control]Q" "$key_info[Escape]"{q,Q} + bindkey -M "$keymap" "$key" push-line-or-edit + + # Bind Shift + Tab to go to the previous menu item. + bindkey -M "$keymap" "$key_info[BackTab]" reverse-menu-complete + + # Complete in the middle of word. + bindkey -M "$keymap" "$key_info[Control]I" expand-or-complete + + # Expand .... to ../.. + if zstyle -t ':prezto:module:editor' dot-expansion; then + bindkey -M "$keymap" "." expand-dot-to-parent-directory-path + fi + + # Display an indicator when completing. + bindkey -M "$keymap" "$key_info[Control]I" \ + expand-or-complete-with-indicator + + # Insert 'sudo ' at the beginning of the line. + bindkey -M "$keymap" "$key_info[Control]X$key_info[Control]S" prepend-sudo + + # control-space expands all aliases, including global + bindkey -M "$keymap" "$key_info[Control] " glob-alias +done + +# Delete key deletes character in vimcmd cmd mode instead of weird default functionality +bindkey -M vicmd "$key_info[Delete]" delete-char + +# Do not expand .... to ../.. during incremental search. +if zstyle -t ':prezto:module:editor' dot-expansion; then + bindkey -M isearch . self-insert 2> /dev/null +fi + +# +# Layout +# + +# Set the key layout. +zstyle -s ':prezto:module:editor' key-bindings 'key_bindings' +if [[ "$key_bindings" == (emacs|) ]]; then + bindkey -e +elif [[ "$key_bindings" == vi ]]; then + bindkey -v +else + print "prezto: editor: invalid key bindings: $key_bindings" >&2 +fi + +unset key{,map,_bindings} diff --git a/config/zsh/.zprezto/modules/emacs/README.md b/config/zsh/.zprezto/modules/emacs/README.md new file mode 100644 index 0000000..8cf7bfc --- /dev/null +++ b/config/zsh/.zprezto/modules/emacs/README.md @@ -0,0 +1,36 @@ +# Emacs + +Enables Emacs dependency management. + +## Dependency management + +[Carton][1] installs and manages Emacs packages for Emacs package development +and Emacs configuration. + +This module prepends the Carton directory to the path variable to enable the +execution of `carton`. + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:emacs:alias' skip 'yes' +``` + +### Carton + +- `cai` installs dependencies. +- `cau` updates dependencies. +- `caI` initializes the current directory for dependency management. +- `cae` executes a command which correct dependencies. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][2]._ + +- [Sebastian Wiesner](https://github.com/lunaryorn) + +[1]: https://github.com/rejeep/carton +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/emacs/init.zsh b/config/zsh/.zprezto/modules/emacs/init.zsh new file mode 100644 index 0000000..a53285a --- /dev/null +++ b/config/zsh/.zprezto/modules/emacs/init.zsh @@ -0,0 +1,27 @@ +# +# Configures Emacs dependency management. +# +# Authors: Sebastian Wiesner +# + +# Return if requirements are not found. +if [[ ! -d "$HOME/.cask" ]]; then + return 1 +fi + +# Prepend Cask bin directory. +path=($HOME/.cask/bin $path) + +# Load Carton completion +source "$HOME/.cask/etc/cask_completion.zsh" 2> /dev/null + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:emacs:alias' skip; then + alias cai='cask install' + alias cau='cask update' + alias caI='cask init' + alias cae='cask exec' +fi diff --git a/config/zsh/.zprezto/modules/environment/README.md b/config/zsh/.zprezto/modules/environment/README.md new file mode 100644 index 0000000..5243f26 --- /dev/null +++ b/config/zsh/.zprezto/modules/environment/README.md @@ -0,0 +1,52 @@ +# Environment + +Sets general shell options and defines environment variables. + +This module must be loaded first. + +## Contributors + +This module **MUST NOT** rely on any command that is not built in Zsh. + +Non-interactive environment variables should be defined in +[_`${ZDOTDIR:-$HOME}/.zshenv`_][1]. + +## Options + +### General + +- `COMBINING_CHARS` combine zero-length punctuation characters (accents) with + the base character. +- `INTERACTIVE_COMMENTS` enable comments in interactive shell. +- `RC_QUOTES` allow 'Henry''s Garage' instead of 'Henry'\''s Garage'. +- `MAIL_WARNING` don't print a warning message if a mail file has been accessed. + +### Jobs + +- `LONG_LIST_JOBS` list jobs in the long format by default. +- `AUTO_RESUME` attempt to resume existing job before creating a new process. +- `NOTIFY` report status of background jobs immediately. +- `BG_NICE` don't run all background jobs at a lower priority. +- `HUP` don't kill jobs on shell exit. +- `CHECK_JOBS` don't report on jobs when shell exit. + +## Variables + +### Termcap + +- `LESS_TERMCAP_mb` begins blinking. +- `LESS_TERMCAP_md` begins bold. +- `LESS_TERMCAP_me` ends mode. +- `LESS_TERMCAP_se` ends standout-mode. +- `LESS_TERMCAP_so` begins standout-mode. +- `LESS_TERMCAP_ue` ends underline. +- `LESS_TERMCAP_us` begins underline. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][2]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: ../../runcoms#zshenv +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/environment/init.zsh b/config/zsh/.zprezto/modules/environment/init.zsh new file mode 100644 index 0000000..9f49c08 --- /dev/null +++ b/config/zsh/.zprezto/modules/environment/init.zsh @@ -0,0 +1,66 @@ +# +# Sets general shell options and defines environment variables. +# +# Authors: +# Sorin Ionescu +# + +# +# Smart URLs +# + +# This logic comes from an old version of zim. Essentially, bracketed-paste was +# added as a requirement of url-quote-magic in 5.1, but in 5.1.1 bracketed +# paste had a regression. Additionally, 5.2 added bracketed-paste-url-magic +# which is generally better than url-quote-magic so we load that when possible. +autoload -Uz is-at-least +if [[ $ZSH_VERSION != 5.1.1 && $TERM != dumb ]]; then + if is-at-least 5.2; then + autoload -Uz bracketed-paste-url-magic + zle -N bracketed-paste bracketed-paste-url-magic + elif is-at-least 5.1; then + autoload -Uz bracketed-paste-magic + zle -N bracketed-paste bracketed-paste-magic + fi + autoload -Uz url-quote-magic + zle -N self-insert url-quote-magic +fi + +# +# General +# + +setopt COMBINING_CHARS # Combine zero-length punctuation characters (accents) + # with the base character. +setopt INTERACTIVE_COMMENTS # Enable comments in interactive shell. +setopt RC_QUOTES # Allow 'Henry''s Garage' instead of 'Henry'\''s Garage'. +unsetopt MAIL_WARNING # Don't print a warning message if a mail file has + # been accessed. + +# Allow mapping Ctrl+S and Ctrl+Q shortcuts +[[ -r ${TTY:-} && -w ${TTY:-} && $+commands[stty] == 1 ]] && stty -ixon <$TTY >$TTY + +# +# Jobs +# + +setopt LONG_LIST_JOBS # List jobs in the long format by default. +setopt AUTO_RESUME # Attempt to resume existing job before creating a new process. +setopt NOTIFY # Report status of background jobs immediately. +unsetopt BG_NICE # Don't run all background jobs at a lower priority. +unsetopt HUP # Don't kill jobs on shell exit. +unsetopt CHECK_JOBS # Don't report on jobs when shell exit. + +# +# Termcap +# + +if zstyle -t ':prezto:environment:termcap' color; then + export LESS_TERMCAP_mb=$'\E[01;31m' # Begins blinking. + export LESS_TERMCAP_md=$'\E[01;31m' # Begins bold. + export LESS_TERMCAP_me=$'\E[0m' # Ends mode. + export LESS_TERMCAP_se=$'\E[0m' # Ends standout-mode. + export LESS_TERMCAP_so=$'\E[00;47;30m' # Begins standout-mode. + export LESS_TERMCAP_ue=$'\E[0m' # Ends underline. + export LESS_TERMCAP_us=$'\E[01;32m' # Begins underline. +fi diff --git a/config/zsh/.zprezto/modules/fasd/README.md b/config/zsh/.zprezto/modules/fasd/README.md new file mode 100644 index 0000000..31aa72a --- /dev/null +++ b/config/zsh/.zprezto/modules/fasd/README.md @@ -0,0 +1,48 @@ +# Fasd + +[Fasd][1] is a command-line productivity booster, inspired by tools like +[autojump][2], [z][3] and [v][4], it offers quick access to files and +directories by keeping track of files and directories that were previously +accessed. + +For shell completion to work, this module must be loaded _after_ the +[_`completion`_][5] module. + +The Prezto Fasd configuration differs from the default. The default aliases have +been disabled. + +## Installation + +`fasd` is bundled with prezto as a git submodule. Alternatively, you can +manually install `fasd`. If a manual installation is found, it will be used +instead of the bundled version. + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:fasd:alias' skip 'yes' +``` + +- `j` changes the current working directory interactively. + +## Completion + +Type `,`, `f,`, `d,` in front of a comma-separated query or type `,,`, `,,f`, +`,,d` at the end of a comma-separated query then hit TAB. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][6]._ + +- [Wei Dai](https://github.com/clvv) +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/whjvenyl/fasd +[2]: https://github.com/joelthelion/autojump +[3]: https://github.com/rupa/z +[4]: https://github.com/rupa/v +[5]: ../completion#readme +[6]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/fasd/init.zsh b/config/zsh/.zprezto/modules/fasd/init.zsh new file mode 100644 index 0000000..bd142f8 --- /dev/null +++ b/config/zsh/.zprezto/modules/fasd/init.zsh @@ -0,0 +1,59 @@ +# +# Maintains a frequently used file and directory list for fast access. +# +# Authors: +# Wei Dai +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'editor' + +# If the command doesn't exist externally, we need to fall back to the bundled +# submodule. +if (( ! $+commands[fasd] )); then + source "${0:h}/external/fasd" || return 1 +fi + +# +# Initialization +# + +cache_file="${XDG_CACHE_HOME:-$HOME/.cache}/prezto/fasd-cache.zsh" +if [[ "${commands[fasd]}" -nt "$cache_file" \ + || "${ZDOTDIR:-$HOME}/.zpreztorc" -nt "$cache_file" \ + || ! -s "$cache_file" ]]; then + # Set the base init arguments. + init_args=(zsh-hook) + + # Set fasd completion init arguments, if applicable. + if zstyle -t ':prezto:module:completion' loaded; then + init_args+=(zsh-ccomp zsh-ccomp-install zsh-wcomp zsh-wcomp-install) + fi + + mkdir -p "$cache_file:h" + # Cache init code. + fasd --init "$init_args[@]" >! "$cache_file" 2> /dev/null +fi + +source "$cache_file" + +unset cache_file init_args + +function fasd_cd { + local fasd_ret="$(fasd -d "$@")" + if [[ -d "$fasd_ret" ]]; then + cd "$fasd_ret" + else + print "$fasd_ret" + fi +} + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:fasd:alias' skip; then + # Changes the current working directory interactively. + alias j='fasd_cd -i' +fi diff --git a/config/zsh/.zprezto/modules/git/README.md b/config/zsh/.zprezto/modules/git/README.md new file mode 100644 index 0000000..ed2890b --- /dev/null +++ b/config/zsh/.zprezto/modules/git/README.md @@ -0,0 +1,473 @@ +# Git + +Enhances the [Git][1] distributed version control system by providing aliases, +functions and by exposing repository status information to prompts. + +This module must be loaded _before_ the [_`completion`_][13] module so that the +provided completion definitions are loaded automatically by _`completion`_ +module. + +**Note:** Git **2.11** is the minimum required version for better +[git-rev-list][7] and [git-submodule][14] support. + +## Settings + +### Log + +To configure the format of the [git-log][8] output, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_, and replace `''` with `'brief'`, +`'oneline'`, and `'medium'`. This will be passed to the `--pretty=format:` +switch. + +```sh +zstyle ':prezto:module:git:log:context' format '' +``` + +### Status + +Retrieving the status of a repository with [git-submodule][9] can take a long +time. To configure the submodules to ignore, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_, and replace `''` with `'dirty'`, +`'untracked'`, `'all'`, or `'none'`. + +```sh +zstyle ':prezto:module:git:status:ignore' submodules '' +``` + +This setting affects all aliases and functions that call `git-status`. + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:git:alias' skip 'yes' +``` + +### Git + +- `g` is short for `git`. + +### Branch (b) + +- `gb` lists, creates, renames, and deletes branches. +- `gbc` creates a new branch. +- `gbl` lists branches and their commits. (also `gbv`) +- `gbL` lists all local and remote branches and their commits. +- `gbr` renames a branch. (also `gbm`) +- `gbR` renames a branch even if the new branch name already exists. (also + `gbM`) +- `gbs` lists branches and their commits with ancestry graphs. +- `gbS` lists local and remote branches and their commits with ancestry graphs. +- `gbV` lists branches with more verbose information about their commits. +- `gbx` deletes a branch. (also `gbd`) +- `gbX` deletes a branch irrespective of its merged status. (also `gbD`) + +### Commit (c) + +- `gc` records changes to the repository. +- `gcS` records changes to the repository. (Signed) +- `gca` stages all modified and deleted files. +- `gcaS` stages all modified and deleted files. (Signed) +- `gcm` records changes to the repository with the given message. +- `gcmS` records changes to the repository with the given message. (Signed) +- `gcam` stages all modified and deleted files, and records changes to the + repository with the given message. +- `gco` checks out a branch or paths to work tree. +- `gcO` checks out hunks from the index or the tree interactively. +- `gcf` amends the tip of the current branch using the same log message as + _HEAD_. +- `gcfS` amends the tip of the current branch using the same log message as + _HEAD_. (Signed) +- `gcF` amends the tip of the current branch. +- `gcFS` amends the tip of the current branch. (Signed) +- `gcp` applies changes introduced by existing commits. +- `gcP` applies changes introduced by existing commits without committing. +- `gcr` reverts existing commits by reverting patches and recording new commits. +- `gcR` removes the _HEAD_ commit. +- `gcs` displays commits with various objects. +- `gcsS` displays commits with GPG signature. +- `gcl` lists lost commits. +- `gcy` displays commits yet to be applied to upstream in the short format. +- `gcY` displays commits yet to be applied to upstream. + +### Conflict (C) + +- `gCl` lists unmerged files. +- `gCa` adds unmerged file contents to the index. +- `gCe` executes merge-tool on all unmerged file. +- `gCo` checks out our changes for unmerged paths. +- `gCO` checks out our changes for all unmerged paths. +- `gCt` checks out their changes for unmerged paths. +- `gCT` checks out their changes for all unmerged paths. + +### Data (d) + +- `gd` displays information about files in the index and the work tree. +- `gdc` lists cached files. +- `gdx` lists deleted files. +- `gdm` lists modified files. +- `gdu` lists untracked files. +- `gdk` lists killed files. +- `gdi` lists ignored files. + +### Fetch (f) + +- `gf` downloads objects and references from another repository. +- `gfa` downloads objects and references from all remote repositories. +- `gfc` clones a repository into a new directory. +- `gfcr` clones a repository into a new directory including all submodules. +- `gfm` fetches from and merges with another repository or local branch. +- `gfr` fetches from and rebases on another repository or local branch. + +### Flow (F) + +- `gFi` is short for `git flow init` + +#### Feature (Ff) + +- `gFf` is short for `git flow feature` +- `gFfl` is short for `git flow feature list` +- `gFfs` is short for `git flow feature start` +- `gFff` is short for `git flow feature finish` +- `gFfp` is short for `git flow feature publish` +- `gFft` is short for `git flow feature track` +- `gFfd` is short for `git flow feature diff` +- `gFfr` is short for `git flow feature rebase` +- `gFfc` is short for `git flow feature checkout` +- `gFfm` is short for `git flow feature pull` +- `gFfx` is short for `git flow feature delete` + +#### Bugfix (Fb) + +- `gFb` is short for `git flow bugfix` +- `gFbl` is short for `git flow bugfix list` +- `gFbs` is short for `git flow bugfix start` +- `gFbf` is short for `git flow bugfix finish` +- `gFbp` is short for `git flow bugfix publish` +- `gFbt` is short for `git flow bugfix track` +- `gFbd` is short for `git flow bugfix diff` +- `gFbr` is short for `git flow bugfix rebase` +- `gFbc` is short for `git flow bugfix checkout` +- `gFbm` is short for `git flow bugfix pull` +- `gFbx` is short for `git flow bugfix delete` + +#### Release (Fl) + +- `gFl` is short for `git flow release` +- `gFll` is short for `git flow release list` +- `gFls` is short for `git flow release start` +- `gFlf` is short for `git flow release finish` +- `gFlp` is short for `git flow release publish` +- `gFlt` is short for `git flow release track` +- `gFld` is short for `git flow release diff` +- `gFlr` is short for `git flow release rebase` +- `gFlc` is short for `git flow release checkout` +- `gFlm` is short for `git flow release pull` +- `gFlx` is short for `git flow release delete` + +#### Hotfix (Fh) + +- `gFh` is short for `git flow hotfix` +- `gFhl` is short for `git flow hotfix list` +- `gFhs` is short for `git flow hotfix start` +- `gFhf` is short for `git flow hotfix finish` +- `gFhp` is short for `git flow hotfix publish` +- `gFht` is short for `git flow hotfix track` +- `gFhd` is short for `git flow hotfix diff` +- `gFhr` is short for `git flow hotfix rebase` +- `gFhc` is short for `git flow hotfix checkout` +- `gFhm` is short for `git flow hotfix pull` +- `gFhx` is short for `git flow hotfix delete` + +#### Support (Fs) + +- `gFs` is short for `git flow support` +- `gFsl` is short for `git flow support list` +- `gFss` is short for `git flow support start` +- `gFsf` is short for `git flow support finish` +- `gFsp` is short for `git flow support publish` +- `gFst` is short for `git flow support track` +- `gFsd` is short for `git flow support diff` +- `gFsr` is short for `git flow support rebase` +- `gFsc` is short for `git flow support checkout` +- `gFsm` is short for `git flow support pull` +- `gFsx` is short for `git flow support delete` + +### Grep (g) + +- `gg` displays lines matching a pattern. +- `ggi` displays lines matching a pattern ignoring case. +- `ggl` lists files matching a pattern. +- `ggL` lists files that are not matching a pattern. +- `ggv` displays lines not matching a pattern. +- `ggw` displays lines matching a pattern at word boundary. + +### Index (i) + +- `gia` adds file contents to the index. +- `giA` adds file contents to the index interactively. +- `giu` adds file contents to the index (updates only known files). +- `gid` displays changes between the index and a named commit (diff). +- `giD` displays changes between the index and a named commit (word diff). +- `gii` temporarily ignore differences in a given file. +- `giI` unignore differences in a given file. +- `gir` resets the current HEAD to the specified state. +- `giR` resets the current index interactively. +- `gix` removes files/directories from the index (recursively). +- `giX` removes files/directories from the index (recursively and forced). + +### Log (l) + +- `gl` displays the log. +- `gls` displays the stats log. +- `gld` displays the diff log. +- `glo` displays the one line log. +- `glg` displays the graph log. +- `glb` displays the brief commit log. +- `glc` displays the commit count for each contributor in descending order. +- `glS` displays the log and checks the validity of signed commits. + +### Merge (m) + +- `gm` joins two or more development histories together. +- `gmC` joins two or more development histories together but does not commit. +- `gmF` joins two or more development histories together but does not commit + generating a merge commit even if the merge resolved as a fast-forward. +- `gma` aborts the conflict resolution, and reconstructs the pre-merge state. +- `gmt` runs the merge conflict resolution tools to resolve conflicts. + +### Push (p) + +- `gp` updates remote refs along with associated objects. +- `gpf` forcefully updates remote refs along with associated objects using the + safer `--force-with-lease` option. +- `gpF` forcefully updates remote refs along with associated objects using the + riskier `--force` option. +- `gpa` updates remote branches along with associated objects. +- `gpA` updates remote branches and tags along with associated objects. +- `gpt` updates remote tags along with associated objects. +- `gpc` updates remote refs along with associated objects and adds _origin_ as + an upstream reference for the current branch. +- `gpp` pulls and pushes from origin to origin. + +### Rebase (r) + +- `gr` forward-ports local commits to the updated upstream _HEAD_. +- `gra` aborts the rebase. +- `grc` continues the rebase after merge conflicts are resolved. +- `gri` makes a list of commits to be rebased and opens the editor. +- `grs` skips the current patch. + +### Remote (R) + +- `gR` manages tracked repositories. +- `gRl` lists remote names and their URLs. +- `gRa` adds a new remote. +- `gRx` removes a remote. +- `gRm` renames a remote. +- `gRu` fetches remotes updates. +- `gRp` prunes all stale remote tracking branches. +- `gRs` displays information about a given remote. +- `gRb` opens a remote on [GitHub][3] in the default browser. + +### Stash (s) + +- `gs` stashes the changes of the dirty working directory. +- `gsa` applies the changes recorded in a stash to the working directory. +- `gsx` drops a stashed state. +- `gsX` drops all the stashed states. +- `gsl` lists stashed states. +- `gsL` lists dropped stashed states. +- `gsd` displays changes between the stash and its original parent. +- `gsp` removes and applies a single stashed state from the stash list. +- `gsr` recovers a given stashed state. +- `gss` stashes the changes of the dirty working directory, including untracked. +- `gsS` stashes the changes of the dirty working directory interactively. +- `gsw` stashes the changes of the dirty working directory retaining the index. + +### Submodule (S) + +- `gS` initializes, updates, or inspects submodules. +- `gSa` adds given a repository as a submodule. +- `gSf` evaluates a shell command in each of checked out submodules. +- `gSi` initializes submodules. +- `gSI` initializes and clones submodules recursively. +- `gSl` lists the commits of all submodules. +- `gSm` moves a submodule. +- `gSs` synchronizes submodules' remote URL to the value specified in + _.gitmodules_. +- `gSu` fetches and merges the latest changes for all submodule. +- `gSx` removes a submodule. + +### Tag (t) + +- `gt` lists tags or creates tag. +- `gtl` lists tags matching pattern. +- `gts` creates a signed tag. +- `gtv` validate a signed tag. + +### Working directory (w) + +- `gws` displays working-tree status in the short format. +- `gwS` displays working-tree status. +- `gwd` displays changes between the working tree and the index (diff). +- `gwD` displays changes between the working tree and the index (word diff). +- `gwr` resets the current HEAD to the specified state, does not touch the + index nor the working tree. +- `gwR` resets the current HEAD, index and working tree to the specified state. +- `gwc` removes untracked files from the working tree (dry-run). +- `gwC` removes untracked files and directories from the working tree. +- `gwx` removes files from the working tree and from the index recursively. +- `gwX` removes files from the working tree and from the index recursively and + forcefully. + +### Working tree (W) + +- `gWa` adds a new working tree. +- `gWl` lists all working trees. +- `gWx` removes a working tree. +- `gWX` removes a working tree forcefully. +- `gWm` moves a working tree to a new location. +- `gWc` prunes stale worktrees and their administrative data. + +### Shadows + +The following aliases may shadow system commands: + +- `gb` shadows the [GB][10]. +- `gm` shadows the [GraphicsMagick image processor][11]. +- `gpt` shadows the [GUID partition table maintenance utility][4]. +- `gs` shadows the [Ghostscript interpreter and previewer][5]. + +If you frequently use the above commands, you may wish to remove said aliases +from this module or to disable them at the bottom of the zshrc with `unalias`. + +You can temporarily bypass an alias by prefixing it with a backward slash: +`\gpt`. + +## Functions + +- `git-branch-current` displays the current branch. +- `git-commit-lost` lists lost commits. +- `git-dir` displays the path to the Git directory. +- `git-hub-browse` opens the [GitHub][3] repository in the default browser. +- `git-hub-shorten-url` shortens [GitHub URLs][12]. +- `git-info` exposes repository information via the `$git_info` associative + array. +- `git-root` displays the path to the working tree root. +- `git-stash-clear-interactive` asks for confirmation before clearing the stash. +- `git-stash-dropped` lists dropped stashed states. +- `git-stash-recover` recovers given dropped stashed states. +- `git-submodule-move` moves a submodule. +- `git-submodule-remove` removes a submodule. + +## Theming + +To display information about the current repository in a prompt, define the +following styles in the `prompt_name_setup` function, where the syntax for +setting a style is as follows. + +```sh +zstyle ':prezto:module:git:info:context:subcontext' format 'string' +``` + +### Main Contexts + +| Name | Format Code | Description | +| -------- | :---------: | ---------------------------------- | +| action | %s | Special action name | +| ahead | %A | Commits ahead of remote count | +| behind | %B | Commits behind of remote count | +| branch | %b | Branch name | +| commit | %c | Commit hash | +| position | %p | Commits from the nearest tag count | +| remote | %R | Remote name | +| stashed | %S | Stashed states count | + +### Concise Contexts + +| Name | Format Code | Description | +| --------- | :---------: | --------------------- | +| clean | %C | Clean state | +| dirty | %D | Dirty files count | +| indexed | %i | Indexed files count | +| unindexed | %I | Unindexed files count | +| untracked | %u | Untracked files count | + +The following contexts must be enabled with the following zstyle: + +```sh +zstyle ':prezto:module:git:info' verbose 'yes' +``` + +### Verbose Contexts + +| Name | Format Code | Description | +| --------- | :---------: | --------------------- | +| added | %a | Added files count | +| clean | %C | Clean state | +| deleted | %d | Deleted files count | +| dirty | %D | Dirty files count | +| modified | %m | Modified files count | +| renamed | %r | Renamed files count | +| unmerged | %U | Unmerged files count | +| untracked | %u | Untracked files count | + +### Special Action Contexts + +| Name | Format | Description | +| -------------------- | :----: | ---------------------------- | +| apply | value | Applying patches | +| bisect | value | Binary searching for changes | +| cherry-pick | value | Cherry picking | +| cherry-pick-sequence | value | Cherry picking sequence | +| merge | value | Merging | +| rebase | value | Rebasing | +| rebase-interactive | value | Rebasing interactively | +| rebase-merge | value | Rebasing merge | +| revert | value | Reverting | +| revert-sequence | value | Reverting sequence | + +First, format the repository state attributes. For example, to format the branch +and remote names, define the following styles. + +```sh +zstyle ':prezto:module:git:info:branch' format 'branch:%b' +zstyle ':prezto:module:git:info:remote' format 'remote:%R' +``` + +Second, format how the above attributes are displayed in prompts. + +```sh +zstyle ':prezto:module:git:info:keys' format \ + 'prompt' ' git(%b)' \ + 'rprompt' '[%R]' +``` + +Last, add `$git_info[prompt]` to `$PROMPT` and `$git_info[rprompt]` to +`$RPROMPT` respectively and call `git-info` in the `prompt_name_preexec` hook +function. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][6]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) +- [Colin Hebert](https://github.com/ColinHebert) + +[1]: https://www.git-scm.com +[2]: https://hub.github.com +[3]: https://www.github.com +[4]: https://www.manpagez.com/man/8/gpt/ +[5]: https://www.manpagez.com/man/1/gs/ +[6]: https://github.com/sorin-ionescu/prezto/issues +[7]: https://github.com/sorin-ionescu/prezto/issues/219 +[8]: https://git-scm.com/docs/git-log +[9]: https://git-scm.com/docs/git-submodule +[10]: https://getgb.io/ +[11]: https://www.manpagez.com/man/1/gm/ +[12]: https://github.blog/2011-11-10-git-io-github-url-shortener +[13]: ../completion#readme +[14]: https://github.com/sorin-ionescu/prezto/pull/1929 diff --git a/config/zsh/.zprezto/modules/git/alias.zsh b/config/zsh/.zprezto/modules/git/alias.zsh new file mode 100644 index 0000000..977eaac --- /dev/null +++ b/config/zsh/.zprezto/modules/git/alias.zsh @@ -0,0 +1,283 @@ +# +# Defines Git aliases. +# +# Authors: +# Sorin Ionescu +# + +# +# Settings +# + +# Log +zstyle -s ':prezto:module:git:log:medium' format '_git_log_medium_format' \ + || _git_log_medium_format='%C(bold)Commit:%C(reset) %C(green)%H%C(red)%d%n%C(bold)Author:%C(reset) %C(cyan)%an <%ae>%n%C(bold)Date:%C(reset) %C(blue)%ai (%ar)%C(reset)%n%+B' +zstyle -s ':prezto:module:git:log:oneline' format '_git_log_oneline_format' \ + || _git_log_oneline_format='%C(green)%h%C(reset) %s%C(red)%d%C(reset)%n' +zstyle -s ':prezto:module:git:log:brief' format '_git_log_brief_format' \ + || _git_log_brief_format='%C(green)%h%C(reset) %s%n%C(blue)(%ar by %an)%C(red)%d%C(reset)%n' + +# Status +zstyle -s ':prezto:module:git:status:ignore' submodules '_git_status_ignore_submodules' \ + || _git_status_ignore_submodules='none' + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:git:alias' skip; then + # Git + alias g='git' + + # Branch (b) + alias gb='git branch' + alias gba='git branch --all --verbose' + alias gbc='git checkout -b' + alias gbd='git branch --delete' + alias gbD='git branch --delete --force' + alias gbl='git branch --verbose' + alias gbL='git branch --all --verbose' + alias gbm='git branch --move' + alias gbM='git branch --move --force' + alias gbr='git branch --move' + alias gbR='git branch --move --force' + alias gbs='git show-branch' + alias gbS='git show-branch --all' + alias gbv='git branch --verbose' + alias gbV='git branch --verbose --verbose' + alias gbx='git branch --delete' + alias gbX='git branch --delete --force' + + # Commit (c) + alias gc='git commit --verbose' + alias gcS='git commit --verbose --gpg-sign' + alias gca='git commit --verbose --all' + alias gcaS='git commit --verbose --all --gpg-sign' + alias gcm='git commit --message' + alias gcmS='git commit --message --gpg-sign' + alias gcam='git commit --all --message' + alias gco='git checkout' + alias gcO='git checkout --patch' + alias gcf='git commit --amend --reuse-message HEAD' + alias gcfS='git commit --amend --reuse-message HEAD --gpg-sign' + alias gcF='git commit --verbose --amend' + alias gcFS='git commit --verbose --amend --gpg-sign' + alias gcp='git cherry-pick --ff' + alias gcP='git cherry-pick --no-commit' + alias gcr='git revert' + alias gcR='git reset "HEAD^"' + alias gcs='git show' + alias gcsS='git show --pretty=short --show-signature' + alias gcl='git-commit-lost' + alias gcy='git cherry --verbose --abbrev' + alias gcY='git cherry --verbose' + + # Conflict (C) + alias gCl='git --no-pager diff --name-only --diff-filter=U' + alias gCa='git add $(gCl)' + alias gCe='git mergetool $(gCl)' + alias gCo='git checkout --ours --' + alias gCO='gCo $(gCl)' + alias gCt='git checkout --theirs --' + alias gCT='gCt $(gCl)' + + # Data (d) + alias gd='git ls-files' + alias gdc='git ls-files --cached' + alias gdx='git ls-files --deleted' + alias gdm='git ls-files --modified' + alias gdu='git ls-files --other --exclude-standard' + alias gdk='git ls-files --killed' + alias gdi='git status --porcelain --short --ignored | sed -n "s/^!! //p"' + + # Fetch (f) + alias gf='git fetch' + alias gfa='git fetch --all' + alias gfc='git clone' + alias gfcr='git clone --recurse-submodules' + alias gfm='git pull' + alias gfma='git pull --autostash' + alias gfr='git pull --rebase' + alias gfra='git pull --rebase --autostash' + + # Flow (F) + alias gFi='git flow init' + alias gFf='git flow feature' + alias gFb='git flow bugfix' + alias gFl='git flow release' + alias gFh='git flow hotfix' + alias gFs='git flow support' + + alias gFfl='git flow feature list' + alias gFfs='git flow feature start' + alias gFff='git flow feature finish' + alias gFfp='git flow feature publish' + alias gFft='git flow feature track' + alias gFfd='git flow feature diff' + alias gFfr='git flow feature rebase' + alias gFfc='git flow feature checkout' + alias gFfm='git flow feature pull' + alias gFfx='git flow feature delete' + + alias gFbl='git flow bugfix list' + alias gFbs='git flow bugfix start' + alias gFbf='git flow bugfix finish' + alias gFbp='git flow bugfix publish' + alias gFbt='git flow bugfix track' + alias gFbd='git flow bugfix diff' + alias gFbr='git flow bugfix rebase' + alias gFbc='git flow bugfix checkout' + alias gFbm='git flow bugfix pull' + alias gFbx='git flow bugfix delete' + + alias gFll='git flow release list' + alias gFls='git flow release start' + alias gFlf='git flow release finish' + alias gFlp='git flow release publish' + alias gFlt='git flow release track' + alias gFld='git flow release diff' + alias gFlr='git flow release rebase' + alias gFlc='git flow release checkout' + alias gFlm='git flow release pull' + alias gFlx='git flow release delete' + + alias gFhl='git flow hotfix list' + alias gFhs='git flow hotfix start' + alias gFhf='git flow hotfix finish' + alias gFhp='git flow hotfix publish' + alias gFht='git flow hotfix track' + alias gFhd='git flow hotfix diff' + alias gFhr='git flow hotfix rebase' + alias gFhc='git flow hotfix checkout' + alias gFhm='git flow hotfix pull' + alias gFhx='git flow hotfix delete' + + alias gFsl='git flow support list' + alias gFss='git flow support start' + alias gFsf='git flow support finish' + alias gFsp='git flow support publish' + alias gFst='git flow support track' + alias gFsd='git flow support diff' + alias gFsr='git flow support rebase' + alias gFsc='git flow support checkout' + alias gFsm='git flow support pull' + alias gFsx='git flow support delete' + + # Grep (g) + alias gg='git grep' + alias ggi='git grep --ignore-case' + alias ggl='git grep --files-with-matches' + alias ggL='git grep --files-without-matches' + alias ggv='git grep --invert-match' + alias ggw='git grep --word-regexp' + + # Index (i) + alias gia='git add' + alias giA='git add --patch' + alias giu='git add --update' + alias gid='git diff --no-ext-diff --cached' + alias giD='git diff --no-ext-diff --cached --word-diff' + alias gii='git update-index --assume-unchanged' + alias giI='git update-index --no-assume-unchanged' + alias gir='git reset' + alias giR='git reset --patch' + alias gix='git rm -r --cached' + alias giX='git rm -r --force --cached' + + # Log (l) + alias gl='git log --topo-order --pretty=format:"$_git_log_medium_format"' + alias gls='git log --topo-order --stat --pretty=format:"$_git_log_medium_format"' + alias gld='git log --topo-order --stat --patch --full-diff --pretty=format:"$_git_log_medium_format"' + alias glo='git log --topo-order --pretty=format:"$_git_log_oneline_format"' + alias glg='git log --topo-order --graph --pretty=format:"$_git_log_oneline_format"' + alias glb='git log --topo-order --pretty=format:"$_git_log_brief_format"' + alias glc='git shortlog --summary --numbered' + alias glS='git log --topo-order --show-signature --pretty=format:"${_git_log_medium_format}"' + + # Merge (m) + alias gm='git merge' + alias gmC='git merge --no-commit' + alias gmF='git merge --no-ff' + alias gma='git merge --abort' + alias gmt='git mergetool' + + # Push (p) + alias gp='git push' + alias gpf='git push --force-with-lease' + alias gpF='git push --force' + alias gpa='git push --all' + alias gpA='git push --all && git push --tags' + alias gpt='git push --tags' + alias gpc='git push --set-upstream origin "$(git-branch-current 2> /dev/null)"' + alias gpp='git pull origin "$(git-branch-current 2> /dev/null)" && git push origin "$(git-branch-current 2> /dev/null)"' + + # Rebase (r) + alias gr='git rebase' + alias gra='git rebase --abort' + alias grc='git rebase --continue' + alias gri='git rebase --interactive' + alias grs='git rebase --skip' + + # Remote (R) + alias gR='git remote' + alias gRl='git remote --verbose' + alias gRa='git remote add' + alias gRx='git remote rm' + alias gRm='git remote rename' + alias gRu='git remote update' + alias gRp='git remote prune' + alias gRs='git remote show' + alias gRb='git-hub-browse' + + # Stash (s) + alias gs='git stash' + alias gsa='git stash apply' + alias gsx='git stash drop' + alias gsX='git-stash-clear-interactive' + alias gsl='git stash list' + alias gsL='git-stash-dropped' + alias gsd='git stash show --patch --stat' + alias gsp='git stash pop' + alias gsr='git-stash-recover' + alias gss='git stash save --include-untracked' + alias gsS='git stash save --patch --no-keep-index' + alias gsw='git stash save --include-untracked --keep-index' + + # Submodule (S) + alias gS='git submodule' + alias gSa='git submodule add' + alias gSf='git submodule foreach' + alias gSi='git submodule init' + alias gSI='git submodule update --init --recursive' + alias gSl='git submodule status' + alias gSm='git-submodule-move' + alias gSs='git submodule sync' + alias gSu='git submodule update --remote --recursive' + alias gSx='git-submodule-remove' + + # Tag (t) + alias gt='git tag' + alias gtl='git tag --list' + alias gts='git tag --sign' + alias gtv='git verify-tag' + + # Working Copy (w) + alias gws='git status --ignore-submodules=$_git_status_ignore_submodules --short' + alias gwS='git status --ignore-submodules=$_git_status_ignore_submodules' + alias gwd='git diff --no-ext-diff' + alias gwD='git diff --no-ext-diff --word-diff' + alias gwr='git reset --soft' + alias gwR='git reset --hard' + alias gwc='git clean --dry-run' + alias gwC='git clean -d --force' + alias gwx='git rm -r' + alias gwX='git rm -r --force' + + # Worktree management (W) + alias gWa='git worktree add' + alias gWl='git worktree list' + alias gWx='git worktree remove' + alias gWX='git worktree remove --force' + alias gWm='git worktree move' + alias gWc='git worktree prune' +fi diff --git a/config/zsh/.zprezto/modules/git/functions/_git-hub-browse b/config/zsh/.zprezto/modules/git/functions/_git-hub-browse new file mode 100644 index 0000000..075314b --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/_git-hub-browse @@ -0,0 +1,47 @@ +#compdef git-hub-browse +#autoload + +# +# Completes git-hub-browse. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(command git rev-parse --is-inside-work-tree 2> /dev/null)"; then + return 1 +fi + +local state expl remotes remote branches_or_tags branches tags files ret=1 + +_arguments -C -s -S \ + '1::args:->remote' \ + '2::args:->branch-or-tag' \ + '3::args:->file' && ret=0 + +case "$state" in + (remote) + remotes=($(command git config --get-regexp 'remote.*.url' | cut -d. -f2)) + + _describe -t branch 'remotes' remotes && ret=0 + ;; + (branch-or-tag) + remote="$words[(($CURRENT - 1))]" + + branches_or_tags=($( + command git ls-remote --heads --tags "$remote" 2> /dev/null | cut -f2 + )) + + branches=(HEAD ${${(M)branches_or_tags[@]##refs/heads/?##}##refs/heads/}) + tags=(${${(M)branches_or_tags[@]##refs/tags/?##}##refs/tags/}) + + _describe -t branch 'branches' branches && ret=0 + _describe -t tag 'tags' tags && ret=0 + ;; + (file) + files=(${(0)"$(_call_program files command git ls-files -z --exclude-standard 2> /dev/null)"}) + _wanted file expl 'file' _multi_parts - / files && ret=0 + ;; +esac + +return $ret diff --git a/config/zsh/.zprezto/modules/git/functions/_git-hub-shorten-url b/config/zsh/.zprezto/modules/git/functions/_git-hub-shorten-url new file mode 100644 index 0000000..7e65ded --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/_git-hub-shorten-url @@ -0,0 +1,16 @@ +#compdef git-hub-shorten-url +#autoload + +# +# Completes git-hub-shorten-url. +# +# Authors: +# Sorin Ionescu +# + +local service="$service" + +zstyle ":completion:*:${service}:*:prefixes" ignored-patterns '^http(|s)://' +zstyle ":completion:*:${service}:*:hosts" ignored-patterns '^*github.com' + +_arguments '1::GitHub URL:_urls' '2::code:' && return 0 diff --git a/config/zsh/.zprezto/modules/git/functions/_git-info b/config/zsh/.zprezto/modules/git/functions/_git-info new file mode 100644 index 0000000..ef6d970 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/_git-info @@ -0,0 +1,18 @@ +#compdef git-info +#autoload + +# +# Completes git-info. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(command git rev-parse --is-inside-work-tree 2> /dev/null)"; then + return 1 +fi + +_arguments "1:toggle:(( + on\:'enable in-prompt information for the current repository' + off\:'disable in-prompt information for the current repository' +))" && return 0 diff --git a/config/zsh/.zprezto/modules/git/functions/_git-submodule-move b/config/zsh/.zprezto/modules/git/functions/_git-submodule-move new file mode 100644 index 0000000..5f2122c --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/_git-submodule-move @@ -0,0 +1,40 @@ +#compdef git-submodule-move +#autoload + +# +# Completes git-submodule-move. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(command git rev-parse --is-inside-work-tree 2> /dev/null)"; then + return 1 +fi + +local state expl ret=1 +local -a submodules +local submodule + +_arguments -C -s -S \ + '1::args:->submodule' \ + '2::args:->directory' && ret=0 + +case "$state" in + (submodule) + while IFS=$'\n' read submodule; do + submodules+=("$submodule") + done < <( + command git config --file "$(git-root)/.gitmodules" --list \ + | grep '.path=' \ + | cut -d= -f2- + ) + + _describe -t submodule 'submodules' submodules && ret=0 + ;; + (directory) + _wanted directories expl 'directory' _path_files -/ || _message 'directory' + ;; +esac + +return $ret diff --git a/config/zsh/.zprezto/modules/git/functions/_git-submodule-remove b/config/zsh/.zprezto/modules/git/functions/_git-submodule-remove new file mode 100644 index 0000000..819dfd8 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/_git-submodule-remove @@ -0,0 +1,26 @@ +#compdef git-submodule-remove +#autoload + +# +# Completes git-submodule-remove. +# +# Authors: +# Sorin Ionescu +# + +if ! is-true "$(command git rev-parse --is-inside-work-tree 2> /dev/null)"; then + return 1 +fi + +local -a submodules +local submodule + +while IFS=$'\n' read submodule; do + submodules+=("$submodule") +done < <( + command git config --file "$(git-root)/.gitmodules" --list \ + | grep '.path=' \ + | cut -d= -f2- +) + +_describe -t submodule 'submodules' submodules && return 0 diff --git a/config/zsh/.zprezto/modules/git/functions/git-branch-current b/config/zsh/.zprezto/modules/git/functions/git-branch-current new file mode 100644 index 0000000..3cf2e19 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/git-branch-current @@ -0,0 +1,24 @@ +# +# Displays the current Git branch. +# +# Authors: +# Sorin Ionescu +# + +# function git-branch-current { + +if ! command git rev-parse 2> /dev/null; then + print "$0: not a repository: $PWD" >&2 + return 1 +fi + +local ref="$(command git symbolic-ref HEAD 2> /dev/null)" + +if [[ -n "$ref" ]]; then + print "${ref#refs/heads/}" + return 0 +else + return 1 +fi + +# } diff --git a/config/zsh/.zprezto/modules/git/functions/git-commit-lost b/config/zsh/.zprezto/modules/git/functions/git-commit-lost new file mode 100644 index 0000000..1f086d3 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/git-commit-lost @@ -0,0 +1,24 @@ +# +# Lists lost Git commits. +# +# Authors: +# Sorin Ionescu +# + +# function git-commit-lost { + +if ! is-true "$(command git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +fi + +command git fsck 2> /dev/null \ + | grep "^dangling commit" \ + | awk '{print $3}' \ + | command git log \ + --date-order \ + --no-walk \ + --stdin \ + --pretty=format:${_git_log_oneline_format} + +# } diff --git a/config/zsh/.zprezto/modules/git/functions/git-dir b/config/zsh/.zprezto/modules/git/functions/git-dir new file mode 100644 index 0000000..aacaaa8 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/git-dir @@ -0,0 +1,20 @@ +# +# Displays the path to the Git directory. +# +# Authors: +# Sorin Ionescu +# + +# function git-dir { + +local git_dir="${$(command git rev-parse --git-dir):A}" + +if [[ -n "$git_dir" ]]; then + print "$git_dir" + return 0 +else + print "$0: not a repository: $PWD" >&2 + return 1 +fi + +# } diff --git a/config/zsh/.zprezto/modules/git/functions/git-hub-browse b/config/zsh/.zprezto/modules/git/functions/git-hub-browse new file mode 100644 index 0000000..3451198 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/git-hub-browse @@ -0,0 +1,62 @@ +# +# Opens a GitHub repository in the default browser. +# +# Authors: +# Sorin Ionescu +# + +# function git-hub-browse { + +if ! is-true "$(command git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +fi + +local remotes remote references reference file url + +remote="${1:-origin}" +remotes=($(command git remote show)) + +if (( $remotes[(i)$remote] == $#remotes + 1 )); then + print "$0: remote not found: $remote" >&2 + return 1 +fi + +url=$( + command git remote get-url "$remote" \ + | sed -En "s#(git@|https?://)(github.com)(:|/)(.+)/(.+)\.git#https://\2/\4/\5#p" +) + +reference="${${2:-$(git-branch-current)}:-HEAD}" +references=( + HEAD + ${${(f)"$(command git ls-remote --heads --tags "$remote")"}##*refs/(heads|tags)/} +) + +if (( $references[(i)$reference] == $#references + 1 )); then + print "$0: branch or tag not found: $reference" >&2 + return 1 +fi + +if [[ "$reference" == 'HEAD' ]]; then + reference="$(command git rev-parse HEAD 2> /dev/null)" +fi + +file="$3" + +if [[ -n "$url" ]]; then + url="$url/tree/$reference/$file" + + if [[ -n "$BROWSER" ]]; then + "$BROWSER" "$url" + return 0 + else + print "$0: browser not set or set to a non-existent browser" >&2 + return 1 + fi +else + print "$0: not a Git repository or remote not set" >&2 + return 1 +fi + +# } diff --git a/config/zsh/.zprezto/modules/git/functions/git-hub-shorten-url b/config/zsh/.zprezto/modules/git/functions/git-hub-shorten-url new file mode 100644 index 0000000..b9edd01 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/git-hub-shorten-url @@ -0,0 +1,28 @@ +# +# Shortens GitHub URLs. +# +# Authors: +# Sorin Ionescu +# + +# function git-hub-shorten-url { + +local url="$1" code="$2" + +if [[ "$url" == '-' ]]; then + read url <&0 +fi + +if [[ -z "$url" || ! "$url" =~ ^https?:\/\/.*github.com\/ ]]; then + print "usage: $0 [ url | - ] [code] ; url must be a github.com URL" >&2 + return 1 +fi + +if (( $+commands[curl] )); then + print "${${(@M)${(f)"$(curl -s -i 'https://git.io' -F "url=$url" ${(z)code:+ -F "code=$code"})"}:#Location: *}#Location: }" +else + print "$0: command not found: curl" >&2 + return 1 +fi + +# } diff --git a/config/zsh/.zprezto/modules/git/functions/git-info b/config/zsh/.zprezto/modules/git/functions/git-info new file mode 100644 index 0000000..7bbcb09 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/git-info @@ -0,0 +1,459 @@ +# +# Exposes Git repository information via the $git_info associative array. +# +# Authors: +# Sorin Ionescu +# + +# Gets the Git special action (am, bisect, cherry, merge, rebase, revert). +# Borrowed from vcs_info and edited. +function _git-action { + local action_dir + local git_dir="$(git-dir)" + local apply_formatted + local bisect_formatted + local cherry_pick_formatted + local cherry_pick_sequence_formatted + local merge_formatted + local rebase_formatted + local rebase_interactive_formatted + local rebase_merge_formatted + local revert_formatted + local revert_sequence_formatted + + for action_dir in \ + "$git_dir/rebase-apply" \ + "$git_dir/rebase" \ + "$git_dir/../.dotest" + do + if [[ -d "$action_dir" ]] ; then + zstyle -s ':prezto:module:git:info:action:apply' format 'apply_formatted' \ + || apply_formatted='apply' + zstyle -s ':prezto:module:git:info:action:rebase' format 'rebase_formatted' \ + || rebase_formatted='rebase' + + if [[ -f "$action_dir/rebasing" ]] ; then + print "$rebase_formatted" + elif [[ -f "$action_dir/applying" ]] ; then + print "$apply_formatted" + else + print "$rebase_formatted/$apply_formatted" + fi + + return 0 + fi + done + + for action_dir in \ + "$git_dir/rebase-merge/interactive" \ + "$git_dir/.dotest-merge/interactive" + do + if [[ -f "$action_dir" ]]; then + zstyle -s ':prezto:module:git:info:action:rebase-interactive' format 'rebase_interactive_formatted' \ + || rebase_interactive_formatted='rebase-interactive' + print "$rebase_interactive_formatted" + return 0 + fi + done + + for action_dir in \ + "$git_dir/rebase-merge" \ + "$git_dir/.dotest-merge" + do + if [[ -d "$action_dir" ]]; then + zstyle -s ':prezto:module:git:info:action:rebase-merge' format 'rebase_merge_formatted' \ + || rebase_merge_formatted='rebase-merge' + print "$rebase_merge_formatted" + return 0 + fi + done + + if [[ -f "$git_dir/MERGE_HEAD" ]]; then + zstyle -s ':prezto:module:git:info:action:merge' format 'merge_formatted' \ + || merge_formatted='merge' + print "$merge_formatted" + return 0 + fi + + if [[ -f "$git_dir/CHERRY_PICK_HEAD" ]]; then + if [[ -d "$git_dir/sequencer" ]] ; then + zstyle -s ':prezto:module:git:info:action:cherry-pick-sequence' format 'cherry_pick_sequence_formatted' \ + || cherry_pick_sequence_formatted='cherry-pick-sequence' + print "$cherry_pick_sequence_formatted" + else + zstyle -s ':prezto:module:git:info:action:cherry-pick' format 'cherry_pick_formatted' \ + || cherry_pick_formatted='cherry-pick' + print "$cherry_pick_formatted" + fi + + return 0 + fi + + if [[ -f "$git_dir/REVERT_HEAD" ]]; then + if [[ -d "$git_dir/sequencer" ]] ; then + zstyle -s ':prezto:module:git:info:action:revert-sequence' format 'revert_sequence_formatted' \ + || revert_sequence_formatted='revert-sequence' + print "$revert_sequence_formatted" + else + zstyle -s ':prezto:module:git:info:action:revert' format 'revert_formatted' \ + || revert_formatted='revert' + print "$revert_formatted" + fi + + return 0 + fi + + if [[ -f "$git_dir/BISECT_LOG" ]]; then + zstyle -s ':prezto:module:git:info:action:bisect' format 'bisect_formatted' \ + || bisect_formatted='bisect' + print "$bisect_formatted" + return 0 + fi + + return 1 +} + +# Gets the Git status information. +function git-info { + # Extended globbing is needed to parse repository status. + setopt LOCAL_OPTIONS + setopt EXTENDED_GLOB + + local action + local action_format + local action_formatted + local added=0 + local added_format + local added_formatted + local ahead=0 + local ahead_and_behind + local ahead_and_behind_cmd + local ahead_format + local ahead_formatted + local ahead_or_behind + local behind=0 + local behind_format + local behind_formatted + local branch + local branch_format + local branch_formatted + local branch_info + local clean + local clean_formatted + local commit + local commit_format + local commit_formatted + local deleted=0 + local deleted_format + local deleted_formatted + local dirty=0 + local dirty_format + local dirty_formatted + local ignore_submodules + local indexed=0 + local indexed_format + local indexed_formatted + local -A info_formats + local info_format + local modified=0 + local modified_format + local modified_formatted + local position + local position_format + local position_formatted + local remote + local remote_cmd + local remote_format + local remote_formatted + local renamed=0 + local renamed_format + local renamed_formatted + local stashed=0 + local stashed_format + local stashed_formatted + local status_cmd + local status_mode + local unindexed=0 + local unindexed_format + local unindexed_formatted + local unmerged=0 + local unmerged_format + local unmerged_formatted + local untracked=0 + local untracked_format + local untracked_formatted + + # Clean up previous $git_info. + unset git_info + typeset -gA git_info + + # Return if not inside a Git repository work tree. + if ! is-true "$(command git rev-parse --is-inside-work-tree 2> /dev/null)"; then + return 1 + fi + + if (( $# > 0 )); then + if [[ "$1" == [Oo][Nn] ]]; then + command git config --bool prompt.showinfo true + elif [[ "$1" == [Oo][Ff][Ff] ]]; then + command git config --bool prompt.showinfo false + else + print "usage: $0 [ on | off ]" >&2 + fi + return 0 + fi + + # Return if git-info is disabled. + if ! is-true "${$(command git config --bool prompt.showinfo):-true}"; then + return 1 + fi + + # Ignore submodule status. + zstyle -s ':prezto:module:git:status:ignore' submodules 'ignore_submodules' + + # Format commit. + zstyle -s ':prezto:module:git:info:commit' format 'commit_format' + if [[ -n "$commit_format" ]]; then + commit="$(command git rev-parse HEAD 2> /dev/null)" + if [[ -n "$commit" ]]; then + zformat -f commit_formatted "$commit_format" "c:$commit" + fi + fi + + # Format stashed. + zstyle -s ':prezto:module:git:info:stashed' format 'stashed_format' + if [[ -n "$stashed_format" ]]; then + commondir="" + if [[ -f "$(git-dir)/commondir" ]]; then + commondir="$(<$(git-dir)/commondir)" + [[ "$commondir" =~ ^/ ]] || commondir="$(git-dir)/$commondir" + fi + if [[ -f "$(git-dir)/refs/stash" || ( -n "$commondir" && -f "$commondir/refs/stash" ) ]]; then + stashed=${#${(f)"$(command git stash list 2> /dev/null)"}} + if (( $stashed > 0 )); then + zformat -f stashed_formatted "$stashed_format" "S:$stashed" + fi + fi + fi + + # Format action. + zstyle -s ':prezto:module:git:info:action' format 'action_format' + if [[ -n "$action_format" ]]; then + action="$(_git-action)" + if [[ -n "$action" ]]; then + zformat -f action_formatted "$action_format" "s:$action" + fi + fi + + # Get the branch. + branch="$(escape-eval "${$(command git symbolic-ref HEAD 2> /dev/null)#refs/heads/}")" + + # Format branch. + zstyle -s ':prezto:module:git:info:branch' format 'branch_format' + if [[ -n "$branch" && -n "$branch_format" ]]; then + zformat -f branch_formatted "$branch_format" "b:$branch" + fi + + # Format position. + zstyle -s ':prezto:module:git:info:position' format 'position_format' + if [[ -z "$branch" && -n "$position_format" ]]; then + position="$(escape-eval "$(command git describe --contains --all HEAD 2> /dev/null)")" + if [[ -n "$position" ]]; then + zformat -f position_formatted "$position_format" "p:$position" + fi + fi + + # Format remote. + zstyle -s ':prezto:module:git:info:remote' format 'remote_format' + if [[ -n "$branch" && -n "$remote_format" ]]; then + # Gets the remote name. + remote_cmd='command git rev-parse --symbolic-full-name --verify HEAD@{upstream}' + remote="$(escape-eval "${$(${(z)remote_cmd} 2> /dev/null)##refs/remotes/}")" + if [[ -n "$remote" ]]; then + zformat -f remote_formatted "$remote_format" "R:$remote" + fi + fi + + zstyle -s ':prezto:module:git:info:ahead' format 'ahead_format' + zstyle -s ':prezto:module:git:info:behind' format 'behind_format' + if [[ -n "$branch" && ( -n "$ahead_format" || -n "$behind_format" ) ]]; then + # Gets the commit difference counts between local and remote. + ahead_and_behind_cmd='command git rev-list --count --left-right HEAD...@{upstream}' + + # Get ahead and behind counts. + ahead_and_behind="$(${(z)ahead_and_behind_cmd} 2> /dev/null)" + + # Format ahead. + if [[ -n "$ahead_format" ]]; then + ahead="$ahead_and_behind[(pws:\t:)1]" + if (( ahead > 0 )); then + zformat -f ahead_formatted "$ahead_format" "A:$ahead" + fi + fi + + # Format behind. + if [[ -n "$behind_format" ]]; then + behind="$ahead_and_behind[(pws:\t:)2]" + if (( behind > 0 )); then + zformat -f behind_formatted "$behind_format" "B:$behind" + fi + fi + fi + + # Get status type. + if ! zstyle -t ':prezto:module:git:info' verbose; then + # Format indexed. + zstyle -s ':prezto:module:git:info:indexed' format 'indexed_format' + if [[ -n "$indexed_format" ]]; then + (( + indexed+=$( + command git diff-index \ + --no-ext-diff \ + --name-only \ + --cached \ + --ignore-submodules=${ignore_submodules:-none} \ + HEAD \ + 2> /dev/null \ + | wc -l + ) + )) + if (( indexed > 0 )); then + zformat -f indexed_formatted "$indexed_format" "i:$indexed" + fi + fi + + # Format unindexed. + zstyle -s ':prezto:module:git:info:unindexed' format 'unindexed_format' + if [[ -n "$unindexed_format" ]]; then + (( + unindexed+=$( + command git diff-files \ + --no-ext-diff \ + --name-only \ + --ignore-submodules=${ignore_submodules:-none} \ + 2> /dev/null \ + | wc -l + ) + )) + if (( unindexed > 0 )); then + zformat -f unindexed_formatted "$unindexed_format" "I:$unindexed" + fi + fi + + # Format untracked. + zstyle -s ':prezto:module:git:info:untracked' format 'untracked_format' + if [[ -n "$untracked_format" ]]; then + (( + untracked+=$( + command git ls-files \ + --other \ + --exclude-standard \ + 2> /dev/null \ + | wc -l + ) + )) + if (( untracked > 0 )); then + zformat -f untracked_formatted "$untracked_format" "u:$untracked" + fi + fi + + (( dirty = indexed + unindexed + untracked )) + else + # Use porcelain status for easy parsing. + status_cmd="command git status --porcelain --ignore-submodules=${ignore_submodules:-none}" + + # Get current status. + while IFS=$'\n' read line; do + # Count added, deleted, modified, renamed, unmerged, untracked, dirty. + # T (type change) is undocumented, see http://git.io/FnpMGw. + # For a table of scenarii, see http://i.imgur.com/2YLu1.png. + [[ "$line" == ([ACDMT][\ MT]|[ACMT]D)\ * ]] && (( added++ )) + [[ "$line" == [\ ACMRT]D\ * ]] && (( deleted++ )) + [[ "$line" == ?[MT]\ * ]] && (( modified++ )) + [[ "$line" == R?\ * ]] && (( renamed++ )) + [[ "$line" == (AA|DD|U?|?U)\ * ]] && (( unmerged++ )) + [[ "$line" == \?\?\ * ]] && (( untracked++ )) + (( dirty++ )) + done < <(${(z)status_cmd} 2> /dev/null) + + # Format added. + if (( added > 0 )); then + zstyle -s ':prezto:module:git:info:added' format 'added_format' + zformat -f added_formatted "$added_format" "a:$added" + fi + + # Format deleted. + if (( deleted > 0 )); then + zstyle -s ':prezto:module:git:info:deleted' format 'deleted_format' + zformat -f deleted_formatted "$deleted_format" "d:$deleted" + fi + + # Format modified. + if (( modified > 0 )); then + zstyle -s ':prezto:module:git:info:modified' format 'modified_format' + zformat -f modified_formatted "$modified_format" "m:$modified" + fi + + # Format renamed. + if (( renamed > 0 )); then + zstyle -s ':prezto:module:git:info:renamed' format 'renamed_format' + zformat -f renamed_formatted "$renamed_format" "r:$renamed" + fi + + # Format unmerged. + if (( unmerged > 0 )); then + zstyle -s ':prezto:module:git:info:unmerged' format 'unmerged_format' + zformat -f unmerged_formatted "$unmerged_format" "U:$unmerged" + fi + + # Format untracked. + if (( untracked > 0 )); then + zstyle -s ':prezto:module:git:info:untracked' format 'untracked_format' + zformat -f untracked_formatted "$untracked_format" "u:$untracked" + fi + fi + + # Format dirty and clean. + if (( dirty > 0 )); then + zstyle -s ':prezto:module:git:info:dirty' format 'dirty_format' + zformat -f dirty_formatted "$dirty_format" "D:$dirty" + # Overwrite branch format to use dirty-branch format + zstyle -s ':prezto:module:git:info:dirty-branch' format 'branch_format' + if [[ -n "$branch" && -n "$branch_format" ]]; then + zformat -f branch_formatted "$branch_format" "b:$branch" + fi + else + zstyle -s ':prezto:module:git:info:clean' format 'clean_formatted' + fi + + # Format info. + zstyle -a ':prezto:module:git:info:keys' format 'info_formats' + for info_format in ${(k)info_formats}; do + zformat -f REPLY "$info_formats[$info_format]" \ + "a:$added_formatted" \ + "A:$ahead_formatted" \ + "B:$behind_formatted" \ + "b:$branch_formatted" \ + "C:$clean_formatted" \ + "c:$commit_formatted" \ + "d:$deleted_formatted" \ + "D:$dirty_formatted" \ + "i:$indexed_formatted" \ + "I:$unindexed_formatted" \ + "m:$modified_formatted" \ + "p:$position_formatted" \ + "R:$remote_formatted" \ + "r:$renamed_formatted" \ + "s:$action_formatted" \ + "S:$stashed_formatted" \ + "U:$unmerged_formatted" \ + "u:$untracked_formatted" + git_info[$info_format]="$REPLY" + done + + unset REPLY + + return 0 +} + +git-info "$@" diff --git a/config/zsh/.zprezto/modules/git/functions/git-root b/config/zsh/.zprezto/modules/git/functions/git-root new file mode 100644 index 0000000..643f346 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/git-root @@ -0,0 +1,20 @@ +# +# Displays the path to the working tree root. +# +# Authors: +# Sorin Ionescu +# + +# function git-root { + +local root="$(command git rev-parse --show-toplevel 2> /dev/null)" + +if [[ -n "$root" ]]; then + print "$root" + return 0 +else + print "$0: not a repository work tree: $PWD" >&2 + return 1 +fi + +# } diff --git a/config/zsh/.zprezto/modules/git/functions/git-stash-clear-interactive b/config/zsh/.zprezto/modules/git/functions/git-stash-clear-interactive new file mode 100644 index 0000000..163deac --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/git-stash-clear-interactive @@ -0,0 +1,26 @@ +# +# Asks for confirmation before clearing the Git stash. +# +# Authors: +# Sorin Ionescu +# + +# function git-stash-clear-interactive { + +if ! is-true "$(command git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +fi + +local stashed + +if [[ -f "$(git-dir)/refs/stash" ]]; then + stashed=${#${(f)"$(command git stash list 2> /dev/null)"}} + if (( $stashed > 0 )); then + if read -q "?Clear $stashed stashed state(s) [y/N]? "; then + command git stash clear + fi + fi +fi + +# } diff --git a/config/zsh/.zprezto/modules/git/functions/git-stash-dropped b/config/zsh/.zprezto/modules/git/functions/git-stash-dropped new file mode 100644 index 0000000..142a4a7 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/git-stash-dropped @@ -0,0 +1,26 @@ +# +# Lists dropped Git stashed states. +# +# Authors: +# Sorin Ionescu +# + +# function git-stash-dropped { + +if ! is-true "$(command git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +fi + +command git fsck --unreachable 2> /dev/null \ + | grep 'commit' \ + | awk '{print $3}' \ + | command git log \ + --pretty=format:$_git_log_oneline_format \ + --extended-regexp \ + --grep="${1:-(WIP )?[Oo]n [^:]+:}" \ + --merges \ + --no-walk \ + --stdin + +# } diff --git a/config/zsh/.zprezto/modules/git/functions/git-stash-recover b/config/zsh/.zprezto/modules/git/functions/git-stash-recover new file mode 100644 index 0000000..6cb5416 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/git-stash-recover @@ -0,0 +1,22 @@ +# +# Recovers dropped Git stashed states. +# +# Authors: +# Sorin Ionescu +# + +# function git-stash-recover { + +if ! is-true "$(command git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +fi + +local commit + +for commit in "$@"; do + command git update-ref \ + -m "$(command git log -1 --pretty="format:%s" "$commit")" refs/stash "$commit" +done + +# } diff --git a/config/zsh/.zprezto/modules/git/functions/git-submodule-move b/config/zsh/.zprezto/modules/git/functions/git-submodule-move new file mode 100644 index 0000000..5e162a1 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/git-submodule-move @@ -0,0 +1,36 @@ +# +# Moves a Git submodule. +# +# Authors: +# Sorin Ionescu +# + +# function git-submodule-move { + +if ! is-true "$(command git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +elif [[ "$PWD" != "$(git-root)" ]]; then + print "$0: must be run from the root of the work tree" >&2 + return 1 +fi + +local src="$1" +local dst="$2" +local url + +url="$(command git config --file "$(git-root)/.gitmodules" --get "submodule.${src}.url")" + +if [[ -z "$url" ]]; then + print "$0: submodule not found: $src" >&2 + return 1 +fi + +mkdir -p "$dst:h" + +git-submodule-remove "$src" +command git submodule add "$url" "$dst" + +return 0 + +# } diff --git a/config/zsh/.zprezto/modules/git/functions/git-submodule-remove b/config/zsh/.zprezto/modules/git/functions/git-submodule-remove new file mode 100644 index 0000000..b523314 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/functions/git-submodule-remove @@ -0,0 +1,31 @@ +# +# Removes a Git submodule. +# +# Authors: +# Sorin Ionescu +# + +# function git-submodule-remove { + +if ! is-true "$(command git rev-parse --is-inside-work-tree 2> /dev/null)"; then + print "$0: not a repository work tree: $PWD" >&2 + return 1 +elif [[ "$PWD" != "$(git-root)" ]]; then + print "$0: must be run from the root of the work tree" >&2 + return 1 +elif ! command git config --file .gitmodules --get "submodule.${1}.path" &> /dev/null; then + print "$0: submodule not found: $1" >&2 + return 1 +fi + +command git config --file "$(git-dir)/config" --remove-section "submodule.${1}" &> /dev/null +command git config --file "$(git-root)/.gitmodules" --remove-section "submodule.${1}" &> /dev/null +command git add .gitmodules + +command git rm --cached -rf "$1" +rm -rf "$1" +rm -rf "$(git-dir)/modules/$1" + +return 0 + +# } diff --git a/config/zsh/.zprezto/modules/git/init.zsh b/config/zsh/.zprezto/modules/git/init.zsh new file mode 100644 index 0000000..ac7ef75 --- /dev/null +++ b/config/zsh/.zprezto/modules/git/init.zsh @@ -0,0 +1,20 @@ +# +# Provides Git aliases and functions. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[git] )); then + return 1 +fi + +# Load dependencies. +pmodload 'helper' + +# Load 'run-help' function. +autoload -Uz run-help-git + +# Source module files. +source "${0:h}/alias.zsh" diff --git a/config/zsh/.zprezto/modules/gnu-utility/README.md b/config/zsh/.zprezto/modules/gnu-utility/README.md new file mode 100644 index 0000000..747c72f --- /dev/null +++ b/config/zsh/.zprezto/modules/gnu-utility/README.md @@ -0,0 +1,34 @@ +# GNU Utility + +Provides for the interactive use of GNU utilities on BSD systems. + +Installing GNU utilities on non-GNU systems in `$PATH` without a prefix, i.e., +`ls` instead of `gls`, is not recommended since scripts that target other +utilities will be broken. + +This module wraps GNU utilities in functions without a prefix for interactive +use. + +This module must be loaded _before_ the [_`utility`_][1] module so that GNU +utilities enabled in this module are available for configuration in _`utility`_ +module. + +## Settings + +### Prefix + +To use a different prefix, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_, and replace `'g'` with the desired prefix. + +```sh +zstyle ':prezto:module:gnu-utility' prefix 'g' +``` + +## Authors + +_The authors of this module should be contacted via the [issue tracker][2]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: ../utility#readme +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/gnu-utility/init.zsh b/config/zsh/.zprezto/modules/gnu-utility/init.zsh new file mode 100644 index 0000000..2cfbf2f --- /dev/null +++ b/config/zsh/.zprezto/modules/gnu-utility/init.zsh @@ -0,0 +1,63 @@ +# +# Provides for the interactive use of GNU utilities on BSD systems. +# +# Authors: +# Sorin Ionescu +# + +# Get the prefix or use the default. +zstyle -s ':prezto:module:gnu-utility' prefix '_gnu_utility_p' \ + || _gnu_utility_p='g' + +# Return if requirements are not found. +if (( ! $+commands[${_gnu_utility_p}whoami] )); then + return 1 +fi + +_gnu_utility_cmds=( + # Coreutils + '[' 'b2sum' 'base32' 'base64' 'basename' 'basenc' 'cat' 'chcon' 'chgrp' + 'chmod' 'chown' 'chroot' 'cksum' 'comm' 'cp' 'csplit' 'cut' + 'date' 'dd' 'df' 'dir' 'dircolors' 'dirname' 'du' 'echo' 'env' 'expand' 'expr' + 'factor' 'false' 'fmt' 'fold' 'groups' 'head' 'hostid' 'id' 'install' 'join' + 'kill' 'link' 'ln' 'logname' 'ls' 'md5sum' 'mkdir' 'mkfifo' + 'mknod' 'mktemp' 'mv' 'nice' 'nl' 'nohup' 'nproc' 'numfmt' 'od' + 'paste' 'pathchk' 'pinky' 'pr' 'printenv' 'printf' 'ptx' 'pwd' + 'readlink' 'realpath' 'rm' 'rmdir' 'runcon' + 'seq' 'sha1sum' 'sha224sum' 'sha256sum' 'sha384sum' 'sha512sum' 'shred' 'shuf' + 'sleep' 'sort' 'split' 'stat' 'stdbuf' 'stty' 'sum' 'sync' 'tac' 'tail' + 'tee' 'test' 'timeout' 'touch' 'tr' 'true' 'truncate' 'tsort' 'tty' + 'uname' 'unexpand' 'uniq' 'unlink' 'uptime' 'users' 'vdir' + 'wc' 'who' 'whoami' 'yes' + + # The following utilities are not part of Coreutils but installed separately. + + # Binutils + 'addr2line' 'ar' 'c++filt' 'coffdump' 'dlltool' 'dllwrap' 'elfedit' 'nm' + 'objcopy' 'objdump' 'ranlib' 'readelf' + 'size' 'srconv' 'strings' 'strip' 'sysdump' 'windmc' 'windres' + + # Findutils + 'find' 'locate' 'oldfind' 'updatedb' 'xargs' + + # Libtool + 'libtool' 'libtoolize' + + # Miscellaneous + 'awk' 'getopt' 'grep' 'indent' 'make' 'sed' 'tar' 'time' 'units' 'which' +) + +# Wrap GNU utilities in functions. +for _gnu_utility_cmd in "${_gnu_utility_cmds[@]}"; do + _gnu_utility_pcmd="${_gnu_utility_p}${_gnu_utility_cmd}" + if (( $+commands[$_gnu_utility_pcmd] \ + && ! $+builtins[$_gnu_utility_cmd] )); then + eval " + function $_gnu_utility_cmd { + '$commands[$_gnu_utility_pcmd]' \"\$@\" + } + " + fi +done + +unset _gnu_utility_{p,cmds,cmd,pcmd} diff --git a/config/zsh/.zprezto/modules/gpg/README.md b/config/zsh/.zprezto/modules/gpg/README.md new file mode 100644 index 0000000..08730eb --- /dev/null +++ b/config/zsh/.zprezto/modules/gpg/README.md @@ -0,0 +1,28 @@ +# GPG + +Provides for an easier use of [GPG][1] by setting up [gpg-agent][2]. + +## Settings + +### SSH + +To enable OpenSSH Agent protocol emulation, and make `gpg-agent` a drop-in +replacement for `ssh-agent`, add the following line to +_`$GNUPGHOME/gpg-agent.conf`_ or _`$$HOME/.gnupg/gpg-agent.conf`_: + +```conf +enable-ssh-support +``` + +When OpenSSH Agent protocol emulation is enabled, this module will load the SSH +module for additional processing. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][3]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://www.gnupg.org +[2]: https://linux.die.net/man/1/gpg-agent +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/gpg/init.zsh b/config/zsh/.zprezto/modules/gpg/init.zsh new file mode 100644 index 0000000..a3b37ba --- /dev/null +++ b/config/zsh/.zprezto/modules/gpg/init.zsh @@ -0,0 +1,56 @@ +# +# Provides for an easier use of GPG by setting up gpg-agent. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[gpg-agent] )); then + return 1 +fi + +# Set the default paths to gpg-agent files. +_gpg_agent_conf="${GNUPGHOME:-$HOME/.gnupg}/gpg-agent.conf" +_gpg_agent_env="${XDG_CACHE_HOME:-$HOME/.cache}/prezto/gpg-agent.env" + +# Load environment variables from previous run +source "$_gpg_agent_env" 2> /dev/null + +# Start gpg-agent if not started. +if [[ -z "$GPG_AGENT_INFO" && ! -S "${GNUPGHOME:-$HOME/.gnupg}/S.gpg-agent" ]]; then + # Start gpg-agent if not started. + if ! ps -U "$LOGNAME" -o pid,ucomm | grep -q -- "${${${(s.:.)GPG_AGENT_INFO}[2]}:--1} gpg-agent"; then + mkdir -p "$_gpg_agent_env:h" + eval "$(gpg-agent --daemon | tee "$_gpg_agent_env")" + fi +fi + +# Inform gpg-agent of the current TTY for user prompts. +export GPG_TTY=$TTY + +# Integrate with the SSH module. +if grep '^enable-ssh-support' "$_gpg_agent_conf" &> /dev/null; then + # Load required functions. + autoload -Uz add-zsh-hook + + # Override the ssh-agent environment file default path. + _ssh_agent_env="$_gpg_agent_env" + + # Load the SSH module for additional processing. + pmodload 'ssh' + + # Updates the GPG-Agent TTY before every command since SSH does not set it. + function _gpg-agent-update-tty { + gpg-connect-agent UPDATESTARTUPTTY /bye >/dev/null + } + add-zsh-hook preexec _gpg-agent-update-tty +fi + +# Clean up. +unset _gpg_agent_{conf,env} + +# Disable GUI prompts inside SSH. +if [[ -n "$SSH_CONNECTION" ]]; then + export PINENTRY_USER_DATA='USE_CURSES=1' +fi diff --git a/config/zsh/.zprezto/modules/haskell/README.md b/config/zsh/.zprezto/modules/haskell/README.md new file mode 100644 index 0000000..db7bfae --- /dev/null +++ b/config/zsh/.zprezto/modules/haskell/README.md @@ -0,0 +1,25 @@ +# Haskell + +Enables local Haskell package installation. + +## Per-user Package Installation + +[Cabal][1], the Haskell package manager, can install packages into per user +directories. + +This module prepends per user directories to the relevant path variables to +enable the execution of user installed executables and the reading of +documentation. + +### Usage + +Install packages into per user directories with `cabal install --user`. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][2]._ + +- [Sebastian Wiesner](https://github.com/lunaryorn) + +[1]: https://www.haskell.org/cabal/ +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/haskell/init.zsh b/config/zsh/.zprezto/modules/haskell/init.zsh new file mode 100644 index 0000000..cb76864 --- /dev/null +++ b/config/zsh/.zprezto/modules/haskell/init.zsh @@ -0,0 +1,21 @@ +# +# Enables local Haskell package installation. +# +# Authors: +# Sebastian Wiesner +# + +# Return if requirements are not found. +if (( ! $+commands[ghc] )); then + return 1 +fi + +# Load dependencies. +pmodload 'helper' + +# Prepend Cabal per user directories to PATH. +if is-darwin && [[ -d $HOME/Library/Haskell ]]; then + path=($HOME/Library/Haskell/bin(/N) $path) +else + path=($HOME/.cabal/bin(/N) $path) +fi diff --git a/config/zsh/.zprezto/modules/helper/README.md b/config/zsh/.zprezto/modules/helper/README.md new file mode 100644 index 0000000..5c90a63 --- /dev/null +++ b/config/zsh/.zprezto/modules/helper/README.md @@ -0,0 +1,26 @@ +# Helper + +Provides helper functions for developing modules. + +## Functions + +- `add-zsh-trap` adds a function name to a list to be called when a trap is + triggered. +- `is-autoloadable` checks if a file can be autoloaded by trying to load it in + a subshell. +- `is-callable` checks if a name is a command, function, or alias. +- `is-true` checks a boolean variable for "true". +- `coalesce` prints the first non-empty string in the arguments array. +- `is-darwin` checks if running on macOS Darwin. +- `is-linux` checks if running on Linux. +- `is-bsd` checks if running on BSD. +- `is-cygwin` checks if running on Cygwin (Windows). +- `is-termux` checks if running on Termux (Android). + +## Authors + +_The authors of this module should be contacted via the [issue tracker][1]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/helper/functions/add-zsh-trap b/config/zsh/.zprezto/modules/helper/functions/add-zsh-trap new file mode 100644 index 0000000..07663e9 --- /dev/null +++ b/config/zsh/.zprezto/modules/helper/functions/add-zsh-trap @@ -0,0 +1,41 @@ +# +# Provides for trapping UNIX signals and calling callback functions when a trap +# is triggered. +# +# Authors: +# Sorin Ionescu +# + +# Adds a function name to a list to be called when a trap is triggered. +function add-zsh-trap { + if (( $# < 2 )); then + print "usage: $0 type function" >&2 + return 1 + fi + + if [[ -z "$signals[(r)$1]" ]]; then + print "$0: unknown signal: $1" >&2 + return 1 + fi + + local trap_functions="TRAP${1}_FUNCTIONS" + if (( ! ${(P)+trap_functions} )); then + typeset -gaU "$trap_functions" + fi + eval "$trap_functions+="$2"" + + if (( ! $+functions[TRAP${1}] )); then + eval " + function TRAP${1} { + for trap_function in \"\$TRAP${1}_FUNCTIONS[@]\"; do + if (( \$+functions[\$trap_function] )); then + \"\$trap_function\" \"\$1\" + fi + done + return \$(( 128 + \$1 )) + } + " + fi +} + +add-zsh-trap "$@" diff --git a/config/zsh/.zprezto/modules/helper/functions/escape-eval b/config/zsh/.zprezto/modules/helper/functions/escape-eval new file mode 100644 index 0000000..2836a13 --- /dev/null +++ b/config/zsh/.zprezto/modules/helper/functions/escape-eval @@ -0,0 +1,13 @@ +# +# Escapes a string for safe use in ${(e)...} parameter expansion. +# +# Authors: +# Trey Keown +# + +# function escape-eval { + +setopt LOCAL_OPTIONS EXTENDED_GLOB +print -r -- "${1//(#m)[\\\$\`]/\\$MATCH}" + +# } diff --git a/config/zsh/.zprezto/modules/helper/init.zsh b/config/zsh/.zprezto/modules/helper/init.zsh new file mode 100644 index 0000000..0a33d7c --- /dev/null +++ b/config/zsh/.zprezto/modules/helper/init.zsh @@ -0,0 +1,56 @@ +# +# Defines helper functions. +# +# Authors: +# Sorin Ionescu +# + +# Checks if a file can be autoloaded by trying to load it in a subshell. +function is-autoloadable { + ( unfunction $1 ; autoload -U +X $1 ) &> /dev/null +} + +# Checks if a name is a command, function, or alias. +function is-callable { + (( $+commands[$1] || $+functions[$1] || $+aliases[$1] || $+builtins[$1] )) +} + +# Checks a boolean variable for "true". +# Case insensitive: "1", "y", "yes", "t", "true", "o", and "on". +function is-true { + [[ -n "$1" && "$1" == (1|[Yy]([Ee][Ss]|)|[Tt]([Rr][Uu][Ee]|)|[Oo]([Nn]|)) ]] +} + +# Prints the first non-empty string in the arguments array. +function coalesce { + for arg in $argv; do + print "$arg" + return 0 + done + return 1 +} + +# Checks if running on macOS Darwin. +function is-darwin { + [[ "$OSTYPE" == darwin* ]] +} + +# Checks if running on Linux. +function is-linux { + [[ "$OSTYPE" == linux* ]] +} + +# Checks if running on BSD. +function is-bsd { + [[ "$OSTYPE" == *bsd* ]] +} + +# Checks if running on Cygwin (Windows). +function is-cygwin { + [[ "$OSTYPE" == cygwin* ]] +} + +# Checks if running on termux (Android). +function is-termux { + [[ "$OSTYPE" == linux-android ]] +} diff --git a/config/zsh/.zprezto/modules/history-substring-search/README.md b/config/zsh/.zprezto/modules/history-substring-search/README.md new file mode 100644 index 0000000..e7c55c5 --- /dev/null +++ b/config/zsh/.zprezto/modules/history-substring-search/README.md @@ -0,0 +1,115 @@ +# History Substring Search + +Integrates [`zsh-history-substring-search`][1] into Prezto, which implements the +[Fish shell][2]'s history search feature, where the user can type in any part of +a previously entered command and press up and down to cycle through matching +commands. + +If this module is used in conjunction with the [_`syntax-highlighting`_][3] +module, this module must be loaded _after_ the _`syntax-highlighting`_ module. + +Additionally, if this module is used in conjunction with the +[_`autosuggestions`_][4] module, this module must be loaded _before_ the +_`autosuggestions`_ module. + +To elaborate, the relative order of loading the modules would be +_`syntax-highlighting`_, _`history-substring-search`_ and _`autosuggestions`_. + +## Contributors + +New features and bug fixes should be submitted to the +[`zsh-history-substring-search`][1] project according to its rules and +regulations. This module will be synchronized against it. + +## Settings + +### Case Sensitivity + +To enable case-sensitivity for this module only, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:history-substring-search' case-sensitive 'yes' +``` + +### Highlighting + +If colors are enabled, _history-substring-search_ will automatically highlight +positive results. + +To disable highlighting for this module only, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:history-substring-search' color 'no' +``` + +To set the query found color, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:history-substring-search:color' found '' +``` + +To set the query not found color, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:history-substring-search:color' not-found '' +``` + +To set the search globbing flags, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:history-substring-search' globbing-flags '' +``` + +### Case sensitive search + +To set the search case-sensitivity, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:history-substring-search' case-sensitive 'yes' +``` + +### Fuzzy search + +To enable search for fuzzy matches, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:history-substring-search' fuzzy 'yes' +``` + +### Unique results + +To enable unique results, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:history-substring-search' unique 'yes' +``` + +### Prefixed search + +To enable prefixed search matches, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:history-substring-search' prefixed 'yes' +``` + +## Authors + +_The authors of this module should be contacted via the [issue tracker][5]._ + +- [Suraj N. Kurapati](https://github.com/sunaku) +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/zsh-users/zsh-history-substring-search +[2]: https://fishshell.com +[3]: ../syntax-highlighting#readme +[4]: ../autosuggestions#readme +[5]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/history-substring-search/init.zsh b/config/zsh/.zprezto/modules/history-substring-search/init.zsh new file mode 100644 index 0000000..54e8b00 --- /dev/null +++ b/config/zsh/.zprezto/modules/history-substring-search/init.zsh @@ -0,0 +1,73 @@ +# +# Integrates history-substring-search into Prezto. +# +# Authors: +# Suraj N. Kurapati +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'editor' + +# Source module files. +if (( ! $+functions[history-substring-search-up] )); then + source "${0:h}/external/zsh-history-substring-search.zsh" || return 1 +fi + +# +# Search +# + +zstyle -s ':prezto:module:history-substring-search:color' found \ + 'HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND' \ + || HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold' + +zstyle -s ':prezto:module:history-substring-search:color' not-found \ + 'HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND' \ + || HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold' + +zstyle -s ':prezto:module:history-substring-search' globbing-flags \ + 'HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS' \ + || HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i' + +if zstyle -t ':prezto:module:history-substring-search' case-sensitive; then + HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS="${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS//i}" +fi + +if ! zstyle -t ':prezto:module:history-substring-search' color; then + unset HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_{FOUND,NOT_FOUND} +fi + +if zstyle -t ':prezto:module:history-substring-search' fuzzy; then + HISTORY_SUBSTRING_SEARCH_FUZZY=1 +fi + +if zstyle -t ':prezto:module:history-substring-search' unique; then + HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=1 +fi + +if zstyle -t ':prezto:module:history-substring-search' prefixed; then + HISTORY_SUBSTRING_SEARCH_PREFIXED=1 +fi + +# +# Key Bindings +# + +if [[ -n "$key_info" ]]; then + # Emacs + bindkey -M emacs "$key_info[Control]P" history-substring-search-up + bindkey -M emacs "$key_info[Control]N" history-substring-search-down + + # Vi + bindkey -M vicmd "k" history-substring-search-up + bindkey -M vicmd "j" history-substring-search-down + + # Emacs and Vi + for keymap in 'emacs' 'viins'; do + bindkey -M "$keymap" "$key_info[Up]" history-substring-search-up + bindkey -M "$keymap" "$key_info[Down]" history-substring-search-down + done + + unset keymap +fi diff --git a/config/zsh/.zprezto/modules/history/README.md b/config/zsh/.zprezto/modules/history/README.md new file mode 100644 index 0000000..51e6e8c --- /dev/null +++ b/config/zsh/.zprezto/modules/history/README.md @@ -0,0 +1,86 @@ +# History + +Sets [history][1] options and defines history aliases. + +**Note:** Default path of `HISTFILE` has changed from +_`${ZDOTDIR:-$HOME}/.zhistory`_ to _`${ZDOTDIR:-$HOME}/.zsh_history`_. The file +will be automatically renamed if possible (when the new one doesn't exist). +Otherwise, if you want to preserve previous history, you will need to move them +from _`${ZDOTDIR:-$HOME}/.zhistory`_ to _`${ZDOTDIR:-$HOME}/.zsh_history`_. + +Alternately, you can set `HISTFILE` manually to _`${ZDOTDIR:-$HOME}/.zhistory`_. + +## Options + +- `BANG_HIST` treats the **!** character specially during expansion. +- `EXTENDED_HISTORY` writes the history file in the _:start:elapsed;command_ + format. +- `SHARE_HISTORY` shares history between all sessions. Note that + `SHARE_HISTORY`, `INC_APPEND_HISTORY`, and `INC_APPEND_HISTORY_TIME` are + mutually exclusive. +- `HIST_EXPIRE_DUPS_FIRST` expires a duplicate event first when trimming history. +- `HIST_IGNORE_DUPS` does not record an event that was just recorded again. +- `HIST_IGNORE_ALL_DUPS` deletes an old recorded event if a new event is a + duplicate. +- `HIST_FIND_NO_DUPS` does not display a previously found event. +- `HIST_IGNORE_SPACE` does not record an event starting with a space. +- `HIST_SAVE_NO_DUPS` does not write a duplicate event to the history file. +- `HIST_VERIFY` does not execute immediately upon history expansion. +- `HIST_BEEP` beeps when accessing non-existent history. + +## Variables + +- `HISTFILE` stores the path to the history file. +- `HISTSIZE` stores the maximum number of events to save in the internal history. +- `SAVEHIST` stores the maximum number of events to save in the history file. + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:history:alias' skip 'yes' +``` + +- `history-stat` lists the ten most used commands + +## Settings + +### histfile + +Can be configured either by setting HISTFILE manually before loading this +module or by using zstyle: + +```sh +zstyle ':prezto:module:history' histfile "" +``` + +defaults to "${ZDOTDIR:-$HOME}/.zsh_history". + +### histsize + +```sh +zstyle ':prezto:module:history' histsize +``` + +defaults to 10000. + +### savehist + +```sh +zstyle ':prezto:module:history' savehist +``` + +defaults to histsize + +## Authors + +_The authors of this module should be contacted via the [issue tracker][2]._ + +- [Robby Russell](https://github.com/robbyrussell) +- [Sorin Ionescu](https://github.com/sorin-ionescu) +- [Indrajit Raychaudhuri](https://github.com/indrajitr) + +[1]: https://zsh.sourceforge.net/Guide/zshguide02.html#l16 +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/history/init.zsh b/config/zsh/.zprezto/modules/history/init.zsh new file mode 100644 index 0000000..069dc2f --- /dev/null +++ b/config/zsh/.zprezto/modules/history/init.zsh @@ -0,0 +1,43 @@ +# +# Sets history options and defines history aliases. +# +# Authors: +# Robby Russell +# Sorin Ionescu +# + +# +# Options +# + +setopt BANG_HIST # Treat the '!' character specially during expansion. +setopt EXTENDED_HISTORY # Write the history file in the ':start:elapsed;command' format. +setopt SHARE_HISTORY # Share history between all sessions. +setopt HIST_EXPIRE_DUPS_FIRST # Expire a duplicate event first when trimming history. +setopt HIST_IGNORE_DUPS # Do not record an event that was just recorded again. +setopt HIST_IGNORE_ALL_DUPS # Delete an old recorded event if a new event is a duplicate. +setopt HIST_FIND_NO_DUPS # Do not display a previously found event. +setopt HIST_IGNORE_SPACE # Do not record an event starting with a space. +setopt HIST_SAVE_NO_DUPS # Do not write a duplicate event to the history file. +setopt HIST_VERIFY # Do not execute immediately upon history expansion. +setopt HIST_BEEP # Beep when accessing non-existent history. + +# +# Variables +# + +zstyle -s ':prezto:module:history' histfile 'HISTFILE' \ + || HISTFILE="${HISTFILE:-${ZDOTDIR:-$HOME}/.zsh_history}" # The path to the history file. +zstyle -s ':prezto:module:history' histsize 'HISTSIZE' \ + || HISTSIZE=10000 # The maximum number of events to save in the internal history. +zstyle -s ':prezto:module:history' savehist 'SAVEHIST' \ + || SAVEHIST=$HISTSIZE # The maximum number of events to save in the history file. + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:history:alias' skip; then + # Lists the ten most used commands. + alias history-stat="history 0 | awk '{print \$2}' | sort | uniq -c | sort -n -r | head" +fi diff --git a/config/zsh/.zprezto/modules/homebrew/README.md b/config/zsh/.zprezto/modules/homebrew/README.md new file mode 100644 index 0000000..77d8f37 --- /dev/null +++ b/config/zsh/.zprezto/modules/homebrew/README.md @@ -0,0 +1,50 @@ +# Homebrew + +Defines Homebrew specific environment variables and aliases. + +## Variables + +Execute the following to list the environment variables loaded in the shell: + +```sh +brew shellenv +``` + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:homebrew:alias' skip 'yes' +``` + +### Homebrew Core + +- `brewc` cleans outdated brews and their cached archives. +- `brewi` installs a formula. +- `brewL` lists installed formulae that are not dependencies of another + installed formula. +- `brewl` lists installed formulae. +- `brewo` lists brews which have an update available. +- `brews` searches for a formula. +- `brewu` upgrades outdated formulae. +- `brewx` uninstalls a formula. + +### Homebrew Cask + +- `caski` installs a cask. +- `caskl` lists installed casks. +- `casko` lists casks which have an update available. +- `casks` searches for a cask. +- `casku` upgrades outdated casks. +- `caskx` uninstalls a cask. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][1]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) +- [Griffin Yourick](https://github.com/tough-griff) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/homebrew/init.zsh b/config/zsh/.zprezto/modules/homebrew/init.zsh new file mode 100644 index 0000000..dd2b565 --- /dev/null +++ b/config/zsh/.zprezto/modules/homebrew/init.zsh @@ -0,0 +1,59 @@ +# +# Defines Homebrew aliases. +# +# Authors: +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'helper' + +# Return if requirements are not found. +if ! is-darwin && ! is-linux; then + return 1 +fi + +# +# Variables +# + +# Load standard Homebrew shellenv into the shell session. +# Load 'HOMEBREW_' prefixed variables only. Avoid loading 'PATH' related +# variables as they are already handled in standard zsh configuration. +if (( $+commands[brew] )); then + cache_file="${XDG_CACHE_HOME:-$HOME/.cache}/prezto/brew-shellenv-cache.zsh" + if [[ "$commands[brew]" -nt "$cache_file" \ + || "${ZDOTDIR:-$HOME}/.zpreztorc" -nt "$cache_file" \ + || ! -s "$cache_file" ]]; then + mkdir -p "$cache_file:h" + # Cache the result. + echo "${(@M)${(f)"$(brew shellenv 2> /dev/null)"}:#export HOMEBREW*}" >! "$cache_file" 2> /dev/null + fi + + source "$cache_file" + unset cache_file +fi + +# +# Aliases +# + +# Homebrew +if ! zstyle -t ':prezto:module:homebrew:alias' skip; then + alias brewc='brew cleanup' + alias brewi='brew install' + alias brewL='brew leaves' + alias brewl='brew list' + alias brewo='brew outdated' + alias brews='brew search' + alias brewu='brew upgrade' + alias brewx='brew uninstall' + + # Homebrew Cask + alias caski='brew install --cask' + alias caskl='brew list --cask' + alias casko='brew outdated --cask' + alias casks='brew search --cask' + alias casku='brew upgrade --cask' + alias caskx='brew uninstall --cask' +fi diff --git a/config/zsh/.zprezto/modules/macports/README.md b/config/zsh/.zprezto/modules/macports/README.md new file mode 100644 index 0000000..15963b3 --- /dev/null +++ b/config/zsh/.zprezto/modules/macports/README.md @@ -0,0 +1,29 @@ +# MacPorts + +Defines MacPorts aliases and adds MacPorts directories to path variables. + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:macports:alias' skip 'yes' +``` + +- `portc` cleans the files used to build ports. +- `porti` installs a port. +- `ports` searches for a port. +- `portu` upgrades a port. +- `portU` upgrades MacPorts, the ports collection, and outdated ports. +- `portx` uninstalls a port. +- `portX` uninstalls inactive ports. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][1]._ + +- [Matt Cable](https://github.com/curiousstranger) +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/macports/init.zsh b/config/zsh/.zprezto/modules/macports/init.zsh new file mode 100644 index 0000000..1ac3c53 --- /dev/null +++ b/config/zsh/.zprezto/modules/macports/init.zsh @@ -0,0 +1,39 @@ +# +# Defines MacPorts aliases and adds MacPorts directories to path variables. +# +# Authors: +# Matt Cable +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'helper' + +# Return if requirements are not found. +if ! is-darwin; then + return 1 +fi + +# +# Paths +# + +# Set the list of directories that Zsh searches for programs. +path=( + /opt/local/{bin,sbin} + $path +) + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:macports:alias' skip; then + alias portc='sudo port clean --all installed' + alias porti='sudo port install' + alias ports='port search' + alias portU='sudo port selfupdate && sudo port upgrade outdated' + alias portu='sudo port upgrade' + alias portX='sudo port -u uninstall' + alias portx='sudo port uninstall' +fi diff --git a/config/zsh/.zprezto/modules/node/README.md b/config/zsh/.zprezto/modules/node/README.md new file mode 100644 index 0000000..bc26215 --- /dev/null +++ b/config/zsh/.zprezto/modules/node/README.md @@ -0,0 +1,91 @@ +# Node.js + +Provides utility functions for [Node.js][1], loads the Node Version Manager, and +enables [_npm_][2] completion. + +This module must be loaded _before_ the _`completion`_ module so that the +provided completion definitions are loaded. + +## nodenv + +[_nodenv_][5] does one thing well - it is concerned solely with switching +Node versions. It is simple and predictable, Just Works, and is rock solid in +production. nodenv is forked from the popular [_rbenv_][6]. + +This will be loaded automatically if nodenv is installed in `$NODENV_ROOT`, +_`$XDG_CONFIG_HOME/nodenv`_, _`~/.nodenv`_, or `nodenv` is on the path. + +## nvm + +[_nvm_][7] allows for managing multiple, isolated Node.js installations in the +home directory. + +This will be loaded automatically if nvm is installed in `$NVM_DIR`, +_`$XDG_CONFIG_HOME/nvm`_, _`~/.nvm`_, or is installed with homebrew. + +## Variables + +- `N_PREFIX` stores the path to [_n_][8] cache. + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:node:alias' skip 'yes' +``` + +### npm + +- `npmi` install a package. +- `npml` list installed packages. +- `npmo` check for outdated packages. +- `npmp` publish a package. +- `npmP` remove extraneous packages. +- `npmr` run arbitrary package scripts. +- `npms` search for packages. +- `npmt` test a package. +- `npmu` update packages. +- `npmx` uninstalls a package. + +- `npmci` install a project with a clean slate. +- `npmcit` install a project with a clean slate and run tests. +- `npmit` install package(s) and run tests. + +## Functions + +- `node-doc` opens the Node.js online [API documentation][3] in the default + browser. +- `node-info` exposes information about the Node.js environment via the + `$node_info` associative array. + +## Theming + +To display the version number of the current Node.js version, define the +following style inside the `prompt_name_setup` function. + +```sh +# %v - Node.js version. +zstyle ':prezto:module:node:info:version' format 'version:%v' +``` + +Then add `$node_info[version]` to either `$PROMPT` or `$RPROMPT` and call +`node-info` in `prompt_name_preexec` hook function. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][4]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) +- [Zeh Rizzatti](https://github.com/zehrizzatti) +- [Indrajit Raychaudhuri](https://github.com/indrajitr) + +[1]: http://nodejs.org +[2]: http://npmjs.org +[3]: http://nodejs.org/api +[4]: https://github.com/sorin-ionescu/prezto/issues +[5]: https://github.com/nodenv/nodenv +[6]: https://github.com/sstephenson/rbenv +[7]: https://github.com/nvm-sh/nvm +[8]: https://github.com/tj/n diff --git a/config/zsh/.zprezto/modules/node/functions/_grunt b/config/zsh/.zprezto/modules/node/functions/_grunt new file mode 100644 index 0000000..4f1a188 --- /dev/null +++ b/config/zsh/.zprezto/modules/node/functions/_grunt @@ -0,0 +1,15 @@ +#compdef grunt +#autoload + +# +# Grunt completion, delegating to grunt to do all the completion work. +# +# Authors: +# Indrajit Raychaudhuri +# + +if (( $+commands[grunt] )); then + eval "$(grunt --completion=zsh)" + + _grunt_completion "$@" +fi diff --git a/config/zsh/.zprezto/modules/node/functions/_gulp b/config/zsh/.zprezto/modules/node/functions/_gulp new file mode 100644 index 0000000..b06acca --- /dev/null +++ b/config/zsh/.zprezto/modules/node/functions/_gulp @@ -0,0 +1,15 @@ +#compdef gulp +#autoload + +# +# Gulp completion, delegating to gulp to do all the completion work. +# +# Authors: +# Indrajit Raychaudhuri +# + +if (( $+commands[gulp] )); then + eval "$(gulp --completion=zsh)" + + _gulp_completion "$@" +fi diff --git a/config/zsh/.zprezto/modules/node/functions/node-doc b/config/zsh/.zprezto/modules/node/functions/node-doc new file mode 100644 index 0000000..92ac71d --- /dev/null +++ b/config/zsh/.zprezto/modules/node/functions/node-doc @@ -0,0 +1,18 @@ +# +# Opens the Node.js online API documentation in the default browser. +# +# Authors: +# Sorin Ionescu +# + +# function node-doc { + +if [[ -z "$BROWSER" ]]; then + print "$0: no web browser defined" >&2 + return 1 +fi + +# TODO: Make the sections easier to use. +"$BROWSER" "https://nodejs.org/docs/${$(node --version 2> /dev/null)/%-*}/api/all.html#${1}" + +# } diff --git a/config/zsh/.zprezto/modules/node/functions/node-info b/config/zsh/.zprezto/modules/node/functions/node-info new file mode 100644 index 0000000..7a59127 --- /dev/null +++ b/config/zsh/.zprezto/modules/node/functions/node-info @@ -0,0 +1,32 @@ +# +# Exposes information about the Node.js environment via the $node_info +# associative array. +# +# Authors: +# Zeh Rizzatti +# + +# function node-info { + +local version +local version_format +local version_formatted + +unset node_info +typeset -gA node_info + +if (( $+commands[nodenv] )); then + version="${${$(nodenv version)#v}[(w)0]}" +elif (( $+functions[nvm_version] )); then + version="${$(nvm_version)#v}" +elif (( $+commands[node] )) ; then + version="${$(node -v)#v}" +fi + +if [[ "$version" != (none|system) ]]; then + zstyle -s ':prezto:module:node:info:version' format 'version_format' + zformat -f version_formatted "$version_format" "v:$version" + node_info[version]="$version_formatted" +fi + +# } diff --git a/config/zsh/.zprezto/modules/node/init.zsh b/config/zsh/.zprezto/modules/node/init.zsh new file mode 100644 index 0000000..d23cef0 --- /dev/null +++ b/config/zsh/.zprezto/modules/node/init.zsh @@ -0,0 +1,67 @@ +# +# Configures Node local installation, loads version managers, and defines +# variables and aliases. +# +# Authors: +# Sorin Ionescu +# Zeh Rizzatti +# Indrajit Raychaudhuri +# + +# Possible lookup locations for manually installed nodenv and nvm. +local_nodenv_paths=({$NODENV_ROOT,{$XDG_CONFIG_HOME/,$HOME/.}nodenv}/bin/nodenv(N)) +local_nvm_paths=({$NVM_DIR,{$XDG_CONFIG_HOME/,$HOME/.}nvm}/nvm.sh(N)) + +# Load manually installed or package manager installed nodenv into the shell +# session. +if (( $#local_nodenv_paths || $+commands[nodenv] )); then + + # Ensure manually installed nodenv is added to path when present. + [[ -s $local_nodenv_paths[1] ]] && path=($local_nodenv_paths[1]:h $path) + + eval "$(nodenv init - --no-rehash zsh)" + +# Load manually installed nvm into the shell session. +elif (( $#local_nvm_paths )); then + source "$local_nvm_paths[1]" --no-use + +# Load package manager installed nvm into the shell session. +elif (( $+commands[brew] )) \ + && [[ -d "${nvm_path::="$(brew --prefix 2> /dev/null)"/opt/nvm}" ]]; then + source "$nvm_path/nvm.sh" --no-use +fi + +unset local_n{odenv,vm}_paths nvm_path + +# Return if requirements are not found. +if (( ! $+commands[node] && ! $#functions[(i)n(odenv|vm)] )); then + return 1 +fi + +# +# Variables +# + +N_PREFIX="${XDG_CONFIG_HOME:-$HOME/.config}/n" # The path to 'n' cache. + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:node:alias' skip; then + # npm + alias npmi='npm install' + alias npml='npm list' + alias npmo='npm outdated' + alias npmp='npm publish' + alias npmP='npm prune' + alias npmr='npm run' + alias npms='npm search' + alias npmt='npm test' + alias npmu='npm update' + alias npmx='npm uninstall' + + alias npmci='npm ci' + alias npmcit='npm cit' + alias npmit='npm it' +fi diff --git a/config/zsh/.zprezto/modules/ocaml/README.md b/config/zsh/.zprezto/modules/ocaml/README.md new file mode 100644 index 0000000..75aed54 --- /dev/null +++ b/config/zsh/.zprezto/modules/ocaml/README.md @@ -0,0 +1,24 @@ +# OCaml + +Initializes [OCaml][1] package management. + +## OPAM + +[OPAM][2] is a package manager for OCaml. + +This module enables local package installation with OPAM by extending the +relevant path and OCaml variables. + +### Usage + +Install packages to your local package directory with `opam install`. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][3]._ + +- [Sebastian Wiesner](https://github.com/lunaryorn) + +[1]: https://ocaml.org/ +[2]: http://opam.ocamlpro.com/ +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/ocaml/init.zsh b/config/zsh/.zprezto/modules/ocaml/init.zsh new file mode 100644 index 0000000..b09c7eb --- /dev/null +++ b/config/zsh/.zprezto/modules/ocaml/init.zsh @@ -0,0 +1,14 @@ +# +# Initializes OCaml package management. +# +# Authors: +# Sebastian Wiesner +# + +# Return if requirements are not found. +if [[ ! -f "$HOME/.opam/opam-init/init.zsh" ]]; then + return 1 +fi + +# Initialize OPAM. +source "$HOME/.opam/opam-init/init.zsh" diff --git a/config/zsh/.zprezto/modules/osx/README.md b/config/zsh/.zprezto/modules/osx/README.md new file mode 100644 index 0000000..893d3af --- /dev/null +++ b/config/zsh/.zprezto/modules/osx/README.md @@ -0,0 +1,50 @@ +# OSX + +Defines [macOS][1] aliases and functions. + +This module must be loaded _before_ the [_`completion`_][2] module so that the +provided completion definitions are loaded automatically by _`completion`_ +module. + +## Settings + +### Dash Keyword + +To change the keyword used by `mand` to open man pages in [_Dash.app_][3] from +its default value of 'manpages', add the following line in +_`${ZDOTDIR:-$HOME}/.zpreztorc`_ and replace the **keyword** with the one +configured in [_Dash.app_][3]. + +```sh +zstyle ':prezto:module:osx:man' dash-keyword 'keyword' +``` + +## Aliases + +- `cdf` changes the current working director to the current _Finder_ directory. +- `pushdf` pushes the current working directory onto the directory queue and + changes the current working director to the current _Finder_ directory. + +## Functions + +- `mand` opens _man_ pages in [_Dash.app_][3]. +- `manp` opens _man_ pages in _Preview.app_. +- `pfd` prints the current _Finder_ directory. +- `pfs` prints the current _Finder_ selection. +- `tab` creates a new tab (works in both _Terminal_ and [_iTerm.app_][4]). +- `ql` previews files in Quick Look. +- `osx-rm-dir-metadata` deletes _`.DS_Store`_, _`__MACOSX`_ cruft. +- `osx-ls-download-history` displays the macOS download history. +- `osx-rm-download-history` deletes the macOS download history. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][5]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://www.apple.com/macos/ +[2]: ../completion#readme +[3]: https://kapeli.com/dash +[4]: https://www.iterm2.com/ +[5]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/osx/functions/_mand_manp b/config/zsh/.zprezto/modules/osx/functions/_mand_manp new file mode 100644 index 0000000..8ea1e56 --- /dev/null +++ b/config/zsh/.zprezto/modules/osx/functions/_mand_manp @@ -0,0 +1,11 @@ +#compdef mand manp +#autoload + +# +# Completes mand and manp. +# +# Authors: +# Sorin Ionescu +# + +_man diff --git a/config/zsh/.zprezto/modules/osx/functions/mand b/config/zsh/.zprezto/modules/osx/functions/mand new file mode 100644 index 0000000..b62fab3 --- /dev/null +++ b/config/zsh/.zprezto/modules/osx/functions/mand @@ -0,0 +1,23 @@ +# +# Opens man pages in Dash.app. +# +# Authors: +# Sorin Ionescu +# + +function mand { + if (( $# > 0 )); then + zstyle -s ':prezto:module:osx:man' dash-keyword 'dashkw' || dashkw='manpages' + open "dash://$dashkw%3A$1" 2> /dev/null + if (( $? != 0 )); then + print "$0: Dash is not installed" >&2 + break + fi + else + print 'What manual page do you want?' >&2 + fi + + unset dashkw +} + +mand "$@" diff --git a/config/zsh/.zprezto/modules/osx/functions/manp b/config/zsh/.zprezto/modules/osx/functions/manp new file mode 100644 index 0000000..d31bbc4 --- /dev/null +++ b/config/zsh/.zprezto/modules/osx/functions/manp @@ -0,0 +1,19 @@ +# +# Opens man pages in Preview.app. +# +# Authors: +# Sorin Ionescu +# + +function manp { + local page + if (( $# > 0 )); then + for page in "$@"; do + mandoc -T pdf "$(/usr/bin/man -w $page)" | open -fa Preview + done + else + print 'What manual page do you want?' >&2 + fi +} + +manp "$@" diff --git a/config/zsh/.zprezto/modules/osx/functions/osx-ls-download-history b/config/zsh/.zprezto/modules/osx/functions/osx-ls-download-history new file mode 100644 index 0000000..8b6eaab --- /dev/null +++ b/config/zsh/.zprezto/modules/osx/functions/osx-ls-download-history @@ -0,0 +1,17 @@ +# +# Displays the macOS download history. +# +# Authors: +# Sorin Ionescu +# + +# function osx-ls-download-history { + +local db +for db in ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV*; do + if grep -q 'LSQuarantineEvent' < <(sqlite3 "$db" .tables); then + sqlite3 "$db" 'SELECT LSQuarantineDataURLString FROM LSQuarantineEvent' + fi +done + +# } diff --git a/config/zsh/.zprezto/modules/osx/functions/osx-rm-dir-metadata b/config/zsh/.zprezto/modules/osx/functions/osx-rm-dir-metadata new file mode 100644 index 0000000..f15f4ed --- /dev/null +++ b/config/zsh/.zprezto/modules/osx/functions/osx-rm-dir-metadata @@ -0,0 +1,15 @@ +# +# Deletes .DS_Store and __MACOSX directories. +# +# Authors: +# Sorin Ionescu +# + +# function osx-rm-dir-metadata { + +find "${@:-$PWD}" \( \ + -type f -name '.DS_Store' -o \ + -type d -name '__MACOSX' \ +\) -print0 | xargs -0 rm -rf + +# } diff --git a/config/zsh/.zprezto/modules/osx/functions/osx-rm-download-history b/config/zsh/.zprezto/modules/osx/functions/osx-rm-download-history new file mode 100644 index 0000000..068ba3d --- /dev/null +++ b/config/zsh/.zprezto/modules/osx/functions/osx-rm-download-history @@ -0,0 +1,17 @@ +# +# Deletes the macOS download history. +# +# Authors: +# Sorin Ionescu +# + +# function osx-rm-download-history { + +local db +for db in ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV*; do + if grep -q 'LSQuarantineEvent' < <(sqlite3 "$db" .tables); then + sqlite3 "$db" 'DELETE FROM LSQuarantineEvent; VACUUM' + fi +done + +# } diff --git a/config/zsh/.zprezto/modules/osx/functions/pfd b/config/zsh/.zprezto/modules/osx/functions/pfd new file mode 100644 index 0000000..264b40b --- /dev/null +++ b/config/zsh/.zprezto/modules/osx/functions/pfd @@ -0,0 +1,16 @@ +# +# Displays the current Finder.app directory. +# +# Authors: +# Sorin Ionescu +# + +# function pfd { + +osascript 2> /dev/null < +# + +# function pfs { + +osascript 2>&1 < +# + +# function ql { + +if (( $# > 0 )); then + qlmanage -p "$@" &> /dev/null +fi + +# } diff --git a/config/zsh/.zprezto/modules/osx/functions/tab b/config/zsh/.zprezto/modules/osx/functions/tab new file mode 100644 index 0000000..c39a6a8 --- /dev/null +++ b/config/zsh/.zprezto/modules/osx/functions/tab @@ -0,0 +1,56 @@ +# +# Opens a new Terminal.app/iTerm.app tab in the current directory. +# +# Authors: +# Sorin Ionescu +# + +# function tab { + +local command="cd \\\"$PWD\\\"" +(( $# > 0 )) && command="${command}; $*" + +the_app=$( + osascript 2> /dev/null < /dev/null < /dev/null < /dev/null <&2 + return 1 + fi +done + +if (( $#files == 0 )); then + print 'usage: trash ' >&2 + return 64 # Match rm's return code. +fi + +# Join file list with commas, and tell Finder to trash that list. +local file_list="${(pj., .)files}" +osascript 2>&1 > /dev/null -e "tell app \"Finder\" to move { "${file_list}" } to trash" + +# } diff --git a/config/zsh/.zprezto/modules/osx/init.zsh b/config/zsh/.zprezto/modules/osx/init.zsh new file mode 100644 index 0000000..62f2194 --- /dev/null +++ b/config/zsh/.zprezto/modules/osx/init.zsh @@ -0,0 +1,24 @@ +# +# Defines macOS aliases and functions. +# +# Authors: +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'helper' + +# Return if requirements are not found. +if ! is-darwin; then + return 1 +fi + +# +# Aliases +# + +# Changes directory to the current Finder directory. +alias cdf='cd "$(pfd)"' + +# Pushes directory to the current Finder directory. +alias pushdf='pushd "$(pfd)"' diff --git a/config/zsh/.zprezto/modules/pacman/README.md b/config/zsh/.zprezto/modules/pacman/README.md new file mode 100644 index 0000000..4e6ad8b --- /dev/null +++ b/config/zsh/.zprezto/modules/pacman/README.md @@ -0,0 +1,65 @@ +# Pacman + +Provides aliases and functions for the [Pacman][1] package manager and +frontends. + +## Settings + +It is possible to use a Pacman frontend with the pacman aliases provided by this +package as long as that frontend supports the same command line options (The +[AUR Helpers][2] page has a good comparison which lists if the command line +options are pacman compatible). + +Please note that installing packages with an AUR Helper is not officially +supported by Archlinux. It is currently recommended to manually build AUR +packages using the [provided instructions][3]. The [aurutils][4] project has a +set of small utilities to make this easier. + +To enable a different Pacman frontend, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_, and replace `''` with the name +of the preferred frontend. + +```sh +zstyle ':prezto:module:pacman' frontend '' +``` + +## Aliases + +### Pacman + +- `pac` is short for `pacman`. +- `paci` installs packages from repositories. +- `pacI` installs packages from files. +- `pacx` removes packages and unneeded dependencies. +- `pacX` removes packages, their configuration, and unneeded dependencies. +- `pacq` displays information about a package from the repositories. +- `pacQ` displays information about a package from the local database. +- `pacs` searches for packages in the repositories. +- `pacS` searches for packages in the local database. +- `pacu` synchronizes the local package and Arch Build System (requires `abs`) + databases against the repositories. +- `pacU` synchronizes the local package database against the repositories then + upgrades outdated packages. +- `pacman-list-orphans` lists orphan packages. +- `pacman-remove-orphans` removes orphan packages. + +### Frontends + +## Functions + +- `aurget` clone an aur package. +- `pacman-list-explicit` lists explicitly installed pacman packages. +- `pacman-list-disowned` lists pacman disowned files. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][5]._ + +- [Benjamin Boudreau](https://github.com/dreur) +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://www.archlinux.org/pacman/ +[2]: https://wiki.archlinux.org/title/AUR_helpers#Comparison_tables +[3]: https://wiki.archlinux.org/title/Arch_User_Repository#Installing_and_upgrading_packages +[4]: https://github.com/AladW/aurutils +[5]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/pacman/functions/pacman-list-disowned b/config/zsh/.zprezto/modules/pacman/functions/pacman-list-disowned new file mode 100644 index 0000000..c5e84fc --- /dev/null +++ b/config/zsh/.zprezto/modules/pacman/functions/pacman-list-disowned @@ -0,0 +1,26 @@ +# +# Lists Pacman disowned files. +# +# Authors: +# Benjamin Boudreau +# Sorin Ionescu +# + +# function pacman-list-disowned { + +local tmp="${XDG_CACHE_HOME:-$HOME/.cache}/prezto/pacman-disowned-$$" +local db="$tmp/db" +local fs="$tmp/fs" + +mkdir -p "$tmp" +trap 'rm -rf "$tmp"' EXIT + +pacman --quiet --query --list | sort --unique > "$db" + +find /bin /etc /lib /sbin /usr \ + ! -name lost+found \ + \( -type d -printf '%p/\n' -o -print \) | sort > "$fs" + +comm -23 "$fs" "$db" + +# } diff --git a/config/zsh/.zprezto/modules/pacman/functions/pacman-list-explicit b/config/zsh/.zprezto/modules/pacman/functions/pacman-list-explicit new file mode 100644 index 0000000..7c9b08f --- /dev/null +++ b/config/zsh/.zprezto/modules/pacman/functions/pacman-list-explicit @@ -0,0 +1,24 @@ +# +# Lists explicitly installed Pacman packages. +# +# Authors: +# Benjamin Boudreau +# Sorin Ionescu +# + +# function pacman-list-explicit { + +pacman --query --explicit --info \ + | awk ' + BEGIN { + FS=":" + } + /^Name/ { + print $2 + } + /^Description/ { + print $2 + } + ' + +# } diff --git a/config/zsh/.zprezto/modules/pacman/init.zsh b/config/zsh/.zprezto/modules/pacman/init.zsh new file mode 100644 index 0000000..88c977f --- /dev/null +++ b/config/zsh/.zprezto/modules/pacman/init.zsh @@ -0,0 +1,88 @@ +# +# Defines Pacman aliases. +# +# Authors: +# Benjamin Boudreau +# Sorin Ionescu +# +# Tips: +# https://wiki.archlinux.org/index.php/Pacman_Tips +# + +# Return if requirements are not found. +if (( ! $+commands[pacman] )); then + return 1 +fi + +# +# Frontend +# + +# Get the Pacman frontend. +zstyle -s ':prezto:module:pacman' frontend '_pacman_frontend' + +if (( $+commands[$_pacman_frontend] )); then + alias pacman="$_pacman_frontend" +else + _pacman_frontend='pacman' + _pacman_sudo='sudo ' +fi + +# +# Aliases +# + +# Pacman. +alias pac="${_pacman_frontend}" + +# Installs packages from repositories. +alias paci="${_pacman_sudo}${_pacman_frontend} --sync" + +# Installs packages from files. +alias pacI="${_pacman_sudo}${_pacman_frontend} --upgrade" + +# Removes packages and unneeded dependencies. +alias pacx="${_pacman_sudo}${_pacman_frontend} --remove" + +# Removes packages, their configuration, and unneeded dependencies. +alias pacX="${_pacman_sudo}${_pacman_frontend} --remove --nosave --recursive" + +# Displays information about a package from the repositories. +alias pacq="${_pacman_frontend} --sync --info" + +# Displays information about a package from the local database. +alias pacQ="${_pacman_frontend} --query --info" + +# Searches for packages in the repositories. +alias pacs="${_pacman_frontend} --sync --search" + +# Searches for packages in the local database. +alias pacS="${_pacman_frontend} --query --search" + +# Lists orphan packages. +alias pacman-list-orphans="${_pacman_sudo}${_pacman_frontend} --query --deps --unrequired" + +# Removes orphan packages. +alias pacman-remove-orphans="${_pacman_sudo}${_pacman_frontend} --remove --recursive \$(${_pacman_frontend} --quiet --query --deps --unrequired)" + +# Synchronizes the local package and Arch Build System databases against the +# repositories using the asp tool. +if (( $+commands[asp] )); then + alias pacu="${_pacman_sudo}${_pacman_frontend} --sync --refresh && sudo asp update" +else + alias pacu="${_pacman_sudo}${_pacman_frontend} --sync --refresh" +fi + +# Synchronizes the local package database against the repositories then +# upgrades outdated packages. +alias pacU="${_pacman_sudo}${_pacman_frontend} --sync --refresh --sysupgrade" + +function aurget { + local target_dir="$1" + if [[ -n "$2" ]]; then + target_dir="$2" + fi + git clone "https://aur.archlinux.org/$1" "$target_dir" +} + +unset _pacman_{frontend,sudo} diff --git a/config/zsh/.zprezto/modules/perl/README.md b/config/zsh/.zprezto/modules/perl/README.md new file mode 100644 index 0000000..dd59449 --- /dev/null +++ b/config/zsh/.zprezto/modules/perl/README.md @@ -0,0 +1,113 @@ +# Perl + +Enables local [Perl][1] module installation on macOS and defines aliases. + +## Local Module Installation + +Perl versions older than 5.14 do not support the local installation of Perl +modules natively. This module allows for local installation of Perl modules on +macOS in _`~/Library/Perl/5.12`_ by altering the environment. + +### Usage + +For Perl versions older than 5.14, install _`local::lib`_. + +```console +curl -L -C - -O http://search.cpan.org/CPAN/authors/id/A/AP/APEIRON/local-lib-1.008004.tar.gz +tar xvf local-lib-1.008004.tar.gz +cd local-lib-1.008004 +perl Makefile.PL --bootstrap=$HOME/Library/Perl/5.12 +make && make test && make install +``` + +Install _cpanminus_: + +```console +curl -L http://cpanmin.us | perl - --self-upgrade +``` + +## Perlbrew + +An alternative to the above is to use [Perlbrew][2], which allows for the +management of multiple, isolated Perl installations in the home directory. + +## plenv + +Yet another alternative is [_plenv_][3]. This is inspired from _rbenv_ and +enables switching between multiple binary installations. + +The subcommands of _plenv_ is similar with _rbenv_. + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:perl:alias' skip 'yes' +``` + +### General + +- `pl` is short for `perl`. +- `pld` looks up Perl documentation (`perldoc`). +- `ple` executes a one line program in a loop (`perl -wlne`). + +### Perlbrew (plb) + +- `plb` manages Perl environments. +- `plba` lists available Perl versions. +- `plbi` installs a Perl version. +- `plbl` lists installed Perl versions. +- `plbo` temporarily turns off Perlbrew. +- `plbO` turns off Perlbrew. +- `plbs` switches to a Perl version. +- `plbu` uninstalls a Perl version. +- `plbx` temporarily sets the Perl version to use. + +### plenv (plv) + +- `plv` manages Perl environments. +- `plvc` List all available plenv commands. +- `plvl` Set or show the local application-specific Perl version. +- `plvg` Set or show the global Perl version. +- `plvs` Set or show the shell-specific Perl version. +- `plvi` Install a Perl version using the perl-build plugin. +- `plvu` Uninstall a specific Perl version. +- `plvr` Rehash plenv shims (run this after installing executables). +- `plvv` Show the current Perl version and its origin. +- `plvV` List all Perl versions available to plenv. +- `plvw` Display the full path to an executable. +- `plvW` List all Perl versions that contain the given executable. +- `plvm` List cpan modules in current perl. +- `plvM` Migrate cpan modules from other version. +- `plvI` Install cpanm. + +## Functions + +- `perl-info` exposes information about the Perl environment via the + `$perl_info` associative array. + +## Theming + +To display the name of the current Perl version in a prompt, define the +following style in the `prompt_name_setup` function. + +```sh +# %v - perl version. +zstyle ':prezto:module:perl:info:version' format 'version:%v' +``` + +Then add `$perl_info[version]` to `$PROMPT` or `$RPROMPT` and call +`perl-info` in the `prompt_name_precmd` hook function. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][4]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://www.perl.org +[2]: https://perlbrew.pl +[3]: https://github.com/tokuhirom/plenv +[4]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/perl/functions/perl-info b/config/zsh/.zprezto/modules/perl/functions/perl-info new file mode 100644 index 0000000..b42e23d --- /dev/null +++ b/config/zsh/.zprezto/modules/perl/functions/perl-info @@ -0,0 +1,34 @@ +# +# Exposes information about the Perl environment via the $perl_info associative +# array. +# +# Authors: +# JINNOUCHI Yasushi +# + +# function perl-info { + +local version +local version_format +local version_formatted + +# Clean up previous $perl_info. +unset perl_info +typeset -gA perl_info + +if (( $+commands[perlbrew] )); then + version="${PERLBREW_PERL##*perl-}" +elif (( $+commands[plenv] )); then + version=$(plenv version-name) +elif (( $+commands[perl] )); then + version=$(perl -e 'printf "%vd", $^V') +fi + +# Format version. +if [[ -n "$version" ]]; then + zstyle -s ':prezto:module:perl:info:version' format 'version_format' + zformat -f version_formatted "$version_format" "v:$version" + perl_info[version]="$version_formatted" +fi + +# } diff --git a/config/zsh/.zprezto/modules/perl/init.zsh b/config/zsh/.zprezto/modules/perl/init.zsh new file mode 100644 index 0000000..efadd9e --- /dev/null +++ b/config/zsh/.zprezto/modules/perl/init.zsh @@ -0,0 +1,99 @@ +# +# Enables local Perl module installation on macOS and defines aliases. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[perl] )); then + return 1 +fi + +# Load dependencies. +pmodload 'helper' + +# +# Load Perlbrew or plenv +# + +# Load Perlbrew into the shell session. +if [[ -s "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}/etc/bashrc" ]]; then + source "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}/etc/bashrc" + + # Load Perlbrew completion. + if [[ -s "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}/etc/perlbrew-completion.bash" ]]; then + source "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}/etc/perlbrew-completion.bash" + fi + +# Load manually installed plenv into the shell session. +elif [[ -s "$HOME/.plenv/bin/plenv" ]]; then + path=("$HOME/.plenv/bin" $path) + eval "$(plenv init - --no-rehash zsh)" + +# Load package manager installed plenv into the shell session. +elif (( $+commands[plenv] )); then + eval "$(plenv init - --no-rehash zsh)" +fi + +# +# Local Module Installation +# + +if is-darwin; then + # Perl is slow; cache its output. + cache_file="${XDG_CACHE_HOME:-$HOME/.cache}/prezto/perl-cache.zsh" + perl_path="$HOME/Library/Perl/5.12" + + if [[ -f "$perl_path/lib/perl5/local/lib.pm" ]]; then + if [[ "${ZDOTDIR:-$HOME}/.zpreztorc" -nt "$cache_file" || ! -s "$cache_file" ]]; then + mkdir -p "$cache_file:h" + perl -I$perl_path/lib/perl5 -Mlocal::lib=$perl_path >! "$cache_file" + fi + + source "$cache_file" + fi + + unset cache_file perl_path +fi + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:perl:alias' skip; then + # General + alias pl='perl' + alias pld='perldoc' + alias ple='perl -wlne' + + # Perlbrew + if (( $+commands[perlbrew] )); then + alias plb='perlbrew' + alias plba='perlbrew available' + alias plbi='perlbrew install' + alias plbl='perlbrew list' + alias plbo='perlbrew off' + alias plbO='perlbrew switch-off' + alias plbs='perlbrew switch' + alias plbu='perlbrew use' + alias plbx='perlbrew uninstall' + + elif (( $+commands[plenv] )); then + alias plv='plenv' + alias plvc='plenv commands' + alias plvl='plenv local' + alias plvg='plenv global' + alias plvs='plenv shell' + alias plvi='plenv install' + alias plvu='plenv uninstall' + alias plvr='plenv rehash' + alias plvv='plenv version' + alias plvV='plenv versions' + alias plvw='plenv which' + alias plvW='plenv whence' + alias plvm='plenv list-modules' + alias plvM='plenv migrate-modules' + alias plvI='plenv install-cpanm' + fi +fi diff --git a/config/zsh/.zprezto/modules/prompt/README.md b/config/zsh/.zprezto/modules/prompt/README.md new file mode 100644 index 0000000..2279b55 --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/README.md @@ -0,0 +1,167 @@ +# Prompt + +Loads prompt [themes][1]. + +## Settings + +### Prompt Theme + +To select a prompt theme, add the following to _`${ZDOTDIR:-$HOME}/.zpreztorc`_, +and replace `''` with the name of the theme you wish to load. Setting it +to `'random'` will load a random theme every time. + +```sh +zstyle ':prezto:module:prompt' theme '' +``` + +### Prompt Display Length + +To change working directory prompt display length from 'short', set the +following to 'long' (without `~` expansion) or 'full' (with `~` expansion) in +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:prompt' pwd-length 'short' +``` + +### Display Return Value + +Some prompts display the return value in the prompt. If a prompt has support, +this can be disabled with the following snippet. + +```sh +zstyle ':prezto:module:prompt' show-return-val 'no' +``` + +## Theming + +A prompt theme is an autoloadable function file with a special name, +`prompt_name_setup`, placed anywhere in `$fpath`, but for the purpose of this +project, themes **should** be placed in the _modules/prompt/functions_ +directory. + +### Required Variables + +To ensure that your function works with the editor-info module you'll need to +set the following variable in _`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +# Tell prezto we can manage this prompt +zstyle ':prezto:module:prompt' managed 'yes' +``` + +This is to ensure compatibility with outside prompts, while allowing prezto +and prezto-compatible prompts to take full advantage of the editor module. +This should be set in the `prompt_name_setup` function after you've added +any additional hooks with `add-zsh-hook precmd prompt_name_precmd`. See below +for additional information about functions and hooks. + +### Theme Functions + +There are three theme functions, a setup function, a help function, and +a preview function. The setup function **must** always be defined. The help +function and the preview functions are optional. + +#### `prompt_name_setup` + +This function is called by the `prompt` function to install the theme. This +function may define other functions as necessary to maintain the prompt, +including a function that displays help or a function used to preview it. + +**Do not call this function directly.** + +The most basic example of this function can be seen below. + +```sh +function prompt_name_setup { + PROMPT='%m%# ' + RPROMPT='' +} +``` + +#### `prompt_name_help` + +If the `prompt_name_setup` function is customizable via parameters, a help +function **should** be defined. The user will access it via `prompt -h name`. + +The most basic example of this function can be seen below. + +```sh +function prompt_name_help { + cat <] [] + +where the color is for the left-hand prompt. +EOH +} +``` + +#### `prompt_name_preview` + +If the `prompt_name_setup` function is customizable via parameters, a preview +function **should** be defined. The user will access it via `prompt -p name`. + +The most basic example of this function can be seen below. + +```sh +function prompt_name_preview { + if (( $# > 0 )); then + prompt_preview_theme theme "$@" + else + prompt_preview_theme theme red green blue + print + prompt_preview_theme theme yellow magenta black + fi +} +``` + +### Hook Functions + +There are many Zsh [hook][2] functions, but mostly the _precmd_ hook will be +used. + +#### `prompt_name_precmd` + +This hook is called before the prompt is displayed and is useful for getting +information to display in a prompt. + +When calling functions to get information to display in a prompt, do not assume +that all the dependencies have been loaded. Always check for the availability of +a function before you calling it. + +**Do not register hook functions. They will be automatically registered by the +`prompt` function.** + +The most basic example of this function can be seen below. + +```sh +function prompt_name_precmd { + if (( $+functions[git-info] )); then + git-info + fi +} +``` + +## Troubleshooting + +### Fonts aren't displaying properly + +On most systems, themes which use special characters need to have a patched font +installed and configured properly. + +Powerline provides some information on [terminal support][4] and [how to install +patched fonts][5] which should fix most font issues. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][3]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Prompt-Themes +[2]: https://zsh.sourceforge.net/Doc/Release/Functions.html#Hook-Functions +[3]: https://github.com/sorin-ionescu/prezto/issues +[4]: https://powerline.readthedocs.io/en/master/usage.html#terminal-emulator-requirements +[5]: https://powerline.readthedocs.io/en/latest/installation.html#fonts-installation diff --git a/config/zsh/.zprezto/modules/prompt/functions/async b/config/zsh/.zprezto/modules/prompt/functions/async new file mode 120000 index 0000000..ae0ec55 --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/async @@ -0,0 +1 @@ +../external/async/async.zsh \ No newline at end of file diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt-pwd b/config/zsh/.zprezto/modules/prompt/functions/prompt-pwd new file mode 100644 index 0000000..d2d1788 --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt-pwd @@ -0,0 +1,31 @@ +# +# Prompt setup function commonly used by prompt themes. +# +# Authors: +# Sorin Ionescu +# + +# function prompt-pwd { + +setopt localoptions extendedglob + +local current_pwd="${PWD/#$HOME/~}" +local ret_directory + +if [[ "$current_pwd" == (#m)[/~] ]]; then + ret_directory="$MATCH" + unset MATCH +elif zstyle -m ':prezto:module:prompt' pwd-length 'full'; then + ret_directory=${PWD} +elif zstyle -m ':prezto:module:prompt' pwd-length 'long'; then + ret_directory=${current_pwd} +else + ret_directory="${${${${(@j:/:M)${(@s:/:)current_pwd}##.#?}:h}%/}//\%/%%}/${${current_pwd:t}//\%/%%}" +fi + +unset current_pwd + +print "$ret_directory" + +# } +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_agnoster_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_agnoster_setup new file mode 120000 index 0000000..34d8bc6 --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_agnoster_setup @@ -0,0 +1 @@ +../external/agnoster/agnoster.zsh-theme \ No newline at end of file diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_cloud_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_cloud_setup new file mode 100644 index 0000000..b0eb86e --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_cloud_setup @@ -0,0 +1,125 @@ +# +# A minimal two-color theme. +# +# Authors: +# Kevin Laude +# +# Features: +# - One line, left aligned. +# - The prompt is prefixed by a character sequence of your choice. +# - Only displays the current directory instead of the full path. +# - Displays the current branch when in a git project (this requires loading +# the git module before prompt in ${ZDOTDIR:-$HOME}/.zpreztorc). +# - Displays a character at the end of the prompt when in a git project with +# "dirty" files. +# +# Usage: +# This prompt's prefix symbol and colors are customizable: +# prompt cloud [] [] [] +# +# In ${ZDOTDIR:-$HOME}/.zpreztorc: +# zstyle ':prezto:module:prompt' theme 'cloud' \ +# [''] \ +# [''] \ +# [''] +# +# If these options are not provided, the symbol defaults to "☁" with colors +# cyan and green. +# +# Screenshots: +# http://i.imgur.com/mJCZ8rE.png +# +# Note: +# This is a port of the oh-my-zsh cloud theme, originally written by Phillip +# Ridlen and Mark Drago +# + +# Load dependencies. +pmodload 'helper' + +function prompt_cloud_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi +} + +function prompt_cloud_help { + cat <] [] [] + +In ${ZDOTDIR:-$HOME}/.zpreztorc: + zstyle ':prezto:module:prompt' theme 'cloud' [''] [''] [''] + +If these options are not provided, the symbol defaults to ☁ with colors cyan +and green. +EOT +} + +function prompt_cloud_preview { + if (( $# > 0 )); then + prompt_preview_theme 'cloud' "$@" + else + prompt_preview_theme 'cloud' + print + prompt_preview_theme 'cloud' "✯" + print + prompt_preview_theme 'cloud' ">" "yellow" "red" + fi +} + +function prompt_cloud_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent sp subst) + + # Set the theme prefix to a cloud or to the user's given characters. + if [[ -n "$1" ]]; then + prefix="$1" + else + prefix='☁' + fi + + # Assign colors. + if [[ -n "$2" ]]; then + primary_color="$2" + else + primary_color='cyan' + fi + + if [[ -n "$3" ]]; then + secondary_color="$3" + else + secondary_color='green' + fi + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_cloud_precmd + + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:dirty' format "%%B%F{$secondary_color}]%f%%b %F{yellow}⚡%f" + zstyle ':prezto:module:git:info:clean' format "%B%F{$secondary_color}]%f%b" + zstyle ':prezto:module:git:info:branch' format "%%B%F{$secondary_color}[%f%%b%%B%F{$primary_color}%b%f%%b" + zstyle ':prezto:module:git:info:keys' format \ + 'prompt' '%b%C%D' \ + 'rprompt' '' + + # Define prompts. + PROMPT='%B%F{$primary_color}${prefix}%f%b %B%F{$secondary_color}%c%f%b ${git_info:+$(escape-eval ${(e)git_info[prompt]})} ' + RPROMPT='' +} + +prompt_cloud_setup "$@" +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_damoekri_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_damoekri_setup new file mode 100644 index 0000000..553f222 --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_damoekri_setup @@ -0,0 +1,69 @@ +# +# A simple theme inspired by the Sorin and PeepCode themes. +# +# Authors: +# Daniel Møller Kristensen +# +# Screenshots: +# http://i.imgur.com/AX9HnPF.png +# + +# Load dependencies. +pmodload 'helper' + +prompt_damoekri_precmd() { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Format PWD. + _prompt_damoekri_pwd=$(prompt-pwd) + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Ruby version information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_damoekri_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent sp subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info and ruby-info before each command. + add-zsh-hook precmd prompt_damoekri_precmd + + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:keymap:primary' format ' %F{green}»%f' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:action' format ':%F{magenta}%s%f' + zstyle ':prezto:module:git:info:branch' format '%F{blue}%b%f' + zstyle ':prezto:module:git:info:clean' format ' %F{green}✔%f' + zstyle ':prezto:module:git:info:dirty' format ' %F{red}✗%f' + zstyle ':prezto:module:git:info:commit' format '%F{blue}%.7c%f' + zstyle ':prezto:module:git:info:position' format '%F{blue}%p%f' + zstyle ':prezto:module:git:info:keys' format \ + 'rprompt' ' $(coalesce "%b" "%p" "%c")%s%C%D' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format ' %F{yellow}%v%f' + + # Define prompts. + PROMPT='%F{cyan}${_prompt_damoekri_pwd}%f${editor_info[keymap]} ' + RPROMPT='${git_info:+$(escape-eval "${(e)git_info[rprompt]}")}${ruby_info:+$(escape-eval "${(e)ruby_info[version]}")}' +} + +prompt_damoekri_setup "$@" +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_giddie_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_giddie_setup new file mode 100644 index 0000000..2b36ccc --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_giddie_setup @@ -0,0 +1,80 @@ +# +# A colorful, friendly, multiline theme with some handy features. +# +# Authors: +# Paul Gideon Dann +# Sorin Ionescu +# +# Features: +# - Simple VCS branch, staged, and unstaged indication. +# - Prompt character is different in a VCS repository. +# - Last command exit status is displayed when non-zero. +# +# Screenshots: +# http://i.imgur.com/rCo3S.png +# + +function +vi-set_novcs_prompt_symbol { + _prompt_giddie_symbol=')' +} + +function +vi-set_vcs_prompt_symbol { + _prompt_giddie_symbol='±' +} + +function +vi-git_precmd { + # Check for untracked files, since vcs_info does not. + if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then + hook_com[unstaged]+='%F{green}?%f' + fi +} + +function prompt_giddie_precmd { + # Replace '/home/' with '~'. + _prompt_giddie_pwd="${PWD/#$HOME/~}" + vcs_info +} + +function prompt_giddie_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent sp subst) + + # Load required functions. + autoload -Uz vcs_info + autoload -Uz add-zsh-hook + + # Add hook to set up prompt parameters before each command. + add-zsh-hook precmd prompt_giddie_precmd + + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%F{green}...%f' + zstyle ':prezto:module:editor:info:keymap:alternate' format '%F{yellow}--- COMMAND ---%f' + + # Set vcs_info parameters. + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' formats ' on %F{magenta}%b%f%c%u' + zstyle ':vcs_info:*' actionformats ' on %F{magenta}%b%f%c%u %F{yellow}(%a)%f' + zstyle ':vcs_info:*' stagedstr '%F{green}+%f' + zstyle ':vcs_info:*' unstagedstr '%F{green}!%f' + + # Set vcs_info hooks. + # NOTE: Prior to Zsh v4.3.12, there are no static hooks, no vcs_info_hookadd + # function, and no 'no-vcs' hook. + zstyle ':vcs_info:*+start-up:*' hooks set_novcs_prompt_symbol + zstyle ':vcs_info:git*+set-message:*' hooks set_vcs_prompt_symbol git_precmd + zstyle ':vcs_info:*+set-message:*' hooks set_vcs_prompt_symbol + + # Define prompts. + PROMPT='%(?..%F{red}%B-> [%?]%b%f +)%F{magenta}%n%f@%F{yellow}%m%f|%F{green}${_prompt_giddie_pwd}%f${vcs_info_msg_0_} +%F{blue}${_prompt_giddie_symbol}%f ' + RPROMPT='${editor_info[keymap]}' + SPROMPT='zsh: correct %F{magenta}%R%f to %F{green}%r%f [nyae]? ' +} + +prompt_giddie_setup "$@" +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_kylewest_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_kylewest_setup new file mode 100644 index 0000000..2cd664b --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_kylewest_setup @@ -0,0 +1,69 @@ +# +# A single line theme with Git information on the left and Ruby on the right. +# +# Authors: +# Kyle West +# Sorin Ionescu +# +# Features: +# - Indicates dirty Git repository. +# - Indicates the Ruby version. +# - Indicates vi modes. +# +# Screenshots: +# http://i.imgur.com/dCwhynn.png +# + +function prompt_kylewest_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Ruby information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_kylewest_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent sp subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_kylewest_precmd + + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format "%B%F{green}❯%f%b" + zstyle ':prezto:module:editor:info:keymap:alternate' format "%B%F{magenta}❮%f%b" + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'no' + zstyle ':prezto:module:git:info:branch' format '%F{yellow}%b%f' + zstyle ':prezto:module:git:info:dirty' format '%B%F{red}!%f%b' + zstyle ':prezto:module:git:info:indexed' format ' ' + zstyle ':prezto:module:git:info:unindexed' format ' ' + zstyle ':prezto:module:git:info:untracked' format ' ' + zstyle ':prezto:module:git:info:keys' format 'prompt' '- %b%D ' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format '%F{blue}[%v]%f' + + # Define prompts. + PROMPT='%F{cyan}%c%f ${git_info:+$(escape-eval ${(e)git_info[prompt]})}${editor_info[keymap]} ' + RPROMPT='${ruby_info[version]}' +} + +prompt_kylewest_setup "$@" +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_minimal_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_minimal_setup new file mode 100644 index 0000000..e57aac5 --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_minimal_setup @@ -0,0 +1,63 @@ +# +# A monochrome theme that displays basic information. +# +# Authors: +# Brian Tse +# Sorin Ionescu +# +# Screenshots: +# http://i.imgur.com/zLZNK.png +# + +function +vi-git_status { + # Check for untracked files or updated submodules since vcs_info does not. + if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then + hook_com[unstaged]='%F{red}●%f' + fi +} + +function prompt_minimal_precmd { + vcs_info +} + +function prompt_minimal_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent sp subst) + + # Load required functions. + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + + # Add hook for calling vcs_info before each command. + add-zsh-hook precmd prompt_minimal_precmd + + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + + # Set vcs_info parameters. + zstyle ':vcs_info:*' enable bzr git hg svn + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' stagedstr '%F{green}●%f' + zstyle ':vcs_info:*' unstagedstr '%F{yellow}●%f' + zstyle ':vcs_info:*' formats ' - [%b%c%u]' + zstyle ':vcs_info:*' actionformats " - [%b%c%u|%F{cyan}%a%f]" + zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b|%F{cyan}%r%f' + zstyle ':vcs_info:git*+set-message:*' hooks git_status + + # Define prompts. + PROMPT='%2~${vcs_info_msg_0_} » ' + RPROMPT='' +} + +function prompt_minimal_preview { + local +h PROMPT='' + local +h RPROMPT='' + local +h SPROMPT='' + + editor-info 2> /dev/null + prompt_preview_theme 'minimal' +} + +prompt_minimal_setup "$@" +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_nicoulaj_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_nicoulaj_setup new file mode 100644 index 0000000..4b40bac --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_nicoulaj_setup @@ -0,0 +1,64 @@ +# +# A simple theme that displays only relevant information. +# +# Authors: +# Julien Nicoulaud +# Sorin Ionescu +# +# Features: +# - One line. +# - VCS information in the right prompt. +# - Only shows the path on the left prompt by default. +# - Crops the path to a defined length and only shows the path relative to +# the current VCS repository root. +# - Uses a different color depending on if the last command succeeded/failed. +# - Shows user@hostname if connected through SSH. +# - Shows if logged in as root or not. +# +# Screenshots: +# http://i.imgur.com/Xe1bu.png +# + +function prompt_nicoulaj_precmd { + vcs_info +} + +function prompt_nicoulaj_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent sp subst) + + # Load required functions. + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + + # Add hook for calling vcs_info before each command. + add-zsh-hook precmd prompt_nicoulaj_precmd + + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + + # Customizable parameters. + local max_path_chars=30 + local user_char='❯' + local root_char='❯❯❯' + local success_color='%F{071}' + local failure_color='%F{124}' + local vcs_info_color='%F{242}' + + # Set vcs_info parameters. + zstyle ':vcs_info:*' enable bzr git hg svn + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' unstagedstr '!' + zstyle ':vcs_info:*' stagedstr '+' + zstyle ':vcs_info:*' actionformats "%S" "%r/%s/%b %u%c (%a)" + zstyle ':vcs_info:*' formats "%S" "%r/%s/%b %u%c" + zstyle ':vcs_info:*' nvcsformats "%~" "" + + # Define prompts. + PROMPT="%(?.${success_color}.${failure_color})${SSH_TTY:+[%n@%m]}%B%${max_path_chars}<...<"'${vcs_info_msg_0_%%.}'"%<<%(!.${root_char}.${user_char})%b%f " + RPROMPT="${vcs_info_color}"'${vcs_info_msg_1_}'"%f" +} + +prompt_nicoulaj_setup "$@" +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_paradox_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_paradox_setup new file mode 100644 index 0000000..14012dd --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_paradox_setup @@ -0,0 +1,160 @@ +# +# A two-line, Powerline-inspired theme that displays contextual information. +# +# This theme requires a patched Powerline font, get them from +# https://github.com/Lokaltog/powerline-fonts. +# +# Authors: +# Isaac Wolkerstorfer +# Jeff Sandberg +# Sorin Ionescu +# Patrick Bos +# +# Screenshots: +# http://i.imgur.com/0XIWX.png +# + +# Load dependencies. +pmodload 'helper' + +# Define variables. +_prompt_paradox_current_bg='NONE' +_prompt_paradox_segment_separator='' +_prompt_paradox_start_time=$SECONDS + +function prompt_paradox_start_segment { + local bg fg + [[ -n "$1" ]] && bg="%K{$1}" || bg="%k" + [[ -n "$2" ]] && fg="%F{$2}" || fg="%f" + if [[ "$_prompt_paradox_current_bg" != 'NONE' && "$1" != "$_prompt_paradox_current_bg" ]]; then + print -n " $bg%F{$_prompt_paradox_current_bg}$_prompt_paradox_segment_separator$fg " + else + print -n "$bg$fg " + fi + _prompt_paradox_current_bg="$1" + [[ -n "$3" ]] && print -n "$3" +} + +function prompt_paradox_end_segment { + if [[ -n "$_prompt_paradox_current_bg" ]]; then + print -n " %k%F{$_prompt_paradox_current_bg}$_prompt_paradox_segment_separator" + else + print -n "%k" + fi + print -n "%f" + _prompt_paradox_current_bg='' +} + +function prompt_paradox_build_prompt { + prompt_paradox_start_segment black default '%(?::%F{red}✘ )%(!:%F{yellow}⚡ :)%(1j:%F{cyan}⚙ :)%F{blue}%n%F{red}@%F{green}%m%f' + prompt_paradox_start_segment blue black '$_prompt_paradox_pwd' + + if [[ -n "$git_info" ]]; then + prompt_paradox_start_segment green black '$(escape-eval "${(e)git_info[ref]}${(e)git_info[status]}")' + fi + + if [[ -n "$python_info" ]]; then + prompt_paradox_start_segment white black '$(escape-eval "${(e)python_info[virtualenv]}")' + fi + + prompt_paradox_end_segment +} + +prompt_paradox_print_elapsed_time() { + local end_time=$(( SECONDS - _prompt_paradox_start_time )) + local hours minutes seconds remainder + + if (( end_time >= 3600 )); then + hours=$(( end_time / 3600 )) + remainder=$(( end_time % 3600 )) + minutes=$(( remainder / 60 )) + seconds=$(( remainder % 60 )) + print -P "%B%F{red}>>> elapsed time ${hours}h${minutes}m${seconds}s%b" + elif (( end_time >= 60 )); then + minutes=$(( end_time / 60 )) + seconds=$(( end_time % 60 )) + print -P "%B%F{yellow}>>> elapsed time ${minutes}m${seconds}s%b" + elif (( end_time > 10 )); then + print -P "%B%F{green}>>> elapsed time ${end_time}s%b" + fi +} + +function prompt_paradox_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Format PWD. + _prompt_paradox_pwd=$(prompt-pwd) + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Python environment information. + if (( $+functions[python-info] )); then + python-info + fi + + # Calculate and print the elapsed time. + prompt_paradox_print_elapsed_time +} + +function prompt_paradox_preexec { + _prompt_paradox_start_time="$SECONDS" +} + +function prompt_paradox_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent sp subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook preexec prompt_paradox_preexec + add-zsh-hook precmd prompt_paradox_precmd + + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format '%B%F{blue}❯%f%b' + zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format '%F{red}♺%f' + zstyle ':prezto:module:editor:info:keymap:alternate' format '%B%F{red}❮%f%b' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:action' format ' ⁝ %s' + zstyle ':prezto:module:git:info:added' format ' ✚' + zstyle ':prezto:module:git:info:ahead' format ' ⬆' + zstyle ':prezto:module:git:info:behind' format ' ⬇' + zstyle ':prezto:module:git:info:branch' format ' %b' + zstyle ':prezto:module:git:info:commit' format '➦ %.7c' + zstyle ':prezto:module:git:info:deleted' format ' ✖' + zstyle ':prezto:module:git:info:dirty' format ' ⁝' + zstyle ':prezto:module:git:info:modified' format ' ✱' + zstyle ':prezto:module:git:info:position' format '%p' + zstyle ':prezto:module:git:info:renamed' format ' ➙' + zstyle ':prezto:module:git:info:stashed' format ' S' + zstyle ':prezto:module:git:info:unmerged' format ' ═' + zstyle ':prezto:module:git:info:untracked' format ' ?' + zstyle ':prezto:module:git:info:keys' format \ + 'ref' '$(coalesce "%b" "%p" "%c")' \ + 'status' '%s%D%A%B%S%a%d%m%r%U%u' + + # %v - virtualenv name. + zstyle ':prezto:module:python:info:virtualenv' format 'virtualenv:%v' + + # Define prompts. + PROMPT=' +${(e)$(prompt_paradox_build_prompt)} + ${editor_info[keymap]} ' + RPROMPT='%F{blue}[%F{green}%D{%H:%M:%S}%F{blue}]%f' + SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' +} + +prompt_paradox_setup "$@" +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_peepcode_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_peepcode_setup new file mode 100644 index 0000000..3a108df --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_peepcode_setup @@ -0,0 +1,89 @@ +# +# A simple theme from PeepCode. +# http://peepcode.com/blog/2012/my-command-line-prompt +# +# Authors: +# Geoffrey Grosenbach +# Sorin Ionescu +# +# Screenshots: +# http://i.imgur.com/LhgmW.png +# + +function prompt_peepcode_precmd { + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Ruby information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_peepcode_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent sp subst) + + # Load required functions. + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + + # Add a hook for calling info functions before each command. + add-zsh-hook precmd prompt_peepcode_precmd + + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'no' + zstyle ':prezto:module:git:info:action' format ' +%s' + zstyle ':prezto:module:git:info:branch' format ' %F{8}%b%f' + zstyle ':prezto:module:git:info:commit' format ' %F{white}%.7c%f' + zstyle ':prezto:module:git:info:indexed' format ' ' + zstyle ':prezto:module:git:info:unindexed' format ' ' + zstyle ':prezto:module:git:info:untracked' format ' ' + zstyle ':prezto:module:git:info:dirty' format ' %F{8}✗%f' + zstyle ':prezto:module:git:info:keys' format 'rprompt' '%b%c%s%D' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format ' %F{white}%v%f' + + # Define prompts. + PROMPT=" +%~ +%(?.%F{green}${1:-☻ }%f.%F{red}${1:-☻ }%f) " +RPROMPT='${ruby_info[version]}${git_info[rprompt]}' + +} + +function prompt_peepcode_help { + cat <] + +If this option is not provided, the symbol defaults to ☻. +EOH +} + +function prompt_peepcode_preview { + local +h PROMPT='%# ' + local +h RPROMPT='' + local +h SPROMPT='' + + if (( $# > 0 )); then + prompt_preview_theme 'peepcode' "$@" + else + prompt_preview_theme 'peepcode' + print + prompt_preview_theme 'peepcode' "❯" + print + prompt_preview_theme 'peepcode' "$" + fi +} + +prompt_peepcode_setup "$@" +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_powerlevel10k_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_powerlevel10k_setup new file mode 120000 index 0000000..8c66c69 --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_powerlevel10k_setup @@ -0,0 +1 @@ +../external/powerlevel10k/powerlevel10k.zsh-theme \ No newline at end of file diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_powerline_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_powerline_setup new file mode 120000 index 0000000..3715d75 --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_powerline_setup @@ -0,0 +1 @@ +../external/powerline/prompt_powerline_setup \ No newline at end of file diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_pure_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_pure_setup new file mode 120000 index 0000000..1480fcf --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_pure_setup @@ -0,0 +1 @@ +../external/pure/pure.zsh \ No newline at end of file diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_skwp_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_skwp_setup new file mode 100644 index 0000000..1657fbf --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_skwp_setup @@ -0,0 +1,79 @@ +# +# A single line theme with Git information on the left and Ruby on the right. +# +# Authors: +# Steve Losh +# Bart Trojanowski +# Brian Carper +# steeef +# Sorin Ionescu +# Yan Pritzker +# +# Screenshots: +# http://i.imgur.com/gLgVp6Y.png +# + +function prompt_skwp_precmd { + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Ruby information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_skwp_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent sp subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook to set up prompt parameters before each command. + add-zsh-hook precmd prompt_skwp_precmd + + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + + # Use extended color pallete if available. + if [[ $TERM = *256color* || $TERM = *rxvt* ]]; then + _prompt_skwp_colors=( + "%F{81}" # Turquoise + "%F{166}" # Orange + "%F{135}" # Purple + "%F{161}" # Hotpink + "%F{118}" # Limegreen + ) + else + _prompt_skwp_colors=( + "%F{cyan}" + "%F{yellow}" + "%F{magenta}" + "%F{red}" + "%F{green}" + ) + fi + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:branch' format "${_prompt_skwp_colors[1]}%b%f" + zstyle ':prezto:module:git:info:added' format "${_prompt_skwp_colors[5]}●%f" + zstyle ':prezto:module:git:info:deleted' format "${_prompt_skwp_colors[2]}●%f" + zstyle ':prezto:module:git:info:modified' format "${_prompt_skwp_colors[4]}●%f" + zstyle ':prezto:module:git:info:untracked' format "${_prompt_skwp_colors[3]}●%f" + zstyle ':prezto:module:git:info:keys' format 'prompt' '(%b%d%a%m%u)' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format '[%v]' + + # Define prompts. + PROMPT="${_prompt_skwp_colors[3]}%n%f@${_prompt_skwp_colors[2]}%m%f ${_prompt_skwp_colors[5]}%~%f "'${git_info:+$(escape-eval "${(e)git_info[prompt]}")}'"$ " + RPROMPT='%F{blue}${ruby_info[version]}' +} + +prompt_skwp_setup "$@" +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_smiley_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_smiley_setup new file mode 100644 index 0000000..eb1a14a --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_smiley_setup @@ -0,0 +1,69 @@ +# +# A simple theme that displays: +# - Python virtual environment. +# - Git branch. +# - Git state. +# - Last command exit state (smiley/X). +# +# Authors: +# Nadav Shatz +# +# Screenshots: +# http://i.imgur.com/ijycV6n.png +# + +# Load dependencies. +pmodload 'helper' + +function prompt_smiley_precmd { + unsetopt XTRACE KSH_ARRAYS + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Python environment information. + if (( $+functions[python-info] )); then + python-info + fi + + # Get Ruby version information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_smiley_setup { + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent sp subst) + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_smiley_precmd + + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' + + # Set python-info parameters. + zstyle ':prezto:module:python:info:virtualenv' format '%F{yellow}[%v]%f ' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format '%F{yellow}[%v]%f ' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:branch' format '%F{blue}%b%f' + zstyle ':prezto:module:git:info:dirty' format '%%B%F{red} ±%f%%b' + zstyle ':prezto:module:git:info:keys' format 'prompt' '(%b%D)' + + # Define prompts. + PROMPT='$python_info[virtualenv]$ruby_info[version]${git_info:+$(escape-eval ${(e)git_info[prompt]})} %B%c%b %(?:%F{green}ツ%f:%F{red}✖%f) ' + RPROMPT='${editor_info[overwrite]}${VIM:+" %B%F{green}V%f%b"}' + SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' +} + +prompt_smiley_setup "$@" +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_sorin_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_sorin_setup new file mode 100644 index 0000000..a7d341e --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_sorin_setup @@ -0,0 +1,189 @@ +# +# A simple theme that displays relevant, contextual information. +# +# Authors: +# Sorin Ionescu +# +# Screenshots: +# http://i.imgur.com/nrGV6pg.png +# + +# +# 16 Terminal Colors +# -- --------------- +# 0 black +# 1 red +# 2 green +# 3 yellow +# 4 blue +# 5 magenta +# 6 cyan +# 7 white +# 8 bright black +# 9 bright red +# 10 bright green +# 11 bright yellow +# 12 bright blue +# 13 bright magenta +# 14 bright cyan +# 15 bright white +# + +# Load dependencies. +pmodload 'helper' + +function prompt_sorin_async_callback { + case $1 in + prompt_sorin_async_git) + # We can safely split on ':' because it isn't allowed in ref names. + IFS=':' read _git_target _git_post_target <<<"$3" + + # The target actually contains 3 space separated possibilities, so we need to + # make sure we grab the first one. + _git_target=$(coalesce ${(@)${(z)_git_target}}) + + if [[ -z "$_git_target" ]]; then + # No git target detected, flush the git fragment and redisplay the prompt. + if [[ -n "$_prompt_sorin_git" ]]; then + _prompt_sorin_git='' + zle && zle reset-prompt + fi + else + # Git target detected, update the git fragment and redisplay the prompt. + _prompt_sorin_git="${_git_target}${_git_post_target}" + zle && zle reset-prompt + fi + ;; + "[async]") + # Code is 1 for corrupted worker output and 2 for dead worker. + if [[ $2 -eq 2 ]]; then + # Our worker died unexpectedly. + typeset -g prompt_prezto_async_init=0 + fi + ;; + esac +} + +function prompt_sorin_async_git { + cd -q "$1" + if (( $+functions[git-info] )); then + git-info + print ${git_info[status]} + fi +} + +function prompt_sorin_async_tasks { + # Initialize async worker. This needs to be done here and not in + # prompt_sorin_setup so the git formatting can be overridden by other prompts. + if (( !${prompt_prezto_async_init:-0} )); then + async_start_worker prompt_sorin -n + async_register_callback prompt_sorin prompt_sorin_async_callback + typeset -g prompt_prezto_async_init=1 + fi + + # Kill the old process of slow commands if it is still running. + async_flush_jobs prompt_sorin + + # Compute slow commands in the background. + async_job prompt_sorin prompt_sorin_async_git "$PWD" +} + +function prompt_sorin_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Format PWD. + _prompt_sorin_pwd=$(prompt-pwd) + + # Handle updating git data. We also clear the git prompt data if we're in a + # different git root now. + if (( $+functions[git-dir] )); then + local new_git_root="$(git-dir 2> /dev/null)" + if [[ $new_git_root != $_sorin_cur_git_root ]]; then + _prompt_sorin_git='' + _sorin_cur_git_root=$new_git_root + fi + fi + + # Run python info (this should be fast and not require any async) + if (( $+functions[python-info] )); then + python-info + fi + + prompt_sorin_async_tasks +} + +function prompt_sorin_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent sp subst) + + # Load required functions. + autoload -Uz add-zsh-hook + autoload -Uz async && async + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_sorin_precmd + + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{7}...%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{1}❯%F{3}❯%F{2}❯%f%b' + zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format ' %F{3}♺%f' + zstyle ':prezto:module:editor:info:keymap:alternate' format ' %B%F{2}❮%F{3}❮%F{1}❮%f%b' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:action' format '%F{7}:%f%%B%F{9}%s%f%%b' + zstyle ':prezto:module:git:info:added' format ' %%B%F{2}✚%f%%b' + zstyle ':prezto:module:git:info:ahead' format ' %%B%F{13}⬆%f%%b' + zstyle ':prezto:module:git:info:behind' format ' %%B%F{13}⬇%f%%b' + zstyle ':prezto:module:git:info:branch' format ' %%B%F{2}%b%f%%b' + zstyle ':prezto:module:git:info:commit' format ' %%B%F{3}%.7c%f%%b' + zstyle ':prezto:module:git:info:deleted' format ' %%B%F{1}✖%f%%b' + zstyle ':prezto:module:git:info:modified' format ' %%B%F{4}✱%f%%b' + zstyle ':prezto:module:git:info:position' format ' %%B%F{13}%p%f%%b' + zstyle ':prezto:module:git:info:renamed' format ' %%B%F{5}➜%f%%b' + zstyle ':prezto:module:git:info:stashed' format ' %%B%F{6}✭%f%%b' + zstyle ':prezto:module:git:info:unmerged' format ' %%B%F{3}═%f%%b' + zstyle ':prezto:module:git:info:untracked' format ' %%B%F{7}◼%f%%b' + zstyle ':prezto:module:git:info:keys' format \ + 'status' '%b %p %c:%s%A%B%S%a%d%m%r%U%u' + + # Set python-info parameters. + zstyle ':prezto:module:python:info:virtualenv' format '%f%F{3}(%v)%F{7} ' + + # Set up non-zero return value display + local show_return="✘ " + # Default is to show the return value + if zstyle -T ':prezto:module:prompt' show-return-val; then + show_return+='%? ' + fi + + # Get the async worker set up. + _sorin_cur_git_root='' + + _prompt_sorin_git='' + _prompt_sorin_pwd='' + + # Define prompts. + PROMPT='${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{4}${_prompt_sorin_pwd}%(!. %B%F{1}#%f%b.)${editor_info[keymap]} ' + RPROMPT='$python_info[virtualenv]${editor_info[overwrite]}%(?:: %F{1}' + RPROMPT+=${show_return} + RPROMPT+='%f)${VIM:+" %B%F{6}V%f%b"}${_prompt_sorin_git}' + SPROMPT='zsh: correct %F{1}%R%f to %F{2}%r%f [nyae]? ' +} + +function prompt_sorin_preview { + local +h PROMPT='' + local +h RPROMPT='' + local +h SPROMPT='' + + editor-info 2> /dev/null + prompt_preview_theme 'sorin' +} + +prompt_sorin_setup "$@" +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/functions/prompt_steeef_setup b/config/zsh/.zprezto/modules/prompt/functions/prompt_steeef_setup new file mode 100644 index 0000000..d32bd34 --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/functions/prompt_steeef_setup @@ -0,0 +1,110 @@ +# +# A theme based on Steve Losh's Extravagant Prompt with vcs_info integration. +# +# Authors: +# Steve Losh +# Bart Trojanowski +# Brian Carper +# steeef +# Sorin Ionescu +# +# Screenshots: +# http://i.imgur.com/HyRvv.png +# + +function prompt_steeef_precmd { + # Check for untracked files or updated submodules since vcs_info does not. + if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then + branch_format="(${_prompt_steeef_colors[1]}%b%f%u%c${_prompt_steeef_colors[4]}●%f)" + else + branch_format="(${_prompt_steeef_colors[1]}%b%f%u%c)" + fi + + zstyle ':vcs_info:*:prompt:*' formats "${branch_format}" + + vcs_info 'prompt' + + if (( $+functions[python-info] )); then + python-info + fi +} + +function prompt_steeef_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent sp subst) + + # Load required functions. + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + + # Add hook for calling vcs_info before each command. + add-zsh-hook precmd prompt_steeef_precmd + + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + + # Use extended color pallete if available. + if [[ $TERM = *256color* || $TERM = *rxvt* ]]; then + _prompt_steeef_colors=( + "%F{81}" # Turquoise + "%F{166}" # Orange + "%F{135}" # Purple + "%F{161}" # Hotpink + "%F{118}" # Limegreen + ) + else + _prompt_steeef_colors=( + "%F{cyan}" + "%F{yellow}" + "%F{magenta}" + "%F{red}" + "%F{green}" + ) + fi + + # Formats: + # %b - branchname + # %u - unstagedstr (see below) + # %c - stagedstr (see below) + # %a - action (e.g. rebase-i) + # %R - repository path + # %S - path in the repository + local branch_format="(${_prompt_steeef_colors[1]}%b%f%u%c)" + local action_format="(${_prompt_steeef_colors[5]}%a%f)" + local unstaged_format="${_prompt_steeef_colors[2]}●%f" + local staged_format="${_prompt_steeef_colors[5]}●%f" + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:keymap:primary' format '$' + + # Set vcs_info parameters. + zstyle ':vcs_info:*' enable bzr git hg svn + zstyle ':vcs_info:*:prompt:*' check-for-changes true + zstyle ':vcs_info:*:prompt:*' unstagedstr "${unstaged_format}" + zstyle ':vcs_info:*:prompt:*' stagedstr "${staged_format}" + zstyle ':vcs_info:*:prompt:*' actionformats "${branch_format}${action_format}" + zstyle ':vcs_info:*:prompt:*' formats "${branch_format}" + zstyle ':vcs_info:*:prompt:*' nvcsformats "" + + # Set python-info parameters. + zstyle ':prezto:module:python:info:virtualenv' format '(%v)' + + # Define prompts. + PROMPT=" +${_prompt_steeef_colors[3]}%n%f at ${_prompt_steeef_colors[2]}%m%f in ${_prompt_steeef_colors[5]}%~%f "'${vcs_info_msg_0_}'" +"'$python_info[virtualenv]${editor_info[keymap]} ' + RPROMPT='' +} + +function prompt_steeef_preview { + local +h PROMPT='' + local +h RPROMPT='' + local +h SPROMPT='' + + editor-info 2> /dev/null + prompt_preview_theme 'steeef' +} + +prompt_steeef_setup "$@" +# vim: ft=zsh diff --git a/config/zsh/.zprezto/modules/prompt/init.zsh b/config/zsh/.zprezto/modules/prompt/init.zsh new file mode 100644 index 0000000..37bff32 --- /dev/null +++ b/config/zsh/.zprezto/modules/prompt/init.zsh @@ -0,0 +1,18 @@ +# +# Loads prompt themes. +# +# Authors: +# Sorin Ionescu +# + +# Load and execute the prompt theming system. +autoload -Uz promptinit && promptinit + +# Load the prompt theme. +zstyle -a ':prezto:module:prompt' theme 'prompt_argv' +if [[ $TERM == (dumb|linux|*bsd*) ]] || (( $#prompt_argv < 1 )); then + prompt 'off' +else + prompt "$prompt_argv[@]" +fi +unset prompt_argv diff --git a/config/zsh/.zprezto/modules/python/README.md b/config/zsh/.zprezto/modules/python/README.md new file mode 100644 index 0000000..b7a3230 --- /dev/null +++ b/config/zsh/.zprezto/modules/python/README.md @@ -0,0 +1,169 @@ +# Python + +Enables local Python and local Python package installation. + +## Settings + +This module supports virtual environments from conda and +[_virtualenvwrapper_][2]. By default, only _virtualenvwrapper_ is enabled. To +disable _virtualenvwrapper_, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:python:virtualenv' initialize 'no' +``` + +Conda support can be enabled by adding the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:python' conda-init 'on' +``` + +Caution: using conda and virtualenvwrapper at the same time may cause conflicts. + +## Local Python Installation + +[_pyenv_][4] builds and installs multiple Python versions locally in the home +directory. + +This module prepends the _pyenv_ directory to the path variable to enable the +execution of `pyenv`. + +### Usage + +Install Python versions with `pyenv install` into _`~/.pyenv/versions`_. + +This will be loaded automatically if pyenv is installed to `$PYENV_ROOT`, +_`~/.pyenv`_, or if the `pyenv` command is on the path. By default, `PYENV_ROOT` +is set to _`$HOME/.pyenv`_. You can set it to an alternate location and export +it in [_`${ZDOTDIR:-$HOME}/.zshenv`_][6]. + +## Local Package Installation + +Since version 2.6, Python supports per user package installation, as defined in +[PEP 370][1]. + +This module prepends per user site directories to the relevant path variables +to enable the execution of user installed scripts and the reading of +documentation. + +### Usage + +Install packages into the per user site directory with `pip install --user`. + +## virtualenvwrapper + +[_virtualenvwrapper_][2] is a frontend to the popular [_virtualenv_][3] utility. + +`virtualenv` creates isolated Python environments and `virtualenvwrapper` +provides convenient shell functions to create, switch, and manage them. + +### Usage + +Install `virtualenvwrapper`. + +Virtual environments are stored in _`~/.virtualenvs`_. + +There are configuration variables that have to be set to enable certain +features. If you wish to use these features, export the variables in +[_`${ZDOTDIR:-$HOME}/.zshenv`_][6]. + +The variable `$PROJECT_HOME` tells `virtualenvwrapper` where to place project +working directories. It must be set and the directory created before `mkproject` +is used. Replace _Developer_ with your projects directory. + +```sh +export PROJECT_HOME="$HOME/Developer" +``` + +The variable `VIRTUALENVWRAPPER_PYTHON` tells `virtualenvwrapper` to use the +specified full path of the `python` interpreter overriding the `$PATH` search. + +```sh +export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python +``` + +The variable `VIRTUALENVWRAPPER_VIRTUALENV` tells `virtualenvwrapper` to use the +specified full path of `virtualenv` binary overriding the `$PATH` search. + +```sh +export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv +``` + +The variable `$VIRTUALENVWRAPPER_VIRTUALENV_ARGS` tells `virtualenvwrapper` what +arguments to pass to `virtualenv`. For example, set the value to +`--system-site-packages` to ensure that all new environments have access to the +system site-packages directory. + +```sh +export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--system-site-packages' +``` + +### Additional Options + +There is a hook to enable auto-switching to virtualenvs when switching into a +directory where the root of the project matches a virtualenv name. + +This can be enabled with: + +```sh +zstyle ':prezto:module:python:virtualenv' auto-switch 'yes' +``` + +`virtualenvwrapper` is automatically initialized if pre-requisites are met +(`$VIRTUALENVWRAPPER_VIRTUALENV` is explicitly set or `virtualenv` is in +`$PATH`). This can be disabled with: + +```sh +zstyle ':prezto:module:python:virtualenv' initialize 'no' +``` + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:python:alias' skip 'yes' +``` + +- `py` is short for `python`. +- `py2` is short for `python2`. +- `py3` is short for `python3`. + +## Functions + +- `python-info` exposes information about the Python environment via the + `$python_info` associative array. + +## Theming + +To display the name of the current virtual environment in a prompt, define the +following style in the `prompt_name_setup` function. + +```sh +# %v - virtualenv name. +zstyle ':prezto:module:python:info:virtualenv' format 'virtualenv:%v' +``` + +Then add `$python_info[virtualenv]` to `$PROMPT` or `$RPROMPT` and call +`python-info` in the `prompt_name_preexec` hook function. + +Similarly, you can use `:prezto:module:python:info:version:format` with `%v` for +the version and add `$python_info[version]` to your prompt for the current +python version. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][5]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) +- [Sebastian Wiesner](https://github.com/lunaryorn) + +[1]: https://www.python.org/dev/peps/pep-0370/ +[2]: https://www.doughellmann.com/projects/virtualenvwrapper/ +[3]: https://pypi.org/project/virtualenv/ +[4]: https://github.com/yyuu/pyenv +[5]: https://github.com/sorin-ionescu/prezto/issues +[6]: ../../runcoms#zshenv diff --git a/config/zsh/.zprezto/modules/python/functions/python-info b/config/zsh/.zprezto/modules/python/functions/python-info new file mode 100644 index 0000000..144a5b6 --- /dev/null +++ b/config/zsh/.zprezto/modules/python/functions/python-info @@ -0,0 +1,53 @@ +# +# Exposes information about the Python environment via the $python_info +# associative array. +# +# Authors: +# Sorin Ionescu +# Patrick Bos +# + +# function python-info { + +local virtualenv_format +local virtualenv_formatted +local version_format +local version_formatted +local version + +# Clean up previous $python_info. +unset python_info +typeset -gA python_info + +# Grab the styling we might have to do +zstyle -s ':prezto:module:python:info:virtualenv' format 'virtualenv_format' +zstyle -s ':prezto:module:python:info:version' format 'version_format' + +# Format virtualenv. +if [[ -n "$virtualenv_format" ]]; then + if [[ -n "$VIRTUAL_ENV" ]]; then + zformat -f virtualenv_formatted "$virtualenv_format" "v:${VIRTUAL_ENV:t}" + python_info[virtualenv]="$virtualenv_formatted" + fi + + # Do the same for Conda virtual environments + if [[ -n "$CONDA_DEFAULT_ENV" ]]; then + zformat -f virtualenv_formatted "$virtualenv_format" "v:${CONDA_DEFAULT_ENV:t}" + python_info[virtualenv]="$virtualenv_formatted" + fi +fi + +if [[ -n "$version_format" ]]; then + if (( $+commands[pyenv] )); then + version="${"$(pyenv version)"%% *}" + elif (( $+commands[python] )); then + version="${$(python3 --version)#Python }" + fi + + if [[ -n "$version" && "$version" != "system" ]]; then + zformat -f version_formatted "$version_format" "v:$version" + python_info[version]="$version_formatted" + fi +fi + +# } diff --git a/config/zsh/.zprezto/modules/python/init.zsh b/config/zsh/.zprezto/modules/python/init.zsh new file mode 100644 index 0000000..c303cad --- /dev/null +++ b/config/zsh/.zprezto/modules/python/init.zsh @@ -0,0 +1,173 @@ +# +# Enables local Python package installation. +# +# Authors: +# Sorin Ionescu +# Sebastian Wiesner +# Patrick Bos +# Indrajit Raychaudhuri +# + +# +# Options +# + +setopt EXTENDED_GLOB + +# Load dependencies. +pmodload 'helper' + +# Load manually installed or package manager installed pyenv into the shell +# session. +if [[ -s "${local_pyenv::=${PYENV_ROOT:-$HOME/.pyenv}/bin/pyenv}" ]] \ + || (( $+commands[pyenv] )); then + + # Ensure manually installed pyenv is added to path when present. + [[ -s $local_pyenv ]] && path=($local_pyenv:h $path) + + # Load pyenv into the shell session. + eval "$(pyenv init - zsh)" + +# Prepend PEP 370 per user site packages directory, which defaults to +# ~/Library/Python on macOS and ~/.local elsewhere, to PATH. The +# path can be overridden using PYTHONUSERBASE. +else + if [[ -n "$PYTHONUSERBASE" ]]; then + path=($PYTHONUSERBASE/bin(N) $path) + elif is-darwin; then + path=($HOME/Library/Python/*/bin(N) $path) + else + # This is subject to change. + path=($HOME/.local/bin(N) $path) + fi +fi + +unset local_pyenv + +# Return if requirements are not found. +if (( ! $+commands[(i)python[0-9.]#] && ! $+functions[pyenv] && ! $+commands[conda] )); then + return 1 +fi + +function _python-workon-cwd { + # Check if this is a Git repo. + local GIT_REPO_ROOT="$(git rev-parse --show-toplevel 2> /dev/null)" + # Get absolute path, resolving symlinks. + local PROJECT_ROOT="$PWD:A" + while [[ "$PROJECT_ROOT" != "/" && ! -e "$PROJECT_ROOT/.venv" \ + && ! -d "$PROJECT_ROOT/.git" && "$PROJECT_ROOT" != "$GIT_REPO_ROOT" ]]; do + PROJECT_ROOT="$PROJECT_ROOT:h" + done + if [[ $PROJECT_ROOT == "/" ]]; then + PROJECT_ROOT="." + fi + # Check for virtualenv name override. + local ENV_NAME="" + if [[ -f "$PROJECT_ROOT/.venv" ]]; then + ENV_NAME="$(<$PROJECT_ROOT/.venv)" + elif [[ -f "$PROJECT_ROOT/.venv/bin/activate" ]]; then + ENV_NAME="$PROJECT_ROOT/.venv" + elif [[ $PROJECT_ROOT != "." ]]; then + ENV_NAME="$PROJECT_ROOT:t" + fi + if [[ -n $CD_VIRTUAL_ENV && "$ENV_NAME" != "$CD_VIRTUAL_ENV" ]]; then + # We've just left the repo, deactivate the environment. + # Note: this only happens if the virtualenv was activated automatically. + deactivate && unset CD_VIRTUAL_ENV + fi + if [[ $ENV_NAME != "" ]]; then + # Activate the environment only if it is not already active. + if [[ "$VIRTUAL_ENV" != "$WORKON_HOME/$ENV_NAME" ]]; then + if [[ -n "$WORKON_HOME" && -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]]; then + workon "$ENV_NAME" && export CD_VIRTUAL_ENV="$ENV_NAME" + elif [[ -e "$ENV_NAME/bin/activate" ]]; then + source $ENV_NAME/bin/activate && export CD_VIRTUAL_ENV="$ENV_NAME" + fi + fi + fi +} + +# Load auto workon cwd hook. +if zstyle -t ':prezto:module:python:virtualenv' auto-switch; then + # Auto workon when changing directory. + autoload -Uz add-zsh-hook + add-zsh-hook chpwd _python-workon-cwd +fi + +# Load virtualenvwrapper into the shell session, if pre-requisites are met +# and unless explicitly requested not to +if (( $+VIRTUALENVWRAPPER_VIRTUALENV || $+commands[virtualenv] )) \ + && zstyle -T ':prezto:module:python:virtualenv' initialize ; then + # Set the directory where virtual environments are stored. + export WORKON_HOME="${WORKON_HOME:-$HOME/.virtualenvs}" + + # Disable the virtualenv prompt. Note that we use the magic value used by the + # pure prompt because there's some additional logic in that prompt which tries + # to figure out if a user set this variable and disable the python portion of + # that prompt based on it which is the exact opposite of what we want to do. + export VIRTUAL_ENV_DISABLE_PROMPT=12 + + # Create a sorted array of available virtualenv related 'pyenv' commands to + # look for plugins of interest. Scanning shell '$path' isn't enough as they + # can exist in 'pyenv' synthesized paths (e.g., '~/.pyenv/plugins') instead. + local -a pyenv_plugins + local pyenv_virtualenvwrapper_plugin_found + if (( $+commands[pyenv] )); then + pyenv_plugins=(${(@oM)${(f)"$(pyenv commands --no-sh 2> /dev/null)"}:#virtualenv*}) + + # Optionally activate 'virtualenv-init' plugin when available. + if (( $pyenv_plugins[(i)virtualenv-init] <= $#pyenv_plugins )); then + eval "$(pyenv virtualenv-init - zsh)" + fi + + # Optionally activate 'virtualenvwrapper' plugin when available. + if (( $pyenv_plugins[(i)virtualenvwrapper(_lazy|)] <= $#pyenv_plugins )); then + pyenv "$pyenv_plugins[(R)virtualenvwrapper(_lazy|)]" + pyenv_virtualenvwrapper_plugin_found="true" + fi + + unset pyenv_plugins + fi + + if [[ $pyenv_virtualenvwrapper_plugin_found != "true" ]]; then + # Fallback to standard 'virtualenvwrapper' if 'python' is available in '$path'. + if (( ! $+VIRTUALENVWRAPPER_PYTHON )) && (( $+commands[(i)python[0-9.]#] )); then + VIRTUALENVWRAPPER_PYTHON=$commands[(i)python[0-9.]#] + fi + + virtualenvwrapper_sources=( + ${(@Ov)commands[(I)virtualenvwrapper(_lazy|).sh]} + /usr/share/virtualenvwrapper/virtualenvwrapper(_lazy|).sh(OnN) + ) + if (( $#virtualenvwrapper_sources )); then + source "$virtualenvwrapper_sources[1]" + fi + + unset virtualenvwrapper_sources + fi + + unset pyenv_virtualenvwrapper_plugin_found +fi + +# Load conda into the shell session, if requested. +zstyle -T ':prezto:module:python' conda-init +if (( $? && $+commands[conda] )); then + if (( $(conda ..changeps1) )); then + echo "To make sure Conda doesn't change your prompt (should do that in the prompt module) run:\n conda config --set changeps1 false" + # TODO: + # We could just run this ourselves. In an exit hook + # (add zsh-hook zshexit [(anonymous) function]) we could then set it back + # to the way it was before we changed it. However, I'm not sure if this is + # exception safe, so left it like this for now. + fi +fi + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:python:alias' skip; then + alias py='python' + alias py2='python2' + alias py3='python3' +fi diff --git a/config/zsh/.zprezto/modules/rails/README.md b/config/zsh/.zprezto/modules/rails/README.md new file mode 100644 index 0000000..5e230e0 --- /dev/null +++ b/config/zsh/.zprezto/modules/rails/README.md @@ -0,0 +1,38 @@ +# Ruby on Rails + +Defines [Ruby on Rails][1] aliases. + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:rails:alias' skip 'yes' +``` + +- `ror` is short for `rails`. +- `rorc` starts the Rails console. +- `rordc` starts the Rails console connected to the database. +- `rordm` migrates the database. +- `rordM` migrates the database and recreates the test database. +- `rordr` rolls the database schema back to the previous version. +- `rorg` generates new code. +- `rorl` displays the log. +- `rorlc` truncates logs to zero bytes. +- `rorp` installs a plugin. +- `rorr` runs code in the application environment. +- `rors` starts the Rails server. +- `rorsd` starts the Rails server with the debugger. +- `rorx` destroys newly generated code. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][2]._ + +- [Robby Russell](https://github.com/robbyrussell) +- [Jake Bell](https://github.com/theunraveler) +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://rubyonrails.org +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/rails/init.zsh b/config/zsh/.zprezto/modules/rails/init.zsh new file mode 100644 index 0000000..ed86372 --- /dev/null +++ b/config/zsh/.zprezto/modules/rails/init.zsh @@ -0,0 +1,37 @@ +# +# Defines Ruby on Rails aliases. +# +# Authors: +# Robby Russell +# Jake Bell +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'ruby' + +# Return if requirements are not found. +if (( ! $+commands[bundle] )); then + return 1 +fi + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:rails:alias' skip; then + alias ror='bundle exec rails' + alias rorc='bundle exec rails console' + alias rordc='bundle exec rails dbconsole' + alias rordm='bundle exec rake db:migrate' + alias rordM='bundle exec rake db:migrate db:test:clone' + alias rordr='bundle exec rake db:rollback' + alias rorg='bundle exec rails generate' + alias rorl='tail -f "$(ruby-app-root)/log/development.log"' + alias rorlc='bundle exec rake log:clear' + alias rorp='bundle exec rails plugin' + alias rorr='bundle exec rails runner' + alias rors='bundle exec rails server' + alias rorsd='bundle exec rails server --debugger' + alias rorx='bundle exec rails destroy' +fi diff --git a/config/zsh/.zprezto/modules/rsync/README.md b/config/zsh/.zprezto/modules/rsync/README.md new file mode 100644 index 0000000..ca0627f --- /dev/null +++ b/config/zsh/.zprezto/modules/rsync/README.md @@ -0,0 +1,26 @@ +# Rsync + +Defines [rsync][1] aliases. + +macOS users are encouraged to use _rsync_ from [Homebrew][2] or [MacPorts][3], +which has additional enhancements including patches from [Bombich][4]. + +## Aliases + +- `rsync-copy` copies files and directories from _source_ to _destination_. +- `rsync-move` moves files and directories from _source_ to _destination_. +- `rsync-update` updates files and directories on _destination_. +- `rsync-synchronize` synchronizes files and directories between _source_ and + _destination_. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][5]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://rsync.samba.org +[2]: https://github.com/Homebrew/homebrew-core +[3]: https://ports.macports.org/port/rsync +[4]: https://bombich.com/kb/ccc5/credits#rsync +[5]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/rsync/init.zsh b/config/zsh/.zprezto/modules/rsync/init.zsh new file mode 100644 index 0000000..47eabfe --- /dev/null +++ b/config/zsh/.zprezto/modules/rsync/init.zsh @@ -0,0 +1,43 @@ +# +# Defines Rsync aliases. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[rsync] )); then + return 1 +fi + +# Load dependencies. +pmodload 'helper' + +# +# Aliases +# + +_rsync_cmd='rsync --verbose --progress --human-readable --compress --archive \ + --hard-links --one-file-system' + +autoload -Uz is-at-least +if is-at-least 3.1 ${"$(rsync --version 2>&1)"[(w)3]}; then + + # ACL and extended attributes support + if grep -q 'xattrs' <(rsync --help 2>&1); then + _rsync_cmd="${_rsync_cmd} --acls --xattrs" + fi + + # macOS Enhancements + # https://bombich.com/kb/ccc5/credits + if is-darwin && grep -q 'file-flags' <(rsync --help 2>&1); then + _rsync_cmd="${_rsync_cmd} --crtimes --fileflags --force-change" + fi +fi + +alias rsync-copy="${_rsync_cmd}" +alias rsync-move="${_rsync_cmd} --remove-source-files" +alias rsync-update="${_rsync_cmd} --update" +alias rsync-synchronize="${_rsync_cmd} --update --delete" + +unset _rsync_cmd diff --git a/config/zsh/.zprezto/modules/ruby/README.md b/config/zsh/.zprezto/modules/ruby/README.md new file mode 100644 index 0000000..fa3d106 --- /dev/null +++ b/config/zsh/.zprezto/modules/ruby/README.md @@ -0,0 +1,113 @@ +# Ruby + +Configures [Ruby][1] local gem installation, loads version managers, and defines +aliases. + +## Local Gem Installation + +When a Ruby version manager is not detected, local gems are installed in +_`~/.gem`_; otherwise, they are installed according to the manager. + +## rbenv + +An alternative RVM is to use [_rbenv_][2], which allows for switching between +multiple, isolated Ruby installations in the home directory. + +While it is not as feature rich as RVM, it is not loaded into the shell and is +not known to cause conflicts with shell scripts. + +This will be loaded automatically if _rbenv_ is installed to `$RBENV_ROOT`, +_`~/.rbenv`_, or if the `rbenv` command is on the path. + +## rvm + +An alternative to the above is to use [The Ruby Version Manager (_rvm_)][3], +which allows for managing multiple, isolated Ruby installations and gem sets in +the home directory. + +Since RVM is loaded into the shell and is known to override shell commands, it +may conflict with shell scripts. + +Load this module as late as possible when using RVM since RVM will complain if +it is not first in `$PATH`. + +## chruby + +Yet another alternative is [_chruby_][4], which is simpler than both _rvm_ and +_rbenv_. + +### Settings + +#### Auto-Switch + +To enable auto switching the Ruby version on directory change based on the +`.ruby-version` file, add the following line to _`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:ruby:chruby' auto-switch 'yes' +``` + +## Bundler + +Manage gems that are not meant to be used as commands, such as application +dependencies, with [Bundler][5]. + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:ruby:alias' skip 'yes' +``` + +### General + +- `rb` is short for `ruby`. + +### Bundler + +- `rbb` manages ruby dependencies (`bundle`). +- `rbbc` cleans up unused gems in your bundler directory. +- `rbbe` executes a script in the context of the current bundle. +- `rbbi` installs the gems specified in the `Gemfile` in `vendor/bundle`. +- `rbbI` installs the following: + - gems specified in the `Gemfile` in `vendor/bundle`. + - packages the gems into `vendor/cache`. + - appends bundler directories to `.gitignore`. +- `rbbl` lists all gems in the current bundle. +- `rbbo` opens an installed gem in the editor. +- `rbbp` packages gem files into `vendor/cache`. +- `rbbu` updates gems to their latest version. + +## Functions + +- `ruby-app-root` displays the path to the Ruby application root directory. +- `ruby-info` exposes information about the Ruby environment via the + `$ruby_info` associative array. + +## Theming + +To display the name of the current Ruby version in a prompt, define the +following style in the `prompt_name_setup` function. + +```sh +# %v - ruby version. +zstyle ':prezto:module:ruby:info:version' format 'version:%v' +``` + +Then add `$ruby_info[version]` to `$PROMPT` or `$RPROMPT` and call +`ruby-info` in the `prompt_name_preexec` hook function. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][6]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://www.ruby-lang.org +[2]: https://github.com/rbenv/rbenv +[3]: https://rvm.io +[4]: https://github.com/postmodern/chruby +[5]: https://gembundler.com +[6]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/ruby/functions/ruby-app-root b/config/zsh/.zprezto/modules/ruby/functions/ruby-app-root new file mode 100644 index 0000000..ef28c5b --- /dev/null +++ b/config/zsh/.zprezto/modules/ruby/functions/ruby-app-root @@ -0,0 +1,22 @@ +# +# Displays the path to the Ruby application root directory. +# +# Authors: +# Sorin Ionescu +# + +# function ruby-app-root { + +local root_dir="$PWD" + +while [[ "$root_dir" != '/' ]]; do + if [[ -f "$root_dir/Gemfile" ]]; then + print "$root_dir" + break + fi + root_dir="$root_dir:h" +done + +return 1 + +# } diff --git a/config/zsh/.zprezto/modules/ruby/functions/ruby-info b/config/zsh/.zprezto/modules/ruby/functions/ruby-info new file mode 100644 index 0000000..cba0188 --- /dev/null +++ b/config/zsh/.zprezto/modules/ruby/functions/ruby-info @@ -0,0 +1,38 @@ +# +# Exposes information about the Ruby environment via the $ruby_info associative +# array. +# +# Authors: +# Sorin Ionescu +# + +# function ruby-info { + +local version +local version_format +local version_formatted + +# Clean up previous $ruby_info. +unset ruby_info +typeset -gA ruby_info + +# Grab formatting for anything we might have to do +zstyle -s ':prezto:module:ruby:info:version' format 'version_format' + +if [[ -n "$version_format" ]]; then + if (( $+commands[rvm-prompt] )); then + version="$(rvm-prompt)" + elif (( $+commands[rbenv] )); then + version="$(rbenv version-name)" + elif (( $+commands[ruby] )); then + version="${${$(ruby --version)[(w)1,(w)2]}/ /-}" + fi + + # Format version. + if [[ -n "$version" && "$version" != "system" ]]; then + zformat -f version_formatted "$version_format" "v:$version" + ruby_info[version]="$version_formatted" + fi +fi + +# } diff --git a/config/zsh/.zprezto/modules/ruby/init.zsh b/config/zsh/.zprezto/modules/ruby/init.zsh new file mode 100644 index 0000000..86ab43c --- /dev/null +++ b/config/zsh/.zprezto/modules/ruby/init.zsh @@ -0,0 +1,83 @@ +# +# Configures Ruby local installation, loads version managers, and defines +# aliases. +# +# Authors: +# Sorin Ionescu +# Indrajit Raychaudhuri +# + +# Possible lookup locations for manually installed rbenv and rvm. +local_rbenv_paths=({$RBENV_ROOT,{$XDG_CONFIG_HOME/,$HOME/.}rbenv}/bin/rbenv(N)) +local_rvm_paths=({$RVM_DIR,{$XDG_CONFIG_HOME/,$HOME/.}rvm}/scripts/rvm(N)) + +# Load manually installed or package manager installed rbenv into the shell +# session. +if (( $#local_rbenv_paths || $+commands[rbenv] )); then + + # Ensure manually installed rbenv is added to path when present. + [[ -s $local_rbenv_paths[1] ]] && path=($local_rbenv_paths[1]:h $path) + + eval "$(rbenv init - zsh)" + +# Load manually installed rvm into the shell session. +elif (( $#local_rvm_paths )); then + # Unset AUTO_NAME_DIRS since auto adding variable-stored paths to ~ list + # conflicts with rvm. + unsetopt AUTO_NAME_DIRS + + source "$local_rvm_paths[1]" + +# Load package manager installed chruby into the shell session. +elif (( $+commands[chruby-exec] )); then + if (( ! $+functions[chruby] )); then + source "${commands[chruby-exec]:h:h}/share/chruby/chruby.sh" + fi + + if zstyle -t ':prezto:module:ruby:chruby' auto-switch; then + if (( ! $+functions[chruby_auto] )); then + source "${commands[chruby-exec]:h:h}/share/chruby/auto.sh" + fi + + # If a default ruby is set, switch to it. + chruby_auto + fi + +# Prepend local gems bin directories to PATH. +else + path=($HOME/.gem/ruby/*/bin(N) $path) +fi + +unset local_rbenv + +# Return if requirements are not found. +if (( ! $+commands[ruby] && ! $#functions[(i)r(benv|vm)] )); then + return 1 +fi + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:ruby:alias' skip; then + # General + alias rb='ruby' + + # Bundler + if (( $+commands[bundle] )); then + alias rbb='bundle' + alias rbbc='bundle clean' + alias rbbe='bundle exec' + alias rbbi='bundle install --path vendor/bundle' + alias rbbl='bundle list' + alias rbbo='bundle open' + alias rbbp='bundle package' + alias rbbu='bundle update' + alias rbbI='rbbi \ + && bundle package \ + && print .bundle >>! .gitignore \ + && print vendor/assets >>! .gitignore \ + && print vendor/bundle >>! .gitignore \ + && print vendor/cache >>! .gitignore' + fi +fi diff --git a/config/zsh/.zprezto/modules/screen/README.md b/config/zsh/.zprezto/modules/screen/README.md new file mode 100644 index 0000000..b554951 --- /dev/null +++ b/config/zsh/.zprezto/modules/screen/README.md @@ -0,0 +1,47 @@ +# GNU Screen + +Defines [GNU Screen][1] aliases and provides for auto launching it at start-up. + +## Settings + +### Auto-Start + +Starts a GNU Screen session automatically when Zsh is launched. + +To enable this feature when launching Zsh in a local terminal, add the following +line to _`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:screen:auto-start' local 'yes' +``` + +To enable this feature when launching Zsh in a SSH connection, add the following +line to _`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:screen:auto-start' remote 'yes' +``` + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:screen:alias' skip 'yes' +``` + +- `scr` is short for `screen`. +- `scrl` lists sessions/socket directory. +- `scrn` starts a new session. +- `scrr` attaches to a session if one exists or start a new one. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][2]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) +- [Georges Discry](https://github.com/gdiscry) + +[1]: https://www.gnu.org/software/screen/ +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/screen/init.zsh b/config/zsh/.zprezto/modules/screen/init.zsh new file mode 100644 index 0000000..1a3908d --- /dev/null +++ b/config/zsh/.zprezto/modules/screen/init.zsh @@ -0,0 +1,44 @@ +# +# Defines GNU Screen aliases and provides for auto launching it at start-up. +# +# Authors: +# Sorin Ionescu +# Georges Discry +# + +# Return if requirements are not found. +if (( ! $+commands[screen] )); then + return 1 +fi + +# +# Auto Start +# + +if [[ -z "$STY" && -z "$EMACS" && -z "$VIM" ]] && ( \ + ( [[ -n "$SSH_TTY" ]] && zstyle -t ':prezto:module:screen:auto-start' remote ) || + ( [[ -z "$SSH_TTY" ]] && zstyle -t ':prezto:module:screen:auto-start' local ) \ +); then + session="$( + screen -list 2> /dev/null \ + | sed '1d;$d' \ + | awk '!/Dead/ {print $1}' \ + | head -1)" + + if [[ -n "$session" ]]; then + exec screen -x "$session" + else + exec screen -a -A -U -D -R -m "$SHELL" -l + fi +fi + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:screen:alias' skip; then + alias scr='screen' + alias scrl='screen -list' + alias scrn='screen -U -S' + alias scrr='screen -a -A -U -D -R' +fi diff --git a/config/zsh/.zprezto/modules/spectrum/README.md b/config/zsh/.zprezto/modules/spectrum/README.md new file mode 100644 index 0000000..de393a7 --- /dev/null +++ b/config/zsh/.zprezto/modules/spectrum/README.md @@ -0,0 +1,88 @@ +# Spectrum + +Provides for easier use of 256 colors and effects. + +To learn more about text formatting, read [A Guide to 256 Color Codes][1]. + +## Variables + +- `BG` provides background colors. +- `FG` provides foreground colors. +- `FX` provides effects. + +### Background and Foreground + +Terminals support 8, 16, 88, and 256 colors. Check if a terminal supports 256 +colors with `tput colors` before use. + +The following colors are supported. + +- 0 to 255 +- black +- red +- green +- yellow +- blue +- magenta +- cyan +- white + +### Effects + +Though there are many effects, most terminals support at least bold formatting. + +**Not all effects work on all terminals; use them sparingly.** + +| Enable | Disable | +| ------------------------- | ---------------------------- | +| | none | +| | normal | +| bold | no-bold | +| faint | no-faint | +| standout | no-standout | +| underline | no-underline | +| blink | no-blink | +| fast-blink | no-fast-blink | +| reverse | no-reverse | +| conceal | no-conceal | +| strikethrough | no-strikethrough | +| gothic | no-gothic | +| double-underline | no-double-underline | +| proportional | no-proportional | +| overline | no-overline | +| | | +| | no-border | +| border-rectangle | no-border-rectangle | +| border-circle | no-border-circle | +| | | +| | no-ideogram-marking | +| underline-or-right | no-underline-or-right | +| double-underline-or-right | no-double-underline-or-right | +| overline-or-left | no-overline-or-left | +| double-overline-or-left | no-double-overline-or-left | +| stress | no-stress | +| | | +| | font-default | +| font-first | no-font-first | +| font-second | no-font-second | +| font-third | no-font-third | +| font-fourth | no-font-fourth | +| font-fifth | no-font-fifth | +| font-sixth | no-font-sixth | +| font-seventh | no-font-seventh | +| font-eighth | no-font-eighth | +| font-ninth | no-font-ninth | + +### Plain Text + +Use `$BG[none]`, `$FG[none]`, or `$FX[none]` to turn off formatting. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][2]._ + +- [P.C. Shyamshankar](https://github.com/sykora) +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://lucentbeing.com/writing/archives/a-guide-to-256-color-codes/ +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/spectrum/init.zsh b/config/zsh/.zprezto/modules/spectrum/init.zsh new file mode 100644 index 0000000..be8c9fc --- /dev/null +++ b/config/zsh/.zprezto/modules/spectrum/init.zsh @@ -0,0 +1,73 @@ +# +# Provides for easier use of 256 colors and effects. +# +# Authors: +# P.C. Shyamshankar +# Sorin Ionescu +# + +# Return if requirements are not found. +if [[ $TERM == dumb ]]; then + return 1 +fi + +typeset -gA FX FG BG + +FX=( + none "\e[00m" + normal "\e[22m" + bold "\e[01m" no-bold "\e[22m" + faint "\e[02m" no-faint "\e[22m" + standout "\e[03m" no-standout "\e[23m" + underline "\e[04m" no-underline "\e[24m" + blink "\e[05m" no-blink "\e[25m" + fast-blink "\e[06m" no-fast-blink "\e[25m" + reverse "\e[07m" no-reverse "\e[27m" + conceal "\e[08m" no-conceal "\e[28m" + strikethrough "\e[09m" no-strikethrough "\e[29m" + gothic "\e[20m" no-gothic "\e[22m" + double-underline "\e[21m" no-double-underline "\e[22m" + proportional "\e[26m" no-proportional "\e[50m" + overline "\e[53m" no-overline "\e[55m" + + no-border "\e[54m" + border-rectangle "\e[51m" no-border-rectangle "\e[54m" + border-circle "\e[52m" no-border-circle "\e[54m" + + no-ideogram-marking "\e[65m" + underline-or-right "\e[60m" no-underline-or-right "\e[65m" + double-underline-or-right "\e[61m" no-double-underline-or-right "\e[65m" + overline-or-left "\e[62m" no-overline-or-left "\e[65m" + double-overline-or-left "\e[63m" no-double-overline-or-left "\e[65m" + stress "\e[64m" no-stress "\e[65m" + + font-default "\e[10m" + font-first "\e[11m" no-font-first "\e[10m" + font-second "\e[12m" no-font-second "\e[10m" + font-third "\e[13m" no-font-third "\e[10m" + font-fourth "\e[14m" no-font-fourth "\e[10m" + font-fifth "\e[15m" no-font-fifth "\e[10m" + font-sixth "\e[16m" no-font-sixth "\e[10m" + font-seventh "\e[17m" no-font-seventh "\e[10m" + font-eighth "\e[18m" no-font-eighth "\e[10m" + font-ninth "\e[19m" no-font-ninth "\e[10m" +) + +FG[none]="$FX[none]" +BG[none]="$FX[none]" +colors=(black red green yellow blue magenta cyan white) + +# Named ANSI colors (0–7) have both numeric and name keys. +for color in {0..7}; do + FG[$colors[color+1]]="\e[38;5;${color}m" + BG[$colors[color+1]]="\e[48;5;${color}m" + FG[$color]="\e[38;5;${color}m" + BG[$color]="\e[48;5;${color}m" +done + +# Remaining 256-color indices have only numeric keys. +for color in {8..255}; do + FG[$color]="\e[38;5;${color}m" + BG[$color]="\e[48;5;${color}m" +done +unset color{s,} diff --git a/config/zsh/.zprezto/modules/ssh/README.md b/config/zsh/.zprezto/modules/ssh/README.md new file mode 100644 index 0000000..5b81409 --- /dev/null +++ b/config/zsh/.zprezto/modules/ssh/README.md @@ -0,0 +1,24 @@ +# SSH + +Provides for an easier use of [SSH][1] by setting up [_ssh-agent_][2]. + +## Settings + +### Identities + +To load multiple identities, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:ssh:load' identities 'id_rsa' 'id_dsa' 'id_github' +``` + +## Authors + +_The authors of this module should be contacted via the [issue tracker][3]._ + +[Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://www.openssh.com +[2]: https://www.openbsd.org/cgi-bin/man.cgi?query=ssh-agent&sektion=1 +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/ssh/init.zsh b/config/zsh/.zprezto/modules/ssh/init.zsh new file mode 100644 index 0000000..d6de5fe --- /dev/null +++ b/config/zsh/.zprezto/modules/ssh/init.zsh @@ -0,0 +1,63 @@ +# +# Provides for an easier use of SSH by setting up ssh-agent. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[ssh-agent] )); then + return 1 +fi + +# Set the path to the SSH directory. +_ssh_dir="$HOME/.ssh" + +# Set the path to the environment file if not set by another module. +_ssh_agent_env="${_ssh_agent_env:-${XDG_CACHE_HOME:-$HOME/.cache}/prezto/ssh-agent.env}" + +# Set the path to the persistent authentication socket if not set by another module. +_ssh_agent_sock="${_ssh_agent_sock:-${XDG_CACHE_HOME:-$HOME/.cache}/prezto/ssh-agent.sock}" + +# Start ssh-agent if not started. +if [[ ! -S "$SSH_AUTH_SOCK" ]]; then + # Export environment variables. + source "$_ssh_agent_env" 2> /dev/null + + # Start ssh-agent if not started. + if ! ps -U "$LOGNAME" -o pid,ucomm | grep -q -- "${SSH_AGENT_PID:--1} ssh-agent"; then + mkdir -p "$_ssh_agent_env:h" + eval "$(print -l "${(@)${(f)"$(ssh-agent)"}:#echo *}" | tee "$_ssh_agent_env")" + fi +fi + +# Create a persistent SSH authentication socket. +if [[ -S "$SSH_AUTH_SOCK" && "$SSH_AUTH_SOCK" != "$_ssh_agent_sock" ]]; then + mkdir -p "$_ssh_agent_sock:h" + ln -sf "$SSH_AUTH_SOCK" "$_ssh_agent_sock.$$" + mv -f "$_ssh_agent_sock.$$" "$_ssh_agent_sock" + export SSH_AUTH_SOCK="$_ssh_agent_sock" +fi + +# Load identities. +if [[ ${(@M)${(f)"$(ssh-add -l 2>&1)"}:#The agent has no identities*} ]]; then + zstyle -a ':prezto:module:ssh:load' identities '_ssh_identities' + # ssh-add has strange requirements for running SSH_ASKPASS, so we duplicate + # them here. Essentially, if the other requirements are met, we redirect stdin + # from /dev/null in order to meet the final requirement. + # + # From ssh-add(1): + # If ssh-add needs a passphrase, it will read the passphrase from the current + # terminal if it was run from a terminal. If ssh-add does not have a terminal + # associated with it but DISPLAY and SSH_ASKPASS are set, it will execute the + # program specified by SSH_ASKPASS and open an X11 window to read the + # passphrase. + if [[ -n "$DISPLAY" && -x "$SSH_ASKPASS" ]]; then + ssh-add ${_ssh_identities:+$_ssh_dir/${^~_ssh_identities[@]}} < /dev/null 2> /dev/null + else + ssh-add ${_ssh_identities:+$_ssh_dir/${^~_ssh_identities[@]}} 2> /dev/null + fi +fi + +# Clean up. +unset _ssh_{dir,identities} _ssh_agent_{env,sock} diff --git a/config/zsh/.zprezto/modules/syntax-highlighting/README.md b/config/zsh/.zprezto/modules/syntax-highlighting/README.md new file mode 100644 index 0000000..3debb67 --- /dev/null +++ b/config/zsh/.zprezto/modules/syntax-highlighting/README.md @@ -0,0 +1,78 @@ +# Syntax Highlighting + +Integrates [zsh-syntax-highlighting][1] into Prezto. + +This module must be loaded _before_ the _`prompt`_ module. + +If this module is used in conjunction with the [_`history-substring-search`_][2] +module, this module must be loaded _before_ the _`history-substring-search`_ +module. + +Additionally, if this module is used in conjunction with the +[_`autosuggestions`_][3] module, this module must be loaded _before_ the +_`autosuggestions`_ module as well. + +To elaborate, the relative order of loading the modules would be +_`syntax-highlighting`_, _`history-substring-search`_, _`autosuggestions`_ and +_`prompt`_. + +## Contributors + +New features and bug fixes should be submitted to the +[zsh-syntax-highlighting][1] project according to its rules and regulations. +This module will be synchronized against it. + +## Settings + +### Highlighting + +To enable highlighting for this module only, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:syntax-highlighting' color 'yes' +``` + +### Highlighters + +Syntax highlighting is accomplished by pluggable [highlighters][4]. This module +only enables the _main_ highlighter by default. + +To enable all highlighters, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:syntax-highlighting' highlighters \ + 'main' \ + 'brackets' \ + 'pattern' \ + 'line' \ + 'cursor' \ + 'root' +``` + +### Highlighting Styles + +Each syntax highlighter defines styles used to highlight tokens. + +To highlight, for example, builtins, commands, and functions in blue instead of +green, add the following to _`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:syntax-highlighting' styles \ + 'builtin' 'bg=blue' \ + 'command' 'bg=blue' \ + 'function' 'bg=blue' +``` + +## Authors + +_The authors of this module should be contacted via the [issue tracker][5]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: https://github.com/zsh-users/zsh-syntax-highlighting +[2]: ../history-substring-search#readme +[3]: ../autosuggestions#readme +[4]: https://github.com/zsh-users/zsh-syntax-highlighting/tree/master/highlighters +[5]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/syntax-highlighting/init.zsh b/config/zsh/.zprezto/modules/syntax-highlighting/init.zsh new file mode 100644 index 0000000..52cc0c3 --- /dev/null +++ b/config/zsh/.zprezto/modules/syntax-highlighting/init.zsh @@ -0,0 +1,36 @@ +# +# Integrates zsh-syntax-highlighting into Prezto. +# +# Authors: +# Sorin Ionescu +# + +# Return if requirements are not found. +if ! zstyle -t ':prezto:module:syntax-highlighting' color; then + return 1 +fi + +# Source module files. +source "${0:h}/external/zsh-syntax-highlighting.zsh" || return 1 + +# Set highlighters. +zstyle -a ':prezto:module:syntax-highlighting' highlighters 'ZSH_HIGHLIGHT_HIGHLIGHTERS' +if (( ${#ZSH_HIGHLIGHT_HIGHLIGHTERS[@]} == 0 )); then + ZSH_HIGHLIGHT_HIGHLIGHTERS=(main) +fi + +# Set highlighting styles. +typeset -A syntax_highlighting_styles +zstyle -a ':prezto:module:syntax-highlighting' styles 'syntax_highlighting_styles' +for syntax_highlighting_style in "${(k)syntax_highlighting_styles[@]}"; do + ZSH_HIGHLIGHT_STYLES[$syntax_highlighting_style]="$syntax_highlighting_styles[$syntax_highlighting_style]" +done +unset syntax_highlighting_style{s,} + +# Set pattern highlighting styles. +typeset -A syntax_pattern_styles +zstyle -a ':prezto:module:syntax-highlighting' pattern 'syntax_pattern_styles' +for syntax_pattern_style in "${(k)syntax_pattern_styles[@]}"; do + ZSH_HIGHLIGHT_PATTERNS[$syntax_pattern_style]="$syntax_pattern_styles[$syntax_pattern_style]" +done +unset syntax_pattern_style{s,} diff --git a/config/zsh/.zprezto/modules/terminal/README.md b/config/zsh/.zprezto/modules/terminal/README.md new file mode 100644 index 0000000..be4e3a1 --- /dev/null +++ b/config/zsh/.zprezto/modules/terminal/README.md @@ -0,0 +1,54 @@ +# Terminal + +Sets terminal window and tab titles. + +## Settings + +### Auto-Title + +To auto set the terminal window and tab titles with the current command or +directory, add the following to _`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:terminal' auto-title 'yes' +``` + +Auto titling is disabled inside terminal multiplexers (except inside dvtm) since +it interferes with window names defined in configuration files and profile +managers. This can be overridden by setting it to `always`. + +```sh +zstyle ':prezto:module:terminal' auto-title 'always' +``` + +### Title formats + +To format terminal window and tab titles, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:terminal:window-title' format '%n@%m: %s' +zstyle ':prezto:module:terminal:tab-title' format '%m: %s' +zstyle ':prezto:module:terminal:multiplexer-title' format '%s' +``` + +`%s` will be replaced with the current working directory path or the currently +executing program name. + +For a list of sequences, see [Expansion of Prompt Sequences][1]. + +## Functions + +- `set-tab-title` sets the terminal tab title. +- `set-window-title` sets the terminal window title. +- `set-multiplexer-title` sets the terminal multiplexer title. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][2]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) +- [Olaf Conradi](https://github.com/oohlaf) + +[1]: https://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Expansion-of-Prompt-Sequences +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/terminal/init.zsh b/config/zsh/.zprezto/modules/terminal/init.zsh new file mode 100644 index 0000000..bed0c0d --- /dev/null +++ b/config/zsh/.zprezto/modules/terminal/init.zsh @@ -0,0 +1,129 @@ +# +# Sets terminal window and tab titles. +# +# Authors: +# Sorin Ionescu +# Olaf Conradi +# + +# Return if requirements are not found. +if [[ $TERM == (dumb|linux|*bsd*|eterm*) ]]; then + return 1 +fi + +# Sets the terminal window title. +function set-window-title { + local title_format{,ted} + zstyle -s ':prezto:module:terminal:window-title' format 'title_format' || title_format="%s" + zformat -f title_formatted "$title_format" "s:$argv" + printf '\e]2;%s\a' "${(V%)title_formatted}" +} + +# Sets the terminal tab title. +function set-tab-title { + local title_format{,ted} + zstyle -s ':prezto:module:terminal:tab-title' format 'title_format' || title_format="%s" + zformat -f title_formatted "$title_format" "s:$argv" + printf '\e]1;%s\a' "${(V%)title_formatted}" +} + +# Sets the terminal multiplexer tab title. +function set-multiplexer-title { + local title_format{,ted} + zstyle -s ':prezto:module:terminal:multiplexer-title' format 'title_format' || title_format="%s" + zformat -f title_formatted "$title_format" "s:$argv" + printf '\ek%s\e\\' "${(V%)title_formatted}" +} + +# Sets the tab and window titles with a given command. +function _terminal-set-titles-with-command { + emulate -L zsh + setopt EXTENDED_GLOB + + # Get the command name that is under job control. + if [[ "${2[(w)1]}" == (fg|%*)(\;|) ]]; then + # Get the job name, and, if missing, set it to the default %+. + local job_name="${${2[(wr)%*(\;|)]}:-%+}" + + # Make a local copy for use in the subshell. + local -A jobtexts_from_parent_shell + jobtexts_from_parent_shell=(${(kv)jobtexts}) + + jobs "$job_name" 2> /dev/null > >( + read index discarded + # The index is already surrounded by brackets: [1]. + _terminal-set-titles-with-command "${(e):-\$jobtexts_from_parent_shell$index}" + ) + else + # Set the command name, or in the case of sudo or ssh, the next command. + local cmd="${${2[(wr)^(*=*|sudo|ssh|-*)]}:t}" + local truncated_cmd="${cmd/(#m)?(#c15,)/${MATCH[1,12]}...}" + unset MATCH + + if [[ $TERM == screen* ]]; then + set-multiplexer-title "$truncated_cmd" + fi + set-tab-title "$truncated_cmd" + set-window-title "$cmd" + fi +} + +# Sets the tab and window titles with a given path. +function _terminal-set-titles-with-path { + emulate -L zsh + setopt EXTENDED_GLOB + + local absolute_path="${${1:a}:-$PWD}" + local abbreviated_path="${absolute_path/#$HOME/~}" + local truncated_path="${abbreviated_path/(#m)?(#c15,)/...${MATCH[-12,-1]}}" + unset MATCH + + if [[ $TERM == screen* ]]; then + set-multiplexer-title "$truncated_path" + fi + set-tab-title "$truncated_path" + set-window-title "$abbreviated_path" +} + +# Do not override precmd/preexec; append to the hook array. +autoload -Uz add-zsh-hook + +# Set up the Apple Terminal. +if [[ $TERM_PROGRAM == Apple_Terminal ]] \ + && ( ! [[ -n "$STY" || -n "$TMUX" || -n "$DVTM" ]] ) +then + # Sets the Terminal.app current working directory before the prompt is + # displayed. + function _terminal-set-terminal-app-proxy-icon { + printf '\e]7;%s\a' "file://${HOST}${PWD// /%20}" + } + add-zsh-hook precmd _terminal-set-terminal-app-proxy-icon + + # Unsets the Terminal.app current working directory when a terminal + # multiplexer or remote connection is started since it can no longer be + # updated, and it becomes confusing when the directory displayed in the title + # bar is no longer synchronized with real current working directory. + function _terminal-unset-terminal-app-proxy-icon { + if [[ "${2[(w)1]:t}" == (screen|tmux|dvtm|ssh|mosh) ]]; then + print '\e]7;\a' + fi + } + add-zsh-hook preexec _terminal-unset-terminal-app-proxy-icon + + # Do not set the tab and window titles in Terminal.app since it sets the tab + # title to the currently running process by default and the current working + # directory is set separately. + return +fi + +# Set up non-Apple terminals. +if zstyle -t ':prezto:module:terminal' auto-title 'always' \ + || (zstyle -t ':prezto:module:terminal' auto-title \ + && ( ! [[ -n "$STY" || -n "$TMUX" ]] )) +then + # Sets titles before the prompt is displayed. + add-zsh-hook precmd _terminal-set-titles-with-path + + # Sets titles before command execution. + add-zsh-hook preexec _terminal-set-titles-with-command +fi diff --git a/config/zsh/.zprezto/modules/tmux/README.md b/config/zsh/.zprezto/modules/tmux/README.md new file mode 100644 index 0000000..f6d375b --- /dev/null +++ b/config/zsh/.zprezto/modules/tmux/README.md @@ -0,0 +1,95 @@ +# Tmux + +Defines [_tmux_][1] aliases and provides for auto launching it at start-up. + +## Settings + +### Auto-Start + +Starts a tmux session automatically when Zsh is launched. + +To enable this feature when launching Zsh in a local terminal, add the following +line to _`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:tmux:auto-start' local 'yes' +``` + +To enable this feature when launching Zsh in a SSH connection, add the following +line to _`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:tmux:auto-start' remote 'yes' +``` + +In both cases, it will create a background session named _prezto_ if the tmux +server is not started. + +You can change the default session name with: + +```sh +zstyle ':prezto:module:tmux:session' name '' +``` + +With `auto-start` enabled, you may want to control how multiple sessions are +managed. The `destroy-unattached` option of tmux controls if the unattached +sessions must be kept alive, making sessions available for later use, configured +in _tmux.conf_: + +```conf +set-option -g destroy-unattached [on | off] +``` + +#### iTerm2 Integration + +[iTerm2][6] offers significant integration with tmux. This can be enabled by +adding the following line to _`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:tmux:iterm' integrate 'yes' +``` + +Read [iTerm2 and tmux Integration][7] for more information. + +## Aliases + +Aliases are enabled by default. To disable them, add the following to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_. + +```sh +zstyle ':prezto:module:tmux:alias' skip 'yes' +``` + +- `tmuxa` attaches or switches to a tmux session. +- `tmuxl` lists sessions managed by the tmux server. + +## Caveats + +On macOS, launching tmux can cause the error **launch_msg(...): Socket is not +connected** to be displayed, which can be fixed by installing +[reattach-to-user-namespace][3], available in [Homebrew][4], and adding the +following to _tmux.conf_: + +```conf +set-option -g default-command "reattach-to-user-namespace -l $SHELL -l" +``` + +Furthermore, tmux is known to cause **kernel panics** on macOS. A discussion +about this and Prezto has already been [opened][2]. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][5]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) +- [Colin Hebert](https://github.com/ColinHebert) +- [Georges Discry](https://github.com/gdiscry) +- [Xavier Cambar](https://github.com/xcambar) + +[1]: https://tmux.github.io/ +[2]: https://github.com/sorin-ionescu/prezto/issues/62 +[3]: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard +[4]: https://github.com/mxcl/homebrew +[5]: https://github.com/sorin-ionescu/prezto/issues +[6]: https://iterm2.com +[7]: https://gitlab.com/gnachman/iterm2/wikis/TmuxIntegration diff --git a/config/zsh/.zprezto/modules/tmux/init.zsh b/config/zsh/.zprezto/modules/tmux/init.zsh new file mode 100644 index 0000000..6658124 --- /dev/null +++ b/config/zsh/.zprezto/modules/tmux/init.zsh @@ -0,0 +1,51 @@ +# +# Defines tmux aliases and provides for auto launching it at start-up. +# +# Authors: +# Sorin Ionescu +# Colin Hebert +# Georges Discry +# Xavier Cambar +# + +# Return if requirements are not found. +if (( ! $+commands[tmux] )); then + return 1 +fi + +# +# Auto Start +# + +if ([[ "$TERM_PROGRAM" = 'iTerm.app' ]] && \ + zstyle -t ':prezto:module:tmux:iterm' integrate \ +); then + _tmux_iterm_integration='-CC' +fi + +if [[ -z "$TMUX" && -z "$EMACS" && -z "$VIM" && -z "$INSIDE_EMACS" && -z "$VSCODE_RESOLVING_ENVIRONMENT" && "$TERM_PROGRAM" != "vscode" && "$TERMINAL_EMULATOR" != "JetBrains-JediTerm" ]] && ( \ + ( [[ -n "$SSH_TTY" ]] && zstyle -t ':prezto:module:tmux:auto-start' remote ) || + ( [[ -z "$SSH_TTY" ]] && zstyle -t ':prezto:module:tmux:auto-start' local ) \ +); then + tmux start-server + + # Create a 'prezto' session if no session has been defined in tmux.conf. + if ! tmux has-session 2> /dev/null; then + zstyle -s ':prezto:module:tmux:session' name tmux_session || tmux_session='prezto' + tmux \ + new-session -d -s "$tmux_session" \; \ + set-option -t "$tmux_session" destroy-unattached off &> /dev/null + fi + + # Attach to the 'prezto' session or to the last session used. (detach first) + exec tmux $_tmux_iterm_integration attach-session -d +fi + +# +# Aliases +# + +if ! zstyle -t ':prezto:module:tmux:alias' skip; then + alias tmuxa="tmux $_tmux_iterm_integration new-session -A" + alias tmuxl='tmux list-sessions' +fi diff --git a/config/zsh/.zprezto/modules/utility/README.md b/config/zsh/.zprezto/modules/utility/README.md new file mode 100644 index 0000000..78a7555 --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/README.md @@ -0,0 +1,224 @@ +# Utility + +Defines general aliases and functions. + +This module must be loaded _before_ the [_`completion`_][1] module so that the +provided completion definitions are loaded automatically by _`completion`_ +module. + +**Note:** Some of the utilities configured in this module might be provided via +GNU utilities with incompatible arguments on non-GNU systems. In such cases, +using [_`gnu-utility`_][2] module is recommended and it must be loaded +_before_ this module. + +To elaborate, the relative order of loading the modules would be +_`gnu-utility`_, _`utility`_ and _`completion`_. + +## Settings + +### Highlighting + +If you have enabled color globally in _`${ZDOTDIR:-$HOME}/.zpreztorc`_, you may +disable it selectively for certain commands. + +To disable `ls` color, add the following to _`${ZDOTDIR:-$HOME}/.zpreztorc`_. +When coloring is disabled, type indicators (`\*`, `/`, `=>`, `@`, `=`, `|`, `%`) +will be appended to entries. + +```sh +zstyle ':prezto:module:utility:ls' color 'no' +``` + +To disable GNU coreutils `ls` to list directories grouped first, add the +following line to _`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:utility:ls' dirs-first 'no' +``` + +To disable `grep` highlighting, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:utility:grep' color 'no' +``` + +To disable `diff` highlighting, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:utility:diff' color 'no' +``` + +To disable `wdiff` highlighting, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:utility:wdiff' color 'no' +``` + +To disable `make` highlighting, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:utility:make' color 'no' +``` + +### Download Helper + +To configure the download helper to be used with alias `get`, add the following +to _`${ZDOTDIR:-$HOME}/.zpreztorc`_, and replace `''` with `'curl'`, +`'wget'` or `'aria2c'`. + +```sh +zstyle -s ':prezto:module:utility:download' helper '' +``` + +## Aliases + +### Disabled Spelling Correction + +- `ack` +- `cd` +- `cp` +- `ebuild` +- `gcc` +- `gist` +- `grep` +- `heroku` +- `ln` +- `man` +- `mkdir` +- `mv` +- `mysql` +- `rm` + +To disable all spelling corrections, add the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:utility' correct 'no' +``` + +### Disabled File Globbing + +- `bower` +- `fc` +- `find` +- `ftp` +- `history` +- `locate` +- `rake` +- `rsync` (selectively enabled for local files) +- `scp` (selectively enabled for local files) +- `sftp` + +### General + +- `_` executes a command as another user (`sudo`). +- `b` opens the default web browser. +- `diffu` shorthand for `diff --unified`. +- `e` opens the default editor. +- `mkdir` creates directories, including intermediary directories. +- `p` opens the default pager. +- `po` removes a directory from the stack and changes to it (`popd`). +- `pu` changes the directory and pushes the old directory onto the stack + (`pushd`). +- `sa` search aliases for a word. +- `type` displays all the attribute values of a shell parameter. + +### Files and Directories + +- `ls` lists with directories grouped first (GNU only). +- `l` lists in one column, hidden files. +- `ll` lists human readable sizes. +- `lr` lists human readable sizes, recursively. +- `la` lists human readable sizes, hidden files. +- `lm` lists human readable sizes, hidden files through pager. +- `lx` lists sorted by extension (GNU only). +- `lk` lists sorted by size, largest last. +- `lt` lists sorted by date, most recent last. +- `lc` lists sorted by date, most recent last, shows change time. +- `lu` lists sorted by date, most recent last, shows access time. + +### macOS Everywhere + +- `o` opens files and directories (`open` or `xdg-open`). +- `get` downloads files (`curl`, `wget` or `aria2c`). +- `pbcopy` copies to the pasteboard (`pbcopy`, `xclip` or `xsel`). +- `pbpaste` pastes from the pasteboard (`pbcopy`, `xclip` or `xsel`). +- `pbc` copies to the pasteboard (`pbcopy`). +- `pbp` pastes from the pasteboard (`pbpaste`). + +### Resource Usage + +- `df` displays free disk space using human readable units (aliases to `pydf`, + if installed). +- `du` displays disk usage using human readable units. +- `top` displays information about processes. +- `topc` displays information about processes sorted by CPU usage. +- `topm` displays information about processes sorted by RAM usage. + +### Safe ops + +By default, `cp`,`ln`, `mv` and `rm` are aliased to their interactive variants. +If this is not desired, it can be disabled by adding the following line to +_`${ZDOTDIR:-$HOME}/.zpreztorc`_: + +```sh +zstyle ':prezto:module:utility' safe-ops 'no'. +``` + +In addition, the following aliases have been added: + +- `cpi` copies files and directories interactively. +- `lni` links files and directories interactively. +- `mvi` moves files and directories interactively. +- `rmi` removes files and directories interactively. + +### Miscellaneous + +- `http-serve` serves a directory via HTTP. + +## Functions + +### General + +- `slit` prints columns _1, 2, 3 ... n_. + +### Files and Directories + +- `cdls` changes to a directory and lists its contents. +- `dut` displays the grand total disk usage using human readable units. +- `find-exec` finds files and executes a command on them. +- `mkdcd` makes a directory and changes to it. +- `popdls` pops an entry off the directory stack and lists its contents. +- `pushdls` pushes an entry onto the directory stack and lists its contents. +- `noremoteglob` enable local path globbing but disable remote path globbing. + +### Developer + +- `diff` highlights diff output (requires `colordiff`). +- `make` highlights make output (requires `colormake`). +- `wdiff` highlights wdiff output (requires `wdiff` or `git`). + +### Resource usage + +- `psu` displays user owned processes status. + +### Search and Replace + +- `prep` provides a grep-like pattern search. +- `psub` provides a sed-like pattern substitution. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][3]._ + +- [Robby Russell](https://github.com/robbyrussell) +- [Suraj N. Kurapati](https://github.com/sunaku) +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: ../completion#readme +[2]: ../gnu-utility#readme +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/utility/functions/_cdls_popdls_pushdls b/config/zsh/.zprezto/modules/utility/functions/_cdls_popdls_pushdls new file mode 100644 index 0000000..5f0fe60 --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/_cdls_popdls_pushdls @@ -0,0 +1,11 @@ +#compdef cdls popdls pushdls +#autoload + +# +# Completes cdls, popdls, and pushdls. +# +# Authors: +# Sorin Ionescu +# + +_cd diff --git a/config/zsh/.zprezto/modules/utility/functions/_dut b/config/zsh/.zprezto/modules/utility/functions/_dut new file mode 100644 index 0000000..180dde7 --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/_dut @@ -0,0 +1,11 @@ +#compdef dut +#autoload + +# +# Completes dut. +# +# Authors: +# Sorin Ionescu +# + +_du diff --git a/config/zsh/.zprezto/modules/utility/functions/_mkdcd b/config/zsh/.zprezto/modules/utility/functions/_mkdcd new file mode 100644 index 0000000..5273651 --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/_mkdcd @@ -0,0 +1,13 @@ +#compdef mkdcd +#autoload + +# +# Completes mkdcd. +# +# Authors: +# Sorin Ionescu +# + +local expl + +_wanted directories expl 'directory' _path_files -/ || _message 'directory' diff --git a/config/zsh/.zprezto/modules/utility/functions/_noremoteglob b/config/zsh/.zprezto/modules/utility/functions/_noremoteglob new file mode 100644 index 0000000..de5290e --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/_noremoteglob @@ -0,0 +1,11 @@ +#compdef noremoteglob +#autoload + +# +# Completes noremoteglob. +# +# Authors: +# Indrajit Raychaudhuri +# + +_precommand diff --git a/config/zsh/.zprezto/modules/utility/functions/_prep b/config/zsh/.zprezto/modules/utility/functions/_prep new file mode 100644 index 0000000..c9d6eda --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/_prep @@ -0,0 +1,18 @@ +#compdef prep +#autoload + +# +# Completes prep. +# +# Authors: +# Sorin Ionescu +# + +_arguments \ + '-i[ignore case]' \ + '-m[^ and $ match the start and the end of a line]' \ + '-s[. matches newline]' \ + '-v[invert match]' \ + '-x[ignore whitespace and comments]' \ + '1::pattern:' \ + '2::files:_files' && return 0 diff --git a/config/zsh/.zprezto/modules/utility/functions/_psub b/config/zsh/.zprezto/modules/utility/functions/_psub new file mode 100644 index 0000000..c79899e --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/_psub @@ -0,0 +1,19 @@ +#compdef psub +#autoload + +# +# Completes psub. +# +# Authors: +# Sorin Ionescu +# + +_arguments \ + '-g[match globally]' \ + '-i[ignore case]' \ + '-m[^ and $ match the start and the end of a line]' \ + '-s[. matches newline]' \ + '-x[ignore whitespace and comments]' \ + '1::pattern:' \ + '2::replacement:' \ + '3::files:_files' && return 0 diff --git a/config/zsh/.zprezto/modules/utility/functions/diff b/config/zsh/.zprezto/modules/utility/functions/diff new file mode 100644 index 0000000..fb288a8 --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/diff @@ -0,0 +1,19 @@ +# +# Highlights diff output. +# +# Authors: +# Sorin Ionescu +# + +# function diff { + +if zstyle -t ':prezto:module:utility:diff' color \ + && [[ -t 1 ]] \ + && (( $+commands[colordiff] )); then + command diff "$@" | colordiff + return "${pipestatus[1]}" +else + command diff "$@" +fi + +# } diff --git a/config/zsh/.zprezto/modules/utility/functions/dut b/config/zsh/.zprezto/modules/utility/functions/dut new file mode 100644 index 0000000..1474197 --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/dut @@ -0,0 +1,27 @@ +# +# Displays the grand total disk usage using human readable units. +# +# Authors: +# Suraj N. Kurapati +# Sorin Ionescu +# + +# function dut { + +(( $# == 0 )) && set -- * + +if [[ ${(@M)${(f)"$(du --version 2>&1)"}:#*GNU *} ]]; then + du -khsc "$@" | sort -h -r +else + local line size name + local -a record + + while IFS=$'\n' read line; do + record=(${(z)line}) + size="$(($record[1] / 1024.0))" + name="$record[2,-1]" + printf "%9.1LfM %s\n" "$size" "$name" + done < <(du -kcs "$@") | sort -n -r +fi + +# } diff --git a/config/zsh/.zprezto/modules/utility/functions/make b/config/zsh/.zprezto/modules/utility/functions/make new file mode 100644 index 0000000..7cda8a6 --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/make @@ -0,0 +1,17 @@ +# +# Highlights make output. +# +# Authors: +# Sorin Ionescu +# + +# function make { + +if zstyle -t ':prezto:module:utility:make' color \ + && (( $+commands[colormake] )); then + command colormake "$@" +else + command make "$@" +fi + +# } diff --git a/config/zsh/.zprezto/modules/utility/functions/prep b/config/zsh/.zprezto/modules/utility/functions/prep new file mode 100644 index 0000000..d6448ae --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/prep @@ -0,0 +1,56 @@ +# +# Provides a grep-like pattern search. +# +# Authors: +# Sorin Ionescu +# + +# function prep { + +local usage pattern modifiers invert + +usage="$( +cat <&2 + print "$usage" >&2 + return 1 + ;; + ([?]) + print "$0: unknown option: $OPTARG" >&2 + print "$usage" >&2 + return 1 + ;; + esac +done +shift $(( $OPTIND - 1 )) + +if (( $# < 1 )); then + print "$usage" >&2 + return 1 +fi + +pattern="$1" +shift + +perl -n -l -e "print if ${invert:+not} m/${pattern//\//\\/}/${modifiers}" "$@" + +# } diff --git a/config/zsh/.zprezto/modules/utility/functions/psub b/config/zsh/.zprezto/modules/utility/functions/psub new file mode 100644 index 0000000..af191fd --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/psub @@ -0,0 +1,57 @@ +# +# Provides a sed-like pattern substitution. +# +# Authors: +# Sorin Ionescu +# + +# function psub { + +local usage pattern replacement modifiers + +usage="$( +cat <&2 + print "$usage" >&2 + return 1 + ;; + ([?]) + print "$0: unknown option: $OPTARG" >&2 + print "$usage" >&2 + return 1 + ;; + esac +done +shift $(( $OPTIND - 1 )) + +if (( $# < 2 )); then + print "$usage" >&2 + return 1 +fi + +pattern="$1" +replacement="$2" +repeat 2 shift + +perl -i'.orig' -n -l -e "s/${pattern//\//\\/}/${replacement//\//\\/}/${modifiers}; print" "$@" + +# } diff --git a/config/zsh/.zprezto/modules/utility/functions/wdiff b/config/zsh/.zprezto/modules/utility/functions/wdiff new file mode 100644 index 0000000..f1de659 --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/wdiff @@ -0,0 +1,32 @@ +# +# Highlights wdiff output. +# +# Authors: +# Sorin Ionescu +# Indrajit Raychaudhuri +# + +# function wdiff { + +if zstyle -t ':prezto:module:utility:wdiff' color; then + if (( $+commands[wdiff] )); then + command wdiff \ + --avoid-wraps \ + --start-delete="$(print -n $FG[red])" \ + --end-delete="$(print -n $FG[none])" \ + --start-insert="$(print -n $FG[green])" \ + --end-insert="$(print -n $FG[none])" \ + "$@" \ + | sed 's/^\(@@\( [+-][[:digit:]]*,[[:digit:]]*\)\{2\} @@\)$/;5;6m\10m/g' + elif (( $+commands[git] )); then + command git --no-pager diff --no-ext-diff --no-index --color=auto --color-words "$@" + else + command wdiff "$@" + fi +elif (( ! $+commands[wdiff] && $+commands[git] )); then + command git --no-pager diff --no-ext-diff --no-index --color=never "$@" +else + command wdiff "$@" +fi + +# } diff --git a/config/zsh/.zprezto/modules/utility/functions/zsh-help b/config/zsh/.zprezto/modules/utility/functions/zsh-help new file mode 100644 index 0000000..f6605ea --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/functions/zsh-help @@ -0,0 +1,102 @@ +# +# Provides a much easier way to search and access ZSH's manual. First checks for +# terms at the start of the manual, then checks if it's at start of a line allowing +# whitespace. +# +# Authors: +# Samantha McVey +# + +# function zsh-help { + +local usage="$( +cat <&2; fi + if man --pager='' ${i} | grep -E ${case} "${pattern}" > /dev/null; then + printf "%s" "${i}"; return 0; + fi + done + return 1 + } + # By default search only things at start of line + local first_prefix='^' + local prefix='^\s*' + if [[ ${1} == '--zsh-help-debug' ]]; then + shift; debug=1 + fi + if [[ ${1} == "--all" ]]; then + shift; first_prefix='' # We're searching everything, so remove the prefix + fi + if [[ $# < 1 || $1 == "--help" ]]; then + printf "%s\n" "${usage}" + unfunction _zsh-help-join; unfunction _zsh-help-try-query; # unfunction so it's not in the global scope + return 1 + fi + if [[ ${1} == "test" && $# == 1 ]]; then + case='' + pattern='^CONDITIONAL EXPRESSIONS$' + elif [[ ($1 == "-eq" || $1 == "-ne" || $1 == "-lt" || $1 == "-gt" || $1 == "-le" || $1 == "-ge") && $# == 1 ]]; then + case='' + pattern="${prefix}exp1\s+${1}\s+exp2" + elif [[ $1 == 'zstyle' ]]; then + pattern=$(_zsh-help-join '\s+' "$@") + section=ZSHMODULES + fi + # If it wasn't one of the special-cased things, check ZSHBUILTINS first. If + # not found there, we will search ZSHALL + if [[ ${pattern} == "" ]]; then + pattern="$(_zsh-help-join '\s+' "$@")" + # search for sections at the start of the man page first + section=$(_zsh-help-try-query "${case}" "${first_prefix}${pattern}") + # If it exists there, keep ZSHBUILTINS as the section + if (( $? == 0 )); then + pattern="${first_prefix}${pattern}" + elif [[ "${prefix}" ]]; then + # if not found, search for the term preceeded by whitetext + section=$(_zsh-help-try-query "${case}" "${prefix}${pattern}") + if (( $? == 0 )); then + pattern="${prefix}${pattern}" + else + pattern="" + fi + fi + if [[ ! ${pattern} ]]; then # Otherwise we use zshall + printf "Can't find term\n" 2>&1 + unfunction _zsh-help-join; unfunction _zsh-help-try-query; # unfunction so it's not in the global scope + return 1; + fi + fi + local command="man --pager=\"less ${case} -p '${pattern}'\" \"${section}\"" + if [[ ${debug} ]]; then + printf "\nFinal search term is:\n"; printf "%s\n" "${command}"; + else + eval $command + fi + local rtrn=$? + unfunction _zsh-help-join; unfunction _zsh-help-try-query; # unfunction so it's not in the global scope + return $? +#} diff --git a/config/zsh/.zprezto/modules/utility/init.zsh b/config/zsh/.zprezto/modules/utility/init.zsh new file mode 100644 index 0000000..cacd8be --- /dev/null +++ b/config/zsh/.zprezto/modules/utility/init.zsh @@ -0,0 +1,274 @@ +# +# Defines general aliases and functions. +# +# Authors: +# Robby Russell +# Suraj N. Kurapati +# Sorin Ionescu +# + +# Load dependencies. +pmodload 'helper' 'spectrum' + +# Correct commands. +if zstyle -T ':prezto:module:utility' correct; then + setopt CORRECT +fi + +# Load 'run-help' function. +autoload -Uz run-help-{ip,openssl,sudo} + +# +# Aliases +# + +# Disable correction. +alias ack='nocorrect ack' +alias cd='nocorrect cd' +alias cp='nocorrect cp' +alias ebuild='nocorrect ebuild' +alias gcc='nocorrect gcc' +alias gist='nocorrect gist' +alias grep='nocorrect grep' +alias heroku='nocorrect heroku' +alias ln='nocorrect ln' +alias man='nocorrect man' +alias mkdir='nocorrect mkdir' +alias mv='nocorrect mv' +alias mysql='nocorrect mysql' +alias rm='nocorrect rm' + +# Disable globbing. +alias bower='noglob bower' +alias fc='noglob fc' +alias find='noglob find' +alias ftp='noglob ftp' +alias history='noglob history' +alias locate='noglob locate' +alias rake='noglob rake' +alias rsync='noglob rsync' +alias scp='noglob scp' +alias sftp='noglob sftp' + +# Define general aliases. +alias _='sudo' +alias b='${(z)BROWSER}' + +alias diffu="diff --unified" +alias e='${(z)VISUAL:-${(z)EDITOR}}' +alias mkdir="${aliases[mkdir]:-mkdir} -p" +alias p='${(z)PAGER}' +alias po='popd' +alias pu='pushd' +alias sa='alias | grep -i' +alias type='type -a' + +# Safe ops. Ask the user before doing anything destructive. +alias cpi="${aliases[cp]:-cp} -i" +alias lni="${aliases[ln]:-ln} -i" +alias mvi="${aliases[mv]:-mv} -i" +alias rmi="${aliases[rm]:-rm} -i" +if zstyle -T ':prezto:module:utility' safe-ops; then + alias cp="${aliases[cp]:-cp} -i" + alias ln="${aliases[ln]:-ln} -i" + alias mv="${aliases[mv]:-mv} -i" + alias rm="${aliases[rm]:-rm} -i" +fi + +# ls +_ls_version="$(ls --version 2>&1)" + +if [[ ${(@M)${(f)_ls_version}:#*(GNU|lsd|uutils) *} ]]; then + # GNU Core Utilities + + if zstyle -T ':prezto:module:utility:ls' dirs-first; then + alias ls="${aliases[ls]:-ls} --group-directories-first" + fi + + if zstyle -t ':prezto:module:utility:ls' color; then + # Define colors for GNU ls if they're not already defined + if (( ! $+LS_COLORS )); then + # Try dircolors when available + if is-callable 'dircolors'; then + eval "$(dircolors --sh $HOME/.dir_colors(N))" + else + export LS_COLORS='di=34:ln=35:so=32:pi=33:ex=31:bd=36;01:cd=33;01:su=31;40;07:sg=36;40;07:tw=32;40;07:ow=33;40;07:' + fi + fi + + alias ls="${aliases[ls]:-ls} --color=auto" + else + alias ls="${aliases[ls]:-ls} -F" + fi +else + # BSD Core Utilities + + if zstyle -t ':prezto:module:utility:ls' color; then + # Define colors for BSD ls if they're not already defined + if (( ! $+LSCOLORS )); then + export LSCOLORS='exfxcxdxbxGxDxabagacad' + fi + + alias ls="${aliases[ls]:-ls} -G" + else + alias ls="${aliases[ls]:-ls} -F" + fi +fi + +alias l='ls -1A' # Lists in one column, hidden files. +alias ll='ls -lh' # Lists human readable sizes. +alias lr='ll -R' # Lists human readable sizes, recursively. +alias la='ll -A' # Lists human readable sizes, hidden files. +alias lm='la | "$PAGER"' # Lists human readable sizes, hidden files through pager. +alias lk='ll -Sr' # Lists sorted by size, largest last. +alias lt='ll -tr' # Lists sorted by date, most recent last. +alias lc='lt -c' # Lists sorted by date, most recent last, shows change time. +alias lu='lt -u' # Lists sorted by date, most recent last, shows access time. + +if [[ ${(@M)${(f)_ls_version}:#*GNU *} ]]; then + alias lx='ll -XB' # Lists sorted by extension (GNU only). +fi + +unset _ls_version + +# Grep +if zstyle -t ':prezto:module:utility:grep' color; then + export GREP_COLOR=${GREP_COLOR:-'37;45'} # BSD. + export GREP_COLORS=${GREP_COLORS:-"mt=$GREP_COLOR"} # GNU. + + alias grep="${aliases[grep]:-grep} --color=auto" +fi + +# macOS Everywhere +if is-darwin; then + alias o='open' +elif is-cygwin; then + alias o='cygstart' + alias pbcopy='tee > /dev/clipboard' + alias pbpaste='cat /dev/clipboard' +elif is-termux; then + alias o='termux-open' + alias pbcopy='termux-clipboard-set' + alias pbpaste='termux-clipboard-get' +else + alias o='xdg-open' + + if (( $+commands[xclip] )); then + alias pbcopy='xclip -selection clipboard -in' + alias pbpaste='xclip -selection clipboard -out' + elif (( $+commands[xsel] )); then + alias pbcopy='xsel --clipboard --input' + alias pbpaste='xsel --clipboard --output' + fi +fi + +alias pbc='pbcopy' +alias pbp='pbpaste' + +# File Download +zstyle -s ':prezto:module:utility:download' helper '_download_helper' || _download_helper='curl' + +typeset -A _download_helpers=( + aria2c 'aria2c --continue --remote-time --max-tries=0' + curl 'curl --continue-at - --location --progress-bar --remote-name --remote-time' + wget 'wget --continue --progress=bar --timestamping' +) + +if (( $+commands[$_download_helper] && $+_download_helpers[$_download_helper] )); then + alias get="$_download_helpers[$_download_helper]" +elif (( $+commands[curl] )); then + alias get="$_download_helpers[curl]" +fi + +unset _download_helper{,s} + +# Resource Usage +alias df='df -kh' +alias du='du -kh' + +if is-darwin || is-bsd; then + alias topc='top -o cpu' + alias topm='top -o vsize' +else + alias topc='top -o %CPU' + alias topm='top -o %MEM' +fi + +# Miscellaneous + +# Serves a directory via HTTP. +if (( $#commands[(i)python(|[23])] )); then + autoload -Uz is-at-least + if (( $+commands[python3] )); then + alias http-serve='python3 -m http.server' + elif (( $+commands[python2] )); then + alias http-serve='python2 -m SimpleHTTPServer' + elif is-at-least 3 ${"$(python --version 2>&1)"[(w)2]}; then + alias http-serve='python -m http.server' + else + alias http-serve='python -m SimpleHTTPServer' + fi +fi + +# +# Functions +# + +# Makes a directory and changes to it. +function mkdcd { + [[ -n "$1" ]] && mkdir -p "$1" && builtin cd "$1" +} + +# Changes to a directory and lists its contents. +function cdls { + builtin cd "$argv[-1]" && ls "${(@)argv[1,-2]}" +} + +# Pushes an entry onto the directory stack and lists its contents. +function pushdls { + builtin pushd "$argv[-1]" && ls "${(@)argv[1,-2]}" +} + +# Pops an entry off the directory stack and lists its contents. +function popdls { + builtin popd "$argv[-1]" && ls "${(@)argv[1,-2]}" +} + +# Prints columns 1 2 3 ... n. +function slit { + awk "{ print ${(j:,:):-\$${^@}} }" +} + +# Finds files and executes a command on them. +function find-exec { + find . -type f -iname "*${1:-}*" -exec "${2:-file}" '{}' \; +} + +# Displays user owned processes status. +function psu { + ps -U "${1:-$LOGNAME}" -o 'pid,%cpu,%mem,command' "${(@)argv[2,-1]}" +} + +# Enables globbing selectively on path arguments. +# Globbing is enabled on local paths (starting in '/' and './') and disabled +# on remote paths (containing ':' but not starting in '/' and './'). This is +# useful for programs that have their own globbing for remote paths. +# Currently, this is used by default for 'rsync' and 'scp'. +# Example: +# - Local: '*.txt', './foo:2017*.txt', '/var/*:log.txt' +# - Remote: user@localhost:foo/ +# +# NOTE: This function is buggy and is not used anywhere until we can make sure +# it's fixed. See https://github.com/sorin-ionescu/prezto/issues/1443 and +# https://github.com/sorin-ionescu/prezto/issues/1521 for more information. +function noremoteglob { + local -a argo + local cmd="$1" + for arg in ${argv:2}; do case $arg in + ( ./* ) argo+=( ${~arg} ) ;; # local relative, glob + ( /* ) argo+=( ${~arg} ) ;; # local absolute, glob + ( *:* ) argo+=( ${arg} ) ;; # remote, noglob + ( * ) argo+=( ${~arg} ) ;; # default, glob + esac; done + command $cmd "${(@)argo}" +} diff --git a/config/zsh/.zprezto/modules/wakeonlan/README.md b/config/zsh/.zprezto/modules/wakeonlan/README.md new file mode 100644 index 0000000..ca4095a --- /dev/null +++ b/config/zsh/.zprezto/modules/wakeonlan/README.md @@ -0,0 +1,37 @@ +# Wake-on-LAN + +This module provides a wrapper around the [wakeonlan][1] tool. + +## Usage + +To use this wrapper, create the _`~/.wakeonlan`_ directory, and place in it one +file for each device you would like to be able to wake. Give the file a name +that describes the device, such as its hostname. + +Each file should contain a line with the MAC address of the target device and +the network broadcast address. For instance, there might be a file +_`~/.wakeonlan/leto`_ with the following contents: + +```conf +00:11:22:33:44:55:66 192.168.0.255 +``` + +To wake that device, use the following command: + +```console +wake leto +``` + +For more information on the configuration file format, read the +[wakeonlan man page][2]. + +## Authors + +_The authors of this module should be contacted via [issue tracker][3]._ + +- [Paul Dann](https://github.com/giddie) +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://gsd.di.uminho.pt/jpo/software/wakeonlan/ +[2]: https://man.cx/wakeonlan +[3]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/wakeonlan/functions/_wake b/config/zsh/.zprezto/modules/wakeonlan/functions/_wake new file mode 100644 index 0000000..87e1a36 --- /dev/null +++ b/config/zsh/.zprezto/modules/wakeonlan/functions/_wake @@ -0,0 +1,12 @@ +#compdef wake +#autoload + +# +# Completes wake. +# +# Authors: +# Paul Gideon Dann +# Sorin Ionescu +# + +_arguments "1:device to wake:_files -W '$HOME/.wakeonlan'" && return 0 diff --git a/config/zsh/.zprezto/modules/wakeonlan/functions/wake b/config/zsh/.zprezto/modules/wakeonlan/functions/wake new file mode 100644 index 0000000..6f7d6c5 --- /dev/null +++ b/config/zsh/.zprezto/modules/wakeonlan/functions/wake @@ -0,0 +1,24 @@ +# +# Wakes devices via wakeonlan. +# +# Authors: +# Paul Gideon Dann +# Sorin Ionescu +# + +# function wake { + +local config_file="$HOME/.wakeonlan/$1" +if [[ ! -s "$config_file" ]]; then + print "$0: invalid device file: $1" >&2 + return 1 +fi + +if (( ! $+commands[wakeonlan] )); then + print "$0: command not found: wakeonlan" >&2 + return 1 +fi + +wakeonlan -f "$config_file" + +# } diff --git a/config/zsh/.zprezto/modules/yum/README.md b/config/zsh/.zprezto/modules/yum/README.md new file mode 100644 index 0000000..850b1c1 --- /dev/null +++ b/config/zsh/.zprezto/modules/yum/README.md @@ -0,0 +1,25 @@ +# Yum + +Defines [_yum_][1] aliases. + +## Aliases + +- `yumc` removes package(s) and leaves. +- `yumi` installs package(s). +- `yumh` displays history. +- `yuml` lists packages. +- `yumL` lists installed packages. +- `yumq` displays package information. +- `yumr` removes package(s). +- `yums` searches for a package. +- `yumu` updates packages. +- `yumU` upgrades packages. + +## Authors + +_The authors of this module should be contacted via the [issue tracker][2]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://yum.baseurl.org +[2]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/modules/yum/init.zsh b/config/zsh/.zprezto/modules/yum/init.zsh new file mode 100644 index 0000000..2f5427d --- /dev/null +++ b/config/zsh/.zprezto/modules/yum/init.zsh @@ -0,0 +1,27 @@ +# +# Defines yum aliases. +# +# Authors: +# Simon +# Sorin Ionescu +# + +# Return if requirements are not found. +if (( ! $+commands[yum] )); then + return 1 +fi + +# +# Aliases +# + +alias yumc='sudo yum clean all' # Cleans the cache. +alias yumh='yum history' # Displays history. +alias yumi='sudo yum install' # Installs package(s). +alias yuml='yum list' # Lists packages. +alias yumL='yum list installed' # Lists installed packages. +alias yumq='yum info' # Displays package information. +alias yumr='sudo yum remove' # Removes package(s). +alias yums='yum search' # Searches for a package. +alias yumu='sudo yum update' # Updates packages. +alias yumU='sudo yum upgrade' # Upgrades packages. diff --git a/config/zsh/.zprezto/runcoms/README.md b/config/zsh/.zprezto/runcoms/README.md new file mode 100644 index 0000000..39feb7d --- /dev/null +++ b/config/zsh/.zprezto/runcoms/README.md @@ -0,0 +1,77 @@ +# Configuration Files + +Zsh has several system-wide and user-local configuration files. + +Additionally, Prezto has one user-local configuration file. + +System-wide configuration files are installation-dependent but are installed +in _`/etc`_ by default. + +User-local configuration files have the same name as their global counterparts +but are prefixed with a dot (hidden). Zsh looks for these files in the path +stored in the `$ZDOTDIR` environment variable. However, if said variable is +not defined, Zsh will use the user's home directory. + +## File Descriptions + +The [configuration files][1] are read in the following order: + +1. _`/etc/zshenv`_ +2. _`${ZDOTDIR:-$HOME}/.zshenv`_ +3. _`/etc/zprofile`_ +4. _`${ZDOTDIR:-$HOME}/.zprofile`_ +5. _`/etc/zshrc`_ +6. _`${ZDOTDIR:-$HOME}/.zshrc`_ +7. _`${ZDOTDIR:-$HOME}/.zpreztorc`_ +8. _`/etc/zlogin`_ +9. _`${ZDOTDIR:-$HOME}/.zlogin`_ +10. _`${ZDOTDIR:-$HOME}/.zlogout`_ +11. _`/etc/zlogout`_ + +### zshenv + +This file is sourced by all instances of Zsh, and thus, it should be kept as +small as possible and should only define environment variables. + +### zprofile + +This file is similar to _zlogin_, but it is sourced before _zshrc_. It was added +for [KornShell][2] fans. See the description of _zlogin_ below for what it may +contain. + +_zprofile_ and _zlogin_ are not meant to be used together but can be done so. + +### zshrc + +This file is sourced by interactive shells. It should define aliases, functions, +shell options, and key bindings. + +### zpreztorc + +This file configures Prezto. + +### zlogin + +This file is sourced by login shells after _zshrc_. Thus, it should contain +commands that need to execute at login. It is usually used for messages such as +[_`fortune`_][3], [_`msgs`_][4], or for the creation of files. + +This is not the file to define aliases, functions, shell options, and key +bindings. It should not change the shell environment. + +### zlogout + +This file is sourced by login shells during logout. It should be used for +displaying messages and for deletion of files. + +## Authors + +_The authors of these files should be contacted via the [issue tracker][5]._ + +- [Sorin Ionescu](https://github.com/sorin-ionescu) + +[1]: http://zsh.sourceforge.net/Intro/intro_3.html#SEC3 +[2]: https://www.kornshell.com +[3]: https://en.wikipedia.org/wiki/Fortune_(Unix) +[4]: https://www.manpagez.com/man/1/msgs +[5]: https://github.com/sorin-ionescu/prezto/issues diff --git a/config/zsh/.zprezto/runcoms/zlogin b/config/zsh/.zprezto/runcoms/zlogin new file mode 100644 index 0000000..2f83435 --- /dev/null +++ b/config/zsh/.zprezto/runcoms/zlogin @@ -0,0 +1,29 @@ +# +# Executes commands at login post-zshrc. +# +# Authors: +# Sorin Ionescu +# + +# Execute code that does not affect the current session in the background. +{ + # Compile the completion dump to increase startup speed. + zcompdump="${XDG_CACHE_HOME:-$HOME/.cache}/prezto/zcompdump" + if [[ -s "$zcompdump" && (! -s "${zcompdump}.zwc" || "$zcompdump" -nt "${zcompdump}.zwc") ]]; then + if command mkdir "${zcompdump}.zwc.lock" 2>/dev/null; then + zcompile "$zcompdump" + command rmdir "${zcompdump}.zwc.lock" 2>/dev/null + fi + fi +} &! + +# Execute code only if STDERR is bound to a TTY. +if [[ -o INTERACTIVE && -t 2 ]]; then + + # Print a random, hopefully interesting, adage. + if (( $+commands[fortune] )); then + fortune -s + print + fi + +fi >&2 diff --git a/config/zsh/.zprezto/runcoms/zlogout b/config/zsh/.zprezto/runcoms/zlogout new file mode 100644 index 0000000..3eba9cf --- /dev/null +++ b/config/zsh/.zprezto/runcoms/zlogout @@ -0,0 +1,19 @@ +# +# Executes commands at logout. +# +# Authors: +# Sorin Ionescu +# + +# Execute code only if STDERR is bound to a TTY. +[[ -o INTERACTIVE && -t 2 ]] && { + +SAYINGS=( + "So long and thanks for all the fish.\n -- Douglas Adams" + "Good morning! And in case I don't see ya, good afternoon, good evening and goodnight.\n --Truman Burbank" +) + +# Print a randomly-chosen message: +echo $SAYINGS[$(($RANDOM % $#SAYINGS + 1))] + +} >&2 diff --git a/config/zsh/.zprezto/runcoms/zpreztorc b/config/zsh/.zprezto/runcoms/zpreztorc new file mode 100644 index 0000000..f004637 --- /dev/null +++ b/config/zsh/.zprezto/runcoms/zpreztorc @@ -0,0 +1,256 @@ +# +# Sets Prezto options. +# +# Authors: +# Sorin Ionescu +# + +# +# General +# + +# Set case-sensitivity for completion, history lookup, etc. +# zstyle ':prezto:*:*' case-sensitive 'yes' + +# Color output (auto set to 'no' on dumb terminals). +zstyle ':prezto:*:*' color 'yes' + +# Add additional directories to load prezto modules from +# zstyle ':prezto:load' pmodule-dirs $HOME/.zprezto-contrib + +# Allow module overrides when pmodule-dirs causes module name collisions +# zstyle ':prezto:load' pmodule-allow-overrides 'yes' + +# Set the Zsh modules to load (man zshmodules). +# zstyle ':prezto:load' zmodule 'attr' 'stat' + +# Set the Zsh functions to load (man zshcontrib). +# zstyle ':prezto:load' zfunction 'zargs' 'zmv' + +# Set the Prezto modules to load (browse modules). +# The order matters. +zstyle ':prezto:load' pmodule \ + 'environment' \ + 'terminal' \ + 'editor' \ + 'history' \ + 'directory' \ + 'spectrum' \ + 'utility' \ + 'completion' \ + 'history-substring-search' \ + 'prompt' + +# +# Autosuggestions +# + +# Set the query found color. +# zstyle ':prezto:module:autosuggestions:color' found '' + +# +# Completions +# + +# Set the entries to ignore in static '/etc/hosts' for host completion. +# zstyle ':prezto:module:completion:*:hosts' etc-host-ignores \ +# '0.0.0.0' '127.0.0.1' + +# +# Editor +# + +# Set the characters that are considered to be part of a word. +# zstyle ':prezto:module:editor' wordchars '*?_-.[]~&;!#$%^(){}<>' + +# Set the key mapping style to 'emacs' or 'vi'. +zstyle ':prezto:module:editor' key-bindings 'emacs' + +# Auto convert .... to ../.. +# zstyle ':prezto:module:editor' dot-expansion 'yes' + +# Allow the zsh prompt context to be shown. +#zstyle ':prezto:module:editor' ps-context 'yes' + +# +# Git +# + +# Ignore submodules when they are 'dirty', 'untracked', 'all', or 'none'. +# zstyle ':prezto:module:git:status:ignore' submodules 'all' + +# +# GNU Utility +# + +# Set the command prefix on non-GNU systems. +# zstyle ':prezto:module:gnu-utility' prefix 'g' + +# +# History +# + +# Set the file to save the history in when an interactive shell exits. +# zstyle ':prezto:module:history' histfile "${ZDOTDIR:-$HOME}/.zsh_history" + +# Set the maximum number of events stored in the internal history list. +# zstyle ':prezto:module:history' histsize 10000 + +# Set the maximum number of history events to save in the history file. +# zstyle ':prezto:module:history' savehist 10000 + +# +# History Substring Search +# + +# Set the query found color. +# zstyle ':prezto:module:history-substring-search:color' found '' + +# Set the query not found color. +# zstyle ':prezto:module:history-substring-search:color' not-found '' + +# Set the search globbing flags. +# zstyle ':prezto:module:history-substring-search' globbing-flags '' + +# Enable search case-sensitivity. +# zstyle ':prezto:module:history-substring-search' case-sensitive 'yes' + +# Enable search for fuzzy matches. +# zstyle ':prezto:module:history-substring-search' fuzzy 'yes' + +# Enable search uniqueness. +# zstyle ':prezto:module:history-substring-search' unique 'yes' + +# Enable prefixed search. +# zstyle ':prezto:module:history-substring-search' prefixed 'yes' + +# +# macOS +# + +# Set the keyword used by `mand` to open man pages in Dash.app +# zstyle ':prezto:module:osx:man' dash-keyword 'manpages' + +# +# Pacman +# + +# Set the Pacman frontend. +# zstyle ':prezto:module:pacman' frontend 'yaourt' + +# +# Prompt +# + +# Set the prompt theme to load. +# Setting it to 'random' loads a random theme. +# Auto set to 'off' on dumb terminals. +zstyle ':prezto:module:prompt' theme 'sorin' + +# Set the working directory prompt display length. +# By default, it is set to 'short'. Set it to 'long' (without '~' expansion) +# for longer or 'full' (with '~' expansion) for even longer prompt display. +# zstyle ':prezto:module:prompt' pwd-length 'short' + +# Set the prompt to display the return code along with an indicator for non-zero +# return codes. This is not supported by all prompts. +# zstyle ':prezto:module:prompt' show-return-val 'yes' + +# +# Python +# + +# Auto switch the Python virtualenv on directory change. +# zstyle ':prezto:module:python:virtualenv' auto-switch 'yes' + +# Automatically initialize virtualenvwrapper if pre-requisites are met. +# zstyle ':prezto:module:python:virtualenv' initialize 'yes' + +# +# Ruby +# + +# Auto switch the Ruby version on directory change. +# zstyle ':prezto:module:ruby:chruby' auto-switch 'yes' + +# +# Screen +# + +# Auto start a session when Zsh is launched in a local terminal. +# zstyle ':prezto:module:screen:auto-start' local 'yes' + +# Auto start a session when Zsh is launched in a SSH connection. +# zstyle ':prezto:module:screen:auto-start' remote 'yes' + +# +# SSH +# + +# Set the SSH identities to load into the agent. +# zstyle ':prezto:module:ssh:load' identities 'id_rsa' 'id_rsa2' 'id_github' + +# +# Syntax Highlighting +# + +# Set syntax highlighters. +# By default, only the main highlighter is enabled. +# zstyle ':prezto:module:syntax-highlighting' highlighters \ +# 'main' \ +# 'brackets' \ +# 'pattern' \ +# 'line' \ +# 'cursor' \ +# 'root' +# +# Set syntax highlighting styles. +# zstyle ':prezto:module:syntax-highlighting' styles \ +# 'builtin' 'bg=blue' \ +# 'command' 'bg=blue' \ +# 'function' 'bg=blue' +# +# Set syntax pattern styles. +# zstyle ':prezto:module:syntax-highlighting' pattern \ +# 'rm*-rf*' 'fg=white,bold,bg=red' + +# +# Terminal +# + +# Auto set the tab and window titles. +# zstyle ':prezto:module:terminal' auto-title 'yes' + +# Set the window title format. +# zstyle ':prezto:module:terminal:window-title' format '%n@%m: %s' + +# Set the tab title format. +# zstyle ':prezto:module:terminal:tab-title' format '%m: %s' + +# Set the terminal multiplexer title format. +# zstyle ':prezto:module:terminal:multiplexer-title' format '%s' + +# +# Tmux +# + +# Auto start a session when Zsh is launched in a local terminal. +# zstyle ':prezto:module:tmux:auto-start' local 'yes' + +# Auto start a session when Zsh is launched in a SSH connection. +# zstyle ':prezto:module:tmux:auto-start' remote 'yes' + +# Integrate with iTerm2. +# zstyle ':prezto:module:tmux:iterm' integrate 'yes' + +# Set the default session name: +# zstyle ':prezto:module:tmux:session' name 'YOUR DEFAULT SESSION NAME' + +# +# Utility +# + +# Enabled safe options. This aliases cp, ln, mv and rm so that they prompt +# before deleting or overwriting files. Set to 'no' to disable this safer +# behavior. +# zstyle ':prezto:module:utility' safe-ops 'yes' diff --git a/config/zsh/.zprezto/runcoms/zprofile b/config/zsh/.zprezto/runcoms/zprofile new file mode 100644 index 0000000..d2acd31 --- /dev/null +++ b/config/zsh/.zprezto/runcoms/zprofile @@ -0,0 +1,73 @@ +# +# Executes commands at login pre-zshrc. +# +# Authors: +# Sorin Ionescu +# + +# +# Browser +# + +if [[ -z "$BROWSER" && "$OSTYPE" == darwin* ]]; then + export BROWSER='open' +fi + +# +# Editors +# + +if [[ -z "$EDITOR" ]]; then + export EDITOR='nano' +fi +if [[ -z "$VISUAL" ]]; then + export VISUAL='nano' +fi +if [[ -z "$PAGER" ]]; then + export PAGER='less' +fi + +# +# Language +# + +if [[ -z "$LANG" ]]; then + export LANG='en_US.UTF-8' +fi + +# +# Paths +# + +# Ensure path arrays do not contain duplicates. +typeset -gU cdpath fpath mailpath path + +# Set the list of directories that cd searches. +# cdpath=( +# $cdpath +# ) + +# Set the list of directories that Zsh searches for programs. +path=( + $HOME/{,s}bin(N) + /opt/{homebrew,local}/{,s}bin(N) + /usr/local/{,s}bin(N) + $path +) + +# +# Less +# + +# Set the default Less options. +# Mouse-wheel scrolling has been disabled by -X (disable screen clearing). +# Remove -X to enable it. +if [[ -z "$LESS" ]]; then + export LESS='-g -i -M -R -S -w -X -z-4' +fi + +# Set the Less input preprocessor. +# Try both `lesspipe` and `lesspipe.sh` as either might exist on a system. +if [[ -z "$LESSOPEN" ]] && (( $#commands[(i)lesspipe(|.sh)] )); then + export LESSOPEN="| /usr/bin/env $commands[(i)lesspipe(|.sh)] %s 2>&-" +fi diff --git a/config/zsh/.zprezto/runcoms/zshenv b/config/zsh/.zprezto/runcoms/zshenv new file mode 100644 index 0000000..2dbf12a --- /dev/null +++ b/config/zsh/.zprezto/runcoms/zshenv @@ -0,0 +1,11 @@ +# +# Defines environment variables. +# +# Authors: +# Sorin Ionescu +# + +# Ensure that a non-login, non-interactive shell has a defined environment. +if [[ ( "$SHLVL" -eq 1 && ! -o LOGIN ) && -s "${ZDOTDIR:-$HOME}/.zprofile" ]]; then + source "${ZDOTDIR:-$HOME}/.zprofile" +fi diff --git a/config/zsh/.zprezto/runcoms/zshrc b/config/zsh/.zprezto/runcoms/zshrc new file mode 100644 index 0000000..039b882 --- /dev/null +++ b/config/zsh/.zprezto/runcoms/zshrc @@ -0,0 +1,13 @@ +# +# Executes commands at the start of an interactive session. +# +# Authors: +# Sorin Ionescu +# + +# Source Prezto. +if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then + source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" +fi + +# Customize to your needs... diff --git a/config/zsh/.zpreztorc b/config/zsh/.zpreztorc new file mode 100644 index 0000000..92fdcc5 --- /dev/null +++ b/config/zsh/.zpreztorc @@ -0,0 +1,257 @@ +# +# Sets Prezto options. +# +# Authors: +# Sorin Ionescu +# + +# +# General +# + +# Set case-sensitivity for completion, history lookup, etc. +# zstyle ':prezto:*:*' case-sensitive 'yes' + +# Color output (auto set to 'no' on dumb terminals). +zstyle ':prezto:*:*' color 'yes' + +# Add additional directories to load prezto modules from +# zstyle ':prezto:load' pmodule-dirs $HOME/.zprezto-contrib + +# Allow module overrides when pmodule-dirs causes module name collisions +# zstyle ':prezto:load' pmodule-allow-overrides 'yes' + +# Set the Zsh modules to load (man zshmodules). +zstyle ':prezto:load' zmodule 'attr' 'stat' + +# Set the Zsh functions to load (man zshcontrib). +# zstyle ':prezto:load' zfunction 'zargs' 'zmv' + +# Set the Prezto modules to load (browse modules). +# The order matters. +zstyle ':prezto:load' pmodule \ + 'environment' \ + 'terminal' \ + 'editor' \ + 'history' \ + 'directory' \ + 'spectrum' \ + 'utility' \ + 'completion' \ + 'history-substring-search' \ + 'python' \ + 'prompt' + +# +# Autosuggestions +# + +# Set the query found color. +# zstyle ':prezto:module:autosuggestions:color' found '' + +# +# Completions +# + +# Set the entries to ignore in static '/etc/hosts' for host completion. +# zstyle ':prezto:module:completion:*:hosts' etc-host-ignores \ +# '0.0.0.0' '127.0.0.1' + +# +# Editor +# + +# Set the characters that are considered to be part of a word. +# zstyle ':prezto:module:editor' wordchars '*?_-.[]~&;!#$%^(){}<>' + +# Set the key mapping style to 'emacs' or 'vi'. +zstyle ':prezto:module:editor' key-bindings 'emacs' + +# Auto convert .... to ../.. +# zstyle ':prezto:module:editor' dot-expansion 'yes' + +# Allow the zsh prompt context to be shown. +#zstyle ':prezto:module:editor' ps-context 'yes' + +# +# Git +# + +# Ignore submodules when they are 'dirty', 'untracked', 'all', or 'none'. +# zstyle ':prezto:module:git:status:ignore' submodules 'all' + +# +# GNU Utility +# + +# Set the command prefix on non-GNU systems. +# zstyle ':prezto:module:gnu-utility' prefix 'g' + +# +# History +# + +# Set the file to save the history in when an interactive shell exits. +# zstyle ':prezto:module:history' histfile "${ZDOTDIR:-$HOME}/.zsh_history" + +# Set the maximum number of events stored in the internal history list. +# zstyle ':prezto:module:history' histsize 10000 + +# Set the maximum number of history events to save in the history file. +# zstyle ':prezto:module:history' savehist 10000 + +# +# History Substring Search +# + +# Set the query found color. +# zstyle ':prezto:module:history-substring-search:color' found '' + +# Set the query not found color. +# zstyle ':prezto:module:history-substring-search:color' not-found '' + +# Set the search globbing flags. +# zstyle ':prezto:module:history-substring-search' globbing-flags '' + +# Enable search case-sensitivity. +# zstyle ':prezto:module:history-substring-search' case-sensitive 'yes' + +# Enable search for fuzzy matches. +# zstyle ':prezto:module:history-substring-search' fuzzy 'yes' + +# Enable search uniqueness. +# zstyle ':prezto:module:history-substring-search' unique 'yes' + +# Enable prefixed search. +# zstyle ':prezto:module:history-substring-search' prefixed 'yes' + +# +# macOS +# + +# Set the keyword used by `mand` to open man pages in Dash.app +# zstyle ':prezto:module:osx:man' dash-keyword 'manpages' + +# +# Pacman +# + +# Set the Pacman frontend. +# zstyle ':prezto:module:pacman' frontend 'yaourt' + +# +# Prompt +# + +# Set the prompt theme to load. +# Setting it to 'random' loads a random theme. +# Auto set to 'off' on dumb terminals. +zstyle ':prezto:module:prompt' theme 'powerlevel10k' + +# Set the working directory prompt display length. +# By default, it is set to 'short'. Set it to 'long' (without '~' expansion) +# for longer or 'full' (with '~' expansion) for even longer prompt display. +# zstyle ':prezto:module:prompt' pwd-length 'short' + +# Set the prompt to display the return code along with an indicator for non-zero +# return codes. This is not supported by all prompts. +# zstyle ':prezto:module:prompt' show-return-val 'yes' + +# +# Python +# + +# Auto switch the Python virtualenv on directory change. +# zstyle ':prezto:module:python:virtualenv' auto-switch 'yes' + +# Automatically initialize virtualenvwrapper if pre-requisites are met. +# zstyle ':prezto:module:python:virtualenv' initialize 'yes' + +# +# Ruby +# + +# Auto switch the Ruby version on directory change. +# zstyle ':prezto:module:ruby:chruby' auto-switch 'yes' + +# +# Screen +# + +# Auto start a session when Zsh is launched in a local terminal. +# zstyle ':prezto:module:screen:auto-start' local 'yes' + +# Auto start a session when Zsh is launched in a SSH connection. +# zstyle ':prezto:module:screen:auto-start' remote 'yes' + +# +# SSH +# + +# Set the SSH identities to load into the agent. +# zstyle ':prezto:module:ssh:load' identities 'id_rsa' 'id_rsa2' 'id_github' + +# +# Syntax Highlighting +# + +# Set syntax highlighters. +# By default, only the main highlighter is enabled. +# zstyle ':prezto:module:syntax-highlighting' highlighters \ +# 'main' \ +# 'brackets' \ +# 'pattern' \ +# 'line' \ +# 'cursor' \ +# 'root' +# +# Set syntax highlighting styles. +# zstyle ':prezto:module:syntax-highlighting' styles \ +# 'builtin' 'bg=blue' \ +# 'command' 'bg=blue' \ +# 'function' 'bg=blue' +# +# Set syntax pattern styles. +# zstyle ':prezto:module:syntax-highlighting' pattern \ +# 'rm*-rf*' 'fg=white,bold,bg=red' + +# +# Terminal +# + +# Auto set the tab and window titles. +# zstyle ':prezto:module:terminal' auto-title 'yes' + +# Set the window title format. +# zstyle ':prezto:module:terminal:window-title' format '%n@%m: %s' + +# Set the tab title format. +# zstyle ':prezto:module:terminal:tab-title' format '%m: %s' + +# Set the terminal multiplexer title format. +# zstyle ':prezto:module:terminal:multiplexer-title' format '%s' + +# +# Tmux +# + +# Auto start a session when Zsh is launched in a local terminal. +# zstyle ':prezto:module:tmux:auto-start' local 'yes' + +# Auto start a session when Zsh is launched in a SSH connection. +# zstyle ':prezto:module:tmux:auto-start' remote 'yes' + +# Integrate with iTerm2. +# zstyle ':prezto:module:tmux:iterm' integrate 'yes' + +# Set the default session name: +# zstyle ':prezto:module:tmux:session' name 'YOUR DEFAULT SESSION NAME' + +# +# Utility +# + +# Enabled safe options. This aliases cp, ln, mv and rm so that they prompt +# before deleting or overwriting files. Set to 'no' to disable this safer +# behavior. +# zstyle ':prezto:module:utility' safe-ops 'yes' \ No newline at end of file diff --git a/config/zsh/.zshenv b/config/zsh/.zshenv new file mode 100644 index 0000000..1e97c67 --- /dev/null +++ b/config/zsh/.zshenv @@ -0,0 +1,5 @@ +# Ensure XDG dirs are set early for all shells +export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" +export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}" +export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}" +export ZDOTDIR="$HOME/.config/zsh" diff --git a/config/zsh/.zshrc b/config/zsh/.zshrc new file mode 100644 index 0000000..3e37730 --- /dev/null +++ b/config/zsh/.zshrc @@ -0,0 +1,37 @@ +# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.config/zsh/.zshrc. +# Initialization code that may require console input (password prompts, [y/n] +# confirmations, etc.) must go above this block; everything else may go below. +if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" +fi + +# ~/.config/zsh/.zshrc - Main zsh configuration +# Modular framework using prezto, fzf, and system plugins + +# --- Prezto --- +export POWERLEVEL9K_CONFIG_FILE="$ZDOTDIR/p10k/p10k.zsh" +source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" + +# --- System plugins --- +# zsh-autosuggestions +if [[ -f /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh ]]; then + source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh + ZSH_AUTOSUGGEST_STRATEGY=(history completion) + ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=244" +fi + +# --- Modular config --- +for conf in "$ZDOTDIR"/conf.d/*.zsh(N); do + source "$conf" +done + +# --- Local overrides --- +[[ -f ~/.env.zsh ]] && source ~/.env.zsh + +# --- zsh-syntax-highlighting (must be sourced last) --- +if [[ -f /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]]; then + source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +fi + +# To customize prompt, run `p10k configure` or edit ~/.config/zsh/p10k/p10k.zsh. +[[ ! -f ~/.config/zsh/p10k/p10k.zsh ]] || source ~/.config/zsh/p10k/p10k.zsh diff --git a/config/zsh/conf.d/aliases.zsh b/config/zsh/conf.d/aliases.zsh new file mode 100644 index 0000000..b3e3d91 --- /dev/null +++ b/config/zsh/conf.d/aliases.zsh @@ -0,0 +1,6 @@ +# Aliases + +alias ls="${aliases[ls]:-ls} -A" +alias ll="ls -lha" +alias la="ls -A" +alias tree='tree -a -I .git' diff --git a/config/zsh/conf.d/exports.zsh b/config/zsh/conf.d/exports.zsh new file mode 100644 index 0000000..939a094 --- /dev/null +++ b/config/zsh/conf.d/exports.zsh @@ -0,0 +1,24 @@ +# Environment variables + +export VISUAL=nvim +export EDITOR="$VISUAL" +export GPG_TTY=$TTY +export LESS='-g -i -M -R -S -w -z -4' +export RTK_TELEMETRY_DISABLED=1 + +# PATH vars +export GOPATH="$HOME/go" + +# PATH additions +typeset -U path +path=( + $HOME/bin + $HOME/.local/bin + $HOME/.cargo/bin + $HOME/go/bin + $HOME/.local/share/gem/ruby/3.0.0/bin + $HOME/Android/Sdk/platform-tools + $HOME/Android/Sdk/emulator + $GOPATH/bin + $path +) diff --git a/config/zsh/conf.d/functions.zsh b/config/zsh/conf.d/functions.zsh new file mode 100644 index 0000000..4a567a1 --- /dev/null +++ b/config/zsh/conf.d/functions.zsh @@ -0,0 +1,8 @@ +# Functions + +# mkdir and cd into it +function md() { [[ $# == 1 ]] && mkdir -p -- "$1" && cd -- "$1" } +compdef _directories md + +# Autoloaded utilities +autoload -Uz zmv diff --git a/config/zsh/conf.d/fzf.zsh b/config/zsh/conf.d/fzf.zsh new file mode 100644 index 0000000..5e43158 --- /dev/null +++ b/config/zsh/conf.d/fzf.zsh @@ -0,0 +1,6 @@ +# fzf integration + +if (( $+commands[fzf] )); then + source /usr/share/fzf/key-bindings.zsh + source /usr/share/fzf/completion.zsh +fi diff --git a/config/zsh/conf.d/gpg-ssh.zsh b/config/zsh/conf.d/gpg-ssh.zsh new file mode 100644 index 0000000..bcdaaaa --- /dev/null +++ b/config/zsh/conf.d/gpg-ssh.zsh @@ -0,0 +1,5 @@ +# GPG/SSH via yubikey + +export GPG_TTY="$(tty)" +export SSH_AUTH_SOCK="/run/user/$UID/gnupg/S.gpg-agent.ssh" +gpg-connect-agent updatestartuptty /bye > /dev/null diff --git a/config/zsh/conf.d/keybindings.zsh b/config/zsh/conf.d/keybindings.zsh new file mode 100644 index 0000000..bcf4f77 --- /dev/null +++ b/config/zsh/conf.d/keybindings.zsh @@ -0,0 +1,7 @@ +# Key bindings (beyond what prezto's editor module provides) + +bindkey '^H' backward-kill-word # Ctrl+Backspace +bindkey '^[^?' backward-kill-word # Ctrl+Alt+Backspace +bindkey '^_' undo # Ctrl+/ +bindkey '^[/' redo # Alt+/ +bindkey '^[[3;5~' kill-word # Ctrl+Del: delete word after cursor diff --git a/config/zsh/conf.d/options.zsh b/config/zsh/conf.d/options.zsh new file mode 100644 index 0000000..9f3b6ea --- /dev/null +++ b/config/zsh/conf.d/options.zsh @@ -0,0 +1,9 @@ +# Shell options + +setopt glob_dots # no special treatment for file names with a leading dot +setopt auto_menu # show completion menu on successive tab presses + +# Completion styling +zstyle ':completion:*' menu select # arrow-navigable menu with highlight +zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # color completions using LS_COLORS +zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # case-insensitive matching diff --git a/config/zsh/p10k/p10k.zsh b/config/zsh/p10k/p10k.zsh new file mode 100644 index 0000000..82537a9 --- /dev/null +++ b/config/zsh/p10k/p10k.zsh @@ -0,0 +1,1704 @@ +# Generated by Powerlevel10k configuration wizard on 2026-02-10 at 12:19 CET. +# Based on romkatv/powerlevel10k/config/p10k-lean.zsh, checksum 26839. +# Wizard options: nerdfont-v3 + powerline, small icons, unicode, lean, 1 line, compact, +# few icons, concise, instant_prompt=verbose. +# Type `p10k configure` to generate another config. +# +# Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate +# your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # os_icon # os identifier + dir # current directory + vcs # git status + prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + status # exit code of the last command + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + # terraform_version # terraform version (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + toolbox # toolbox name (https://github.com/containers/toolbox) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + lf # lf shell (https://github.com/gokcehan/lf) + xplr # xplr shell (https://github.com/sayanarijit/xplr) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + chezmoi_shell # chezmoi shell (https://www.chezmoi.io/) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + per_directory_history # Oh My Zsh per-directory-history local/global indicator + # cpu_arch # CPU architecture + # time # current time + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-v3 + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=none + + # Basic style options that define the overall look of your prompt. You probably don't want to + # change them. + typeset -g POWERLEVEL9K_BACKGROUND= # transparent background + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=false + + # Connect left prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX= + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX= + + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + # Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll + # probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and + # POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below. + typeset -g POWERLEVEL9K_SHOW_RULER=false + typeset -g POWERLEVEL9K_RULER_CHAR='─' # reasonable alternative: '·' + typeset -g POWERLEVEL9K_RULER_FOREGROUND=242 + + # Filler between left and right prompt on the first prompt line. You can set it to '·' or '─' + # to make it easier to see the alignment between left and right prompt and to separate prompt + # from command output. It serves the same purpose as ruler (see above) without increasing + # the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false + # if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact + # prompt. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=242 + # Add a space between the end of left prompt and the filler. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' ' + # Add a space between the filler and the start of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' ' + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND= + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='' + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + + ##################################[ dir: current directory ]################################## + # Default current directory color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=22 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER="." + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=22 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=28 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-versions + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin ' + + #####################################[ vcs: git status ]###################################### + # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + if (( $1 )); then + # Styling for up-to-date Git status. + local meta='%f' # default foreground + local clean='%76F' # green foreground + local modified='%178F' # yellow foreground + local untracked='%39F' # blue foreground + local conflicted='%196F' # red foreground + else + # Styling for incomplete and stale Git status. + local meta='%244F' # grey foreground + local clean='%244F' # grey foreground + local modified='%244F' # grey foreground + local untracked='%244F' # grey foreground + local conflicted='%244F' # grey foreground + fi + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # Display "wip" if the latest commit's summary contains "wip" or "WIP". + if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then + res+=" ${modified}wip" + fi + + if (( VCS_STATUS_COMMITS_AHEAD || VCS_STATUS_COMMITS_BEHIND )); then + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + elif [[ -n $VCS_STATUS_REMOTE_BRANCH ]]; then + # Tip: Uncomment the next line to display '=' if up to date with the remote. + # res+=" ${clean}=" + fi + + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Icon color. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 + typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 + # Custom icon. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION= + # Custom prefix. + # typeset -g POWERLEVEL9K_VCS_PREFIX='%fon ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg repository. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + # These settings are used for repositories other than Git or when gitstatusd fails and + # Powerlevel10k has to fall back to using vcs_info. + typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=false + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=false + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + + ###################[ command_execution_time: duration of the last command ]################### + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=101 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION= + # Custom prefix. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### + # lf shell color. + typeset -g POWERLEVEL9K_LF_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## + # xplr shell color. + typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 + + # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. + # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################[ chezmoi_shell: chezmoi shell (https://www.chezmoi.io/) ]################## + # chezmoi shell color. + typeset -g POWERLEVEL9K_CHEZMOI_SHELL_FOREGROUND=33 + # Custom icon. + # typeset -g POWERLEVEL9K_CHEZMOI_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ per_directory_history: Oh My Zsh per-directory-history local/global indicator ]####### + # Color when using local/global history. + typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_FOREGROUND=135 + typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_FOREGROUND=130 + + # Tip: Uncomment the next two lines to hide "local"/"global" text and leave just the icon. + # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_CONTENT_EXPANSION='' + # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_CONTENT_EXPANSION='' + + # Custom icon. + # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ cpu_arch: CPU architecture ]################################ + # CPU architecture color. + typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=172 + + # Hide the segment when on a specific CPU architecture. + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 + + # Context format when running with privileges: bold user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or + # starts with "$P9K_PYENV_PYTHON_VERSION/". + # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 + # If set to false, hide node version if it's the same as default: + # $(nvm version current) == $(nvm version default). + typeset -g POWERLEVEL9K_NVM_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NVM_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ + # Perlbrew color. + typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 + # Show perlbrew version only when in a perl project subdirectory. + typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true + # Don't show "perl-" at the front. + typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide php version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor|cmctl|sparkctl' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat ' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ terraform_version: terraform version (https://www.terraform.io) ]############## + # Terraform version color. + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|cdk|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # AWS segment format. The following parameters are available within the expansion. + # + # - P9K_AWS_PROFILE The name of the current AWS profile. + # - P9K_AWS_REGION The region associated with the current AWS profile. + typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AZURE_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current azure account name gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AZURE_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AZURE_CLASSES defines the account class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AZURE_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current azure account is "company_test", its class is TEST because "company_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AZURE_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AZURE_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AZURE_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AZURE_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_OTHER_FOREGROUND=32 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### + # Toolbox color. + typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178 + # Don't display the name of the toolbox if it matches fedora-toolbox-*. + typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' + # Custom icon. + # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%fin ' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_FOREGROUND=38 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+------------------------------------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt + # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='$P9K_IP_IP${P9K_IP_RX_RATE:+ %70F⇣$P9K_IP_RX_RATE}${P9K_IP_TX_RATE:+ %215F⇡$P9K_IP_TX_RATE}' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES='\UF008E\UF007A\UF007B\UF007C\UF007D\UF007E\UF007F\UF0080\UF0081\UF0082\UF0079' + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION= + # Custom prefix. + # typeset -g POWERLEVEL9K_TIME_PREFIX='%fat ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -f 208 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..b9a195c --- /dev/null +++ b/install.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +set -euo pipefail + +DOTFILES="$(cd "$(dirname "$0")" && pwd)" + +# --- package manager detection --- + +install_packages() { + if command -v pacman &>/dev/null; then + sudo pacman -S --needed "$@" + elif command -v apt &>/dev/null; then + sudo apt install -y "$@" + elif command -v dnf &>/dev/null; then + sudo dnf install -y "$@" + else + echo "No supported package manager found (pacman/apt/dnf)" >&2 + return 1 + fi +} + +# --- dependencies --- + +if command -v pacman &>/dev/null; then + install_packages \ + git zsh neovim ripgrep fd fzf \ + clang rust-analyzer lua-language-server stylua cmake \ + tinymist websocat \ + ttf-firacode-nerd +elif command -v apt &>/dev/null; then + install_packages \ + git zsh neovim ripgrep fd-find fzf \ + clangd rust-analyzer cmake \ + fonts-firacode +elif command -v dnf &>/dev/null; then + install_packages \ + git zsh neovim ripgrep fd-find fzf \ + clang-tools-extra rust-analyzer cmake \ + fira-code-fonts +fi + +# --- symlinks --- + +for dir in "$DOTFILES"/config/*/; do + ln -sfn "$dir" "$HOME/.config/$(basename "$dir")" +done + +# --- system config --- + +sudo install -Dm644 "$DOTFILES/system/zshenv" /etc/zsh/zshenv diff --git a/system/zshenv b/system/zshenv new file mode 100644 index 0000000..11fc495 --- /dev/null +++ b/system/zshenv @@ -0,0 +1,9 @@ +if [[ -z "$XDG_CONFIG_HOME" ]] +then + export XDG_CONFIG_HOME="$HOME/.config/" +fi + +if [[ -d "$XDG_CONFIG_HOME/zsh" ]] +then + export ZDOTDIR="$XDG_CONFIG_HOME/zsh/" +fi