diff options
| author | sefidel <contact@sefidel.net> | 2022-09-09 17:49:03 +0900 |
|---|---|---|
| committer | sefidel <contact@sefidel.net> | 2022-09-09 21:32:31 +0900 |
| commit | 9e6145c031b47fc37398b80dec1b4dfc0cfb5183 (patch) | |
| tree | f27e3c50a0c25223931e7057616e456432007de9 | |
| parent | 9e311725d4f6c68284e3999c01735ebe3665a14d (diff) | |
| download | nixrc-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.nix | 8 | ||||
| -rw-r--r-- | darwin/default.nix | 9 | ||||
| -rw-r--r-- | darwin/kompakt/configuration.nix | 66 | ||||
| -rw-r--r-- | flake.lock | 63 | ||||
| -rw-r--r-- | flake.nix | 10 | ||||
| -rw-r--r-- | home/default.nix | 15 | ||||
| -rw-r--r-- | home/kompakt/o32.nix | 9 | ||||
| -rw-r--r-- | home/profiles/base-darwin/config/tmux.nix | 81 | ||||
| -rw-r--r-- | home/profiles/base-darwin/default.nix | 160 | ||||
| -rw-r--r-- | home/profiles/base-darwin/p10k-config/p10k.zsh | 1641 | ||||
| -rw-r--r-- | home/profiles/development/default.nix | 28 | ||||
| -rw-r--r-- | home/profiles/messaging/default.nix | 491 | ||||
| -rw-r--r-- | lib/default.nix | 1 | ||||
| -rw-r--r-- | lib/mk_darwin.nix | 23 | ||||
| -rw-r--r-- | lib/mk_home.nix | 28 | ||||
| -rw-r--r-- | packages/darwin.nix | 5 | ||||
| -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; +} @@ -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": { @@ -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 |
