From 6c728033f25cce2baa2f0793937402c8b5de5bde Mon Sep 17 00:00:00 2001 From: Jake Ginesin Date: Mon, 19 Jan 2026 20:33:18 -0500 Subject: [PATCH] initial commit --- README.md | 4 + flake.lock | 165 ++ flake.nix | 56 + home/home.nix | 31 + home/programs/alacritty/alacritty.toml | 39 + home/programs/alacritty/default.nix | 11 + home/programs/nvim/default.nix | 154 ++ home/programs/nvim/init.lua | 198 ++ home/programs/nvim/init.vim | 158 ++ home/programs/nvim/plugins/airline.lua | 30 + home/programs/nvim/plugins/barbar.lua | 76 + home/programs/nvim/plugins/goyo.lua | 71 + home/programs/nvim/plugins/lualine.lua | 67 + home/programs/nvim/plugins/luasnip.lua | 31 + .../nvim/plugins/markdown-preview-nvim.lua | 4 + home/programs/nvim/plugins/mini-animate.lua | 19 + home/programs/nvim/plugins/neovide.lua | 0 home/programs/nvim/plugins/nerdcommenter.lua | 6 + home/programs/nvim/plugins/nvimtree.lua | 58 + home/programs/nvim/plugins/presenting.lua | 1 + home/programs/nvim/plugins/smear.lua | 11 + home/programs/nvim/plugins/telescope.lua | 10 + home/programs/nvim/plugins/tokyonight.lua | 31 + home/programs/nvim/plugins/treesitter.lua | 16 + home/programs/nvim/plugins/vimtex.lua | 53 + home/programs/nvim/snippets/all.lua | 45 + home/programs/nvim/snippets/markdown.lua | 284 +++ home/programs/nvim/snippets/nix.lua | 79 + home/programs/nvim/snippets/tex.lua | 801 ++++++++ home/programs/programs.nix | 14 + home/programs/zsh/default.nix | 45 + home/programs/zsh/p10k | 1641 +++++++++++++++++ home/programs/zsh/zshrc | 185 ++ hosts/s1901/configuration.nix | 24 + hosts/s1901/hardware-configuration.nix | 30 + hosts/s1902/configuration.nix | 24 + hosts/s1903/configuration.nix | 24 + hosts/s1904/configuration.nix | 24 + hosts/s1905/configuration.nix | 24 + hosts/s1906/configuration.nix | 24 + system/disko-config.nix | 37 + system/ssh.nix | 23 + system/system.nix | 101 + 43 files changed, 4729 insertions(+) create mode 100644 README.md create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 home/home.nix create mode 100644 home/programs/alacritty/alacritty.toml create mode 100644 home/programs/alacritty/default.nix create mode 100644 home/programs/nvim/default.nix create mode 100644 home/programs/nvim/init.lua create mode 100644 home/programs/nvim/init.vim create mode 100644 home/programs/nvim/plugins/airline.lua create mode 100644 home/programs/nvim/plugins/barbar.lua create mode 100644 home/programs/nvim/plugins/goyo.lua create mode 100644 home/programs/nvim/plugins/lualine.lua create mode 100644 home/programs/nvim/plugins/luasnip.lua create mode 100644 home/programs/nvim/plugins/markdown-preview-nvim.lua create mode 100644 home/programs/nvim/plugins/mini-animate.lua create mode 100644 home/programs/nvim/plugins/neovide.lua create mode 100644 home/programs/nvim/plugins/nerdcommenter.lua create mode 100644 home/programs/nvim/plugins/nvimtree.lua create mode 100644 home/programs/nvim/plugins/presenting.lua create mode 100644 home/programs/nvim/plugins/smear.lua create mode 100644 home/programs/nvim/plugins/telescope.lua create mode 100644 home/programs/nvim/plugins/tokyonight.lua create mode 100644 home/programs/nvim/plugins/treesitter.lua create mode 100644 home/programs/nvim/plugins/vimtex.lua create mode 100644 home/programs/nvim/snippets/all.lua create mode 100644 home/programs/nvim/snippets/markdown.lua create mode 100644 home/programs/nvim/snippets/nix.lua create mode 100644 home/programs/nvim/snippets/tex.lua create mode 100644 home/programs/programs.nix create mode 100644 home/programs/zsh/default.nix create mode 100644 home/programs/zsh/p10k create mode 100644 home/programs/zsh/zshrc create mode 100644 hosts/s1901/configuration.nix create mode 100644 hosts/s1901/hardware-configuration.nix create mode 100644 hosts/s1902/configuration.nix create mode 100644 hosts/s1903/configuration.nix create mode 100644 hosts/s1904/configuration.nix create mode 100644 hosts/s1905/configuration.nix create mode 100644 hosts/s1906/configuration.nix create mode 100644 system/disko-config.nix create mode 100644 system/ssh.nix create mode 100644 system/system.nix diff --git a/README.md b/README.md new file mode 100644 index 0000000..1731bbf --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +nix run github:nix-community/nixos-anywhere -- \ + --generate-hardware-config nixos-generate-config ./hosts/s1901/hardware-configuration.nix \ + --flake .#s1901 \ + root@192.168.1.50 diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..6b81f5a --- /dev/null +++ b/flake.lock @@ -0,0 +1,165 @@ +{ + "nodes": { + "agenix": { + "inputs": { + "darwin": "darwin", + "home-manager": "home-manager", + "nixpkgs": "nixpkgs", + "systems": "systems" + }, + "locked": { + "lastModified": 1762618334, + "narHash": "sha256-wyT7Pl6tMFbFrs8Lk/TlEs81N6L+VSybPfiIgzU8lbQ=", + "owner": "ryantm", + "repo": "agenix", + "rev": "fcdea223397448d35d9b31f798479227e80183f6", + "type": "github" + }, + "original": { + "owner": "ryantm", + "repo": "agenix", + "type": "github" + } + }, + "darwin": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1744478979, + "narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "43975d782b418ebf4969e9ccba82466728c2851b", + "type": "github" + }, + "original": { + "owner": "lnl7", + "ref": "master", + "repo": "nix-darwin", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768727946, + "narHash": "sha256-le2GY+ZR6uRHMuOAc60sBR3gBD2BEk1qOZ3S5C/XFpU=", + "owner": "nix-community", + "repo": "disko", + "rev": "558e84658d0eafc812497542ad6ca0d9654b3b0f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1745494811, + "narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768836546, + "narHash": "sha256-nJZkTamcXXMW+SMYiGFB6lB8l0aJw0xjssfN8xYd/Fs=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "b56c5ad14fcf8b5bc887463552483bf000ca562a", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1754028485, + "narHash": "sha256-IiiXB3BDTi6UqzAZcf2S797hWEPCRZOwyNThJIYhUfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "59e69648d345d6e8fef86158c555730fa12af9de", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1768564909, + "narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "agenix": "agenix", + "disko": "disko", + "home-manager": "home-manager_2", + "nixpkgs": "nixpkgs_2" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..d553b86 --- /dev/null +++ b/flake.nix @@ -0,0 +1,56 @@ +{ + description = "NixOS server base system configuration"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + agenix.url = "github:ryantm/agenix"; + + disko = { + url = "github:nix-community/disko"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + outputs = { + self, + nixpkgs, + home-manager, + agenix, + disko, + } @ inputs: let + system = "x86_64-linux"; + + # hostnames + # hosts = ["s1901" "s1902" "s1903" "s1904" "s1905" "s1906" ]; + hosts = ["s1901"]; + + baseModule = {lib, ...}: { + imports = [ + home-manager.nixosModules.default + agenix.nixosModules.default + disko.nixosModules.disko + ]; + system.configurationRevision = lib.mkIf (self ? rev) self.rev; + environment.systemPackages = [ + agenix.packages.${system}.default + ]; + }; + + mkHost = name: { + name = name; + value = nixpkgs.lib.nixosSystem { + modules = [ + baseModule + ./hosts/${name}/configuration.nix + ]; + }; + }; + in { + nixosConfigurations = builtins.listToAttrs (map mkHost hosts); + }; +} + diff --git a/home/home.nix b/home/home.nix new file mode 100644 index 0000000..ffad220 --- /dev/null +++ b/home/home.nix @@ -0,0 +1,31 @@ +{ + config, + pkgs, + lib, + ... +}: { + home.username = "synchronous"; + home.homeDirectory = "/home/synchronous"; + home.stateVersion = "25.11"; + imports = [ + ./programs/programs.nix + ]; + + home.sessionVariables = { + EDITOR = "nvim"; + SHELL = "/etc/profiles/per-user/synchronous/bin/zsh"; # just zsh no longer works? + HOME = "/home/synchronous"; + # XDG_CACHE_HOME = "$HOME/.cache"; + DBUS_SESSION_BUS_ADDRESS = "unix:path=$XDG_RUNTIME_DIR/bus"; + }; + + programs.home-manager.enable = true; + + home.packages = with pkgs; + [ + netcat + neovim + firefox + ]; + +} diff --git a/home/programs/alacritty/alacritty.toml b/home/programs/alacritty/alacritty.toml new file mode 100644 index 0000000..299eca4 --- /dev/null +++ b/home/programs/alacritty/alacritty.toml @@ -0,0 +1,39 @@ +[colors.bright] +black = "#5c5855" +blue = "#01a0e4" +cyan = "#b5e4f4" +green = "#01a252" +magenta = "#a16a94" +red = "#db2d20" +white = "#f7f7f7" +yellow = "#fded02" + +[colors.cursor] +cursor = "#a5a2a2" +text = "#090300" + +[colors.normal] +black = "#090300" +blue = "#01a0e4" +cyan = "#b5e4f4" +green = "#01a252" +magenta = "#a16a94" +red = "#db2d20" +white = "#a5a2a2" +yellow = "#fded02" + +[colors.primary] +background = "#0d0d0d" +foreground = "#a5a2a2" + +[font] +size = 7.0 +[font.normal] +family = "monospace" +style = "Regular" + +[terminal] + +[terminal.shell] +program = "/etc/profiles/per-user/synchronous/bin/zsh" + diff --git a/home/programs/alacritty/default.nix b/home/programs/alacritty/default.nix new file mode 100644 index 0000000..3c786b7 --- /dev/null +++ b/home/programs/alacritty/default.nix @@ -0,0 +1,11 @@ +{ + builtins, + lib, + ... +}: { + programs.alacritty = { + enable = true; + }; + + programs.alacritty.settings = lib.trivial.importTOML ./alacritty.toml; +} diff --git a/home/programs/nvim/default.nix b/home/programs/nvim/default.nix new file mode 100644 index 0000000..01c22c9 --- /dev/null +++ b/home/programs/nvim/default.nix @@ -0,0 +1,154 @@ +# ref: https://github.com/vimjoyer/nvim-nix-video/blob/main/home.nix +{ + pkgs, + lib, + ... +}: { + programs.neovim = let + toLua = str: "lua << EOF\n${str}\nEOF\n"; + toLuaFile = file: "lua << EOF\n${builtins.readFile file}\nEOF\n"; + in { + enable = true; + + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + + extraLuaConfig = '' + ${builtins.readFile ./init.lua} + ''; + + extraPackages = with pkgs; [ + lua-language-server + # rnix-lsp + + xclip + wl-clipboard + ripgrep + fd + lua-language-server + rust-analyzer-unwrapped + black + nodejs_22 + latexrun + tectonic + texpresso + # gh + ]; + + plugins = with pkgs.vimPlugins; [ + vim-nix + vim-airline-themes + plenary-nvim + nvim-web-devicons + texpresso-vim + # { + # plugin = smear-cursor-nvim; + # config = toLuaFile ./plugins/smear.lua; + # } + # { + # plugin = neovide; + # config = toLuaFile ./plugins/neovide.lua; + # } + # { worthless plugin don't use + # plugin = mini-animate; + # config = toLuaFile ./plugins/mini-animate.lua; + # } + { + plugin = telescope-nvim; + config = toLuaFile ./plugins/telescope.lua; + } + { + plugin = presenting-vim; + config = toLuaFile ./plugins/presenting.lua; + } + # coc-nvim + { + plugin = vimtex; + config = toLuaFile ./plugins/vimtex.lua; + } + { + plugin = goyo-vim; + config = toLuaFile ./plugins/goyo.lua; + } + { + plugin = tokyonight-nvim; + config = toLuaFile ./plugins/tokyonight.lua; + } + { + plugin = nerdcommenter; + config = toLuaFile ./plugins/nerdcommenter.lua; + } + { + plugin = nvim-tree-lua; + config = toLuaFile ./plugins/nvimtree.lua; + } + # { + # plugin = vim-airline; + # config = toLuaFile ./plugins/airline.lua; + # } + { + plugin = markdown-preview-nvim; + config = toLuaFile ./plugins/markdown-preview-nvim.lua; + } + { + plugin = barbar-nvim; + config = toLuaFile ./plugins/barbar.lua; + } + { + # the most helpful thing is this guy: https://ejmastnak.com/tutorials/vim-latex/luasnip/ + plugin = luasnip; + config = toLuaFile ./plugins/luasnip.lua; + } + { + plugin = lualine-nvim; + config = toLuaFile ./plugins/lualine.lua; + } + { + plugin = nvim-treesitter.withPlugins (p: [ + # p.tree-sitter-nix + # p.tree-sitter-vim + # p.tree-sitter-bash + # p.tree-sitter-lua + # p.tree-sitter-python + # p.tree-sitter-json + p.bash + p.comment + p.css + p.dockerfile + p.fish + p.gitattributes + p.gitignore + p.go + p.gomod + p.gowork + p.hcl + p.javascript + p.jq + p.json5 + p.json + p.lua + p.make + p.markdown + p.nix + p.python + p.rust + p.toml + p.typescript + p.yaml + p.agda + ]); + config = toLuaFile ./plugins/treesitter.lua; + } + ]; + + # extraConfig = lib.fileContents ./init.vim; + }; + + # copy the snippets :# + home.activation.copySnippetsDir = lib.mkAfter '' + mkdir -p ~/.config/nvim/snippets + cp -r ${./snippets}/* ~/.config/nvim/snippets/ + chmod -R u+w ~/.config/nvim/snippets/ + ''; +} diff --git a/home/programs/nvim/init.lua b/home/programs/nvim/init.lua new file mode 100644 index 0000000..27fb8e6 --- /dev/null +++ b/home/programs/nvim/init.lua @@ -0,0 +1,198 @@ +-- ========================================================= +-- FILE: init.lua +-- A translation of the provided Vimscript config to Lua. +-- ========================================================= + +-- filetype detection / plugin / indent +vim.cmd([[ + filetype on + filetype plugin on + filetype indent on + syntax on +]]) + +-- Basic UI +vim.opt.number = true -- set number +vim.opt.relativenumber = false -- 'set nu' in Vimscript doesn't mean relative. If you prefer relativenumber, set it to true +vim.opt.showcmd = true +vim.opt.showmode = true +vim.opt.showmatch = true -- highlights matching brackets +vim.opt.hlsearch = true +vim.opt.history = 1000 +vim.opt.wrap = false +vim.opt.scrolloff = 10 +vim.opt.incsearch = true +vim.opt.ignorecase = true +vim.opt.smartcase = true + + +-- Tab / indentation +vim.opt.tabstop = 2 +vim.opt.softtabstop = 2 +vim.opt.shiftwidth = 2 +vim.opt.smarttab = true +vim.opt.cindent = true +vim.opt.expandtab = true + +-- Turn off backups, swaps +vim.opt.backup = false +vim.opt.swapfile = false +vim.opt.undofile = true +vim.opt.undodir = os.getenv("HOME") .. "/.local/share/nvim/cache" + +-- For line length column marking +vim.opt.colorcolumn = "0" +vim.opt.textwidth = 0 -- alternative if you want no fixed textwidth + +-- Some other miscellaneous settings +vim.opt.shortmess:append("c") -- don't give |ins-completion-menu| messages +vim.opt.wildmenu = true +vim.opt.wildmode = { "longest", "list" } +vim.opt.wildignore:append({ + "*.docx", "*.jpg", "*.png", "*gif", "*.pdf", "*.pyc", + "*.exe", "*.flv", "*.img", "*.png" +}) +vim.opt.termguicolors = true -- truecolor mode +vim.opt.mouse = "a" -- enable mouse +vim.opt.splitright = true +vim.opt.splitbelow = true +vim.opt.updatetime = 300 -- faster completion +vim.opt.signcolumn = "auto" +vim.opt.title = true +vim.opt.titlestring = "%F - NVIM" -- File path and "Neovim" branding +-- vim.opt.titlestring = "%(%{expand(\"%:~:h\")}%)#%(% t%)%(% M%)%(% )NVIM" + +-- Append '+' register to clipboard +vim.opt.clipboard:append("unnamedplus") + +-- Stop showing matching paren (and disable matchparen plugin) +vim.g.loaded_matchparen = 1 +vim.opt.showmatch = false + +-- t_ZH, t_ZR (italics) — for older terminal support +vim.cmd([[ let &t_ZH = "\e[3m" ]]) +vim.cmd([[ let &t_ZR = "\e[23m" ]]) + +-- netrw settings +vim.g.netrw_banner = 0 +vim.g.netrw_liststyle = 0 +vim.g.netrw_browse_split = 4 +vim.g.netrw_altv = 1 +vim.g.netrw_winsize = 25 +vim.g.netrw_keepdir = 0 +vim.g.netrw_localcopydircmd = "cp -r" + +-- Remember cursor location (viminfo) +vim.opt.viminfo = "'100,\"2500,:200,%,n~/.cache/.viminfo" + +-- Encodings +vim.opt.fileencodings = { "utf-8" } +vim.opt.encoding = "utf-8" + +-- Leader key +vim.g.mapleader = "," + +vim.opt_local.conceallevel = 0 +vim.opt_local.foldmethod = 'manual' +-- Keep treesitter, ditch legacy syntax: +vim.g.markdown_fenced_languages = {} + +vim.opt.shell = "zsh" + +vim.loader.enable() + +------------------------------------------------------ +-- KEY MAPPINGS +------------------------------------------------------ +local opts = { noremap = true, silent = true } + +-- Clear search highlights when pressing ESC in normal mode +vim.api.nvim_set_keymap("n", "", ":noh", opts) + +-- The literal mapping from the original: "nnoremap ^[ ^[" +vim.api.nvim_set_keymap("n", "^[", "^[", { noremap = true }) + +-- inoremap { {}O} +vim.api.nvim_set_keymap("i", "{", "{}O", { noremap = true }) + +local map = vim.keymap.set +local opts = { noremap = true, silent = true } +-- yank link +map("n", "yl", "?\\](lvi)ynohlsearch", opts) + +-- Save file with Ctrl+S +vim.cmd([[ + command -nargs=0 -bar Update if &modified + \| if empty(bufname('%')) + \| browse confirm write + \| else + \| confirm write + \| endif + \|endif +]]) +vim.api.nvim_set_keymap("n", "", ":Update", opts) +vim.api.nvim_set_keymap("i", "", ":Update", opts) + +-- Terminal toggles +vim.api.nvim_set_keymap("n", "", ":termA", { noremap = true, silent = false }) +vim.api.nvim_set_keymap("t", "", [[]], { noremap = true }) + +-- "Focus" commands that rely on the Goyo plugin +-- vim.api.nvim_set_keymap("n", "z", ":Goyo 80", opts) +-- vim.api.nvim_set_keymap("n", "q", ":Goyo!", opts) + +-- Movements in visual mode +vim.api.nvim_set_keymap("x", "", "b", { noremap = true }) +vim.api.nvim_set_keymap("x", "", "w", { noremap = true }) + +-- Map Ctrl-Backspace to delete the previous word in insert mode +vim.api.nvim_set_keymap("i", "", "", { noremap = true }) +vim.api.nvim_set_keymap("i", "", "", { noremap = true }) + +-- nagiation +vim.api.nvim_set_keymap('n', '', 'h', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('n', '', 'j', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('n', '', 'k', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('n', '', 'l', { noremap = true, silent = true }) + +------------------------------------------------------ +-- AUTOCMD +------------------------------------------------------ +local wrapLineInTexFile = vim.api.nvim_create_augroup("WrapLineInTexFile", { clear = true }) +vim.api.nvim_create_autocmd("FileType", { + pattern = { "md" }, + group = wrapLineInTexFile, + command = "setlocal wrap" +}) + +vim.api.nvim_create_augroup("vimrc", { clear = true }) + +-- vim.api.nvim_create_autocmd("FileType", { + -- desc = "texpresso compile", + -- group = "vimrc", + -- pattern = "tex", + -- callback = function(args) + -- -- start server on first BufWrite + -- vim.api.nvim_create_autocmd("BufWritePost", { + -- group = vim.api.nvim_create_augroup( + -- string.format("latex", args.buf), + -- { clear = true } + -- ), + -- buffer = args.buf, + -- callback = function() + -- if not vim.b.latex_started then + -- vim.cmd "TeXpresso %" + -- vim.b.latex_started = true + -- end + -- -- vim.cmd "VimtexView" + -- end, + -- }) + -- end, +-- }) + +-- idk why i need to define it here bro +-- local builtin = require('telescope.builtin') +-- vim.keymap.set('n', 'ff', builtin.find_files, { desc = 'Telescope find files' }) +-- vim.keymap.set('n', 'fg', builtin.live_grep, { desc = 'Telescope live grep' }) +-- vim.keymap.set('n', 'fb', builtin.buffers, { desc = 'Telescope buffers' }) +-- vim.keymap.set('n', 'fh', builtin.help_tags, { desc = 'Telescope help tags' }) diff --git a/home/programs/nvim/init.vim b/home/programs/nvim/init.vim new file mode 100644 index 0000000..4f2cf65 --- /dev/null +++ b/home/programs/nvim/init.vim @@ -0,0 +1,158 @@ +set nocompatible +filetype on +filetype plugin on +filetype indent on + +" syntax on +syntax on + +" num highlighting on +set number + +" tab stuff +set shiftwidth=4 +set tabstop=4 +set softtabstop=4 +set expandtab + +set nobackup +set scrolloff=10 +set incsearch +set ignorecase +set filetype=on +set smartcase +set nowrap +set showcmd +set showmode +set showmatch +set hlsearch +set history=1000 +set wildmenu +set wildmode=list:longest +set wildignore=*.docx,*.jpg,*.png,*gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.png +set noswapfile +set wildmode=longest,list +set cc=80 +set colorcolumn=0 +set t_Co=256 +let s:fontsize = 12 + +" don't give |ins-completion-menu| messages. +set shortmess+=c + +" Clear highlighting on escape in normal mode +nnoremap :noh +nnoremap ^[ ^[ + +" update everything, faster completion +set updatetime=300 + +" auto signcolumn +set signcolumn=auto + +" set terminal title to vim +set title +set titlestring=%(%{expand(\"%:~:h\")}%)#%(\ %t%)%(\ %M%)%(\ %)NVIM + +" Italics +let &t_ZH="\e[3m" +let &t_ZR="\e[23m" + +" File browser +let g:netrw_banner=0 +let g:netrw_liststyle=0 +let g:netrw_browse_split=4 +let g:netrw_altv=1 +let g:netrw_winsize=25 +let g:netrw_keepdir=0 +let g:netrw_localcopydircmd='cp -r' + +" Defualt Clipboard +set clipboard+=unnamedplus + +" true colors, needs patched urxvt or st to work right +set termguicolors + +" set mouse on +set mouse=a + +" https://stackoverflow.com/questions/34675677/disable-highlight-matched-parentheses-in-vim-let-loaded-matchparen-1-not-w +let loaded_matchparen = 1 +set noshowmatch + +inoremap {}O} +set splitright +set splitbelow + +" auto file wrap for certain types of files + +" save file w/ ctrl+s +command -nargs=0 -bar Update if &modified + \| if empty(bufname('%')) + \| browse confirm write + \| else + \| confirm write + \| endif + \|endif +nnoremap :Update +inoremap :Update + +" set relativenumber +set nu + +" cursor blinkage +" set guicursor=v-c:block,i-ci-ve:ver25,r-cr:hor20,o:hor50,a:blinkwait1700-blinkoff400-blinkon950-Cursor/lCursor,sm:block,n:block-blinkon0 + +set smarttab +set cindent +set tabstop=2 +set softtabstop=2 +set shiftwidth=2 + +" always uses spaces instead of tab characters +set expandtab + +" keep undos in a file +set undofile +set undodir=~/.local/share/nvim/cache + +" lines to keep cursor vertically centered +set scrolloff=10 + +" remember cursor location +set viminfo='100,\"2500,:200,%,n~/.cache/.viminfo + +" set encodings +set fileencodings=utf-8 +set encoding=utf-8 + +" Map Ctrl-Backspace to delete the previous word in insert mode. +imap +imap + +augroup WrapLineInTexFile + autocmd! + autocmd FileType md setlocal wrap +augroup END + +" term toggle +map :termA + +" exit terminal mode mapping +tnoremap + +" nnoremap sj:resize 20:terminal + +" coq leader +let mapleader = "," + +" Focus commands +nnoremap z :Goyo 80 +nnoremap q :Goyo! + +" mapping control h,l to move forward and backward an entire word +" nnoremap b +" nnoremap w + +xnoremap b +xnoremap w diff --git a/home/programs/nvim/plugins/airline.lua b/home/programs/nvim/plugins/airline.lua new file mode 100644 index 0000000..8afda13 --- /dev/null +++ b/home/programs/nvim/plugins/airline.lua @@ -0,0 +1,30 @@ +-- Set airline theme +vim.g.airline_theme = 'simple' + +-- Initialize airline symbols if not already defined +vim.g.airline_symbols = vim.g.airline_symbols or {} + +-- Configure airline symbols +vim.g.airline_symbols.crypt = '🔒' +vim.g.airline_symbols.linenr = '☰' +vim.g.airline_symbols.maxlinenr = '' +vim.g.airline_symbols.paste = 'ρ' +vim.g.airline_symbols.spell = 'Ꞩ' +vim.g.airline_symbols.notexists = 'Ɇ' +vim.g.airline_symbols.whitespace = 'Ξ' + +-- Powerline symbols (requires appropriate fonts) +vim.g.airline_left_sep = '' +vim.g.airline_left_alt_sep = '' +vim.g.airline_right_sep = '' +vim.g.airline_right_alt_sep = '' +vim.g.airline_symbols.branch = '' +vim.g.airline_symbols.linenr = '☰ ' + +-- Configure bufferline extension +-- vim.g.airline#extensions#tabline#enabled = 1 +vim.g.airline_extensions_tabline_formatter = 'unique_tail' + +-- Set global statusline +vim.opt.laststatus = 3 + diff --git a/home/programs/nvim/plugins/barbar.lua b/home/programs/nvim/plugins/barbar.lua new file mode 100644 index 0000000..4df419f --- /dev/null +++ b/home/programs/nvim/plugins/barbar.lua @@ -0,0 +1,76 @@ +local map = vim.api.nvim_set_keymap +local opts = { noremap = true, silent = true } + +-- Move to previous/next +map('n', '', 'BufferPrevious', opts) +map('n', '', 'BufferNext', opts) + +-- Re-order to previous/next +map('n', '', 'BufferMovePrevious', opts) +map('n', '>', 'BufferMoveNext', opts) + +-- Goto buffer in position... +map('n', '', 'BufferGoto 1', opts) +map('n', '', 'BufferGoto 2', opts) +map('n', '', 'BufferGoto 3', opts) +map('n', '', 'BufferGoto 4', opts) +map('n', '', 'BufferGoto 5', opts) +map('n', '', 'BufferGoto 6', opts) +map('n', '', 'BufferGoto 7', opts) +map('n', '', 'BufferGoto 8', opts) +map('n', '', 'BufferGoto 9', opts) +map('n', '', 'BufferLast', opts) + +-- Pin/unpin buffer +map('n', '', 'BufferPin', opts) + +-- Goto pinned/unpinned buffer +-- :BufferGotoPinned +-- :BufferGotoUnpinned + +-- Close buffer +map('n', '', 'BufferClose', opts) + +-- Wipeout buffer +-- :BufferWipeout + +-- Close commands +-- :BufferCloseAllButCurrent +-- :BufferCloseAllButPinned +-- :BufferCloseAllButCurrentOrPinned +-- :BufferCloseBuffersLeft +-- :BufferCloseBuffersRight + +-- Magic buffer-picking mode +map('n', '', 'BufferPick', opts) +map('n', '', 'BufferPickDelete', opts) + +-- Sort automatically by... +map('n', 'bb', 'BufferOrderByBufferNumber', opts) +map('n', 'bn', 'BufferOrderByName', opts) +map('n', 'bd', 'BufferOrderByDirectory', opts) +map('n', 'bl', 'BufferOrderByLanguage', opts) +map('n', 'bw', 'BufferOrderByWindowNumber', opts) + +-- Other: +-- :BarbarEnable - enables barbar (enabled by default) +-- :BarbarDisable - very bad command, should never be used + +vim.g.barbar_auto_setup = false -- disable auto-setup + +require'barbar'.setup { + -- Enable/disable animations + animation = true, + + -- Automatically hide the tabline when there are this many buffers left. + -- Set to any value >=0 to enable. + auto_hide = false, + + -- Enable/disable current/total tabpages indicator (top right corner) + tabpages = true, + + -- Enables/disable clickable tabs + -- - left-click: go to buffer + -- - middle-click: delete buffer + clickable = true, +} diff --git a/home/programs/nvim/plugins/goyo.lua b/home/programs/nvim/plugins/goyo.lua new file mode 100644 index 0000000..e1fbd52 --- /dev/null +++ b/home/programs/nvim/plugins/goyo.lua @@ -0,0 +1,71 @@ +local opts = { noremap = true, silent = true } + +-- "Focus" commands that rely on the Goyo plugin +vim.api.nvim_set_keymap("n", "z", ":Goyo 80", opts) +vim.api.nvim_set_keymap("n", "q", ":Goyo!", opts) + +-- https://github.com/junegunn/goyo.vim/issues/180 +-- automatically resize goyo when nvim resizes +vim.api.nvim_create_autocmd("VimResized", { + callback = function() + if vim.t.goyo_master == 1 then + vim.cmd([[exe "normal \="]]) + end + end, +}) + +-- vim.api.nvim_create_autocmd("VimResized", { + -- callback = function() + -- if vim.fn.exists('#goyo') == 1 then + -- vim.cmd("normal =") + -- end + -- end, +-- }) + +-- hide and unhide lualine when entering and leaving goyo + +local lualine = require('lualine') +local grp = vim.api.nvim_create_augroup('goyo_lualine_toggle', { clear = true }) + +local function hide() lualine.hide{ place = {'statusline', 'winbar', 'tabline'} } end +local function unhide() lualine.hide{ place = {'statusline', 'winbar', 'tabline'}, unhide = true } end + + +vim.api.nvim_create_autocmd('User', { + group = grp, + pattern = 'GoyoEnter', + callback = function() + lualine.hide({ place = {'statusline', 'winbar', 'tabline'} }) + end, +}) + +vim.api.nvim_create_autocmd('User', { + group = grp, + pattern = 'GoyoLeave', + callback = function() + lualine.hide({ place = {'statusline', 'winbar', 'tabline'}, unhide = true }) + end, +}) + +vim.api.nvim_create_autocmd('VimEnter', { + group = grp, + once = true, + callback = function() + local w = vim.g.goyo_if + if w then + vim.schedule(hide) + end + end, +}) + +vim.api.nvim_create_autocmd('UIEnter', { + once = true, + group = grp, + callback = function() + local w = vim.g.goyo_if + if w then + vim.opt.showtabline = 0 + vim.cmd('BarbarDisable') + end + end, +}) diff --git a/home/programs/nvim/plugins/lualine.lua b/home/programs/nvim/plugins/lualine.lua new file mode 100644 index 0000000..f9a5214 --- /dev/null +++ b/home/programs/nvim/plugins/lualine.lua @@ -0,0 +1,67 @@ +-- Bubbles config for lualine +-- Author: lokesh-krishna +-- MIT license, see LICENSE for more details. + +-- stylua: ignore +-- ripped from https://lospec.com/palette-list/tokyo-night +local colors = { + blue = '#80a0ff', + cyan = '#79dac8', + black = '#080808', + white = '#c6c6c6', + red = '#ff5189', + violet = '#d183e8', + grey = '#303030', + deepblue = '#292e42', + deepcyan = '#3b4261', + deepred = '#c53b53', + lightblue = '#737aa2' +} + +local bubbles_theme = { + normal = { + a = { fg = colors.black, bg = colors.lightblue }, + b = { fg = colors.white, bg = colors.grey }, + c = { fg = colors.white }, + }, + + insert = { a = { fg = colors.black, bg = colors.deepblue } }, + visual = { a = { fg = colors.black, bg = colors.deepred } }, + replace = { a = { fg = colors.black, bg = colors.violet } }, + + inactive = { + a = { fg = colors.white, bg = colors.black }, + b = { fg = colors.white, bg = colors.black }, + c = { fg = colors.white }, + }, +} + +require('lualine').setup { + options = { + theme = bubbles_theme, + component_separators = '', + section_separators = { left = '', right = '' }, + }, + sections = { + lualine_a = { { 'mode', right_padding = 1 } }, + lualine_b = { 'filename', 'branch' }, + lualine_c = { + '%=', --[[ add your center compoentnts here in place of this comment ]] + }, + lualine_x = {}, + lualine_y = { 'filetype' ,'progress' }, + lualine_z = { + { 'location', left_padding = 1 }, + }, + }, + inactive_sections = { + lualine_a = { 'filename' }, + lualine_b = {}, + lualine_c = {}, + lualine_x = {}, + lualine_y = {}, + lualine_z = {}, + }, + tabline = {}, + extensions = {}, +} diff --git a/home/programs/nvim/plugins/luasnip.lua b/home/programs/nvim/plugins/luasnip.lua new file mode 100644 index 0000000..1d2ec57 --- /dev/null +++ b/home/programs/nvim/plugins/luasnip.lua @@ -0,0 +1,31 @@ +vim.cmd[[ +" Use Tab to expand and jump through snippets +imap luasnip#expand_or_jumpable() ? 'luasnip-expand-or-jump' : '' +smap luasnip#jumpable(1) ? 'luasnip-jump-next' : '' + +" Use Shift-Tab to jump backwards through snippets +imap luasnip#jumpable(-1) ? 'luasnip-jump-prev' : '' +smap luasnip#jumpable(-1) ? 'luasnip-jump-prev' : '' + +" Expand or jump in insert mode +imap luasnip#expand_or_jumpable() ? 'luasnip-expand-or-jump' : '' + +" Jump forward through tabstops in visual mode +smap luasnip#jumpable(1) ? 'luasnip-jump-next' : '' +]] + +require("luasnip").config.set_config({ -- Setting LuaSnip config + + -- Enable autotriggered snippets + enable_autosnippets = true, + + -- Use Tab (or some other key if you prefer) to trigger visual selection + store_selection_keys = "", +}) + +-- JAKENOTE, relative imports *do not work* with nixos. don't GG yourself blud. +require("luasnip.loaders.from_lua").load({ + paths = vim.fn.stdpath('config') .. "/snippets/" +}) + +-- require("luasnip.loaders.from_lua").lazy_load({paths = "./snippets/"}) diff --git a/home/programs/nvim/plugins/markdown-preview-nvim.lua b/home/programs/nvim/plugins/markdown-preview-nvim.lua new file mode 100644 index 0000000..a742414 --- /dev/null +++ b/home/programs/nvim/plugins/markdown-preview-nvim.lua @@ -0,0 +1,4 @@ +-- browser +vim.g.mkdp_browser = "firefox" +-- keybindings +vim.keymap.set("n", "m", "MarkdownPreview") diff --git a/home/programs/nvim/plugins/mini-animate.lua b/home/programs/nvim/plugins/mini-animate.lua new file mode 100644 index 0000000..eb02152 --- /dev/null +++ b/home/programs/nvim/plugins/mini-animate.lua @@ -0,0 +1,19 @@ +-- require('mini.animate').setup() + +-- require('mini.animate').setup({ + -- cursor = { + -- enable = true, + -- }, + -- scroll = { + -- enable = false, + -- }, + -- resize = { + -- enable = false, + -- }, + -- open = { + -- enable = false, + -- }, + -- close = { + -- enable = false, + -- }, +-- }) diff --git a/home/programs/nvim/plugins/neovide.lua b/home/programs/nvim/plugins/neovide.lua new file mode 100644 index 0000000..e69de29 diff --git a/home/programs/nvim/plugins/nerdcommenter.lua b/home/programs/nvim/plugins/nerdcommenter.lua new file mode 100644 index 0000000..5954ef0 --- /dev/null +++ b/home/programs/nvim/plugins/nerdcommenter.lua @@ -0,0 +1,6 @@ +vim.g.NERDSpaceDelims = 1; +vim.g.NERDAltDelims_c = 1; + +-- the _ key is actually / because nvim/vim does not recognize that! +-- vmap NERDCommenterToggle" +-- nmap NERDCommenterToggle diff --git a/home/programs/nvim/plugins/nvimtree.lua b/home/programs/nvim/plugins/nvimtree.lua new file mode 100644 index 0000000..4f3df88 --- /dev/null +++ b/home/programs/nvim/plugins/nvimtree.lua @@ -0,0 +1,58 @@ +-- buh https://gist.github.com/mrpmohiburrahman/b7ec0d47cd043d3a2ed4c10a20504d4e + +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 + +vim.opt.termguicolors = true + +local function my_on_attach(bufnr) + local api = require "nvim-tree.api" + + local function opts(desc) + return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } + end + + -- default mappings + api.config.mappings.default_on_attach(bufnr) + + vim.keymap.set("n", "+", api.tree.change_root_to_node, opts "CD") + vim.keymap.set("n", "?", api.tree.toggle_help, opts "Help") + vim.keymap.set("n", "", api.tree.close, opts "Close") + + -- custom mappings + -- vim.keymap.set('n', '', api.tree.open(), opts('Up')) + -- vim.keymap.set('n', '', api.tree.close(), opts('Up')) + -- vim.keymap.set('n', '?', api.tree.toggle_help, opts('Help')) +end + +vim.keymap.set("n", "", "NvimTreeToggle", { + desc = "Toggle NvimTree" +}) + +require('nvim-tree').setup() + +require('nvim-tree').setup({ + on_attach = my_on_attach, + sort_by = 'case_sensitive', + view = { + adaptive_size = false, + -- mappings = { + -- list = { + -- { key = 'u', action = 'dir_up' }, + -- }, + -- }, + width = 30, + }, + renderer = { + group_empty = true, + }, + filters = { + dotfiles = true, + exclude = {".git", ".jpg", ".mp4", ".ogg", ".iso", ".pdf", ".odt", ".png", ".gif", ".db", ".class"}, + }, + actions = { + open_file = { + resize_window = false + } + }, +}) diff --git a/home/programs/nvim/plugins/presenting.lua b/home/programs/nvim/plugins/presenting.lua new file mode 100644 index 0000000..47042df --- /dev/null +++ b/home/programs/nvim/plugins/presenting.lua @@ -0,0 +1 @@ +vim.b.presenting_slide_separator = "---" diff --git a/home/programs/nvim/plugins/smear.lua b/home/programs/nvim/plugins/smear.lua new file mode 100644 index 0000000..59a3d59 --- /dev/null +++ b/home/programs/nvim/plugins/smear.lua @@ -0,0 +1,11 @@ +require('smear_cursor').setup({ + scroll_buffer_space = false, + smear_between_buffers = false, + smear_between_neighbor_lines = false, + scroll_buffer_space = false, + stiffness = 0.5, + trailing_stiffness = 0.5, + matrix_pixel_threshold = 0.5, + damping = 0.9999, -- how "bouncy" the cursor is. 1 makes the cursor freeze in the top left lmao + smear_insert_mode = false, +}) diff --git a/home/programs/nvim/plugins/telescope.lua b/home/programs/nvim/plugins/telescope.lua new file mode 100644 index 0000000..dae7ef7 --- /dev/null +++ b/home/programs/nvim/plugins/telescope.lua @@ -0,0 +1,10 @@ +if vim.g.goyo_if then + return +end + +local builtin = require('telescope.builtin') +vim.g.mapleader = "," +vim.keymap.set('n', 'ff', builtin.find_files, { desc = 'Telescope find files' }) +vim.keymap.set('n', 'fg', builtin.live_grep, { desc = 'Telescope live grep' }) +vim.keymap.set('n', 'fb', builtin.buffers, { desc = 'Telescope buffers' }) +vim.keymap.set('n', 'fh', builtin.help_tags, { desc = 'Telescope help tags' }) diff --git a/home/programs/nvim/plugins/tokyonight.lua b/home/programs/nvim/plugins/tokyonight.lua new file mode 100644 index 0000000..b45e4ca --- /dev/null +++ b/home/programs/nvim/plugins/tokyonight.lua @@ -0,0 +1,31 @@ +-- Tokyonight configuration in Lua + +require("tokyonight").setup({ + -- use the night style + style = "night", + -- disable italic for functions + styles = { + functions = {} + }, + -- Change the "hint" color to the "orange" color, and make the "error" color bright red + on_colors = function(colors) + -- colors.hint = colors.orange + colors.bg = "#0d0d0d" -- dark af bruh + colors.fg = "#e3e1e1" + end +}) + +vim.cmd([[ + colorscheme tokyonight +]]) + + +-- vim.g.tokyonight_style = "day" +-- vim.g.tokyonight_italic_functions = true +-- vim.g.tokyonight_sidebars = { "qf", "vista_kind", "terminal", "packer" } + +-- vim.g.tokyonight_colors = { +-- bg_dark = "#ff0000", +-- bg = "#0d0d0d", +-- fg = "#e3e1e1", +-- } diff --git a/home/programs/nvim/plugins/treesitter.lua b/home/programs/nvim/plugins/treesitter.lua new file mode 100644 index 0000000..60a212e --- /dev/null +++ b/home/programs/nvim/plugins/treesitter.lua @@ -0,0 +1,16 @@ +require('nvim-treesitter.configs').setup { + ensure_installed = {}, + auto_install = false, + highlight = { enable = true }, + indent = { enable = true }, +} + +require('nvim-treesitter.configs').setup({ + highlight = { + enable = true, -- keep TS for everything else + disable = { "markdown", "markdown_inline" }, + additional_vim_regex_highlighting = false, + }, + indent = { enable = false }, + incremental_selection = { enable = false }, +}) diff --git a/home/programs/nvim/plugins/vimtex.lua b/home/programs/nvim/plugins/vimtex.lua new file mode 100644 index 0000000..465c2ba --- /dev/null +++ b/home/programs/nvim/plugins/vimtex.lua @@ -0,0 +1,53 @@ +-- Enable filetype plugins, indent, and syntax highlighting. +vim.cmd("filetype plugin indent on") +vim.cmd("syntax enable") + +-- Viewer options: either with a built-in viewer method or with a generic interface. +vim.g.vimtex_view_method = 'zathura' +vim.g.vimtex_view_general_viewer = 'zathura' +vim.g.vimtex_view_general_options = '--unique file:@pdf#src:@line@tex' + +-- Set the TeX flavor and quickfix mode. +vim.g.tex_flavor = 'latex' +-- vim.g.vimtex_quickfix_mode = 0 +-- vim.g.vimtex_quickfix_enabled = 0 + +-- Compiler backend. +-- vim.g.vimtex_compiler_method = 'latexmk' +vim.g.vimtex_quickfix_autoclose_after_keystrokes = 3 +vim.g.vimtex_compiler_method = "tectonic" +vim.g.vimtex_compiler_tectonic = { + options = { + "--keep-intermediates", -- faster compile times + "--keep-logs", + "--synctex", + "-Z shell-escape", + -- "-Z deterministic-mode", -- breaks synctex + }, +} + +-- Set the local leader (default is "\"; here we change it to comma). +vim.g.maplocalleader = ',' + +-- Configure warnings to ignore. +-- vim.g.Tex_IgnoredWarnings = [[ +-- Package hyperref Warning +-- Token not allowed in a PDF string (Unicode) +-- removing math shift +-- removing superscript +-- Underfull +-- Overfull +-- specifier changed to +-- You have requested +-- Missing number, treated as zero. +-- There were undefined references +-- Citation %.%# undefined +-- Double space found. +-- ]] +-- vim.g.Tex_IgnoreLevel = 8 + +-- Delete extra compilation files when a TeX buffer is deleted. +-- vim.api.nvim_create_autocmd("BufDelete", { + -- pattern = "*.tex", + -- command = "silent! !latexmk -c > /dev/null 2>&1 %:p", +-- }) diff --git a/home/programs/nvim/snippets/all.lua b/home/programs/nvim/snippets/all.lua new file mode 100644 index 0000000..33aaf4e --- /dev/null +++ b/home/programs/nvim/snippets/all.lua @@ -0,0 +1,45 @@ +local ls = require("luasnip") +local s = ls.snippet +local sn = ls.snippet_node +local isn = ls.indent_snippet_node +local t = ls.text_node +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local d = ls.dynamic_node +local r = ls.restore_node +local events = require("luasnip.util.events") +local ai = require("luasnip.nodes.absolute_indexer") +local extras = require("luasnip.extras") +local l = extras.lambda +local rep = extras.rep +local p = extras.partial +local m = extras.match +local n = extras.nonempty +local dl = extras.dynamic_lambda +local fmt = require("luasnip.extras.fmt").fmt +local fmta = require("luasnip.extras.fmt").fmta +local conds = require("luasnip.extras.expand_conditions") +local postfix = require("luasnip.extras.postfix").postfix +local types = require("luasnip.util.types") +local parse = require("luasnip.util.parser").parse_snippet +local ms = ls.multi_snippet +local k = require("luasnip.nodes.key_indexer").new_key + +local line_begin = require("luasnip.extras.expand_conditions").line_begin + +ls.add_snippets("lua", { + s("hello", { + t('print("hello '), + i(1), + t(' world")') + }), + + s("if", { + t('if '), + i(1, "true"), + t(' then '), + i(2), + t(' end') + }) +}) diff --git a/home/programs/nvim/snippets/markdown.lua b/home/programs/nvim/snippets/markdown.lua new file mode 100644 index 0000000..c479be1 --- /dev/null +++ b/home/programs/nvim/snippets/markdown.lua @@ -0,0 +1,284 @@ +local ls = require("luasnip") +local s = ls.snippet +local sn = ls.snippet_node +local isn = ls.indent_snippet_node +local t = ls.text_node +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local d = ls.dynamic_node +local r = ls.restore_node +local events = require("luasnip.util.events") +local ai = require("luasnip.nodes.absolute_indexer") +local extras = require("luasnip.extras") +local l = extras.lambda +local rep = extras.rep +local p = extras.partial +local m = extras.match +local n = extras.nonempty +local dl = extras.dynamic_lambda +local fmt = require("luasnip.extras.fmt").fmt +local fmta = require("luasnip.extras.fmt").fmta +local conds = require("luasnip.extras.expand_conditions") +local postfix = require("luasnip.extras.postfix").postfix +local types = require("luasnip.util.types") +local parse = require("luasnip.util.parser").parse_snippet +local ms = ls.multi_snippet +local k = require("luasnip.nodes.key_indexer").new_key + +local line_begin = require("luasnip.extras.expand_conditions").line_begin + +ls.add_snippets("markdown", { + s("date", { + t("# "), f(function() return os.date("%y-%m-%d") end, {}), + t({ "", "- " }), + }), + + -- s({ + -- trig = [[\v(https?://(?:www\.)?([-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b[-a-zA-Z0-9()@:%_\+.~#?&//=]*))]], + -- regTrig = true, + -- wordTrig = false, + -- }, + -- fmt("[{}]({})", { + -- f(function(_, snip) return snip.captures[2] end), + -- f(function(_, snip) return snip.captures[1] end), + -- }) + -- ), + + s({ + trig = [[%f[%S](https?://([^/%s]+[^%s]*))]], + regTrig = true, + wordTrig = false, + }, fmt("[{}]({})", { + -- link text → host + f(function(_, snip) return snip.captures[2] end), + -- link target → full url + f(function(_, snip) return snip.captures[1] end), + })) + + +}) +-- local ls = require('luasnip') +-- local fmt = require('luasnip.extras.fmt').fmt +-- local fmta = require('luasnip.extras.fmt').fmta +-- local rep = require('luasnip.extras').rep +-- local dl = require('luasnip.extras').dynamic_lambda +-- local l = require('luasnip.extras').lambda +-- local autosnippet = ls.extend_decorator.apply(s, { snippetType = 'autosnippet' }) + +-- -- some shorthands... +-- local s = ls.snippet +-- local n = ls.snippet_node +-- local t = ls.text_node +-- local i = ls.insert_node +-- local f = ls.function_node +-- local c = ls.choice_node +-- local d = ls.dynamic_node + +-- ls.config.set_config({ + -- history = true, + -- -- treesitter-hl has 100, use something higher (default is 200). + -- ext_base_prio = 200, + -- -- minimal increase in priority. + -- ext_prio_increase = 1, + -- enable_autosnippets = true, + -- store_selection_keys = '', +-- }) + +-- vim.keymap.set({ 'i', 's' }, '', function() + -- if ls.choice_active() then ls.change_choice(1) end +-- end) + +-- vim.keymap.set({ 'i', 's' }, '', function() + -- if ls.choice_active() then ls.change_choice(-1) end +-- end) + +-- local function get_line_iter(str) + -- if str:sub(-1) ~= '\n' then str = str .. '\n' end + + -- return str:gmatch('(.-)\n') +-- end +-- local function box_trim_lines(str) + -- local new_str = '' + + -- for line in get_line_iter(str) do + -- line = line:gsub('^%s+', '') + -- line = string.gsub(line, '%s+$', '') + -- new_str = new_str .. '\n' .. line + -- end + + -- return new_str +-- end + +-- -- local return_filename = function() +-- -- return vim.fn.fnamemodify(vim.fn.expand('%'), ':p') +-- -- end + +-- local return_filename = function() + -- -- return vim.fn.fnamemodify(vim.fn.expand('%'), ':p') + -- local filename = vim.fn.fnamemodify(vim.fn.expand('%'), ':p') + -- local home_dir = vim.fn.expand('~') + -- if filename:sub(1, #home_dir) == home_dir then filename = '~/' .. filename:sub(#home_dir + 2) end + -- return filename +-- end + +-- local date = function() return { os.date('%Y-%m-%d') } end + +-- local fulldate = function() return { os.date('%a, %b %Y/%m/%d - %H:%M:%S') } end + +-- -- lua print(os.date("%a, %b %Y/%m/%d - %H:%M:%S")) + +-- local get_visual = function(args, parent) + -- if #parent.snippet.env.SELECT_RAW > 0 then + -- return sn(nil, i(1, parent.snippet.env.SELECT_RAW)) + -- else -- If SELECT_RAW is empty, return a blank insert node + -- return sn(nil, i(1)) + -- end +-- end + +-- local filename = function() return { vim.fn.expand('%:p') } end + +-- local clipboard = function() return { vim.fn.getreg('+') } end + +-- -- Make sure to not pass an invalid command, as io.popen() may write over nvim-text. +-- local function bash(_, _, command) + -- local file = io.popen(command, 'r') + -- local res = {} + -- for line in file:lines() do + -- table.insert(res, line) + -- end + -- return res +-- end + +-- local function get_port_snip(args) + -- if #args < 1 and not args[1][1] then return n(nil, t('hello world')) end + + -- local type = args[1][1] + -- local indent = ' ' + + -- if type == 'NodePort' or type == 'LoadBalancer' then + -- return n( + -- nil, + -- fmt( + -- box_trim_lines([[ + -- - port: {} + -- {}targetPort: {} + -- {}nodePort: {} + -- ]]), + -- { + -- i(1, '30000'), + -- indent, + -- i(2, '80'), + -- indent, + -- i(3, '30000'), + -- } + -- ) + -- ) + -- end + + -- if type == 'ClusterIP' then + -- return n( + -- nil, + -- fmt( + -- [[ + -- - port: {} + -- {}targetPort: {} + -- ]], + -- { + -- i(1, '30000'), + -- indent, + -- i(2, '80'), + -- } + -- ) + -- ) + -- end +-- end + +-- ls.add_snippets(nil, { + + -- markdown = { + -- s({ + -- trig = 'link', + -- namr = 'markdown_link [selection]', + -- dscr = 'Create markdown link [txt](url) Select description + TAB', + -- }, { + -- t('['), + -- i(1), + -- t(']('), + -- d(2, get_visual), + -- t(')'), + -- i(0), + -- }), + + -- s({ + -- trig = 't', + -- namr = 'check list', + -- desc = 'Create item of a checklist', + -- }, fmt('- [{}] {}', { c(2, { t(' '), t('-'), t('') }), i(1, 'task') })), + + -- autosnippet( + -- { + -- trig = 'qw', + -- name = 'trig', + -- dscr = 'inline code', + -- }, + -- fmt( + -- [[ + -- `<>` <> + -- ]], + -- { d(1, get_visual), i(0) }, + -- { delimiters = '<>' } + -- ) + -- ), + + -- s({ + -- trig = 'code', + -- namr = 'markdown_code_fenced', + -- desc = 'code backsticks', + -- priority = 2000, + -- }, { + -- t('```'), + -- i(1, 'Lang'), + -- t({ '', '' }), + -- d(2, get_visual), + -- t({ '', '```', '' }), + -- i(0), + -- }), + + -- s({ + -- trig = 'meta', + -- namr = 'Metadata', + -- dscr = 'Yaml metadata format for markdown', + -- }, { + -- t({ '---', 'title: ' }), + -- i(1, 'note_title'), + -- t({ '', 'author: ' }), + -- i(2, 'author'), + -- t({ '', 'date: ' }), + -- f(date, {}), + -- t({ '', 'cathegories: [' }), + -- i(3, ''), + -- t({ ']', 'lastmod: ' }), + -- f(date, {}), + -- t({ '', 'tags: [' }), + -- i(4), + -- t({ ']', 'comments: true', '---', '' }), + -- i(0), + -- }), + + -- s({ + -- trig = '_skel', + -- namr = 'File_skeleton', + -- dscr = 'File header (dynamic)', + -- }, { + -- t({ '---', 'File: ' }), + -- f(return_filename, {}), + -- t({ '', 'Last Change: ' }), + -- f(fulldate, {}), + -- t({ '', 'tags: [' }), + -- i(1), + -- t({ ']', '---', '' }), + -- i(0), + -- }), + -- }, +-- }) diff --git a/home/programs/nvim/snippets/nix.lua b/home/programs/nvim/snippets/nix.lua new file mode 100644 index 0000000..52504eb --- /dev/null +++ b/home/programs/nvim/snippets/nix.lua @@ -0,0 +1,79 @@ +local ls = require("luasnip") +local s = ls.snippet +local sn = ls.snippet_node +local isn = ls.indent_snippet_node +local t = ls.text_node +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local d = ls.dynamic_node +local r = ls.restore_node +local events = require("luasnip.util.events") +local ai = require("luasnip.nodes.absolute_indexer") +local extras = require("luasnip.extras") +local l = extras.lambda +local rep = extras.rep +local p = extras.partial +local m = extras.match +local n = extras.nonempty +local dl = extras.dynamic_lambda +local fmt = require("luasnip.extras.fmt").fmt +local fmta = require("luasnip.extras.fmt").fmta +local conds = require("luasnip.extras.expand_conditions") +local postfix = require("luasnip.extras.postfix").postfix +local types = require("luasnip.util.types") +local parse = require("luasnip.util.parser").parse_snippet +local ms = ls.multi_snippet +local k = require("luasnip.nodes.key_indexer").new_key + +local line_begin = require("luasnip.extras.expand_conditions").line_begin + +ls.add_snippets("nix", { + s("flake-devshell", fmta([[ +{ + description = "A flake indeed"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + }; + + outputs = { self, nixpkgs }: + let + pkgs = nixpkgs.legacyPackages.x86_64-linux; + in { + packages.x86_64-linux = { + hello = pkgs.hello; + default = pkgs.hello; + }; + + devShells.x86_64-linux.default = pkgs.mkShell { + packages = [ + pkgs.hello + pkgs.zsh + ]; + + shellHook = '' + export SHELL=${pkgs.zsh}/bin/zsh + exec $SHELL + ''; + }; + }; +} +<> + ]], {i(1)}, { + indent_string = "" + })), + + s("nix-default", fmta([[ +{ + config, + pkgs, + ... +}: { + <> +} + ]], {i(1)}, { + indent_string = "" + })) + +}) diff --git a/home/programs/nvim/snippets/tex.lua b/home/programs/nvim/snippets/tex.lua new file mode 100644 index 0000000..81531b6 --- /dev/null +++ b/home/programs/nvim/snippets/tex.lua @@ -0,0 +1,801 @@ +local ls = require("luasnip") +local s = ls.snippet +local sn = ls.snippet_node +local isn = ls.indent_snippet_node +local t = ls.text_node +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local d = ls.dynamic_node +local r = ls.restore_node +local events = require("luasnip.util.events") +local ai = require("luasnip.nodes.absolute_indexer") +local extras = require("luasnip.extras") +local l = extras.lambda +local rep = extras.rep +local p = extras.partial +local m = extras.match +local n = extras.nonempty +local dl = extras.dynamic_lambda +local fmt = require("luasnip.extras.fmt").fmt +local fmta = require("luasnip.extras.fmt").fmta +local conds = require("luasnip.extras.expand_conditions") +local postfix = require("luasnip.extras.postfix").postfix +local types = require("luasnip.util.types") +local parse = require("luasnip.util.parser").parse_snippet +local ms = ls.multi_snippet +local k = require("luasnip.nodes.key_indexer").new_key +local line_begin = require("luasnip.extras.expand_conditions").line_begin + +ls.filetype_extend("plaintex", {"tex"}) + +local get_visual = function(args, parent) + if (#parent.snippet.env.LS_SELECT_RAW > 0) then + return sn(nil, i(1, parent.snippet.env.LS_SELECT_RAW)) + else -- If LS_SELECT_RAW is empty, return a blank insert node + return sn(nil, i(1)) + end +end + +local in_mathzone = function() + -- The `in_mathzone` function requires the VimTeX plugin + return vim.fn['vimtex#syntax#in_mathzone']() == 1 +end + +-- exampe of a multiline snippet + +-- ls.add_snippets("tex", { + -- s("template", fmta([[ + -- <> <> + -- ]], {i(1), i(0)}, { + -- indent_string = "" + -- })) +-- }) + + +ls.add_snippets("tex", { + s("template", fmta([[ +\documentclass[11pt]{article} +\usepackage{amssymb} +\usepackage{amsmath} +\usepackage{listings} +\usepackage[utf8]{inputenc} +\usepackage{parskip} +\usepackage{hyperref} +\usepackage{bookmark} +\usepackage[linguistics]{forest} +\usepackage{tikz} +\usepackage{float} + +\usepackage{amsmath} +\usepackage{amsthm} +\usepackage{amssymb} +\usepackage{enumitem} + +\usepackage{import} +\usepackage{pdfpages} +\usepackage{transparent} +\usepackage{xcolor} + +\newtheorem{all}{Theorem}[section] +\newtheorem{corollary}[all]{Corollary} +\newtheorem{lemma}[all]{Lemma} +\newtheorem{definition}[all]{Definition} +\newtheorem{exercise}[all]{Exercise} +\newtheorem{proposition}[all]{Proposition} +\newtheorem{example}[all]{Example} +\newtheorem{theorem}{Theorem} + +\newenvironment{lecture}[1]{ +\t\section{\MakeUppercase{#1}} +\t\vspace{-0.5em} +\t\hrule +\t\vspace{1em} +\t\begin{list}{}{ +\t\t\setlength{\leftmargin}{1.5em} +\t} +\t\item[] +}{ +\t\end{list} +} + +\title{<>} +\author{Jake Ginesin} +\date{} + +\begin{document} +\maketitle +<> +\end{document} + ]], {i(1), i(0)}, { + indent_string = "" + })) +}) + +ls.add_snippets("tex", { + s("template-math", fmta([[ +\documentclass[11pt]{article} +\usepackage{amssymb} +\usepackage{amsmath} +\usepackage{amsthm} +\usepackage{fullpage} +\usepackage{listings} +\usepackage[utf8]{inputenc} +\usepackage{parskip} +\usepackage{hyperref} +\usepackage{bookmark} +\usepackage[linguistics]{forest} +\usepackage{tikz} +\usepackage{float} + +\usepackage{enumitem} +\usepackage{euler} +\usepackage{libertine} + +\usepackage{import} +\usepackage{pdfpages} +\usepackage{transparent} +\usepackage{xcolor} + +\newtheoremstyle{definitionstyle} +{} +{} +{\normalfont} +{} +{\bfseries} +{:} +{0.5em} +{} + +\theoremstyle{definitionstyle} +\newtheorem{definition}{Definition}[section] + +\newtheorem{all}{Theorem}[section] +\newtheorem{corollary}[all]{Corollary} +\newtheorem{lemma}[all]{Lemma} +\newtheorem{exercise}[all]{Exercise} +\newtheorem{proposition}[all]{Proposition} +\newtheorem{example}[all]{Example} +\newtheorem{theorem}{Theorem} + +\title{<>} +\author{Jake Ginesin} +\date{} + +\begin{document} +\maketitle + <> +\end{document} + ]], {i(1), i(0)}, { + indent_string = "" + })) +}) + +ls.add_snippets("tex", { + s("template-report", fmta([[ +\documentclass[10pt]{article} +\usepackage{graphicx} % Required for inserting images +\usepackage[margin=1in]{geometry} +\usepackage[dvipsnames]{xcolor} +\usepackage{url} +\usepackage{amssymb} +\usepackage{amsmath} +\usepackage{amsthm} +\usepackage{fullpage} +\usepackage{listings} +\usepackage[utf8]{inputenc} +\usepackage{parskip} +\usepackage{hyperref} +\usepackage{bookmark} +\usepackage[linguistics]{forest} +\usepackage{tikz} +\usepackage{float} + +\usepackage[minted,skins]{tcolorbox} % 'skins' needed for shadows + +% Define a new command \rustshadowfile that replaces \rustfile +\newtcbinputlisting{\rustshadowfile}[2][]{% + listing engine=minted, + minted language=rust, + minted options={linenos, numbersep=5pt, fontsize=\footnotesize, baselinestretch=1.05}, + listing file={#2}, % The file to read + enhanced, % Enable skins for shadows + drop shadow, % Add the shadow + colback=white, % Background color + colframe=black!70, % Border color + boxrule=0.5pt, % Border width + arc=2pt, % Rounded corners (optional) + listing only, % Display code only (no title bar inside box) + #1 % Pass extra options like labels +} + +\newtcblisting{rustcode}[1][]{ + listing engine=minted, + minted language=rust, + minted options={linenos, numbersep=5pt, fontsize=\footnotesize, baselinestretch=1.05}, + enhanced, + drop shadow, % Adds the shadow + colback=white, % Background color + colframe=black!70,% Border color + boxrule=0.5pt, % Border width + arc=2pt, % Rounded corners + listing only, % Hides the internal tcolorbox title bar + #1 % Allows passing extra options +} + +% \usepackage{enumitem} +% \usepackage{euler} +% \usepackage{libertine} + +\usepackage{import} +\usepackage{pdfpages} +\usepackage{transparent} + +\newtheoremstyle{definitionstyle} +{} +{} +{\normalfont} +{} +{\bfseries} +{:} +{0.5em} +{} + +\theoremstyle{definitionstyle} +\newtheorem{definition}{Definition}[section] + +\newtheorem{all}{Theorem}[section] +\newtheorem{corollary}[all]{Corollary} +\newtheorem{lemma}[all]{Lemma} +\newtheorem{exercise}[all]{Exercise} +\newtheorem{proposition}[all]{Proposition} +\newtheorem{example}[all]{Example} +\newtheorem{theorem}{Theorem} + +\newcommand{\namedcomment}[3]{{\sf \scriptsize \color{#2} #1: #3}} +\newcommand{\jake}[1]{\namedcomment{jake}{red}{#1}} +\title{<>} +\author{Jake Ginesin \and <>} +\date{December 5th, 1999} + +\begin{document} +\maketitle + +\end{document} + ]], {i(1), i(0)}, { + indent_string = "" + })) +}) + + +ls.add_snippets("tex", { + s("beamer", fmta([[ +\documentclass{beamer} +\usetheme{metropolis} % Use metropolis theme +\title{<>} +\date{\today} +\author{Jacob Ginesin} +\institute{<>} +\begin{document} + \maketitle + \section{First Section} + \begin{frame}{First Frame} + Hello, world! + \end{frame} +\end{document} + + ]], {i(1), i(0)}, { + indent_string = "" + })) +}) + +ls.add_snippets("tex", { + s("beamer", fmta([[ +\documentclass{beamer} +\usetheme{metropolis} % Use metropolis theme +\title{<>} +\date{\today} +\author{Jacob Ginesin} +\institute{<>} +\begin{document} + \maketitle + \section{First Section} + \begin{frame}{First Frame} + Hello, world! + \end{frame} +\end{document} + + ]], {i(1), i(0)}, { + indent_string = "" + })) +}) + +ls.add_snippets("tex", { + s("bib", fmta([[ +\bibliographystyle{plain} +\bibliography{<>} + ]], {i(0)}, { + indent_string = "" + })) +}) + + +-- ---- + + +ls.add_snippets("tex", { + s({trig = "ita", dscr = "Expands 'tii' into LaTeX's textit{} command."}, + fmta("\\textit{<>}", + { + d(1, get_visual), + } + ) + ), + + s({trig = "isc"}, + fmta("\\textsc{<>}", + { + d(1, get_visual), + } + ) + ), + + + s({trig = "frac"}, + fmta( + "\\frac{<>}{<>}", + { + i(1), + i(2), + } + ), + {condition = in_mathzone} -- `condition` option passed in the snippet `opts` table + ), + + s({trig = "it"}, + fmta( + "\\item ", + {} + ), {} -- `condition` option passed in the snippet `opts` table + ), + + s({trig="eq", dscr="Expands 'eq' into an equation environment"}, + fmta( + [[ + \begin{equation*} + <> + \end{equation*} + ]], + { i(1) } + ) + ), + + s({trig="align", dscr="Expands 'eq' into an equation environment"}, + fmta( + [[ + \begin{align*} + <> + \end{align*} + ]], + { i(1) } + ) + ), + + + s({trig="beg", + -- snippetType="autosnippet" + }, + fmta( + [[ + \begin{<>} + <> + \end{<>} + ]], + { + i(1), + i(2), + rep(1), -- this node repeats insert node i(1) + } + ) + ), + + + s({trig="href", dscr="The hyperref package's href{}{} command (for url links)"}, + fmta( + [[\href{<>}{<>}]], + { + i(1, "url"), + i(2, "display name"), + } + ) + ), + + s({trig="([^%a])mk", + snippetType="autosnippet", + wordTrig = false, + regTrig = true + }, + fmta( + "<>$<>$", + { + f( function(_, snip) return snip.captures[1] end ), + d(1, get_visual), + } + ) + ), + + s({trig="mk", + snippetType="autosnippet", + wordTrig = false, + regTrig = true + }, + fmta( + "<>$<>$", + { + f( function(_, snip) return snip.captures[1] end ), + d(1, get_visual), + } + ), + {condition = line_begin} + ), + + s({trig="([^%a])dm", + snippetType="autosnippet", + wordTrig = false, + regTrig = true + }, + fmta( + [[ + \[ + <> + \] + ]], + { + -- f( function(_, snip) return snip.captures[1] end ), + d(1, get_visual), + } + ) + ), + + s({trig="dm", + snippetType="autosnippet", + wordTrig = false, + regTrig = true + }, + fmta( + [[ + \[ + <> + \] + <> + ]], + { + -- f( function(_, snip) return snip.captures[1] end ), + d(1, get_visual), + i(0) + } + ), + {condition = line_begin} + ), + + s({ + trig = "^^", + snippetType="autosnippet", + }, + fmta( + "^{<>}", + { + i(1), + } + ), + {condition = in_mathzone} + ), + + s({ + trig = "__", + snippetType="autosnippet", + }, + fmta( + "_{<>}", + { + i(1), + } + ), + {condition = in_mathzone} + ), + + s({ + trig = "sec", + }, + fmta( + [[ + \section{<>} + \label{sec:<>} + <> + ]], + { + i(1, "section name"), + i(2, "section label"), + i(3), + } + ), + {} + ), + + s({ + trig = "sub", + }, + fmta( + [[ + \subsection{<>} + \label{sec:<>} + <> + ]], + { + i(1, "section name"), + i(2, "section label"), + i(0), + } + ), + {} + ), + + ms({ + common = {snippetType = "autosnippet"}, + "!=", + {trig = "neq", snippetType = "snippet"}, + }, + fmta( + "\\neq ", + {} + ), + {condition = in_mathzone} + ), + + ms({ + common = {snippetType = "autosnippet"}, + "<=", + {trig = "leq", snippetType = "snippet"}, + }, + fmta( + "\\leq ", + {} + ), + {condition = in_mathzone} + ), + + ms({ + common = {snippetType = "autosnippet"}, + ">=", + {trig = "geq", snippetType = "snippet"}, + {trig = "ge", snippetType = "snippet"}, + }, + fmta( + "\\ge ", + {} + ), + {condition = in_mathzone} + ), + + s({ + trig = "**", + snippetType="autosnippet", + }, + fmta( + "\\cdot ", + { } + ), + {condition = in_mathzone} + ), + + s({ + trig = "->", + snippetType="autosnippet", + }, + fmta( + "\\to ", + { } + ), + {condition = in_mathzone} + ), + + s({ + trig = "<->", + snippetType="autosnippet", + }, + fmta( + "\\leftrightarrow ", + { } + ), + {condition = in_mathzone} + ), + + s({trig = "rustcode"}, + fmta( + [[ + \begin{listing}[H] + \begin{rustcode} + <> + \end{rustcode} + \end{listing} + ]], + { i(1) } + ) + ), + + s({ + trig = "notin", + snippetType="autosnippet", + }, + fmta( + "\\not\\in ", + { } + ), + {condition = in_mathzone} + ), + + s({ + trig = "notin", + snippetType="autosnippet", + }, + fmta( + "\\not\\in ", + { } + ), + {condition = in_mathzone} + ), + + s({trig="lemma"}, + fmta( + [[ + \begin{lemma} + <> + \end{lemma} + ]], + { i(1) } + ) + ), + + s({trig="proof"}, + fmta( + [[ + \begin{proof} + <> + \end{proof} + ]], + { i(1) } + ) + ), + + s({trig = "bf"}, + fmta("\\textbf{<>}", + { + d(1, get_visual), + } + ) + ), + + s({ + trig = "...", + snippetType="autosnippet", + }, + fmta( + "\\ldots ", + { } + ), + {} + ), + + s({ + trig = "image", + }, + fmta( + [[ +\begin{figure}[h] + \centering + \includegraphics[width=0.5\textwidth]{<>} + \caption{<>} + \label{fig:<>} +\end{figure} +<> + ]], + { + i(1, "image.png"), + i(2, "A great image!"), + i(3, "image"), + i(0) + } + ), + {} + ), + + s({ + trig = "enum", + }, + fmta( + [[ +\begin{enumerate} + \item <> +\end{enumerate} + ]], + { + i(0) + } + ), + {} + ), + + s({ + trig = "item", + }, + fmta( + [[ +\begin{itemize} + \item <> +\end{itemize} + ]], + { + i(0) + } + ), + {} + ), + + + -- s({ trig = "!=", snippetType="autosnippet" }, fmta("\\neq ", {}), {condition = in_mathzone}), + -- s({ trig = "<=", snippetType="autosnippet" }, fmta("\\leq ", {}), {condition = in_mathzone}), + -- s({ trig = ">=", snippetType="autosnippet" }, fmta("\\geq ", {}), {condition = in_mathzone}), + s({ trig = "<<", snippetType="autosnippet" }, fmta("\\ll ", {}), {condition = in_mathzone}), + s({ trig = ">>", snippetType="autosnippet" }, fmta("\\gg ", {}), {condition = in_mathzone}), + s({ trig = "~~", snippetType="autosnippet" }, fmta("\\sim ", {}), {condition = in_mathzone}), + s({ trig = "~=", snippetType="autosnippet" }, fmta("\\approx ", {}), {condition = in_mathzone}), + s({ trig = "~-", snippetType="autosnippet" }, fmta("\\simeq ", {}), {condition = in_mathzone}), + s({ trig = "-~", snippetType="autosnippet" }, fmta("\\backsimeq ", {}), {condition = in_mathzone}), + s({ trig = "-=", snippetType="autosnippet" }, fmta("\\equiv ", {}), {condition = in_mathzone}), + s({ trig = "=~", snippetType="autosnippet" }, fmta("\\cong ", {}), {condition = in_mathzone}), + s({ trig = ":=", snippetType="autosnippet" }, fmta("\\definedas ", {}), {condition = in_mathzone}), + -- s({ trig = "**", snippetType="autosnippet" }, fmta("\\cdot ", {}), {condition = in_mathzone}), + s({ trig = "xx", snippetType="autosnippet" }, fmta("\\times ", {}), {condition = in_mathzone}), + s({ trig = "!+", snippetType="autosnippet" }, fmta("\\oplus ", {}), {condition = in_mathzone}), + s({ trig = "!*", snippetType="autosnippet" }, fmta("\\otimes ", {}), {condition = in_mathzone}), + s({ trig = "NN", snippetType="autosnippet" }, fmta("\\mathbb{N} ", {}), {condition = in_mathzone}), + s({ trig = "ZZ", snippetType="autosnippet" }, fmta("\\mathbb{Z} ", {}), {condition = in_mathzone}), + s({ trig = "QQ", snippetType="autosnippet" }, fmta("\\mathbb{Q} ", {}), {condition = in_mathzone}), + s({ trig = "RR", snippetType="autosnippet" }, fmta("\\mathbb{R} ", {}), {condition = in_mathzone}), + s({ trig = "CC", snippetType="autosnippet" }, fmta("\\mathbb{C} ", {}), {condition = in_mathzone}), + s({ trig = "OO", snippetType="autosnippet" }, fmta("\\emptyset ", {}), {condition = in_mathzone}), + s({ trig = "pwr", snippetType="autosnippet" }, fmta("\\powerset ", {}), {condition = in_mathzone}), + s({ trig = "cc", snippetType="autosnippet" }, fmta("\\subset ", {}), {condition = in_mathzone}), + s({ trig = "cq", snippetType="autosnippet" }, fmta("\\subseteq ", {}), {condition = in_mathzone}), + s({ trig = "qq", snippetType="autosnippet" }, fmta("\\supset ", {}), {condition = in_mathzone}), + s({ trig = "qc", snippetType="autosnippet" }, fmta("\\supseteq ", {}), {condition = in_mathzone}), + s({ trig = "Nn", snippetType="autosnippet" }, fmta("\\cap ", {}), {condition = in_mathzone}), + s({ trig = "UU", snippetType="autosnippet" }, fmta("\\cup ", {}), {condition = in_mathzone}), + s({ trig = "::", snippetType="autosnippet" }, fmta("\\colon ", {}), {condition = in_mathzone}), + s({ trig = "AA", snippetType="autosnippet" }, fmta("\\forall ", {}), {condition = in_mathzone}), + s({ trig = "EE", snippetType="autosnippet" }, fmta("\\exists ", {}), {condition = in_mathzone}), + s({ trig = "inn", snippetType="autosnippet" }, fmta("\\in ", {}), {condition = in_mathzone}), + -- s({ trig = "notin", snippetType="autosnippet" }, fmta("\\not\\in ", {}), {condition = in_mathzone}), + s({ trig = "!-", snippetType="autosnippet" }, fmta("\\lnot ", {}), {condition = in_mathzone}), + s({ trig = "VV", snippetType="autosnippet" }, fmta("\\lor ", {}), {condition = in_mathzone}), + s({ trig = "WW", snippetType="autosnippet" }, fmta("\\land ", {}), {condition = in_mathzone}), + s({ trig = "!W", snippetType="autosnippet" }, fmta("\\bigwedge ", {}), {condition = in_mathzone}), + s({ trig = "=>", snippetType="autosnippet" }, fmta("\\implies ", {}), {condition = in_mathzone}), + s({ trig = "=<", snippetType="autosnippet" }, fmta("\\impliedby ", {}), {condition = in_mathzone}), + s({ trig = "iff", snippetType="autosnippet" }, fmta("\\iff ", {}), {condition = in_mathzone}), + s({ trig = "->", snippetType="autosnippet" }, fmta("\\to ", {}), {condition = in_mathzone}), + s({ trig = "!>", snippetType="autosnippet" }, fmta("\\mapsto ", {}), {condition = in_mathzone}), + s({ trig = "<-", snippetType="autosnippet" }, fmta("\\gets ", {}), {condition = in_mathzone}), + s({ trig = "dp", snippetType="autosnippet" }, fmta("\\partial ", {}), {condition = in_mathzone}), + s({ trig = "-->", snippetType="autosnippet" }, fmta("\\longrightarrow ", {}), {condition = in_mathzone}), + s({ trig = "<->", snippetType="autosnippet" }, fmta("\\leftrightarrow ", {}), {condition = in_mathzone}), + s({ trig = "2>", snippetType="autosnippet" }, fmta("\\rightrightarrows ", {}), {condition = in_mathzone}), + s({ trig = "upar", snippetType="autosnippet" }, fmta("\\uparrow ", {}), {condition = in_mathzone}), + s({ trig = "dnar", snippetType="autosnippet" }, fmta("\\downarrow ", {}), {condition = in_mathzone}), + s({ trig = "ooo", snippetType="autosnippet" }, fmta("\\infty ", {}), {condition = in_mathzone}), + s({ trig = "lll", snippetType="autosnippet" }, fmta("\\ell ", {}), {condition = in_mathzone}), + s({ trig = "dag", snippetType="autosnippet" }, fmta("\\dagger ", {}), {condition = in_mathzone}), + s({ trig = "+-", snippetType="autosnippet" }, fmta("\\pm ", {}), {condition = in_mathzone}), + s({ trig = "-+", snippetType="autosnippet" }, fmta("\\mp ", {}), {condition = in_mathzone}), + +}) diff --git a/home/programs/programs.nix b/home/programs/programs.nix new file mode 100644 index 0000000..09310aa --- /dev/null +++ b/home/programs/programs.nix @@ -0,0 +1,14 @@ +{ + config, + pkgs, + ... +}: { + programs.home-manager.enable = true; + + imports = [ + ./alacritty/default.nix + ./zsh/default.nix + ./nvim/default.nix + ]; +} + diff --git a/home/programs/zsh/default.nix b/home/programs/zsh/default.nix new file mode 100644 index 0000000..e2ca2fb --- /dev/null +++ b/home/programs/zsh/default.nix @@ -0,0 +1,45 @@ +{ + pkgs, + lib, + system, + config, + osConfig, + ... +}: { + home.packages = with pkgs; [zsh-powerlevel10k meslo-lgs-nf]; + home.file.".p10k.zsh".source = ./p10k; + programs.direnv.enable = true; + + programs.zsh = { + enable = true; + # dotDir = "$HOME/.config/zsh"; + + plugins = [ + { + name = "zsh-powerlevel10k"; + src = "${pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k/"; + file = "powerlevel10k.zsh-theme"; + } + { + name = "powerlevel10k-config"; + src = lib.cleanSource ./p10k; + file = "p10k.zsh"; + } + ]; + + oh-my-zsh = { + enable = true; + # theme = "af-magic"; + # theme = "powerlevel10k/powerlevel10k"; + plugins = ["git" "history-substring-search" "colored-man-pages"]; + }; + + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + + # zsh sheeee + initExtraFirst = '' + [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh + ''; + }; +} diff --git a/home/programs/zsh/p10k b/home/programs/zsh/p10k new file mode 100644 index 0000000..139018e --- /dev/null +++ b/home/programs/zsh/p10k @@ -0,0 +1,1641 @@ +# Generated by Powerlevel10k configuration wizard on 2022-02-02 at 16:07 EST. +# Based on romkatv/powerlevel10k/config/p10k-classic.zsh, checksum 52170. +# Wizard options: nerdfont-complete + powerline, large icons, classic, unicode, dark, +# 12h time, angled separators, sharp heads, blurred tails, 2 lines, dotted, right frame, +# sparse, few icons, concise, instant_prompt=verbose. +# Type `p10k configure` to generate another config. +# +# Config for Powerlevel10k with classic powerline 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. + autoload -Uz is-at-least && is-at-least 5.1 || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # os_icon # os identifier + dir # current directory + vcs # git status + # =========================[ Line #2 ]========================= + newline # \n + 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=( + # =========================[ Line #1 ]========================= + 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/) + pyenv # python environment (https://github.com/pyenv/pyenv) + 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) + 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) + 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) + # vi_mode # vi mode (you don't need this if you've enabled prompt_char) + # 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/) + time # current time + # =========================[ Line #2 ]========================= + newline # \n + # 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-complete + # 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=moderate + + # 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= + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. You'll probably want to use the same color + # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. + 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='%240F─╮' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%240F─┤' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%240F─╯' + + # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or + # '─'. The last two make it easier to see the alignment between left and right prompt and to + # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false + # for more compact prompt if using this option. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='·' + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE + # ornaments defined above. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=240 + # 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 + + # Default background color. + typeset -g POWERLEVEL9K_BACKGROUND=236 + + # Separator between same-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%244F\uE0B1' + # Separator between same-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%244F\uE0B3' + # Separator between different-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' + # Separator between different-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' + # The right end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' + # The left end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' + # 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='▓▒░' + # Left prompt terminator for lines without any segments. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=255 + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Transparent background. + typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= + # 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= + # No surrounding whitespace. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= + + ##################################[ dir: current directory ]################################## + # Default current directory color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 + # 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=103 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 + # 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-version + .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='%246Fin ' + + #####################################[ vcs: git status ]###################################### + # Branch icon. Set this parameter to '\uF126 ' 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='%246F' # grey 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 + + # ⇣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}" + # ⇠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='%246Fon ' + + # 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 reposotiry. + 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=248 + # 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='%246Ftook ' + + #######################[ 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=37 + # 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_CORE_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='⭐' + + ##################[ 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 + + # 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='⭐' + + ##################################[ 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='⭐' + + ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### + # Text and color for normal (a.k.a. command) vi mode. + typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL + typeset -g POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND=106 + # Text and color for visual vi mode. + typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL + typeset -g POWERLEVEL9K_VI_MODE_VISUAL_FOREGROUND=68 + # Text and color for overtype (a.k.a. overwrite and replace) vi mode. + typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE + typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_FOREGROUND=172 + # Text and color for insert vi mode. + typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= + typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=66 + + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_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='⭐' + + ##################################[ 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='%246Fwith ' + + ###[ 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 + # 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='⭐' + + ############[ 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='⭐' + + ################[ 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='⭐' + + #############[ 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' + + # 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='%246Fat ' + + #[ 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|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' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_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='%246Fin ' + + ###############################[ 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]*' + # 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_RX_RATE:+%70F⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+%215F⇡$P9K_IP_TX_RATE }%38F$P9K_IP_IP' + # 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='\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578' + # 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{%I:%M:%S %p}' + # 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='%246Fat ' + + # 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/home/programs/zsh/zshrc b/home/programs/zsh/zshrc new file mode 100644 index 0000000..13396b6 --- /dev/null +++ b/home/programs/zsh/zshrc @@ -0,0 +1,185 @@ +HISTFILE=~/.histfile +HISTSIZE=10000 +SAVEHIST=10000 +setopt nomatch autocd +# unsetopt autocd beep extendedglob notify +unsetopt beep extendedglob notify +bindkey -v +zstyle :compinstall filename '/home/synchronous/.zshrc' + +export PATH=/home/synchronous/.local/bin:$PATH +export PATH=/home/synchronous/.cargo/bin/:$PATH +export NIX_PATH=/home/synchronous/nix-cfg +DISABLE_UNTRACKED_FILES_DIRTY="true" + +# ==== binding keys ==== + +bindkey '^ ' autosuggest-accept + +# ==== holy fuck aliases ==== + +# make sure i get the right version of python +alias python='python3' + +alias pls='sudo' +alias please='sudo' + +# fuck +alias fuck="sudo !!" + +# neovim +alias vi='nvim' +alias vim='nvim' +alias n="nvim" +alias neovim='nvim' +alias v='nvim' + +# duplicate current alacritty unit +alias dupe='setsid alacritty --working-directory "$(pwd)" > /dev/null' + +# alias so i can copy stuff to my clipboard from my terminal +# example: +#$ pwd | clip +alias clip='perl -p -e "chomp if eof" | xclip -in -sel clip' +alias pwdc='pwd | clip | echo "directory clipped"' + +alias cls="clear" + +## Curl Aliases for easy info +alias myip="curl https://ipecho.net/plain; echo" +alias pq="ping google.com -c 5" + +alias ..="cd ../" +alias ../="cd ../" +alias ...="cd ../.." +alias .4="cd ../../.." + +# replacing ls with exa & lsd +# hrr drr why do you use lsd AND exa? +# because lsd has icons but exa is better with everything else. smh. + +# Lolcats!! +alias neofetch="neofetch | lolcat" + +# tars +alias untar="tar -zxvf" +alias mktar="tar -cvzf" + +# by default, put zathura windows in new process +# alias zathura="sh /home/synchronous/.scripts/zathura/zathura_conditional.sh" +# alias exclude-zathura="pwd >> /home/synchronous/.scripts/zathura/excluded;echo 'done'" + +# make ncdu run fast wow +alias ncdu="ncdu -rx" + +alias ndwc="nmcli device wifi connect" +alias ndwl="nmcli device wifi list" +alias ndc="nmcli device disconnect wlan0" +alias wt="systemctl restart NetworkManager" +alias syncthing="firefox localhost:8384" +alias htop="btop" # of course +alias top="btop" # of course + +stack() { + find . -type f -exec echo -e "\n--- {} ---\n" \; -exec cat {} \; +} + +stack-fast() { + rg -l . | while read -r file; do + echo -e "\n--- $file ---\n" + cat "$file" + done +} + +stack-b() { + ( + while IFS= read -r -d '' file; do + # Print a header for each filename: + printf '\n--- %s ---\n' "$file" + # Dump the raw content of "$file" exactly (no transformations). + cat "$file" + done < <(find . -type f ! -name '*.json' -print0) +) \ +| perl -p -e 'chomp if eof' \ +| xclip -in -sel clip +} + +stack-min() { + find . -maxdepth 1 -type f -exec echo -e "\n--- {} ---\n" \; -exec cat {} \; +} + +a.nixi() { + nix-store -q --references /var/run/current-system/sw | cut -d'-' -f2- +} + +a.pingg() { + grc ping 8.8.8.8 -c 1 +} + +a.sitecopy() { + wget -k -K -E -r -l 10 -p -N -F -nH $@ +} + +a.pdfcopy() { + wget -k -r -l 10 -p -A "*.pdf" -N -F -nH $@ +} + +a.fo() { + firefox `pwd` +} + +a.dnsenum() { + dnsenum "$@" +} + + +# ------------------- fzf configuration +[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh +export FZF_DEFAULT_COMMAND='fd --type f' +export FZF_DEFAULT_OPTS="--layout=reverse --inline-info --height=80%" + +# ------------------- Key Binding +bindkey "\e[1~" beginning-of-line # Home +bindkey "\e[4~" end-of-line # End +bindkey "\e[3~" delete-char #Del +bindkey "\e[2~" overwrite-mode # Ins +bindkey "\e[6~" end-of-history # PageDown +bindkey "\e[5~" beginning-of-history #PageUp +bindkey '^R' history-incremental-search-backward + +# -------------------- control backspace deleting previous word entirely +bindkey '^H' backward-kill-word +bindkey '5~' kill-word + +# ------------------- More Widgets +#run_ranger () { +## echo +# ranger --choosedir=$HOME/.rangedir < $TTY +# LASTDIR='cat $HOME/.rangerdir' +# cd "$LASTDIR" +# zle reset-prompt +#} +#zle -N run_ranger + +# --------------------- REMOTES CONFIG +# source /home/synchronous/.zshrc_remote + + +export LESS_TERMCAP_mb=$'\e[1;32m' +export LESS_TERMCAP_md=$'\e[1;32m' +export LESS_TERMCAP_me=$'\e[0m' +export LESS_TERMCAP_se=$'\e[0m' +export LESS_TERMCAP_so=$'\e[01;33m' +export LESS_TERMCAP_ue=$'\e[0m' +export LESS_TERMCAP_us=$'\e[1;4;31m' + +# ------ NNN (not no not november) +export PATH=/home/synchronous/.scripts/nnn:$PATH +# export VISUAL=wrapper.sh +# export EDITOR="$VISUAL" +export EDITOR="nvim" +export NNN_PLUG='m:preview-tui;' +export NNN_FIFO=/tmp/nnn.fifo +export NNN_TERMINAL=alacritty + +bindkey -s '^o' 'nnn -e ^M' diff --git a/hosts/s1901/configuration.nix b/hosts/s1901/configuration.nix new file mode 100644 index 0000000..8ec7e56 --- /dev/null +++ b/hosts/s1901/configuration.nix @@ -0,0 +1,24 @@ +{ config, lib, pkgs, ... }: + +{ + imports = + [ + ./hardware-configuration.nix + ../../system/system.nix + ]; + + config = { + networking.hostName = "s1901"; + # boot.loader.grub.device = "/dev/sda1"; + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + backupFileExtension = "backup"; + users.synchronous.imports = [../../home/home.nix]; + }; + }; +} + diff --git a/hosts/s1901/hardware-configuration.nix b/hosts/s1901/hardware-configuration.nix new file mode 100644 index 0000000..0a085ba --- /dev/null +++ b/hosts/s1901/hardware-configuration.nix @@ -0,0 +1,30 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "rtsx_pci_sdmmc" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + # fileSystems."/" = + # { device = "/dev/disk/by-uuid/05ca9d56-3506-43c5-b9ec-be928b782996"; + # fsType = "ext4"; + # }; + + # fileSystems."/home/synchronous/.agenix/agenix.d" = + # { device = "none"; + # fsType = "ramfs"; + # }; + + swapDevices = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/s1902/configuration.nix b/hosts/s1902/configuration.nix new file mode 100644 index 0000000..d3fc633 --- /dev/null +++ b/hosts/s1902/configuration.nix @@ -0,0 +1,24 @@ +{ config, lib, pkgs, ... }: + +{ + imports = + [ + ./hardware-configuration.nix + ../../system/system.nix + ]; + + config = { + networking.hostName = "s1902"; + # boot.loader.grub.device = "/dev/sda1"; + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + backupFileExtension = "backup"; + users.synchronous.imports = [../../home/home.nix]; + }; + }; +} + diff --git a/hosts/s1903/configuration.nix b/hosts/s1903/configuration.nix new file mode 100644 index 0000000..5d18d19 --- /dev/null +++ b/hosts/s1903/configuration.nix @@ -0,0 +1,24 @@ +{ config, lib, pkgs, ... }: + +{ + imports = + [ + ./hardware-configuration.nix + ../../system/system.nix + ]; + + config = { + networking.hostName = "s1903"; + # boot.loader.grub.device = "/dev/sda1"; + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + backupFileExtension = "backup"; + users.synchronous.imports = [../../home/home.nix]; + }; + }; +} + diff --git a/hosts/s1904/configuration.nix b/hosts/s1904/configuration.nix new file mode 100644 index 0000000..bff42f1 --- /dev/null +++ b/hosts/s1904/configuration.nix @@ -0,0 +1,24 @@ +{ config, lib, pkgs, ... }: + +{ + imports = + [ + ./hardware-configuration.nix + ../../system/system.nix + ]; + + config = { + networking.hostName = "s1904"; + # boot.loader.grub.device = "/dev/sda1"; + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + backupFileExtension = "backup"; + users.synchronous.imports = [../../home/home.nix]; + }; + }; +} + diff --git a/hosts/s1905/configuration.nix b/hosts/s1905/configuration.nix new file mode 100644 index 0000000..6cbf428 --- /dev/null +++ b/hosts/s1905/configuration.nix @@ -0,0 +1,24 @@ +{ config, lib, pkgs, ... }: + +{ + imports = + [ + ./hardware-configuration.nix + ../../system/system.nix + ]; + + config = { + networking.hostName = "s1905"; + # boot.loader.grub.device = "/dev/sda1"; + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + backupFileExtension = "backup"; + users.synchronous.imports = [../../home/home.nix]; + }; + }; +} + diff --git a/hosts/s1906/configuration.nix b/hosts/s1906/configuration.nix new file mode 100644 index 0000000..3b684b6 --- /dev/null +++ b/hosts/s1906/configuration.nix @@ -0,0 +1,24 @@ +{ config, lib, pkgs, ... }: + +{ + imports = + [ + ./hardware-configuration.nix + ../../system/system.nix + ]; + + config = { + networking.hostName = "s1906"; + # boot.loader.grub.device = "/dev/sda1"; + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + backupFileExtension = "backup"; + users.synchronous.imports = [../../home/home.nix]; + }; + }; +} + diff --git a/system/disko-config.nix b/system/disko-config.nix new file mode 100644 index 0000000..d88d855 --- /dev/null +++ b/system/disko-config.nix @@ -0,0 +1,37 @@ +{ + disko.devices = { + disk = { + main = { + type = "disk"; + device = "/dev/sda"; + content = { + type = "gpt"; + partitions = { + boot = { + size = "1M"; + type = "EF02"; + priority = 1; + }; + ESP = { + size = "512M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + }; + }; + root = { + size = "100%"; + content = { + type = "filesystem"; + format = "ext4"; + mountpoint = "/"; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/system/ssh.nix b/system/ssh.nix new file mode 100644 index 0000000..b09634f --- /dev/null +++ b/system/ssh.nix @@ -0,0 +1,23 @@ +{ + config, + pkgs, + ... +}: { + services.openssh.enable = true; + + # Disable password login for security + services.openssh.settings.PasswordAuthentication = false; + services.openssh.settings.PermitRootLogin = "no"; + + # Add your authorized key for a specific user + programs.zsh.enable = true; + users.users.synchronous = { + isNormalUser = true; + shell = pkgs.zsh; + extraGroups = ["networkmanager" "wheel"]; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEw4Uqg9UBakoOpS4nVGE3ePKHnst0+02lFN04n2IyKb ginesin.j@northeastern.edu" + ]; + }; +} + diff --git a/system/system.nix b/system/system.nix new file mode 100644 index 0000000..c992124 --- /dev/null +++ b/system/system.nix @@ -0,0 +1,101 @@ +{ + config, + pkgs, + ... +}: { + imports = [ + ./ssh.nix + ./disko-config.nix + ]; + + # Set your time zone. + time.timeZone = "America/New_York"; + # time.timeZone = "Asia/Seoul"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + + nixpkgs.config.allowUnfree = true; # unfreeeeee + + nix = { + nixPath = [ + "nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos" + "nixos-config=/home/synchronous/nix-cfg/configuration.nix" + "/nix/var/nix/profiles/per-user/root/channels" + ]; + + settings = { + experimental-features = ["nix-command" "flakes"]; + substituters = [ + "https://nix-community.cachix.org" + ]; + trusted-public-keys = [ + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + ]; + }; + }; + + services.xserver.enable = true; + networking.networkmanager.enable = true; + services.xserver.displayManager.lightdm.enable = true; + services.xserver.desktopManager.xfce.enable = true; + + system.stateVersion = "25.11"; + + environment.systemPackages = with pkgs; [ + vim + neovim + linux-manual + man-pages + man-pages-posix + fontconfig + python3 + tree + yq + ]; + + fonts = { + enableDefaultPackages = true; + packages = with pkgs; [ + corefonts + fira-code + fira-code-symbols + # font-awesome_4 + # font-awesome_5 + # inconsolata + # ipaexfont + # jetbrains-mono + # noto-fonts-cjk-sans + # noto-fonts-cjk-serif + # siji + # ubuntu_font_family + # noto-fonts-cjk-sans + # b612 + # nerd-fonts.noto + # nerd-fonts.mplus + nerd-fonts.jetbrains-mono + noto-fonts-color-emoji + ]; + + # fontDir.enable = true; + + fontconfig = { + enable = true; + defaultFonts = { + monospace = ["Fira Code"]; + }; + }; + }; +}