aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsefidel <contact@sefidel.net>2021-12-28 01:11:25 +0900
committersefidel <contact@sefidel.net>2021-12-28 01:12:48 +0900
commit56992b8c945d497a623fe693847c91235be1ae02 (patch)
tree102ff8c8872d7e14ce3e3dba69bf16685374504e
downloadnixrc-56992b8c945d497a623fe693847c91235be1ae02.zip
initial commit
-rw-r--r--.gitignore2
-rw-r--r--LICENSE.md17
-rw-r--r--README.md1
-rw-r--r--flake.lock199
-rw-r--r--flake.nix42
-rw-r--r--home/configurations/boopy@alpha.nix9
-rw-r--r--home/configurations/default.nix5
-rw-r--r--home/modules/default.nix13
-rw-r--r--home/modules/misc/home/default.nix31
-rw-r--r--home/modules/profiles/base/config/foot.nix33
-rw-r--r--home/modules/profiles/base/config/sway.nix202
-rw-r--r--home/modules/profiles/base/config/waybar-settings-new.nix68
-rw-r--r--home/modules/profiles/base/config/waybar-settings.nix68
-rw-r--r--home/modules/profiles/base/config/waybar-style.nix97
-rw-r--r--home/modules/profiles/base/default.nix123
-rw-r--r--home/modules/profiles/base/p10k-config/p10k.zsh1469
-rw-r--r--home/modules/profiles/browsing/default.nix13
-rw-r--r--home/modules/profiles/default.nix13
-rw-r--r--home/modules/profiles/development/default.nix78
-rw-r--r--home/modules/profiles/messaging/default.nix14
-rw-r--r--home/modules/profiles/misc/default.nix14
-rw-r--r--home/modules/programs/nixpkgs/default.nix20
-rw-r--r--home/modules/programs/zshell/default.nix44
-rw-r--r--lib/default.nix8
-rw-r--r--lib/home_configurations_as_packages.nix12
-rw-r--r--lib/mk_home.nix20
-rw-r--r--lib/mk_system.nix25
-rw-r--r--lib/nixos_configurations_as_packages.nix12
-rw-r--r--nixos/configurations/alpha.nix112
-rw-r--r--nixos/configurations/default.nix5
-rw-r--r--nixos/configurations/hardware/alpha.nix55
-rw-r--r--nixos/modules/cachix/caches/nix-community.nix12
-rw-r--r--nixos/modules/cachix/default.nix13
-rw-r--r--nixos/modules/default.nix5
-rw-r--r--nixos/modules/flake.nix12
-rw-r--r--nixos/modules/nix.nix34
-rw-r--r--packages/default.nix12
37 files changed, 2912 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..87a3018
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+result
+*.qcow2
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..1384694
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,17 @@
+ISC License
+===================================
+
+Copyright (c) 2021, boopy <hi@boopy.dev>
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a698ac9
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# nixrc
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..2dd7686
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,199 @@
+{
+ "nodes": {
+ "flake-compat": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1627913399,
+ "narHash": "sha256-hY8g6H2KFL8ownSiFeMOjwPC8P0ueXpCVEbxgda3pko=",
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "rev": "12c64ca55c1014cdc1b16ed5a804aa8576601ff2",
+ "type": "github"
+ },
+ "original": {
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "type": "github"
+ }
+ },
+ "flake-utils": {
+ "locked": {
+ "lastModified": 1629481132,
+ "narHash": "sha256-JHgasjPR0/J1J3DRm4KxM4zTyAj4IOJY8vIl75v/kPI=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "997f7efcb746a9c140ce1f13c72263189225f482",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_2": {
+ "locked": {
+ "lastModified": 1638122382,
+ "narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "74f7e4319258e287b0f9cb95426c9853b282730b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1638150501,
+ "narHash": "sha256-aWH3MRmjUtx8ciSGLegBJC5mhymsuroHPs74ZldrNTU=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "9de77227d7780518cfeaee5a917970247f3ecc56",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "9de77227d7780518cfeaee5a917970247f3ecc56",
+ "type": "github"
+ }
+ },
+ "master": {
+ "locked": {
+ "lastModified": 1640618094,
+ "narHash": "sha256-EU/+hGhTdsUcdNV0kb2+U/DH7R41/mMlweFzLuEplhg=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "0736e7e3a90fb6d2ff6e11c077918220a253c9bc",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "master",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "neovim": {
+ "inputs": {
+ "flake-utils": "flake-utils",
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "dir": "contrib",
+ "lastModified": 1640605963,
+ "narHash": "sha256-1edQitEq3uWad0xLaWSNwukW7PCmE+JERCNoWno8tZ4=",
+ "owner": "neovim",
+ "repo": "neovim",
+ "rev": "9804a2870f6f308f788f939f52958e3fbd2adaac",
+ "type": "github"
+ },
+ "original": {
+ "dir": "contrib",
+ "owner": "neovim",
+ "repo": "neovim",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1640554034,
+ "narHash": "sha256-gf7uo/CXrsna/S4Yfaklg8BnyRkDvo3poIzXCClyYaw=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "bd241e39f366eb7a41ea94f04f7af5c9508da632",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable-small",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-extra": {
+ "inputs": {
+ "flake-compat": "flake-compat",
+ "flake-utils": "flake-utils_2",
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1640611846,
+ "narHash": "sha256-zktrWAhvlPPj+atu9jlkCdECUTB+vIbrGwBFMs1qThg=",
+ "ref": "main",
+ "rev": "94c32416b1a332060e58bb4d4c39f692eb6ced09",
+ "revCount": 1,
+ "type": "git",
+ "url": "https://git.sr.ht/~boppy/nixpkgs-extra"
+ },
+ "original": {
+ "ref": "main",
+ "type": "git",
+ "url": "https://git.sr.ht/~boppy/nixpkgs-extra"
+ }
+ },
+ "root": {
+ "inputs": {
+ "home-manager": "home-manager",
+ "master": "master",
+ "neovim": "neovim",
+ "nixpkgs": "nixpkgs",
+ "nixpkgs-extra": "nixpkgs-extra",
+ "sops-nix": "sops-nix",
+ "wallpapers": "wallpapers"
+ }
+ },
+ "sops-nix": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1638821683,
+ "narHash": "sha256-oyqALhGijy2ZQxFSACrcC+Z8MzYLiomKCr9FQXVZ47U=",
+ "owner": "Mic92",
+ "repo": "sops-nix",
+ "rev": "afe00100b16648c1d79e62926caacac561df93a5",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Mic92",
+ "repo": "sops-nix",
+ "type": "github"
+ }
+ },
+ "wallpapers": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1640621312,
+ "narHash": "sha256-NGs2QRyMGc5HBNxCLQgCswCekerXhFNGh6NmCdiONo4=",
+ "ref": "main",
+ "rev": "4bb6eae09751cc23e89ebd4158fc779eb6cb919f",
+ "revCount": 1,
+ "type": "git",
+ "url": "https://git.sr.ht/~boppy/wall"
+ },
+ "original": {
+ "ref": "main",
+ "type": "git",
+ "url": "https://git.sr.ht/~boppy/wall"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..1abccf3
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,42 @@
+{
+ description = "boopy's nix flake dotfiles";
+
+ inputs = {
+ # Flake inputs
+ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable-small";
+ master.url = "github:nixos/nixpkgs/master";
+
+ # https://github.com/nix-community/home-manager/issues/2546
+ home-manager.url = "github:nix-community/home-manager?rev=9de77227d7780518cfeaee5a917970247f3ecc56";
+ home-manager.inputs.nixpkgs.follows = "nixpkgs";
+
+ sops-nix.url = "github:Mic92/sops-nix";
+ sops-nix.inputs.nixpkgs.follows = "nixpkgs";
+
+ neovim.url = "github:neovim/neovim?dir=contrib";
+ neovim.inputs.nixpkgs.follows = "nixpkgs";
+
+ # https://github.com/NixOS/nix/pull/5342
+ nixpkgs-extra.url = "git+https://git.sr.ht/~boppy/nixpkgs-extra?ref=main";
+ nixpkgs-extra.inputs.nixpkgs.follows = "nixpkgs";
+
+ wallpapers = { url = "git+https://git.sr.ht/~boppy/wall?ref=main"; flake = false; };
+ };
+
+ outputs = { self, nixpkgs, ... } @ inputs:
+ {
+ nixosModules = import ./nixos/modules;
+ nixosConfigurations = import ./nixos/configurations inputs;
+
+ homeModules = import ./home/modules;
+ homeConfigurations = import ./home/configurations inputs;
+
+ packages.x86_64-linux = (import ./packages inputs)
+ // self.lib.nixosConfigurationsAsPackages.x86_64-linux
+ // self.lib.homeConfigurationsAsPackages.x86_64-linux;
+
+ checks = self.packages;
+
+ lib = import ./lib inputs;
+ };
+}
diff --git a/home/configurations/boopy@alpha.nix b/home/configurations/boopy@alpha.nix
new file mode 100644
index 0000000..af71030
--- /dev/null
+++ b/home/configurations/boopy@alpha.nix
@@ -0,0 +1,9 @@
+{ pkgs, nixpkgs, self, ... }:
+
+{
+ config = {
+ activeProfiles = [ "browsing" "development" "messaging" "misc" ];
+
+ programs.htop.settings.detailed_cpu_time = true;
+ };
+}
diff --git a/home/configurations/default.nix b/home/configurations/default.nix
new file mode 100644
index 0000000..ac44363
--- /dev/null
+++ b/home/configurations/default.nix
@@ -0,0 +1,5 @@
+{ self, ... } @ inputs:
+
+{
+ "boopy@alpha" = self.lib.mkHome "boopy" "alpha" "x86_64-linux" inputs.nixpkgs "22.05";
+}
diff --git a/home/modules/default.nix b/home/modules/default.nix
new file mode 100644
index 0000000..d290e17
--- /dev/null
+++ b/home/modules/default.nix
@@ -0,0 +1,13 @@
+{
+ "profiles" = import ./profiles;
+ "profiles/base" = import ./profiles/base;
+ "profiles/browsing" = import ./profiles/browsing;
+ "profiles/development" = import ./profiles/development;
+ "profiles/messaging" = import ./profiles/messaging;
+ "profiles/misc" = import ./profiles/misc;
+
+ "programs/nixpkgs" = import ./programs/nixpkgs;
+ "programs/zshell" = import ./programs/zshell;
+
+ "misc/home" = import ./misc/home;
+}
diff --git a/home/modules/misc/home/default.nix b/home/modules/misc/home/default.nix
new file mode 100644
index 0000000..80232e7
--- /dev/null
+++ b/home/modules/misc/home/default.nix
@@ -0,0 +1,31 @@
+{ config, pkgs, lib, nixpkgs, self, ... }:
+
+{
+ profiles.base.enable = true;
+ fonts.fontconfig.enable = true;
+
+
+ home = {
+ stateVersion = "22.05";
+ };
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/home/modules/profiles/base/config/foot.nix b/home/modules/profiles/base/config/foot.nix
new file mode 100644
index 0000000..d53dba7
--- /dev/null
+++ b/home/modules/profiles/base/config/foot.nix
@@ -0,0 +1,33 @@
+{
+ main = {
+ term = "foot";
+ font = "dina:size=10,Liga SFMono Nerd Font:size=10";
+ letter-spacing = 0;
+ line-height = 13;
+ dpi-aware = "yes";
+ pad = "16x16 center";
+ };
+
+ cursor.style = "beam";
+
+ colors = {
+ background = "18191f";
+ foreground = "cbc0ab";
+ regular0 = "222329";
+ regular1 = "b17f81";
+ regular2 = "8aa387";
+ regular3 = "d4ae80";
+ regular4 = "8896ae";
+ regular5 = "c495a2";
+ regular6 = "7aacaa";
+ regular7 = "d0d0c7";
+ bright0 = "36373d";
+ bright1 = "c59395";
+ bright2 = "9eb79b";
+ bright3 = "e8c294";
+ bright4 = "9caac2";
+ bright5 = "d8a9b6";
+ bright6 = "8ec0be";
+ bright7 = "e4e4db";
+ };
+} \ No newline at end of file
diff --git a/home/modules/profiles/base/config/sway.nix b/home/modules/profiles/base/config/sway.nix
new file mode 100644
index 0000000..d04673e
--- /dev/null
+++ b/home/modules/profiles/base/config/sway.nix
@@ -0,0 +1,202 @@
+{ pkgs, wallpapers }:
+
+''
+ exec autotiling
+
+ # set modifiers
+ set $mod Mod4
+ set $alt Mod1
+ set $floating_modifier $mod
+ set $left h
+ set $down j
+ set $up k
+ set $right l
+
+ # set terminal
+
+ set $term footclient
+ bindsym $mod+Return exec $term
+
+ # set menu
+ set $menu "${pkgs.bemenu}/bin/bemenu-run -H 18 -l 5 --fn 'Iosevka Pure 10.5' --tb '#c495a2' --tf '#18191f' --hb '#c495a2' --hf '#18191f'"
+ bindsym $mod+d exec $menu
+
+ # change focus
+ # vim-style
+ bindsym $mod+$left focus left
+ bindsym $mod+$down focus down
+ bindsym $mod+$up focus up
+ bindsym $mod+$right focus right
+ # arrows
+ bindsym $mod+Left focus left
+ bindsym $mod+Down focus down
+ bindsym $mod+Up focus up
+ bindsym $mod+Right focus right
+
+ # move focused window
+ # vim-style
+ bindsym $mod+Shift+$left move left
+ bindsym $mod+Shift+$down move down
+ bindsym $mod+Shift+$up move up
+ bindsym $mod+Shift+$right move right
+ # arrows
+ bindsym $mod+Shift+Left move left
+ bindsym $mod+Shift+Down move down
+ bindsym $mod+Shift+Up move up
+ bindsym $mod+Shift+Right move right
+
+ # split
+ bindsym $mod+c split h # horizontal
+ bindsym $mod+v split v # vertical
+
+ # fullscreen
+ bindsym $mod+e fullscreen toggle
+
+ # floating
+ bindsym $mod+f floating toggle
+
+ # kill focused
+ bindsym $mod+w kill
+
+ font "pango:Iosevka Pure 5"
+
+ # window rules
+ for_window [window_role="pop-up"] floating enable
+ for_window [window_role="bubble"] floating enable
+ for_window [window_role="task_dialog"] floating enable
+ for_window [window_role="Preferences"] floating enable
+ for_window [window_type="dialog"] floating enable
+ for_window [window_type="menu"] floating enable
+ for_window [class="mpv"] floating enable
+ for_window [class=".*"] inhibit_idle fullscreen
+ for_window [app_id=".*"] title_format ""
+ for_window [class=".*"] title_format ""
+
+ titlebar_border_thickness 0
+ titlebar_padding 0 0
+
+ # workspace names
+ set $ws1 "α"
+ set $ws2 "β"
+ set $ws3 "γ"
+ set $ws4 "δ"
+ set $ws5 "ε"
+ set $ws6 "ζ"
+ set $ws7 "η"
+ set $ws8 "θ"
+ set $ws9 "ι"
+ set $ws10 "κ"
+
+ # switch to named ws
+ bindsym $mod+1 workspace $ws1
+ bindsym $mod+2 workspace $ws2
+ bindsym $mod+3 workspace $ws3
+ bindsym $mod+4 workspace $ws4
+ bindsym $mod+5 workspace $ws5
+ bindsym $mod+6 workspace $ws6
+ bindsym $mod+7 workspace $ws7
+ bindsym $mod+8 workspace $ws8
+ bindsym $mod+9 workspace $ws9
+ bindsym $mod+0 workspace $ws10
+
+ # switch to prev/next ws
+ bindsym $mod+z workspace prev
+ bindsym $mod+x workspace next
+
+ # move focused container to ws
+ bindsym $mod+Shift+1 move container to workspace $ws1
+ bindsym $mod+Shift+2 move container to workspace $ws2
+ bindsym $mod+Shift+3 move container to workspace $ws3
+ bindsym $mod+Shift+4 move container to workspace $ws4
+ bindsym $mod+Shift+5 move container to workspace $ws5
+ bindsym $mod+Shift+6 move container to workspace $ws6
+ bindsym $mod+Shift+7 move container to workspace $ws7
+ bindsym $mod+Shift+8 move container to workspace $ws8
+ bindsym $mod+Shift+9 move container to workspace $ws9
+ bindsym $mod+Shift+0 move container to workspace $ws10
+ bindsym $mod+Shift+z move container to workspace prev
+ bindsym $mod+Shift+x move container to workspace next
+
+ # ws back-and-forth
+ workspace_auto_back_and_forth no
+
+ # reload
+ bindsym $mod+q reload
+
+ # application shortcuts
+ bindsym $mod+a exec sublime4
+ bindsym $mod+Shift+a exec brave
+
+ # Volume control
+ bindsym XF86AudioRaiseVolume exec ~/.local/bin/volume up
+ bindsym XF86AudioLowerVolume exec ~/.local/bin/volume down
+ bindsym XF86AudioMute exec ~/.local/bin/volume toggle
+ #HHKB
+ bindsym $mod+equal exec ~/.local/bin/volume up
+ bindsym $mod+minus exec ~/.local/bin/volume down
+ bindsym $mod+backslash exec ~/.local/bin/volume toggle
+
+ # Brightness
+ bindsym XF86MonBrightnessDown exec brightnessctl -q set 10%-
+ bindsym XF86MonBrightnessUp exec brightnessctl -q set 10%+
+
+ # Screenshot
+ bindsym $mod+Print exec grimshot copy area
+ bindsym Print exec grimshot copy active
+ bindsym $alt+Print exec grimshot save screen
+
+ # Toggle waybar
+ bindsym $mod+b exec pkill -USR1 waybar
+
+ # Exit
+ bindsym $mod+Shift+q exec swaynag -t warning -m 'Do you really want to exit sway?' -b 'Yes, exit sway' 'swaymsg exit'
+
+ # Aesthetics
+ default_border pixel 3
+ hide_edge_borders --i3 smart
+ gaps inner 8
+ smart_borders on
+
+ set $color0 #222329
+ set $color1 #b17f81
+ set $color2 #8aa387
+ set $color3 #d4ae80
+ set $color4 #8896ae
+ set $color5 #c495a2
+ set $color6 #7aacaa
+ set $color7 #d0d0c7
+ set $color8 #36373d
+ set $color9 #c59395
+ set $color10 #9eb79b
+ set $color11 #e8c294
+ set $color12 #9caac2
+ set $color13 #d8a9b6
+ set $color14 #8ec0be
+ set $color15 #e4e4db
+
+ set $primary $color5
+ set $muted #b58693
+
+ # class border backgr text indicator
+ client.focused $primary $primary $color0 $color5
+ client.focused_inactive $muted $muted $color0 $color5
+ client.unfocused $muted $muted $color7 $color5
+ client.urgent $color10 $color10 $color0 $color5
+ output "*" bg ${wallpapers}/nixos/nix-glow-gruvbox.png fill
+ output "*" scale 1
+ output "*" scale_filter nearest
+
+ input type:touchpad {
+ tap enabled
+ natural_scroll enabled
+ }
+
+ input type:keyboard {
+ repeat_rate 40
+ repeat_delay 350
+ xkb_layout us,se
+ # xkb_variant ,dvorak
+ xkb_options 'grp:alt_shift_toggle,caps:escape'
+ # xkb_options ctrl:swapcaps
+ }
+''
diff --git a/home/modules/profiles/base/config/waybar-settings-new.nix b/home/modules/profiles/base/config/waybar-settings-new.nix
new file mode 100644
index 0000000..4b55a05
--- /dev/null
+++ b/home/modules/profiles/base/config/waybar-settings-new.nix
@@ -0,0 +1,68 @@
+{
+ # DISCLAIMER! On 22.05, do NOT use this until https://github.com/nix-community/home-manager/issues/2546 is solved.
+ layer = "bottom";
+ position = "top";
+ height = 17;
+ modules-left = [ "sway/workspaces" "sway/language" "cpu" "memory" ];
+ modules-center = [ "clock" ];
+ modules-right = [ "custom/weather" "pulseaudio" "network" ];
+
+ "sway/workspaces" = {
+ all-outputs = true;
+
+ persistent_workspaces = {
+ "α" = [ ];
+ "β" = [ ];
+ "γ" = [ ];
+ "δ" = [ ];
+ "ε" = [ ];
+ "ζ" = [ ];
+ "η" = [ ];
+ "θ" = [ ];
+ "ι" = [ ];
+ "κ" = [ ];
+ };
+ };
+
+ "sway/language" = {
+ format = " {long}";
+ };
+
+ "clock" = {
+ interval = 10;
+ format = "{: %m/%d/%Y %I:%M %p}";
+ };
+
+ "cpu" = {
+ interval = 5;
+ format = " {load}%  {usage}%";
+ };
+
+ "custom/weather" = {
+ format = " {}";
+ exec = "curl 'wttr.in/?format='%t+-+%x+%C++%w'&M'";
+ interval = 3600;
+ };
+
+ "network" = {
+ interface = "enp4s0";
+ format = " {ifname}";
+ format-wifi = " {essid}";
+ format-ethernet = " {ifname} {ipaddr}";
+ format-disconnected = " Disconnected";
+ max-length = 50;
+ };
+
+ "pulseaudio" = {
+ format = "{icon} {volume}%";
+ format-muted = "婢 Muted";
+ format-source = "";
+ format-source-muted = "Muted";
+ format-icons.default = [ " " " " " " ];
+ };
+
+ "memory" = {
+ interval = 5;
+ format = " {used:0.1f}G / {total:0.1f}G ({percentage}%)";
+ };
+}
diff --git a/home/modules/profiles/base/config/waybar-settings.nix b/home/modules/profiles/base/config/waybar-settings.nix
new file mode 100644
index 0000000..e208895
--- /dev/null
+++ b/home/modules/profiles/base/config/waybar-settings.nix
@@ -0,0 +1,68 @@
+{
+ layer = "bottom";
+ position = "top";
+ height = 17;
+ modules-left = [ "sway/workspaces" "sway/language" "cpu" "memory" ];
+ modules-center = [ "clock" ];
+ modules-right = [ "custom/weather" "pulseaudio" "network" ];
+
+ modules = {
+ "sway/workspaces" = {
+ all-outputs = true;
+
+ persistent_workspaces = {
+ "α" = [ ];
+ "β" = [ ];
+ "γ" = [ ];
+ "δ" = [ ];
+ "ε" = [ ];
+ "ζ" = [ ];
+ "η" = [ ];
+ "θ" = [ ];
+ "ι" = [ ];
+ "κ" = [ ];
+ };
+ };
+
+ "sway/language" = {
+ format = " {long}";
+ };
+
+ "clock" = {
+ interval = 10;
+ format = "{: %m/%d/%Y %I:%M %p}";
+ };
+
+ "cpu" = {
+ interval = 5;
+ format = " {usage:3}%";
+ };
+
+ "custom/weather" = {
+ format = " {}";
+ exec = "curl 'wttr.in/?format='%t+-+%x+%C++%w'&M'";
+ interval = 3600;
+ };
+
+ "network" = {
+ interval = 5;
+ interface = "enp4s0";
+ format = " {ifname}";
+ format-wifi = " {essid}  {bandwidthUpBits}  {bandwidthDownBits}";
+ format-ethernet = "  {bandwidthUpBits:>}  {bandwidthDownBits:>}";
+ format-disconnected = " Disconnected";
+ max-length = 50;
+ };
+
+ "pulseaudio" = {
+ format = "{icon} {volume}%";
+ format-muted = "ﱝ Muted";
+ format-icons.default = [ " " " " " " ];
+ };
+
+ "memory" = {
+ interval = 5;
+ format = " {used:0.1f}G / {total:0.1f}G ({percentage:3}%)";
+ };
+ };
+}
diff --git a/home/modules/profiles/base/config/waybar-style.nix b/home/modules/profiles/base/config/waybar-style.nix
new file mode 100644
index 0000000..45edf60
--- /dev/null
+++ b/home/modules/profiles/base/config/waybar-style.nix
@@ -0,0 +1,97 @@
+''
+ * {
+ border: none;
+ border-radius: 0;
+ font-family: "JetBrainsMono Nerd Font";
+ font-size: 14px;
+ min-height: 0;
+ }
+
+ window#waybar {
+ background: #18191f;
+ color: #cbc0ab;
+ }
+
+ #workspaces button {
+ padding: 0 4px;
+ background: #c495a2;
+ color: #18191f;
+ border-bottom: 2px solid #c495a2;
+ }
+
+ #workspaces button.focused {
+ background: #c495a2;
+ border-bottom: 2px solid #18191f;
+ }
+
+ #clock,
+ #cpu,
+ #battery,
+ #temperature,
+ #backlight,
+ #network,
+ #memory,
+ #language,
+ #pulseaudio,
+ #tray,
+ #mode,
+ #mpd,
+ #custom-weather {
+ padding: 0 6px;
+ margin: 0;
+ background-color: #c495a2;
+ color: #18191f;
+ }
+
+ @keyframes blink {
+ to {
+ background-color: #c495a2;
+ color: #18191f;
+ }
+ }
+
+ #cpu {
+ background-color: #8bb0a6;
+ }
+
+ #network {
+ background-color: #8bb0a6;
+ }
+
+ #memory {
+ background-color: #8bb0a6;
+ }
+
+ #pulseaudio {
+ background-color: #8bb0a6;
+ }
+
+ #battery {
+ background-color: #8bb0a6;
+ }
+
+ #battery.full {
+ background-color: #8bb0a6;
+ color: #18191f;
+ }
+
+ #battery.discharging {
+ background-color: #8bb0a6;
+ color: #18191f;
+ }
+
+ #battery.charging {
+ background-color: #8bb0a6;
+ color: #18191f;
+ }
+
+ #battery.warning:not(.charging) {
+ background-color: #8bb0a6;
+ color: #18191f;
+ animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+ }
+''
diff --git a/home/modules/profiles/base/default.nix b/home/modules/profiles/base/default.nix
new file mode 100644
index 0000000..1c584f0
--- /dev/null
+++ b/home/modules/profiles/base/default.nix
@@ -0,0 +1,123 @@
+{ config, lib, pkgs, self, ... }:
+let
+ cfg = config.profiles.base;
+
+ inherit (self.packages.x86_64-linux) neovim iosevka-pure-bin sf-mono-liga-bin wallpapers;
+in
+ {
+ options.profiles.base.enable = lib.mkEnableOption
+ "The base profile, should be always enabled";
+
+ config = lib.mkIf cfg.enable {
+ home.sessionVariables = rec {
+ EDITOR = "nvim";
+ VISUAL = "nvim";
+ GIT_EDITOR = EDITOR;
+ };
+
+ gtk.enable = true;
+ gtk.iconTheme.package = pkgs.papirus-icon-theme;
+ gtk.iconTheme.name = "Papirus-Dark";
+ #gtk.theme.package = pkgs.phocus;
+ #gtk.theme.name = "phocus";
+
+ home.keyboard.layout = "us";
+ home.packages = [
+ pkgs.hydra-check
+ neovim
+
+ # Fonts
+ iosevka-pure-bin
+ sf-mono-liga-bin
+ pkgs.dina-font
+ pkgs.sarasa-gothic
+ pkgs.scientifica
+ pkgs.jetbrains-mono
+ pkgs.twemoji-color-font
+ pkgs.symbola
+ pkgs.emacs-all-the-icons-fonts
+ (pkgs.nerdfonts.override { fonts = [ "Iosevka" "JetBrainsMono" ]; })
+ ];
+
+
+ wayland.windowManager.sway = {
+ enable = true;
+
+ config = {
+ bars = [{ command = "${pkgs.waybar}/bin/waybar"; }];
+ keybindings = { };
+ };
+
+ extraConfig = import ./config/sway.nix { inherit pkgs wallpapers; };
+ };
+
+ programs = {
+ bat.enable = true;
+ direnv.enable = true;
+ direnv.nix-direnv.enable = true;
+ exa.enable = true;
+ exa.enableAliases = true;
+ home-manager.enable = true;
+ htop.enable = true;
+
+ foot = {
+ enable = true;
+ server.enable = true;
+ settings = import ./config/foot.nix;
+ };
+
+ waybar = {
+ enable = config.wayland.windowManager.sway.enable;
+
+ settings = [ (import ./config/waybar-settings.nix) ];
+
+ style = import ./config/waybar-style.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;
+ };
+ };
+
+ services.wlsunset = {
+ enable = true;
+ latitude = "36.5";
+ longitude = "127.2";
+ };
+
+ nixpkgs.allowedUnfree = [ "symbola" ];
+ };
+ }
diff --git a/home/modules/profiles/base/p10k-config/p10k.zsh b/home/modules/profiles/base/p10k-config/p10k.zsh
new file mode 100644
index 0000000..8705be0
--- /dev/null
+++ b/home/modules/profiles/base/p10k-config/p10k.zsh
@@ -0,0 +1,1469 @@
+# Generated by Powerlevel10k configuration wizard on 2020-02-27 at 13:48 UTC.
+# Based on romkatv/powerlevel10k/config/p10k-classic.zsh.
+# Wizard options: powerline, classic, darkest, time, angled separators, sharp heads,
+# flat tails, 2 lines, solid, full frame, compact, concise, transient_prompt,
+# instant_prompt=off.
+# 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%8)):#7}:+$'\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
+ setopt no_unset extended_glob
+
+ # Unset all configuration options. This allows you to apply configiguration changes without
+ # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`.
+ unset -m 'POWERLEVEL9K_*'
+
+ autoload -Uz is-at-least && is-at-least 5.1 || return
+
+ zmodload zsh/langinfo
+ if [[ ${langinfo[CODESET]:-} != (utf|UTF)(-|)8 ]]; then
+ local LC_ALL=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8}
+ fi
+
+ # 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/)
+ 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)
+ kubecontext # current kubernetes context (https://kubernetes.io/)
+ terraform # terraform workspace (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)
+ 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)
+ 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)
+ )
+
+ # To enable default icons for all segments, don't define POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION
+ # or set it to '${P9K_VISUAL_IDENTIFIER}'.
+ #
+ # To remove trailing space from all default icons, set POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION
+ # to '${P9K_VISUAL_IDENTIFIER% }'.
+ #
+ # To enable default icons for one segment (e.g., dir), set
+ # POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'.
+ #
+ # To assign a specific icon to one segment (e.g., dir), set
+ # POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='⭐'.
+ #
+ # To assign a specific icon to a segment in a given state (e.g., dir in state NOT_WRITABLE),
+ # set POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'.
+ #
+ # Note: You can use $'\u2B50' instead of '⭐'. It's especially convenient when specifying
+ # icons that your text editor cannot render. Don't forget to put $ and use single quotes when
+ # defining icons via Unicode codepoints.
+ #
+ # Note: Many default icons cannot be displayed with system fonts. You'll need to install a
+ # capable font to use them. See POWERLEVEL9K_MODE below.
+ typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'
+
+ # This option makes a difference only when default icons are enabled for all or some prompt
+ # segments (see POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION above). LOCK_ICON can be printed as
+ # $'\uE0A2', $'\uE138' or $'\uF023' depending on POWERLEVEL9K_MODE. The correct value of this
+ # parameter depends on the provider of the font your terminal is using.
+ #
+ # Font Provider | POWERLEVEL9K_MODE
+ # ---------------------------------+-------------------
+ # Powerline | powerline
+ # Font Awesome | awesome-fontconfig
+ # Adobe Source Code Pro | awesome-fontconfig
+ # Source Code Pro | awesome-fontconfig
+ # Awesome-Terminal Fonts (regular) | awesome-fontconfig
+ # Awesome-Terminal Fonts (patched) | awesome-patched
+ # Nerd Fonts | nerdfont-complete
+ # Other | compatible
+ #
+ # If this looks overwhelming, either stick with a preinstalled system font and set
+ # POWERLEVEL9K_MODE=compatible, or install the recommended Powerlevel10k font from
+ # https://github.com/romkatv/powerlevel10k/#recommended-meslo-nerd-font-patched-for-powerlevel10k
+ # and set POWERLEVEL9K_MODE=nerdfont-complete.
+ typeset -g POWERLEVEL9K_MODE=powerline
+
+ # 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=false
+
+ # 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='%238F╭─'
+ typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%238F├─'
+ typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%238F╰─'
+ # Connect right prompt lines with these symbols.
+ typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%238F─╮'
+ typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%238F─┤'
+ typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%238F─╯'
+
+ # 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 using this option.
+ typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='─'
+ typeset -g POWERLEVEL9K_MULTILINE_FIRST_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=238
+ # 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=234
+
+ # Separator between same-color segments on the left.
+ typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%242F\uE0B1'
+ # Separator between same-color segments on the right.
+ typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%242F\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
+ # Make the icon bold.
+ typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='%B${P9K_CONTENT}'
+
+ ################################[ 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='Ⅴ'
+ # 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
+ )
+ typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})"
+ # If set to true, remove everything before the last (deepest) subdirectory that contains files
+ # matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is
+ # /foo/bar/git_repo/baz, prompt will display git_repo/baz. This assumes that /foo/bar/git_repo
+ # contains a marker (.git) and other directories don't.
+ 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 directories.
+ typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=true
+ # Show this icon when the current directory is not writable. POWERLEVEL9K_DIR_SHOW_WRITABLE
+ # above must be set to true for this parameter to have effect.
+ typeset -g POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='∅'
+
+ # Custom prefix.
+ # typeset -g POWERLEVEL9K_DIR_PREFIX='%244Fin '
+
+ # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons for different directories.
+ # It must be an array with 3 * N elements. Each triplet consists of:
+ #
+ # 1. A pattern against which the current directory is matched. Matching is done with
+ # extended_glob option enabled.
+ # 2. Directory class for the purpose of styling.
+ # 3. Icon.
+ #
+ # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. If there
+ # are no matches, the directory will have no icon.
+ #
+ # Example:
+ #
+ # typeset -g POWERLEVEL9K_DIR_CLASSES=(
+ # '~/work(|/*)' WORK '(╯°□°)╯︵ ┻━┻'
+ # '~(|/*)' HOME '⌂'
+ # '*' DEFAULT '')
+ #
+ # With these settings, the current directory in the prompt may look like this:
+ #
+ # (╯°□°)╯︵ ┻━┻ ~/work/projects/important/urgent
+ #
+ # Or like this:
+ #
+ # ⌂ ~/best/powerlevel10k
+ #
+ # You can also set different colors for directories of different classes. Remember to override
+ # FOREGROUND, SHORTENED_FOREGROUND and ANCHOR_FOREGROUND for every directory class that you wish
+ # to have its own color.
+ #
+ # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31
+ # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103
+ # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39
+ #
+ typeset -g POWERLEVEL9K_DIR_CLASSES=()
+
+ #####################################[ vcs: git status ]######################################
+ # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon.
+ typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=
+ POWERLEVEL9K_VCS_BRANCH_ICON=${(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='?'
+ POWERLEVEL9K_VCS_UNTRACKED_ICON=${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}
+
+ # Formatter for Git status.
+ #
+ # Example output: master ⇣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='%244F' # 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
+ local where # branch or tag
+ if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then
+ res+="${clean}${POWERLEVEL9K_VCS_BRANCH_ICON}"
+ where=${(V)VCS_STATUS_LOCAL_BRANCH}
+ elif [[ -n $VCS_STATUS_TAG ]]; then
+ res+="${meta}#"
+ where=${(V)VCS_STATUS_TAG}
+ fi
+
+ # If local branch name or tag is at most 32 characters long, show it in full.
+ # Otherwise show the first 12 … the last 12.
+ (( $#where > 32 )) && where[13,-13]="…"
+ res+="${clean}${where//\%/%%}" # escape %
+
+ # Display the current Git commit if there is no branch or tag.
+ # Tip: To always display the current Git commit, remove `[[ -z $where ]] &&` from the next line.
+ [[ -z $where ]] && 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//\%/%%}" # escape %
+ 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}${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 '|': '~|~/some/dir'.
+ 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='%244Fon '
+
+ # 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 respositories 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=true
+ 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=true
+ 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 longer than 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='%244Ftook '
+
+ #######################[ 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).
+ 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 diretory, 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_GO_FOREGROUND=37
+ # typeset -g POWERLEVEL9K_ASDF_GO_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_GO_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'
+
+ ##########[ 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='⭐'
+
+ ###########################[ 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_usgae: 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='%244Fwith '
+
+ ###[ 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
+ # 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
+ # Don't show Python version next to the anaconda environment name.
+ typeset -g POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION=false
+ # Separate environment name from Python version only with a space.
+ typeset -g POWERLEVEL9K_ANACONDA_{LEFT,RIGHT}_DELIMITER=
+ # 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
+ # 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
+ # 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
+ # Don't show node version if it's the same as global: $(nodenv version-name) == $(nodenv global).
+ typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false
+ # 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='⭐'
+
+ #############[ 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
+ # 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
+ # 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
+ # 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
+ # 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
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ################[ terraform: terraform workspace (https://www.terraform.io) ]#################
+ # 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
+ # '*' DEFAULT)
+ #
+ # 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.
+ '*' DEFAULT)
+ typeset -g POWERLEVEL9K_TERRAFORM_DEFAULT_FOREGROUND=38
+ # typeset -g POWERLEVEL9K_TERRAFORM_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]#############
+ # Show kubecontext only when the 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'
+
+ # 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='%244Fat '
+
+ #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]#
+ # Show aws only when the 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'
+
+ # 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_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='eb'
+
+ ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]##########
+ # Show azure only when the 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'
+ # Azure account name color.
+ typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32
+ # Custom icon.
+ typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='az'
+
+ ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]###########
+ # Show gcloud only when the 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'
+ # Google cloud color.
+ typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32
+
+ # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_CONTENT_EXPANSION if the default
+ # is too verbose or not informative enough.
+ #
+ # P9K_GCLOUD_ACCOUNT: the output of `gcloud config get-value account`
+ # P9K_GCLOUD_PROJECT: the output of `gcloud config get-value project`
+ # ${VARIABLE//\%/%%}: ${VARIABLE} with all occurences of '%' replaced with '%%'.
+ #
+ typeset -g POWERLEVEL9K_GCLOUD_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT//\%/%%}'
+
+ # 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 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'
+
+ # 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 occurences of '%' replaced by '%%'.
+ typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}'
+
+ ###############################[ 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='(wg|(.*tun))[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_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='e.*'
+ # 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=('%K{232}▁' '%K{232}▂' '%K{232}▃' '%K{232}▄' '%K{232}▅' '%K{232}▆' '%K{232}▇' '%K{232}█')
+ # 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"
+ # 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)
+ #
+ # All parameters except P9K_WIFI_BARS are extracted from the output of the following command:
+ #
+ # /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I
+
+ ####################################[ time: current time ]####################################
+ # Current time color.
+ typeset -g POWERLEVEL9K_TIME_FOREGROUND=66
+ # Format for the current time: 09:51:02. See `man 3 strftime`.
+ typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}'
+ # If set to true, time will update when you hit enter. This way prompts for the past
+ # commands will contain the start times of their commands as opposed to the default
+ # behavior where they contain the end times of their preceding commands.
+ typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
+ # Custom icon.
+ typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION=
+ # Custom prefix.
+ # typeset -g POWERLEVEL9K_TIME_PREFIX='%244Fat '
+
+ # 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=always
+
+ # 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=off
+
+ # 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
+}
+
+(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
+'builtin' 'unset' 'p10k_config_opts'
diff --git a/home/modules/profiles/browsing/default.nix b/home/modules/profiles/browsing/default.nix
new file mode 100644
index 0000000..45f0ed5
--- /dev/null
+++ b/home/modules/profiles/browsing/default.nix
@@ -0,0 +1,13 @@
+{ config, lib, pkgs, ... }:
+let cfg = config.profiles.browsing;
+in
+ {
+ options.profiles.browsing = {
+ enable = lib.mkEnableOption
+ "A profile that enables a browser for the GUI and the terminal";
+ };
+
+ config = lib.mkIf cfg.enable {
+ home.packages = with pkgs; [ firefox lynx ];
+ };
+ }
diff --git a/home/modules/profiles/default.nix b/home/modules/profiles/default.nix
new file mode 100644
index 0000000..1fa2960
--- /dev/null
+++ b/home/modules/profiles/default.nix
@@ -0,0 +1,13 @@
+{ config, lib, ... }:
+let
+ profileEnabler =
+ let
+ reducer = l: r: { "${r}".enable = true; } // l;
+ in
+ builtins.foldl' reducer { } config.activeProfiles;
+in
+ {
+ options.activeProfiles = lib.mkOption { type = lib.types.listOf lib.types.str; };
+
+ config.profiles = profileEnabler;
+ }
diff --git a/home/modules/profiles/development/default.nix b/home/modules/profiles/development/default.nix
new file mode 100644
index 0000000..d85e796
--- /dev/null
+++ b/home/modules/profiles/development/default.nix
@@ -0,0 +1,78 @@
+{ config, lib, pkgs, ... }:
+
+let
+ cfg = config.profiles.development;
+in
+ {
+ options.profiles.development = {
+ enable = lib.mkEnableOption
+ "A profile that enables the system to be used for developing programs";
+ };
+
+ config = lib.mkIf cfg.enable {
+ programs.gh.enable = true;
+ programs.git = {
+ enable = true;
+ package = pkgs.gitFull;
+
+ userName = "Zack A";
+ userEmail = "hi@boopy.dev";
+
+ signing = {
+ key = null;
+ signByDefault = true;
+ };
+
+ aliases = {
+ graph =
+ "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold cyan)%h%C(reset) - %C(green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all";
+ co = "checkout";
+ br = "branch";
+ st = "status";
+ ps = "push";
+ pl = "pull";
+ root = "rev-parse --show-toplevel";
+ };
+
+ extraConfig = {
+ init.defaultBranch = "main";
+ pull.rebase = true;
+ };
+
+ ignores = [
+ # IntelliJ files and folders
+ ".idea/"
+ "*.iml"
+ # backupfiles and shadow copies done by editors
+ "*~"
+ "\\#*\\#"
+ ".#*"
+ # Elixir language server
+ "/.elixir_ls"
+ # MyPy Cache
+ ".mypy_cache"
+ # Visual Studio Code project configuration
+ "/.vscode"
+ # Result folder for nix builds
+ "result"
+ "result-*"
+ # direnv caches
+ ".direnv/"
+ # emacs/python stuff
+ "flycheck_*.py"
+ ];
+ };
+
+ home.packages = [ pkgs.ripgrep pkgs.rust-analyzer pkgs.gnupg ];
+
+ services.gpg-agent = {
+ enable = true;
+ enableExtraSocket = true;
+ defaultCacheTtl = 34560000;
+ defaultCacheTtlSsh = 34560000;
+ maxCacheTtl = 34560000;
+ maxCacheTtlSsh = 34560000;
+ };
+ };
+ }
+
diff --git a/home/modules/profiles/messaging/default.nix b/home/modules/profiles/messaging/default.nix
new file mode 100644
index 0000000..1bdc873
--- /dev/null
+++ b/home/modules/profiles/messaging/default.nix
@@ -0,0 +1,14 @@
+{ config, lib, pkgs, ... }:
+let cfg = config.profiles.messaging;
+in
+ {
+ options.profiles.messaging = {
+ enable = lib.mkEnableOption
+ "A profile that enables the system to communicate via internet.";
+ };
+
+ config = lib.mkIf cfg.enable {
+ home.packages = with pkgs; [ discord-canary aerc weechat element slack ];
+ nixpkgs.allowedUnfree = [ "discord-canary" "slack" ];
+ };
+ }
diff --git a/home/modules/profiles/misc/default.nix b/home/modules/profiles/misc/default.nix
new file mode 100644
index 0000000..19542fa
--- /dev/null
+++ b/home/modules/profiles/misc/default.nix
@@ -0,0 +1,14 @@
+{ config, lib, pkgs, ... }:
+let cfg = config.profiles.misc;
+in
+ {
+ options.profiles.misc = {
+ enable = lib.mkEnableOption
+ "A profile that enables miscellaneous options and packages.";
+ };
+
+ config = lib.mkIf cfg.enable {
+ home.packages = with pkgs; [ spotify ];
+ nixpkgs.allowedUnfree = [ "spotify" "spotify-unwrapped" ];
+ };
+ }
diff --git a/home/modules/programs/nixpkgs/default.nix b/home/modules/programs/nixpkgs/default.nix
new file mode 100644
index 0000000..92653a1
--- /dev/null
+++ b/home/modules/programs/nixpkgs/default.nix
@@ -0,0 +1,20 @@
+{ config, lib, ... }:
+
+let
+ allowed = config.nixpkgs.allowedUnfree;
+in
+
+{
+ options.nixpkgs.allowedUnfree = lib.mkOption {
+ type = lib.types.listOf lib.types.string;
+ default = [ ];
+ description = ''
+ Allows for unfree packages by their name.
+ '';
+ };
+
+ config.nixpkgs.config.allowUnfreePredicate =
+ if (allowed == [ ])
+ then (_: false)
+ else (pkg: __elem (lib.getName pkg) allowed);
+}
diff --git a/home/modules/programs/zshell/default.nix b/home/modules/programs/zshell/default.nix
new file mode 100644
index 0000000..514002a
--- /dev/null
+++ b/home/modules/programs/zshell/default.nix
@@ -0,0 +1,44 @@
+{ config, lib, ... }:
+let
+ cfg = config.programs.zshell;
+ aliasesStr = lib.concatStringsSep "\n"
+ (lib.mapAttrsToList (k: v: "alias ${k}=${lib.escapeShellArg v}")
+ cfg.aliases);
+ sourcesStr =
+ lib.concatStringsSep "\n" (builtins.map (s: ". ${s}") cfg.sources);
+in
+{
+ options.programs.zshell = {
+ aliases = lib.mkOption {
+ default = { };
+ example = {
+ ll = "ls -l";
+ ".." = "cd ..";
+ };
+ description = ''
+ An attribute set that maps aliases (the top level attribute names in
+ this option) to command strings or directly to build outputs.
+ '';
+ type = lib.types.attrsOf lib.types.str;
+ };
+ sources = lib.mkOption {
+ default = [ ];
+ type = lib.types.listOf lib.types.str;
+ };
+ };
+
+ config = {
+ home.file = {
+ ".zsh/boot/aliases.zsh" = {
+ text = ''
+ ${aliasesStr}
+ '';
+ };
+ ".zsh/boot/sourcing.zsh" = {
+ text = ''
+ ${sourcesStr}
+ '';
+ };
+ };
+ };
+}
diff --git a/lib/default.nix b/lib/default.nix
new file mode 100644
index 0000000..b75be10
--- /dev/null
+++ b/lib/default.nix
@@ -0,0 +1,8 @@
+inputs:
+
+{
+ mkSystem = import ./mk_system.nix inputs;
+ mkHome = import ./mk_home.nix inputs;
+ nixosConfigurationsAsPackages = import ./nixos_configurations_as_packages.nix inputs;
+ homeConfigurationsAsPackages = import ./home_configurations_as_packages.nix inputs;
+}
diff --git a/lib/home_configurations_as_packages.nix b/lib/home_configurations_as_packages.nix
new file mode 100644
index 0000000..41fd7b4
--- /dev/null
+++ b/lib/home_configurations_as_packages.nix
@@ -0,0 +1,12 @@
+{ self, ... } @ inputs:
+
+let
+ pkgs = import inputs.nixpkgs { system = "x86_64-linux"; };
+
+ inherit (pkgs.lib) genAttrs mapAttrs';
+
+ hostNames = __attrNames self.homeConfigurations;
+ attrHostNames = genAttrs hostNames (name: "home/config/${name}");
+ configs = mapAttrs' (name: pname: { name = pname; value = self.homeConfigurations.${name}.activationPackage; }) attrHostNames;
+in
+{ x86_64-linux = configs; }
diff --git a/lib/mk_home.nix b/lib/mk_home.nix
new file mode 100644
index 0000000..e352f5f
--- /dev/null
+++ b/lib/mk_home.nix
@@ -0,0 +1,20 @@
+{ self, home-manager, ... } @ inputs:
+
+username: hostname: system: nixpkgs: version:
+let
+ args = inputs;
+ entrypoint = "${self}/home/configurations/${username}@${hostname}.nix";
+in
+ home-manager.lib.homeManagerConfiguration {
+ inherit username system;
+ homeDirectory = "/home/${username}";
+ stateVersion = version;
+ pkgs = nixpkgs.legacyPackages.${system};
+
+ configuration = { lib, ... }: {
+ _module = { inherit args; };
+ imports = [
+ entrypoint
+ ] ++ __attrValues self.homeModules;
+ };
+ }
diff --git a/lib/mk_system.nix b/lib/mk_system.nix
new file mode 100644
index 0000000..ee0037b
--- /dev/null
+++ b/lib/mk_system.nix
@@ -0,0 +1,25 @@
+{ self, ... } @ args:
+
+name: nixpkgs:
+nixpkgs.lib.nixosSystem (
+ let
+ configFolder = "${self}/nixos/configurations";
+ entryPoint = "${configFolder}/${name}.nix";
+ hardware = "${configFolder}/hardware/${name}.nix";
+ in
+ {
+ system = "x86_64-linux";
+
+ modules = [
+ {
+ _module.args = args;
+ networking.hostName = name;
+ nix.flakes.enable = true;
+ system.configurationRevision = self.rev or "dirty";
+ documentation.man = { enable = true; generateCaches = true; };
+ }
+ entryPoint
+ hardware
+ ] ++ __attrValues self.nixosModules;
+ }
+)
diff --git a/lib/nixos_configurations_as_packages.nix b/lib/nixos_configurations_as_packages.nix
new file mode 100644
index 0000000..f257c6d
--- /dev/null
+++ b/lib/nixos_configurations_as_packages.nix
@@ -0,0 +1,12 @@
+{ self, ... } @ inputs:
+
+let
+ pkgs = import inputs.nixpkgs { system = "x86_64-linux"; };
+
+ inherit (pkgs.lib) genAttrs mapAttrs';
+
+ hostNames = __attrNames self.nixosConfigurations;
+ attrHostNames = genAttrs hostNames (name: "nixos/config/${name}");
+ configs = mapAttrs' (name: pname: { name = pname; value = self.nixosConfigurations.${name}.config.system.build.toplevel; }) attrHostNames;
+in
+{ x86_64-linux = configs; }
diff --git a/nixos/configurations/alpha.nix b/nixos/configurations/alpha.nix
new file mode 100644
index 0000000..27e8ceb
--- /dev/null
+++ b/nixos/configurations/alpha.nix
@@ -0,0 +1,112 @@
+{ config, pkgs, lib, ...}:
+
+{
+ imports = [];
+
+ security.chromiumSuidSandbox.enable = true;
+
+ boot.kernelPackages = pkgs.linuxPackages_xanmod;
+ # GRUB bootloader
+ boot.loader.efi.canTouchEfiVariables = true;
+ boot.loader.grub = {
+ enable = true;
+ version = 2;
+
+ efiSupport = true;
+ configurationLimit = 10;
+ device = "nodev";
+ useOSProber = true;
+ # device = "/dev/disk/by-uuid/7905-2E41";
+ extraEntries = ''
+ menuentry "Reboot" {
+ reboot
+ }
+ menuentry "Shutdown" {
+ halt
+ }
+ '';
+ };
+
+ networking.networkmanager.enable = true;
+ networking.useDHCP = false;
+ networking.firewall.enable = true;
+
+ i18n.defaultLocale = "en_US.UTF-8";
+ i18n.inputMethod.enabled = "kime";
+
+ console.font = "Lat2-Terminus16";
+ console.keyMap = "us";
+
+ time.timeZone = "Asia/Seoul";
+
+ environment.systemPackages = with pkgs; [ ];
+
+ services.openssh.enable = true;
+
+ sound.enable = true;
+ hardware.pulseaudio = {
+ enable = true;
+ package = pkgs.pulseaudioFull;
+ };
+
+ hardware.bluetooth.enable = true;
+
+ services.greetd = {
+ enable = true;
+
+ settings.default_session.command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd sway";
+ };
+
+ programs = {
+ sway = {
+ enable = true;
+ wrapperFeatures.gtk = true;
+
+ extraPackages = with pkgs; [
+ autotiling
+ alacritty
+ swaylock
+ swayidle
+ swaybg
+ wayland-utils
+ wl-clipboard
+ grim
+ slurp
+ sway-contrib.grimshot
+ waybar
+ bemenu
+ qt5.qtwayland
+ xdg_utils
+ ];
+ };
+
+ zsh.enable = true;
+ zsh.enableCompletion = false;
+ };
+
+ hardware.opengl.enable = true;
+ hardware.opengl.driSupport32Bit = true;
+ hardware.opengl.extraPackages = with pkgs; [ vaapiVdpau libvdpau-va-gl ];
+
+ virtualisation.libvirtd.enable = true;
+
+ users.users = {
+ boopy = {
+ isNormalUser = true;
+ shell = pkgs.zsh;
+
+ extraGroups = [
+ "wheel"
+ "audio"
+ "networkmanager"
+ "libvirtd"
+ ];
+ };
+ };
+
+ # This value determines the NixOS release with which your system is to be
+ # compatible, in order to avoid breaking some software such as database
+ # servers. You should change this only after NixOS release notes say you
+ # should.
+ system.stateVersion = "22.05"; # Did you read the comment?
+}
diff --git a/nixos/configurations/default.nix b/nixos/configurations/default.nix
new file mode 100644
index 0000000..8b84279
--- /dev/null
+++ b/nixos/configurations/default.nix
@@ -0,0 +1,5 @@
+{ self, nixpkgs, ... } @ inputs:
+
+{
+ alpha = self.lib.mkSystem "alpha" nixpkgs;
+}
diff --git a/nixos/configurations/hardware/alpha.nix b/nixos/configurations/hardware/alpha.nix
new file mode 100644
index 0000000..e8d3e17
--- /dev/null
+++ b/nixos/configurations/hardware/alpha.nix
@@ -0,0 +1,55 @@
+{ config, lib, pkgs, ... }:
+
+let
+ espDev = "/dev/disk/by-uuid/7905-2E41";
+ btrfsDev = "/dev/disk/by-uuid/dc47a0a6-3c73-45c1-951c-40032e762180";
+ swapDev = "/dev/disk/by-uuid/4a74b247-99e9-42c7-9a86-75aea964bb85";
+ dataDev = "/dev/disk/by-uuid/fe7a00a8-0a3c-48de-9d7a-ed7cf172f501";
+
+ subvolume = name: {
+ device = btrfsDev;
+ fsType = "btrfs";
+ options = [ "subvol=${name}" "compress=zstd" "noatime" ];
+ };
+in
+{
+ boot.initrd.availableKernelModules = [ "xhci-pci" "ahci" "usb_storage" "usbhid" "sd_mod" ];
+ boot.initrd.kernelModules = [ ];
+ boot.kernelModules = [ "kvm-amd" ];
+ boot.extraModulePackages = [ ];
+
+ hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+ hardware.enableRedistributableFirmware = true;
+
+ fileSystems."/" = subvolume "root";
+ fileSystems."/home" = subvolume "home";
+ fileSystems."/nix" = subvolume "nix";
+ fileSystems."/persist" = subvolume "persist";
+ fileSystems."/var/log" = {
+ device = btrfsDev;
+ fsType = "btrfs";
+ options = [ "subvol=log" "compress=zstd" "noatime" ];
+ neededForBoot = true;
+ };
+
+ fileSystems."/boot" = {
+ device = espDev;
+ fsType = "vfat";
+ };
+
+ fileSystems."/data" = {
+ device = dataDev;
+ fsType = "ext4";
+ };
+
+ fileSystems."/tmp" = {
+ fsType = "tmpfs";
+ device = "tmpfs";
+ options = [ "nosuid" "nodev" "relatime" "size=14G" ];
+ };
+
+ swapDevices = [{ device = swapDev; }];
+
+ nix.maxJobs = lib.mkDefault 4;
+ powerManagement.cpuFreqGovernor = lib.mkDefault "schedutil";
+}
diff --git a/nixos/modules/cachix/caches/nix-community.nix b/nixos/modules/cachix/caches/nix-community.nix
new file mode 100644
index 0000000..2b4c408
--- /dev/null
+++ b/nixos/modules/cachix/caches/nix-community.nix
@@ -0,0 +1,12 @@
+{ config, lib, ... }:
+
+{
+ nix = {
+ binaryCaches = [
+ "https://nix-community.cachix.org"
+ ];
+ binaryCachePublicKeys = [
+ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
+ ];
+ };
+}
diff --git a/nixos/modules/cachix/default.nix b/nixos/modules/cachix/default.nix
new file mode 100644
index 0000000..38ad575
--- /dev/null
+++ b/nixos/modules/cachix/default.nix
@@ -0,0 +1,13 @@
+{ config, pkgs, lib, ... }:
+let
+ folder = ./caches;
+ toImport = name: value: folder + ("/" + name);
+ filterCaches = key: value: value == "regular" && lib.hasSuffix ".nix" key;
+ imports = lib.mapAttrsToList toImport (lib.filterAttrs filterCaches (builtins.readDir folder));
+in
+{
+ inherit imports;
+ nix.binaryCaches = [ "https://cache.nixos.org/" ];
+
+ environment.systemPackages = [ pkgs.cachix ];
+}
diff --git a/nixos/modules/default.nix b/nixos/modules/default.nix
new file mode 100644
index 0000000..f17f392
--- /dev/null
+++ b/nixos/modules/default.nix
@@ -0,0 +1,5 @@
+{
+ cachix = import ./cachix;
+ flake = import ./flake.nix;
+ nix = import ./nix.nix;
+}
diff --git a/nixos/modules/flake.nix b/nixos/modules/flake.nix
new file mode 100644
index 0000000..a88f9d0
--- /dev/null
+++ b/nixos/modules/flake.nix
@@ -0,0 +1,12 @@
+{ config, pkgs, lib, ... }:
+
+{
+ options.nix.flakes.enable = lib.mkEnableOption "nix flakes";
+
+ config = lib.mkIf config.nix.flakes.enable {
+ nix = {
+ package = pkgs.nixUnstable;
+ experimentalFeatures = "nix-command flakes";
+ };
+ };
+}
diff --git a/nixos/modules/nix.nix b/nixos/modules/nix.nix
new file mode 100644
index 0000000..04fafac
--- /dev/null
+++ b/nixos/modules/nix.nix
@@ -0,0 +1,34 @@
+{ config, lib, ... }:
+
+let
+ allowed = config.nix.allowedUnfree;
+in
+{
+ options.nix = {
+ experimentalFeatures = lib.mkOption {
+ type = lib.types.separatedString " ";
+ default = "";
+ description = ''
+ Enables experimental features
+ '';
+ };
+
+ allowedUnfree = lib.mkOption {
+ type = lib.types.listOf lib.types.string;
+ default = [ ];
+ description = ''
+ Allows for unfree packages by their name.
+ '';
+ };
+ };
+
+ config = lib.mkMerge [
+ (lib.mkIf (config.nix.experimentalFeatures != "") { nix.extraOptions = "experimental-features = ${config.nix.experimentalFeatures}"; })
+ (lib.mkIf (allowed != [ ]) { nixpkgs.config.allowUnfreePredicate = (pkg: __elem (lib.getName pkg) allowed); })
+ { nix.autoOptimiseStore = lib.mkDefault true; }
+ {
+ nix.gc.automatic = lib.mkDefault true;
+ nix.gc.options = lib.mkDefault "--delete-older-than 10d";
+ }
+ ];
+}
diff --git a/packages/default.nix b/packages/default.nix
new file mode 100644
index 0000000..d2f8dc9
--- /dev/null
+++ b/packages/default.nix
@@ -0,0 +1,12 @@
+{ self, neovim, ... } @ inputs:
+let
+ extra = inputs.nixpkgs-extra.packages.x86_64-linux;
+in
+{
+ "neovim" = neovim.packages.x86_64-linux.neovim;
+ "boppy-input-font-bin" = extra.boppy-input-font-bin;
+ "iosevka-pure-bin" = extra.iosevka-pure-bin;
+ "sf-mono-bin" = extra.sf-mono-bin;
+ "sf-mono-liga-bin" = extra.sf-mono-liga-bin;
+ "wallpapers" = inputs.wallpapers;
+}