aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsefidel <contact@sefidel.net>2022-09-09 17:49:03 +0900
committersefidel <contact@sefidel.net>2022-09-09 21:32:31 +0900
commit9e6145c031b47fc37398b80dec1b4dfc0cfb5183 (patch)
treef27e3c50a0c25223931e7057616e456432007de9
parent9e311725d4f6c68284e3999c01735ebe3665a14d (diff)
downloadnixrc-9e6145c031b47fc37398b80dec1b4dfc0cfb5183.zip
milestone: darwin!
feat(darwin/kompakt)!: support darwin chore: reformat feat(home/o32): manage neovim feat(home/development): fix haskell lsp version mismatch feat(darwin/*): stabilise
-rw-r--r--darwin/darwin-x86.nix8
-rw-r--r--darwin/default.nix9
-rw-r--r--darwin/kompakt/configuration.nix66
-rw-r--r--flake.lock63
-rw-r--r--flake.nix10
-rw-r--r--home/default.nix15
-rw-r--r--home/kompakt/o32.nix9
-rw-r--r--home/profiles/base-darwin/config/tmux.nix81
-rw-r--r--home/profiles/base-darwin/default.nix160
-rw-r--r--home/profiles/base-darwin/p10k-config/p10k.zsh1641
-rw-r--r--home/profiles/development/default.nix28
-rw-r--r--home/profiles/messaging/default.nix491
-rw-r--r--lib/default.nix1
-rw-r--r--lib/mk_darwin.nix23
-rw-r--r--lib/mk_home.nix28
-rw-r--r--packages/darwin.nix5
-rw-r--r--packages/linux.nix (renamed from packages/default.nix)0
17 files changed, 2357 insertions, 281 deletions
diff --git a/darwin/darwin-x86.nix b/darwin/darwin-x86.nix
new file mode 100644
index 0000000..30baf23
--- /dev/null
+++ b/darwin/darwin-x86.nix
@@ -0,0 +1,8 @@
+{ unstable, ... }:
+
+final: prev: prev.lib.optionalAttrs (prev.stdenv.system == "aarch64-darwin") {
+ # Add access to x86 packages system is running Apple Silicon
+ pkgs-x86 = import unstable {
+ system = "x86_64-darwin";
+ };
+}
diff --git a/darwin/default.nix b/darwin/default.nix
new file mode 100644
index 0000000..3144894
--- /dev/null
+++ b/darwin/default.nix
@@ -0,0 +1,9 @@
+{ self, darwin, unstable, ... } @ inputs:
+
+{
+ kompakt = self.lib.mkDarwin {
+ name = "kompakt";
+ system = "aarch64-darwin";
+ nixpkgs = unstable;
+ };
+}
diff --git a/darwin/kompakt/configuration.nix b/darwin/kompakt/configuration.nix
new file mode 100644
index 0000000..8507adb
--- /dev/null
+++ b/darwin/kompakt/configuration.nix
@@ -0,0 +1,66 @@
+{ config, pkgs, lib, ... }:
+
+{
+ nix = {
+ settings.substituters = [
+ "https://cache.nixos.org/"
+ ];
+ settings.trusted-public-keys = [
+ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
+ ];
+
+ settings.trusted-users = [
+ "@admin"
+ ];
+
+ settings.auto-optimise-store = lib.mkDefault true;
+ configureBuildUsers = true;
+ gc.automatic = lib.mkDefault true;
+ gc.options = lib.mkDefault "--delete-older-than 10d";
+ extraOptions = ''
+ experimental-features = nix-command flakes
+ extra-platforms = x86_64-darwin aarch64-darwin
+ '';
+ };
+
+ # List packages installed in system profile. To search by name, run:
+ # $ nix-env -qaP | grep wget
+ environment.systemPackages =
+ [
+ pkgs.vim
+ ];
+
+ # Use a custom configuration.nix location.
+ # $ darwin-rebuild switch -I darwin-config=$HOME/.config/nixpkgs/darwin/configuration.nix
+ # environment.darwinConfig = "$HOME/.config/nixpkgs/darwin/configuration.nix";
+
+ # Auto upgrade nix package and the daemon service.
+ services.nix-daemon.enable = true;
+ # nix.package = pkgs.nix;
+
+ users.users.o32 = {
+ name = "o32";
+ home = "/Users/o32";
+ };
+
+ # Create /etc/zshrc that loads the nix-darwin environment.
+ programs.zsh.enable = true; # default shell on catalina
+ # programs.fish.enable = true;
+
+ # Make applications pop up in finder/spotlight
+ system.activationScripts.applications.text = pkgs.lib.mkForce (
+ ''
+ echo "setting up ~/Applications..." >&2
+ rm -rf ~/Applications/Nix\ Apps
+ mkdir -p ~/Applications/Nix\ Apps
+ for app in $(find ${config.system.build.applications}/Applications -maxdepth 1 -type l); do
+ src="$(/usr/bin/stat -f%Y "$app")"
+ cp -r "$src" ~/Applications/Nix\ Apps
+ done
+ ''
+ );
+
+ # Used for backwards compatibility, please read the changelog before changing.
+ # $ darwin-rebuild changelog
+ system.stateVersion = 4;
+}
diff --git a/flake.lock b/flake.lock
index d203e9d..af4c87d 100644
--- a/flake.lock
+++ b/flake.lock
@@ -23,6 +23,26 @@
"url": "https://git.sr.ht/~zachel/chaotic-nixpkgs"
}
},
+ "darwin": {
+ "inputs": {
+ "nixpkgs": [
+ "unstable"
+ ]
+ },
+ "locked": {
+ "lastModified": 1662478528,
+ "narHash": "sha256-Myjd0HPL5lXri3NXOcJ6gP7IKod2eMweQBKM4uxgEGw=",
+ "owner": "LnL7",
+ "repo": "nix-darwin",
+ "rev": "3b69bf3cc26ae19de847bfe54d6ab22d7381a90a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "LnL7",
+ "repo": "nix-darwin",
+ "type": "github"
+ }
+ },
"flake-compat": {
"flake": false,
"locked": {
@@ -71,11 +91,11 @@
},
"flake-utils_3": {
"locked": {
- "lastModified": 1656065134,
- "narHash": "sha256-oc6E6ByIw3oJaIyc67maaFcnjYOz1mMcOtHxbEf9NwQ=",
+ "lastModified": 1656928814,
+ "narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=",
"owner": "numtide",
"repo": "flake-utils",
- "rev": "bee6a7250dd1b01844a2de7e02e4df7d8a0a206c",
+ "rev": "7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249",
"type": "github"
},
"original": {
@@ -92,11 +112,11 @@
"utils": "utils"
},
"locked": {
- "lastModified": 1658924727,
- "narHash": "sha256-Fhh9FK9CvuCLxG1WkWJPoendDeXKI4gHYTfezo1n2Zg=",
+ "lastModified": 1662659484,
+ "narHash": "sha256-+uanOaNQCOkwZhzdtLEce1L8IZcGhTgEw8mXKVLGVxQ=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "0e2f7876d2f2ae98a67d89a8bef8c49332aae5af",
+ "rev": "4cfc0a1e02c6374f66acdfd2ff8ae3e87c80c818",
"type": "github"
},
"original": {
@@ -114,11 +134,11 @@
},
"locked": {
"dir": "contrib",
- "lastModified": 1659102441,
- "narHash": "sha256-lo2FFXnvbHnMkaTwveAiILiVpmdHsCkgsTNEcRa5Ihc=",
+ "lastModified": 1662709456,
+ "narHash": "sha256-5WNmIXZVm6EDkQ5DGrMIwpbQTNIbSTiorXDEKg+ZNwk=",
"owner": "neovim",
"repo": "neovim",
- "rev": "e59bc078de624a5f3220bfd2713be3f8978c5672",
+ "rev": "22a88c425e2fe99bcb534e43396a0b00044ae67d",
"type": "github"
},
"original": {
@@ -130,11 +150,11 @@
},
"nixpkgs-2111": {
"locked": {
- "lastModified": 1658346836,
- "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=",
+ "lastModified": 1659446231,
+ "narHash": "sha256-hekabNdTdgR/iLsgce5TGWmfIDZ86qjPhxDg/8TlzhE=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413",
+ "rev": "eabc38219184cc3e04a974fe31857d8e0eac098d",
"type": "github"
},
"original": {
@@ -147,6 +167,7 @@
"root": {
"inputs": {
"chaotic-nixpkgs": "chaotic-nixpkgs",
+ "darwin": "darwin",
"home-manager": "home-manager",
"neovim": "neovim",
"nixpkgs-2111": "nixpkgs-2111",
@@ -163,11 +184,11 @@
]
},
"locked": {
- "lastModified": 1659168345,
- "narHash": "sha256-M73QFH0XT60oB6ItN+V/dC8YMuQtHQnzHMZRAzlSSxY=",
+ "lastModified": 1662692391,
+ "narHash": "sha256-mmSCQaHvMg/mZm2PaPhYxNMOkwHLSqAe6cGEFZYAfa4=",
"owner": "oxalica",
"repo": "rust-overlay",
- "rev": "3312a6c90ae1c862024340cfc4a176c93bc15490",
+ "rev": "2be265312c3ad66a23538b497de6fda534ead172",
"type": "github"
},
"original": {
@@ -178,11 +199,11 @@
},
"unstable": {
"locked": {
- "lastModified": 1659077768,
- "narHash": "sha256-P0XIHBVty6WIuIrk2DZNvLcYev9956y1prT4zL212H8=",
+ "lastModified": 1662019588,
+ "narHash": "sha256-oPEjHKGGVbBXqwwL+UjsveJzghWiWV0n9ogo1X6l4cw=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "2a93ea177c3d7700b934bf95adfe00c435f696b8",
+ "rev": "2da64a81275b68fdad38af669afeda43d401e94b",
"type": "github"
},
"original": {
@@ -194,11 +215,11 @@
},
"unstable-small": {
"locked": {
- "lastModified": 1659112155,
- "narHash": "sha256-lZxSeKYSPYU0tEkHOcmxuZy/VsHN+eBW4FTj5TVAVEU=",
+ "lastModified": 1662070595,
+ "narHash": "sha256-fYrdaUXhV4oPhkehHRwj78d1VjATnK4SF0fElEQUyLw=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "9a87eeccf4921099f957bfebfea732e21f0041ee",
+ "rev": "9f867325b5da6c4c9211707abdb481e1d0b3e589",
"type": "github"
},
"original": {
diff --git a/flake.nix b/flake.nix
index af766da..abedd43 100644
--- a/flake.nix
+++ b/flake.nix
@@ -2,11 +2,13 @@
description = "zachel's nix flake dotfiles";
inputs = {
- # Flake inputs
unstable.url = "github:nixos/nixpkgs/nixos-unstable";
unstable-small.url = "github:nixos/nixpkgs/nixos-unstable-small";
nixpkgs-2111.url = "github:nixos/nixpkgs/nixos-21.11";
+ darwin.url = "github:LnL7/nix-darwin";
+ darwin.inputs.nixpkgs.follows = "unstable";
+
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "unstable";
@@ -26,12 +28,16 @@
nixosConfigurations = import ./nixos inputs;
+ darwinConfigurations = import ./darwin inputs;
+
homeConfigurations = import ./home inputs;
- packages.x86_64-linux = (import ./packages inputs)
+ packages.x86_64-linux = (import ./packages/linux.nix inputs)
// self.lib.nixosConfigurationsAsPackages.x86_64-linux
// self.lib.homeConfigurationsAsPackages.x86_64-linux;
+ packages.aarch64-darwin = import ./packages/darwin.nix inputs;
+
checks = self.packages;
lib = import ./lib inputs;
diff --git a/home/default.nix b/home/default.nix
index f8ce8fe..5c7f857 100644
--- a/home/default.nix
+++ b/home/default.nix
@@ -18,4 +18,19 @@
version = "22.05";
};
+
+ "o32@kompakt" = self.lib.mkHome {
+ username = "o32";
+ hostname = "kompakt";
+ pkgs = import unstable { system = "aarch64-darwin"; overlays = with inputs; [ rust.overlays.default (import ../darwin/darwin-x86.nix { inherit unstable; }) ]; };
+
+ extraModules = [
+ ./profiles/populate.nix
+ ./profiles/base-darwin
+ ./profiles/development
+ ./profiles/messaging
+ ];
+
+ version = "22.05";
+ };
}
diff --git a/home/kompakt/o32.nix b/home/kompakt/o32.nix
new file mode 100644
index 0000000..18f7372
--- /dev/null
+++ b/home/kompakt/o32.nix
@@ -0,0 +1,9 @@
+{ pkgs, lib, ... }:
+
+{
+ config = {
+ activeProfiles = [ "base-darwin" "development" "messaging" ];
+
+ programs.htop.settings.detailed_cpu_time = true;
+ };
+}
diff --git a/home/profiles/base-darwin/config/tmux.nix b/home/profiles/base-darwin/config/tmux.nix
new file mode 100644
index 0000000..0b5eea4
--- /dev/null
+++ b/home/profiles/base-darwin/config/tmux.nix
@@ -0,0 +1,81 @@
+''
+ set -ga terminal-overrides ",*256col*:Tc"
+
+ setw -g automatic-rename on # rename window to reflect current program
+ set -g renumber-windows on # renumber windows when a window is closed
+
+ set -g set-titles on # set terminal title
+
+ set -g display-panes-time 800 # slightly longer pane indicators display time
+ set -g display-time 1000 # slightly longer status messages display time
+
+ set -g status-interval 5 # redraw status line every 5 seconds
+
+ # better split bindings
+ unbind '"'
+ unbind %
+ # splitting
+ bind f if-shell "[ $(($(tmux display -p '8*#{pane_width}-20*#{pane_height}'))) -lt 0 ]" "splitw -v -c '#{pane_current_path}'" "splitw -h -c '#{pane_current_path}' "
+
+ # reload
+ bind r source-file ~/.config/tmux/tmux.conf
+
+ bind -n C-h select-pane -L
+ bind -n C-j select-pane -D
+ bind -n C-k select-pane -U
+ bind -n C-l select-pane -R
+
+ bind -n C-M-h resize-pane -L 2
+ bind -n C-M-j resize-pane -D 2
+ bind -n C-M-k resize-pane -U 2
+ bind -n C-M-l resize-pane -R 2
+
+ bind -n M-j swap-pane -U
+ bind -n M-k swap-pane -D
+
+ # prefix-m marks window, prefix-u swaps current with marked
+ bind u swap-pane
+
+ # kill current pane
+ unbind x
+ bind w kill-pane
+
+ # pane separator style
+ set -g pane-border-style "fg=black bg=terminal"
+ set -g pane-active-border-style "fg=black bg=black"
+
+ # new window on n, not c
+ unbind c
+ unbind n
+ bind n new-window
+
+ # enable mouse operation
+ set -g mouse on
+
+ # move status line to the top
+ set-option -g status-position top
+
+ set -g status-justify right
+
+ # transparent status background
+ set-option -g status-style bg=default
+
+ # left side length and style
+ set -g status-left-length 60
+ set -g status-left-style default
+
+ # display the session name
+ set -g status-left "#[fg=green] Stack #S #[default]"
+
+ # right side length and style
+ set -g status-right-length 140
+ set -g status-right-style default
+ set -g status-right ""
+
+ # inactive window style
+ set -g window-status-style fg=default,bg=default
+ set -g window-status-format ' #I #W '
+ # active window style
+ set -g window-status-current-style fg=blue,bg=default
+ set -g window-status-current-format ' #I #W '
+''
diff --git a/home/profiles/base-darwin/default.nix b/home/profiles/base-darwin/default.nix
new file mode 100644
index 0000000..63454bd
--- /dev/null
+++ b/home/profiles/base-darwin/default.nix
@@ -0,0 +1,160 @@
+{ config, lib, inputs, pkgs, self, ... }:
+let
+ cfg = config.profiles.base-darwin;
+
+ inherit (self.packages.aarch64-darwin) neovim;
+in
+{
+ imports = [
+ ../../modules/programs/nixpkgs
+ ../../modules/programs/zshell
+ ];
+
+ options.profiles.base-darwin.enable = lib.mkEnableOption
+ "The base profile, contains general configurations. (Darwin)";
+
+ config = lib.mkIf cfg.enable {
+ home.sessionVariables = rec {
+ # NIXOS_OZONE_WL = 1; # FIXME: interface 'wl_output' has no event 4
+ EDITOR = "nvim";
+ VISUAL = "nvim";
+ GIT_EDITOR = EDITOR;
+ };
+
+ home.packages = [
+ # Nix Tools
+ pkgs.nix-index
+ pkgs.nix-tree
+ pkgs.nix-top
+ pkgs.nix-update
+ pkgs.hydra-check
+
+ pkgs.aria2
+ pkgs.bottom
+ pkgs.fd
+ pkgs.fzf
+ pkgs.iterm2
+ pkgs.libnotify
+ pkgs.procs
+ pkgs.sops
+ pkgs.tree
+ pkgs.pinentry_mac
+
+ neovim
+
+ # Common build tools
+ (pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.default))
+ pkgs.go
+ pkgs.gcc
+ ];
+
+
+ programs = {
+ direnv.enable = true;
+ direnv.nix-direnv.enable = true;
+ exa.enable = true;
+ exa.enableAliases = true;
+ gpg.enable = true;
+ gpg.settings.keyserver = "keys.openpgp.org";
+ home-manager.enable = true;
+ htop.enable = true;
+
+ tmux = {
+ enable = true;
+
+ prefix = "C-f";
+ terminal = "xterm-256color";
+ shell = "${pkgs.zsh}/bin/zsh";
+ baseIndex = 1;
+ keyMode = "vi";
+
+ escapeTime = 0;
+
+ extraConfig = import ./config/tmux.nix;
+
+ };
+ zsh = {
+ enable = true;
+
+ enableCompletion = true;
+ enableAutosuggestions = true;
+
+ autocd = true;
+
+ dotDir = ".config/zsh";
+
+ plugins = [
+ {
+ name = "powerlevel10k";
+ src = pkgs.zsh-powerlevel10k;
+ file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme";
+ }
+
+ {
+ name = "powerlevel10k-config";
+ src = lib.cleanSource ./p10k-config;
+ file = "p10k.zsh";
+ }
+
+ {
+ name = "zsh-syntax-highlighting";
+ src = pkgs.fetchFromGitHub {
+ owner = "zsh-users";
+ repo = "zsh-syntax-highlighting";
+ rev = "0.7.1";
+ sha256 = "03r6hpb5fy4yaakqm3lbf4xcvd408r44jgpv4lnzl9asp4sb9qc0";
+ };
+ }
+ ];
+
+ shellAliases = config.programs.zshell.aliases;
+ };
+
+ zshell.aliases = {
+ e = "nvim";
+ nvimdiff = "nvim -d";
+ };
+
+ zoxide = {
+ enable = true;
+ enableZshIntegration = true;
+ };
+
+ # TODO: https://github.com/zellij-org/zellij/issues/1013
+ # zellij = {
+ # enable = true;
+ #
+ # settings = {
+ # default_mode = "normal";
+ # pane_frames = false;
+ # simplified_ui = true; # bitmap fonts
+ #
+ # themes = {
+ # default = {
+ # # Industrial Jellybeans theme
+ # bg = [ 21 21 21 ];
+ # fg = [ 136 136 136 ];
+ # black = [ 28 28 28 ];
+ # gray = [ 64 64 64 ];
+ # white = [ 232 232 211 ];
+ # red = [ 141 61 38 ];
+ # orange = [ 250 187 110 ];
+ # yellow = [ 250 208 122 ];
+ # green = [ 153 173 106 ];
+ # blue = [ 129 151 191 ];
+ # cyan = [ 143 191 220 ];
+ # magenta = [ 198 182 238 ];
+ # };
+ # };
+ # };
+ # };
+ };
+
+ home.file."${config.programs.gpg.homedir}/gpg-agent.conf".text = ''
+ default-cache-ttl 3600
+ default-cache-ttl-ssh 3600
+ pinentry-program ${pkgs.pinentry_mac}/Applications/pinentry-mac.app/Contents/MacOS/pinentry-mac
+ allow-preset-passphrase
+ '';
+ };
+}
diff --git a/home/profiles/base-darwin/p10k-config/p10k.zsh b/home/profiles/base-darwin/p10k-config/p10k.zsh
new file mode 100644
index 0000000..33b8bf9
--- /dev/null
+++ b/home/profiles/base-darwin/p10k-config/p10k.zsh
@@ -0,0 +1,1641 @@
+# Generated by Powerlevel10k configuration wizard on 2022-08-11 at 17:58 KST.
+# Based on romkatv/powerlevel10k/config/p10k-classic.zsh, checksum 52170.
+# Wizard options: nerdfont-complete + powerline, small icons, classic, unicode, dark,
+# 24h time, angled separators, sharp heads, flat tails, 2 lines, disconnected,
+# left frame, sparse, many icons, concise, transient_prompt, 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=none
+
+ # 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='%240F╭─'
+ typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%240F├─'
+ typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%240F╰─'
+ # Connect right prompt lines with these symbols.
+ typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX=
+ typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX=
+ typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX=
+
+ # 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 ":<offset>" where <offset> 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