├── .config ├── alacritty │ ├── alacritty.yml │ ├── colors.yml │ └── fonts.yml ├── cava │ ├── config │ └── shaders │ │ ├── bar_spectrum.frag │ │ ├── northern_lights.frag │ │ └── pass_through.vert ├── fontconfig │ └── fonts.conf ├── hypr │ ├── binds.conf │ ├── hyprland.conf │ └── hyprpaper.conf ├── lvim │ ├── config.lua │ └── lazy-lock.json ├── spicetify │ └── Themes │ │ └── Everforest │ │ ├── color.ini │ │ └── user.css └── waybar │ ├── config │ └── style.css ├── .p10k.zsh ├── .zprofile ├── .zshenv ├── .zshrc ├── LICENSE ├── README.md ├── assets └── screenshots │ ├── main.png │ └── plain.png ├── gruvbox_bg_17.jpg └── install_dotfiles.sh /.config/alacritty/alacritty.yml: -------------------------------------------------------------------------------- 1 | import: 2 | - ~/.config/alacritty/colors.yml 3 | - ~/.config/alacritty/fonts.yml 4 | 5 | env: 6 | TERM: alacritty 7 | WINIT_X11_SCALE_FACTOR: '1.0' 8 | 9 | window: 10 | dimensions: 11 | columns: 115 12 | lines: 20 13 | padding: 14 | x: 20 15 | y: 20 16 | dynamic_title: true 17 | gtk_theme_variant: dark 18 | 19 | cursor: 20 | style: 21 | shape: Block 22 | unfocused_hollow: false 23 | 24 | live_config_reload: true 25 | -------------------------------------------------------------------------------- /.config/alacritty/colors.yml: -------------------------------------------------------------------------------- 1 | # Colors (Everforest Dark) 2 | colors: 3 | # Default colors 4 | primary: 5 | background: '0x1e2326' 6 | foreground: '0xd3c6aa' 7 | 8 | # Normal colors 9 | normal: 10 | black: '0x1e2326' 11 | red: '0xe67e80' 12 | green: '0xa7c080' 13 | yellow: '0xdbbc7f' 14 | blue: '0x7fbbb3' 15 | magenta: '0xd699b6' 16 | cyan: '0x83c092' 17 | white: '0xd3c6aa' 18 | 19 | # Bright colors 20 | bright: 21 | black: '0x475258' 22 | red: '0xe67e80' 23 | green: '0xa7c080' 24 | yellow: '0xdbbc7f' 25 | blue: '0x7fbbb3' 26 | magenta: '0xd699b6' 27 | cyan: '0x83c092' 28 | white: '0xd3c6aa' 29 | 30 | -------------------------------------------------------------------------------- /.config/alacritty/fonts.yml: -------------------------------------------------------------------------------- 1 | # Font configuration 2 | font: 3 | # Normal (roman) font face 4 | normal: 5 | # Font family 6 | # 7 | # Default: 8 | # - (macOS) Menlo 9 | # - (Linux/BSD) monospace 10 | # - (Windows) Consolas 11 | family: JetBrainsMono Nerd Font Mono 12 | 13 | # The `style` can be specified to pick a specific face. 14 | style: Regular 15 | 16 | # Bold font face 17 | #bold: 18 | # Font family 19 | # 20 | # If the bold family is not specified, it will fall back to the 21 | # value specified for the normal font. 22 | #family: monospace 23 | 24 | # The `style` can be specified to pick a specific face. 25 | #style: Bold 26 | 27 | # Italic font face 28 | #italic: 29 | # Font family 30 | # 31 | # If the italic family is not specified, it will fall back to the 32 | # value specified for the normal font. 33 | #family: monospace 34 | 35 | # The `style` can be specified to pick a specific face. 36 | #style: Italic 37 | 38 | # Bold italic font face 39 | #bold_italic: 40 | # Font family 41 | # 42 | # If the bold italic family is not specified, it will fall back to the 43 | # value specified for the normal font. 44 | #family: monospace 45 | 46 | # The `style` can be specified to pick a specific face. 47 | #style: Bold Italic 48 | 49 | # Point size 50 | size: 13.0 51 | 52 | # Offset is the extra space around each character. `offset.y` can be thought 53 | # of as modifying the line spacing, and `offset.x` as modifying the letter 54 | # spacing. 55 | #offset: 56 | # x: 0 57 | # y: 0 58 | 59 | # Glyph offset determines the locations of the glyphs within their cells with 60 | # the default being at the bottom. Increasing `x` moves the glyph to the 61 | # right, increasing `y` moves the glyph upward. 62 | #glyph_offset: 63 | # x: 0 64 | # y: 0 65 | 66 | # Thin stroke font rendering (macOS only) 67 | # 68 | # Thin strokes are suitable for retina displays, but for non-retina screens 69 | # it is recommended to set `use_thin_strokes` to `false`. 70 | #use_thin_strokes: true 71 | 72 | # Use built-in font for box drawing characters. 73 | # 74 | # If `true`, Alacritty will use a custom built-in font for box drawing 75 | # characters (Unicode points 2500 - 259f). 76 | # 77 | #builtin_box_drawing: true 78 | 79 | # If `true`, bold text is drawn using the bright color variants. 80 | draw_bold_text_with_bright_colors: false 81 | -------------------------------------------------------------------------------- /.config/cava/config: -------------------------------------------------------------------------------- 1 | ## Configuration file for CAVA. 2 | # Remove the ; to change parameters. 3 | 4 | 5 | [general] 6 | 7 | # Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0 8 | ; mode = normal 9 | 10 | # Accepts only non-negative values. 11 | framerate = 60 12 | 13 | # 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off 14 | # new as of 0.6.0 autosens of low values (dynamic range) 15 | # 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0 16 | ; autosens = 1 17 | ; overshoot = 20 18 | 19 | # Manual sensitivity in %. If autosens is enabled, this will only be the initial value. 20 | # 200 means double height. Accepts only non-negative values. 21 | ; sensitivity = 100 22 | 23 | # The number of bars (0-512). 0 sets it to auto (fill up console). 24 | # Bars' width and space between bars in number of characters. 25 | ; bars = 0 26 | ; bar_width = 2 27 | ; bar_spacing = 1 28 | # bar_height is only used for output in "noritake" format 29 | bar_height = 50 30 | 31 | # For SDL width and space between bars is in pixels, defaults are: 32 | bar_width = 15 33 | ; bar_spacing = 5 34 | 35 | # sdl_glsl have these default values, they are only used to calulate max number of bars. 36 | ; bar_width = 1 37 | ; bar_spacing = 0 38 | 39 | 40 | # Lower and higher cutoff frequencies for lowest and highest bars 41 | # the bandwidth of the visualizer. 42 | # Note: there is a minimum total bandwidth of 43Mhz x number of bars. 43 | # Cava will automatically increase the higher cutoff if a too low band is specified. 44 | ; lower_cutoff_freq = 50 45 | ; higher_cutoff_freq = 10000 46 | 47 | 48 | # Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and 49 | # only check for input once per second. Cava will wake up once input is detected. 0 = disable. 50 | ; sleep_timer = 0 51 | 52 | 53 | [input] 54 | 55 | # Audio capturing method. Possible methods are: 'pulse', 'alsa', 'fifo', 'sndio' or 'shmem' 56 | # Defaults to 'pulse', 'pipewire', 'alsa' or 'fifo', in that order, dependent on what support cava was built with. 57 | # On Mac it defaults to 'portaudio' or 'fifo' 58 | # On windows this is automatic and no input settings are needed. 59 | # 60 | # All input methods uses the same config variable 'source' 61 | # to define where it should get the audio. 62 | # 63 | # For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink 64 | # (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them). 65 | # 66 | # For piepwire 'source' will be the object name or object.serial of the device to capture from. 67 | # Both input and output devices are supported. 68 | # 69 | # For alsa 'source' will be the capture device. 70 | # For fifo 'source' will be the path to fifo-file. 71 | # For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address 72 | ; method = pulse 73 | ; source = auto 74 | 75 | ; method = pipewire 76 | ; source = auto 77 | 78 | ; method = alsa 79 | ; source = hw:Loopback,1 80 | 81 | ; method = fifo 82 | ; source = /tmp/mpd.fifo 83 | ; sample_rate = 44100 84 | ; sample_bits = 16 85 | 86 | ; method = shmem 87 | ; source = /squeezelite-AA:BB:CC:DD:EE:FF 88 | 89 | ; method = portaudio 90 | ; source = auto 91 | 92 | 93 | [output] 94 | 95 | # Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl' 96 | # or 'sdl_glsl'. 97 | # 'noncurses' uses a custom framebuffer technique and prints only changes 98 | # from frame to frame in the terminal. 'ncurses' is default if supported. 99 | # 100 | # 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data 101 | # stream of the bar heights that can be used to send to other applications. 102 | # 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above. 103 | # 104 | # 'noritake' outputs a bitmap in the format expected by a Noritake VFD display 105 | # in graphic mode. It only support the 3000 series graphical VFDs for now. 106 | # 107 | # 'sdl' uses the Simple DirectMedia Layer to render in a graphical context. 108 | # 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or 109 | # use one of the predefined ones. 110 | ; method = ncurses 111 | 112 | # Orientation of the visualization. Can be 'bottom', 'top', 'left' or 'right'. 113 | # Default is 'bottom'. Other orientations are only supported on sdl and ncruses 114 | # output. Note: many fonts have weird glyphs for 'top' and 'right' characters, 115 | # which can make ncurses not look right. 116 | ; orientation = bottom 117 | 118 | # Visual channels. Can be 'stereo' or 'mono'. 119 | # 'stereo' mirrors both channels with low frequencies in center. 120 | # 'mono' outputs left to right lowest to highest frequencies. 121 | # 'mono_option' set mono to either take input from 'left', 'right' or 'average'. 122 | # set 'reverse' to 1 to display frequencies the other way around. 123 | ; channels = stereo 124 | ; mono_option = average 125 | ; reverse = 0 126 | 127 | # Raw output target. A fifo will be created if target does not exist. 128 | ; raw_target = /dev/stdout 129 | 130 | # Raw data format. Can be 'binary' or 'ascii'. 131 | ; data_format = binary 132 | 133 | # Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530). 134 | ; bit_format = 16bit 135 | 136 | # Ascii max value. In 'ascii' mode range will run from 0 to value specified here 137 | ; ascii_max_range = 1000 138 | 139 | # Ascii delimiters. In ascii format each bar and frame is separated by a delimiters. 140 | # Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)). 141 | ; bar_delimiter = 59 142 | ; frame_delimiter = 10 143 | 144 | # sdl window size and position. -1,-1 is centered. 145 | ; sdl_width = 1000 146 | ; sdl_height = 500 147 | ; sdl_x = -1 148 | ; sdl_y= -1 149 | 150 | # set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none' 151 | # 'frequency' displays the lower cut off frequency of the bar above. 152 | # Only supported on ncurses and noncurses output. 153 | ; xaxis = none 154 | 155 | # enable alacritty synchronized updates. 1 = on, 0 = off 156 | # removes flickering in alacritty terminal emulator. 157 | # defaults to off since the behaviour in other terminal emulators is unknown 158 | ; alacritty_sync = 0 159 | 160 | # Shaders for sdl_glsl, located in $HOME/.config/cava/shaders 161 | ; vertex_shader = pass_through.vert 162 | ; fragment_shader = bar_spectrum.frag 163 | 164 | ; for glsl output mode, keep rendering even if no audio 165 | ; continuous_rendering = 0 166 | 167 | [color] 168 | 169 | # Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow. 170 | # Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires 171 | # a terminal that can change color definitions such as Gnome-terminal or rxvt. 172 | # default is to keep current terminal color 173 | ; background = default 174 | ; foreground = default 175 | 176 | # SDL and sdl_glsl only support hex code colors, these are the default: 177 | ; background = '#111111' 178 | ; foreground = '#33ffff' 179 | 180 | 181 | # Gradient mode, only hex defined colors are supported, 182 | # background must also be defined in hex or remain commented out. 1 = on, 0 = off. 183 | # You can define as many as 8 different colors. They range from bottom to top of screen 184 | gradient = 1 185 | gradient_count = 8 186 | gradient_color_1 = '#3B5755' # Everforest Green 187 | gradient_color_2 = '#526057' # Everforest Yellow 188 | gradient_color_3 = '#739394' # Everforest Aqua 189 | gradient_color_4 = '#99ac74' # Everforest Yellow (Slightly Darker) 190 | gradient_color_5 = '#9a9665' # Everforest Orange 191 | gradient_color_6 = '#a17157' # Everforest Red 192 | gradient_color_7 = '#a06c6b' # Everforest Red (Slightly Darker) 193 | gradient_color_8 = '#8a3f58' # Everforest Red (Darker) 194 | 195 | 196 | [smoothing] 197 | 198 | # Percentage value for integral smoothing. Takes values from 0 - 100. 199 | # Higher values means smoother, but less precise. 0 to disable. 200 | # DEPRECATED as of 0.8.0, use noise_reduction instead 201 | ; integral = 77 202 | 203 | # Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable. 204 | ; monstercat = 0 205 | ; waves = 0 206 | 207 | # Set gravity percentage for "drop off". Higher values means bars will drop faster. 208 | # Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off". 209 | # DEPRECATED as of 0.8.0, use noise_reduction instead 210 | ; gravity = 100 211 | 212 | 213 | # In bar height, bars that would have been lower that this will not be drawn. 214 | # DEPRECATED as of 0.8.0 215 | ; ignore = 0 216 | 217 | # Noise reduction, int 0 - 100. default 77 218 | # the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth 219 | # 100 will be very slow and smooth, 0 will be fast but noisy. 220 | ; noise_reduction = 77 221 | 222 | 223 | [eq] 224 | 225 | # This one is tricky. You can have as much keys as you want. 226 | # Remember to uncomment more than one key! More keys = more precision. 227 | # Look at readme.md on github for further explanations and examples. 228 | ; 1 = 1 # bass 229 | ; 2 = 1 230 | ; 3 = 1 # midtone 231 | ; 4 = 1 232 | ; 5 = 1 # treble 233 | -------------------------------------------------------------------------------- /.config/cava/shaders/bar_spectrum.frag: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | in vec2 fragCoord; 4 | out vec4 fragColor; 5 | 6 | // bar values. defaults to left channels first (low to high), then right (high to low). 7 | uniform float bars[512]; 8 | 9 | uniform int bars_count; // number of bars (left + right) (configurable) 10 | uniform int bar_width; // bar width (configurable), not used here 11 | uniform int bar_spacing; // space bewteen bars (configurable) 12 | 13 | uniform vec3 u_resolution; // window resolution 14 | 15 | //colors, configurable in cava config file (r,g,b) (0.0 - 1.0) 16 | uniform vec3 bg_color; // background color 17 | uniform vec3 fg_color; // foreground color 18 | 19 | uniform int gradient_count; 20 | uniform vec3 gradient_colors[8]; // gradient colors 21 | 22 | vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max) 23 | { 24 | //create color based on fraction of this color and next color 25 | float yr = (y - y_min) / (y_max - y_min); 26 | return col_1 * (1.0 - yr) + col_2 * yr; 27 | } 28 | 29 | void main() 30 | { 31 | // find which bar to use based on where we are on the x axis 32 | float x = u_resolution.x * fragCoord.x; 33 | int bar = int(bars_count * fragCoord.x); 34 | 35 | //calculate a bar size 36 | float bar_size = u_resolution.x / bars_count; 37 | 38 | //the y coordinate and bar values are the same 39 | float y = bars[bar]; 40 | 41 | // make sure there is a thin line at bottom 42 | if (y * u_resolution.y < 1.0) 43 | { 44 | y = 1.0 / u_resolution.y; 45 | } 46 | 47 | //draw the bar up to current height 48 | if (y > fragCoord.y) 49 | { 50 | //make some space between bars basen on settings 51 | if (x > (bar + 1) * (bar_size) - bar_spacing) 52 | { 53 | fragColor = vec4(bg_color,1.0); 54 | } 55 | else 56 | { 57 | if (gradient_count == 0) 58 | { 59 | fragColor = vec4(fg_color,1.0); 60 | } 61 | else 62 | { 63 | //find which color in the configured gradient we are at 64 | int color = int((gradient_count - 1) * fragCoord.y); 65 | 66 | //find where on y this and next color is supposed to be 67 | float y_min = color / (gradient_count - 1.0); 68 | float y_max = (color + 1.0) / (gradient_count - 1.0); 69 | 70 | //make color 71 | fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0); 72 | } 73 | } 74 | } 75 | else 76 | { 77 | fragColor = vec4(bg_color,1.0); 78 | } 79 | } -------------------------------------------------------------------------------- /.config/cava/shaders/northern_lights.frag: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | in vec2 fragCoord; 4 | out vec4 fragColor; 5 | 6 | // bar values. defaults to left channels first (low to high), then right (high to low). 7 | uniform float bars[512]; 8 | 9 | uniform int bars_count; // number of bars (left + right) (configurable) 10 | 11 | uniform vec3 u_resolution; // window resolution, not used here 12 | 13 | //colors, configurable in cava config file 14 | uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here 15 | uniform vec3 fg_color; // foreground color, not used here 16 | 17 | void main() 18 | { 19 | // find which bar to use based on where we are on the x axis 20 | int bar = int(bars_count * fragCoord.x); 21 | 22 | float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0; 23 | float y = (bars[bar]) * bar_y; 24 | 25 | float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count; 26 | float bar_r = 1.0 - abs((bar_x - 0.5)) * 2; 27 | 28 | bar_r = bar_r * bar_r * 2; 29 | 30 | // set color 31 | fragColor.r = fg_color.x * y * bar_r; 32 | fragColor.g = fg_color.y * y * bar_r; 33 | fragColor.b = fg_color.z * y * bar_r; 34 | } 35 | -------------------------------------------------------------------------------- /.config/cava/shaders/pass_through.vert: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | 4 | // Input vertex data, different for all executions of this shader. 5 | layout(location = 0) in vec3 vertexPosition_modelspace; 6 | 7 | // Output data ; will be interpolated for each fragment. 8 | out vec2 fragCoord; 9 | 10 | void main() 11 | { 12 | gl_Position = vec4(vertexPosition_modelspace,1); 13 | fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0; 14 | } 15 | -------------------------------------------------------------------------------- /.config/fontconfig/fonts.conf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | serif 6 | 7 | Serif UI Text 8 | 9 | 10 | 11 | sans-serif 12 | 13 | SF Pro Text 14 | 15 | 16 | 17 | sans 18 | 19 | SF Pro Text 20 | 21 | 22 | 23 | monospace 24 | 25 | SF Mono 26 | 27 | 28 | 29 | mono 30 | 31 | SF Mono 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /.config/hypr/binds.conf: -------------------------------------------------------------------------------- 1 | # See https://wiki.hyprland.org/Configuring/Keywords/ for more 2 | $mainMod = SUPER 3 | 4 | # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more 5 | bind = $mainMod, Return, exec, alacritty 6 | bind = $mainMod, Print, exec, grim -t png -l 0 7 | bind = $mainMod, W, killactive, 8 | bind = $mainMod, M, exit, 9 | bind = $mainMod, E, exec, thunar 10 | bind = $mainMod, V, togglefloating, 11 | bind = $mainMod, D, exec, wofi --show drun, 12 | bind = $mainMod, F, fullscreen 13 | 14 | # Move focus with mainMod + arrow keys 15 | bind = $mainMod, left, movefocus, l 16 | bind = $mainMod, right, movefocus, r 17 | bind = $mainMod, up, movefocus, u 18 | bind = $mainMod, down, movefocus, d 19 | 20 | # Switch workspaces with mainMod + [0-9] 21 | bind = $mainMod, 1, workspace, 1 22 | bind = $mainMod, 2, workspace, 2 23 | bind = $mainMod, 3, workspace, 3 24 | bind = $mainMod, 4, workspace, 4 25 | bind = $mainMod, 5, workspace, 5 26 | bind = $mainMod, 6, workspace, 6 27 | bind = $mainMod, 7, workspace, 7 28 | bind = $mainMod, 8, workspace, 8 29 | bind = $mainMod, 9, workspace, 9 30 | bind = $mainMod, 0, workspace, 10 31 | 32 | # Move active window to a workspace with mainMod + SHIFT + [0-9] 33 | bind = $mainMod SHIFT, 1, movetoworkspace, 1 34 | bind = $mainMod SHIFT, 2, movetoworkspace, 2 35 | bind = $mainMod SHIFT, 3, movetoworkspace, 3 36 | bind = $mainMod SHIFT, 4, movetoworkspace, 4 37 | bind = $mainMod SHIFT, 5, movetoworkspace, 5 38 | bind = $mainMod SHIFT, 6, movetoworkspace, 6 39 | bind = $mainMod SHIFT, 7, movetoworkspace, 7 40 | bind = $mainMod SHIFT, 8, movetoworkspace, 8 41 | bind = $mainMod SHIFT, 9, movetoworkspace, 9 42 | bind = $mainMod SHIFT, 0, movetoworkspace, 10 43 | 44 | # Example special workspace (scratchpad) 45 | bind = $mainMod, S, togglespecialworkspace, magic 46 | bind = $mainMod SHIFT, S, movetoworkspace, special:magic 47 | 48 | # Scroll through existing workspaces with mainMod + scroll 49 | bind = $mainMod, mouse_down, workspace, e+1 50 | bind = $mainMod, mouse_up, workspace, e-1 51 | 52 | # Move/resize windows with mainMod + LMB/RMB and dragging 53 | bindm = $mainMod, mouse:272, movewindow 54 | bindm = $mainMod, mouse:273, resizewindow 55 | 56 | bind = ALT, LEFT, resizeactive, -50 0 57 | bind = ALT, RIGHT, resizeactive, 50 0 58 | bind = ALT, UP, resizeactive, 0 -50 59 | bind = ALT, DOWN, resizeactive, 0 50 60 | 61 | # Volume 62 | bind = ,XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle 63 | bind = ,XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5% 64 | bind = ,XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5% 65 | 66 | # Brightness 67 | bind = ,XF86MonBrightnessUp, exec, brightnessctl set +5% 68 | bind = ,XF86MonBrightnessDown, exec, brightnessctl set 5%- 69 | -------------------------------------------------------------------------------- /.config/hypr/hyprland.conf: -------------------------------------------------------------------------------- 1 | # See https://wiki.hyprland.org/Configuring/Monitors/ 2 | monitor=,preferred,auto,1 3 | 4 | 5 | # See https://wiki.hyprland.org/Configuring/Keywords/ for more 6 | 7 | # Execute your favorite apps at launch 8 | exec-once = waybar & hyprpaper & /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & udiskie 9 | 10 | # Source a file (multi-file configs) 11 | source = ~/.config/hypr/binds.conf 12 | 13 | # Some default env vars. 14 | env = GDK_BACKEND=wayland,x11 QT_QPA_PLATFORM="wayland;xcb" SDL_VIDEODRIVER=wayland CLUTTER_BACKEND=wayland XDG_CURRENT_DESKTOP=Hyprland XDG_SESSION_TYPE=wayland XDG_SESSION_DESKTOP=Hyprland QT_WAYLAND_DISABLE_WINDOWDECORATION=1 QT_QPA_PLATFORMTHEME=qt5ct 15 | 16 | # For all categories, see https://wiki.hyprland.org/Configuring/Variables/ 17 | input { 18 | kb_layout = us 19 | 20 | follow_mouse = 1 21 | 22 | touchpad { 23 | natural_scroll = true 24 | } 25 | 26 | sensitivity = 0 # -1.0 - 1.0, 0 means no modification. 27 | } 28 | 29 | general { 30 | # See https://wiki.hyprland.org/Configuring/Variables/ for more 31 | 32 | gaps_in = 4 33 | gaps_out = 8 34 | border_size = 1 35 | col.active_border = rgb(a7c080) rgb(83c092) 45deg 36 | col.inactive_border = rgba(595959aa) 37 | 38 | layout = master 39 | 40 | # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on 41 | #allow_tearing = false 42 | } 43 | 44 | decoration { 45 | # See https://wiki.hyprland.org/Configuring/Variables/ for more 46 | 47 | rounding = 1 48 | 49 | blur { 50 | enabled = true 51 | size = 3 52 | passes = 1 53 | } 54 | 55 | drop_shadow = true 56 | shadow_range = 3 57 | shadow_render_power = 3 58 | col.shadow = rgb(121212) 59 | } 60 | 61 | animations { 62 | enabled = true 63 | 64 | # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more 65 | 66 | bezier = myBezier, 0.05, 0.9, 0.1, 1.05 67 | 68 | animation = windows, 1, 7, myBezier 69 | animation = windowsOut, 1, 7, default, popin 80% 70 | animation = border, 1, 10, default 71 | animation = borderangle, 1, 8, default 72 | animation = fade, 1, 7, default 73 | animation = workspaces, 1, 6, default 74 | } 75 | 76 | dwindle { 77 | # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more 78 | pseudotile = true # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below 79 | preserve_split = true # you probably want this 80 | } 81 | 82 | master { 83 | # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more 84 | new_is_master = true 85 | } 86 | 87 | gestures { 88 | # See https://wiki.hyprland.org/Configuring/Variables/ for more 89 | workspace_swipe = false 90 | } 91 | 92 | misc { 93 | # See https://wiki.hyprland.org/Configuring/Variables/ for more 94 | # force_default_wallpaper = 0 # Set to 0 to disable the anime mascot wallpapers 95 | } 96 | 97 | # Example per-device config 98 | # See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more 99 | device:epic-mouse-v1 { 100 | sensitivity = -0.5 101 | } 102 | 103 | # Example windowrule v1 104 | # windowrule = float, ^(kitty)$ 105 | # Example windowrule v2 106 | # windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ 107 | # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more 108 | 109 | -------------------------------------------------------------------------------- /.config/hypr/hyprpaper.conf: -------------------------------------------------------------------------------- 1 | preload = /usr/share/backgrounds/gruvbox_bg_17.jpg 2 | wallpaper = eDP-1,/usr/share/backgrounds/gruvbox_bg_17.jpg 3 | 4 | -------------------------------------------------------------------------------- /.config/lvim/config.lua: -------------------------------------------------------------------------------- 1 | -- Read the docs: https://www.lunarvim.org/docs/configuration 2 | -- Video Tutorials: https://www.youtube.com/watch?v=sFA9kX-Ud_c&list=PLhoH5vyxr6QqGu0i7tt_XoVK9v-KvZ3m6 3 | -- Forum: https://www.reddit.com/r/lunarvim/ 4 | -- Discord: https://discord.com/invite/Xb9B4Ny 5 | 6 | lvim.plugins = { 7 | { "neanias/everforest-nvim" }, 8 | } 9 | 10 | lvim.autocommands = { 11 | { 12 | { "ColorScheme" }, 13 | { 14 | pattern = "*", 15 | callback = function() 16 | -- change `Normal` to the group you want to change 17 | -- and `#ffffff` to the color you want 18 | -- see `:h nvim_set_hl` for more options 19 | vim.api.nvim_set_hl(0, "Normal", { bg = "#1e2326", underline = false, bold = true }) 20 | end, 21 | }, 22 | }, 23 | } 24 | 25 | lvim.colorscheme = "everforest" 26 | -------------------------------------------------------------------------------- /.config/lvim/lazy-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "Comment.nvim": { "branch": "master", "commit": "38d3b7eb553872d8866f14a0dd4fe84126068fce" }, 3 | "LuaSnip": { "branch": "master", "commit": "e77fa9ad0b1f4fc6cddf54e51047e17e90c7d7ed" }, 4 | "alpha-nvim": { "branch": "main", "commit": "87c204040e3f5d4c1c95067b35905d8f8a2f2545" }, 5 | "bigfile.nvim": { "branch": "main", "commit": "c1bad34ce742b4f360b67ca23c873fef998240fc" }, 6 | "bufferline.nvim": { "branch": "main", "commit": "a4bd44523316928a7c4a5c09a3407d02c30b6027" }, 7 | "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, 8 | "cmp-nvim-lsp": { "branch": "main", "commit": "0e6b2ed705ddcff9738ec4ea838141654f12eeef" }, 9 | "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, 10 | "cmp_luasnip": { "branch": "master", "commit": "18095520391186d634a0045dacaa346291096566" }, 11 | "everforest-nvim": { "branch": "main", "commit": "64f290dd2d00ae54132589b55bf9454370eb7cd8" }, 12 | "friendly-snippets": { "branch": "main", "commit": "631f79e346b0b3203d2ce3eae619ca8d612e5463" }, 13 | "gitsigns.nvim": { "branch": "main", "commit": "e5edefd9976039f5352e0c900f35206770b33a2d" }, 14 | "indent-blankline.nvim": { "branch": "master", "commit": "018bd04d80c9a73d399c1061fa0c3b14a7614399" }, 15 | "lazy.nvim": { "branch": "main", "commit": "d6a782c7002682f4a01b79fc3918c4584ad6e8fb" }, 16 | "lir.nvim": { "branch": "master", "commit": "1aa871f20637eccc4e1e26b0fbcf9aafc9b6caf7" }, 17 | "lualine.nvim": { "branch": "master", "commit": "84ffb80e452d95e2c46fa29a98ea11a240f7843e" }, 18 | "lunar.nvim": { "branch": "master", "commit": "08bbc93b96ad698d22fc2aa01805786bcedc34b9" }, 19 | "mason-lspconfig.nvim": { "branch": "main", "commit": "7276ffffcf51a8304b5fd4b81293be4ee010ec47" }, 20 | "mason.nvim": { "branch": "main", "commit": "057ac5ca159c83e302a55bd839a96ff1ea2396db" }, 21 | "neodev.nvim": { "branch": "main", "commit": "0043cf91c18aeac8db5765eb86c6078e17ac9325" }, 22 | "nlsp-settings.nvim": { "branch": "main", "commit": "32aa12da328258f2dccb15d327c26a8d21d9f4bd" }, 23 | "null-ls.nvim": { "branch": "main", "commit": "33b853a3933eed3137cd055aac4e539e69832ad0" }, 24 | "nvim-autopairs": { "branch": "master", "commit": "7566a86f44bb72ba2b1a609f528a27d93241502d" }, 25 | "nvim-cmp": { "branch": "main", "commit": "11102d3db12c7f8b35265ad0e17a21511e5b1e68" }, 26 | "nvim-dap": { "branch": "master", "commit": "6cedcb527e264c8f25e86afa8dae74c6692dee51" }, 27 | "nvim-dap-ui": { "branch": "master", "commit": "286f682f366fbc652b38dff893569374e9433dd3" }, 28 | "nvim-lspconfig": { "branch": "master", "commit": "427378a03ffc1e1bc023275583a49b1993e524d0" }, 29 | "nvim-navic": { "branch": "master", "commit": "83dc174da915f9dbc9b51169e9b62a2e0d42b527" }, 30 | "nvim-tree.lua": { "branch": "master", "commit": "bb375fb20327c49920c41d2b51c1ce2f4fe7deb3" }, 31 | "nvim-treesitter": { "branch": "master", "commit": "2ce3c9080cfe4a39c7907e672edafd2a95244a7c" }, 32 | "nvim-ts-context-commentstring": { "branch": "main", "commit": "0bf8fbc2ca8f8cdb6efbd0a9e32740d7a991e4c3" }, 33 | "nvim-web-devicons": { "branch": "master", "commit": "986875b7364095d6535e28bd4aac3a9357e91bbe" }, 34 | "onedarker.nvim": { "branch": "freeze", "commit": "b00dd2189f264c5aeb4cf04c59439655ecd573ec" }, 35 | "plenary.nvim": { "branch": "master", "commit": "9ac3e9541bbabd9d73663d757e4fe48a675bb054" }, 36 | "project.nvim": { "branch": "main", "commit": "8c6bad7d22eef1b71144b401c9f74ed01526a4fb" }, 37 | "schemastore.nvim": { "branch": "main", "commit": "0b396f538f195c249f021a48c3d8988f0d3f86f7" }, 38 | "structlog.nvim": { "branch": "main", "commit": "45b26a2b1036bb93c0e83f4225e85ab3cee8f476" }, 39 | "telescope-fzf-native.nvim": { "branch": "main", "commit": "580b6c48651cabb63455e97d7e131ed557b8c7e2" }, 40 | "telescope.nvim": { "branch": "0.1.x", "commit": "9de317bdea2bc393074651179c4fc7f93e9b2d56" }, 41 | "toggleterm.nvim": { "branch": "main", "commit": "68fdf851c2b7901a7065ff129b77d3483419ddce" }, 42 | "tokyonight.nvim": { "branch": "main", "commit": "c5df636ce62a8aab7565f35da143cfd672526302" }, 43 | "vim-illuminate": { "branch": "master", "commit": "a2907275a6899c570d16e95b9db5fd921c167502" }, 44 | "which-key.nvim": { "branch": "main", "commit": "4acffc92953a90a790603bfdab7c92319ab167b1" } 45 | } -------------------------------------------------------------------------------- /.config/spicetify/Themes/Everforest/color.ini: -------------------------------------------------------------------------------- 1 | [evf] 2 | text = A7C080 3 | subtext = D3C6AA 4 | nav-active-text = 2D353B 5 | main = 2D353B 6 | sidebar = 2D353B 7 | player = 232A2E 8 | card = 232A2E 9 | shadow = 232A2E 10 | main-secondary = 56635F 11 | button = A7C080 12 | button-secondary = A7C080 13 | button-active = A7C080 14 | button-disabled = D3C6AA 15 | nav-active = A7C080 16 | play-button = A7C080 17 | tab-active = 56635F 18 | notification = 232A2E 19 | notification-error = 232A2E 20 | playback-bar = A7C080 21 | misc = E69875 22 | 23 | 24 | 25 | ; Description 26 | 27 | ; text = main text, playlist names in main field, name of playlist selected in sidebar, headings 28 | ; subtext = text in main buttons in sidebar, playlist names in sidebar, artist names, and mini infos 29 | ; nav-active-text = text in main buttons in sidebar when active 30 | ; main = main bg 31 | ; main-secondary = bg color of selected song rows, bg color of artist/track cards 32 | ; sidebar = sidebar bg 33 | ; player = player bg 34 | ; card = popup-card bg 35 | ; shadow = all shadows 36 | ; button = playlist buttons bg in sidebar, drop-down menus, now playing song, like button 37 | ; button-secondary = download and options button 38 | ; button-active = hover on song selected 39 | ; button-disabled = seekbar bg, volume bar bg, scrollbar 40 | ; nav-active = sidebar buttons bg 41 | ; play-button = color of main play button in main field 42 | ; tab-active = button bg in main field (playlists, podcasts, artists, albums) 43 | ; notification = notification ('Added to liked songs' etc.) 44 | ; playback-bar = seekbar fg, volume bar fg, main play/pause button 45 | ; misc = miscellaneous 46 | -------------------------------------------------------------------------------- /.config/spicetify/Themes/Everforest/user.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --spice-main-elevated: var(--spice-main); 3 | --spice-highlight: var(--spice-main-secondary); 4 | --spice-highlight-elevated: var(--spice-main-secondary); 5 | } 6 | /* 7 | ------------- 8 | TOPBAR 9 | ------------- 10 | */ 11 | /* unset colors of history buttons */ 12 | .main-topBar-historyButtons .main-topBar-button { 13 | background-color: unset; 14 | } 15 | 16 | /* change appearance of icons on search tab input */ 17 | .x-searchInput-searchInputSearchIcon svg { 18 | color: var(--spice-text); 19 | height: 17px; 20 | } 21 | 22 | .x-searchInput-searchInputClearButton svg { 23 | color: var(--spice-text); 24 | height: 17px; 25 | } 26 | 27 | /* topbar navigation items*/ 28 | .main-topBar-topbarContentWrapper a { 29 | transition-duration: 0.3s; 30 | border-radius: 8px; 31 | } 32 | 33 | /* smooth topbar background colour */ 34 | .main-topBar-background { 35 | background-image: linear-gradient(var(--spice-main) 5%, 75%, transparent); 36 | background-color: unset !important; 37 | } 38 | .main-topBar-overlay { 39 | background-color: var(--spice-main); 40 | } 41 | 42 | /* simplify profile menu */ 43 | .main-userWidget-displayName, 44 | .main-userWidget-notificationIndicator { 45 | display: none; 46 | } 47 | 48 | .main-avatar-userIcon { 49 | color: white; 50 | } 51 | 52 | .main-userWidget-box { 53 | color: var(--spice-subtext); 54 | background-color: transparent !important; 55 | } 56 | 57 | .main-userWidget-chevron { 58 | display: none; 59 | } 60 | /* 61 | ------------- 62 | NAVBAR 63 | ------------- 64 | */ 65 | /* remove divider gradient */ 66 | .main-rootlist-rootlistDividerGradient { 67 | display: none; 68 | } 69 | 70 | /* change color of divider */ 71 | .main-rootlist-rootlistDivider { 72 | background-color: var(--spice-sidebar); 73 | } 74 | 75 | /* add gradient to navbar */ 76 | .Root__nav-bar { 77 | background-image: linear-gradient(to bottom left, var(--spice-sidebar) 0%, var(--spice-player) 100%) !important; 78 | } 79 | 80 | /* change color of navbar playing icon */ 81 | [aria-label="Playing"] { 82 | color: var(--spice-text); 83 | } 84 | 85 | .main-navBar-entryPoints [data-id="/add"] { 86 | margin-top: 20px; 87 | } 88 | 89 | .main-createPlaylistButton-button { 90 | color: var(--spice-text); 91 | } 92 | 93 | .main-createPlaylistButton-createPlaylistIcon { 94 | background-color: var(--spice-text); 95 | } 96 | 97 | /* change color of navbar icons */ 98 | .main-likedSongsButton-likedSongsIcon { 99 | background: var(--spice-text); 100 | color: var(--spice-sidebar); 101 | } 102 | 103 | .main-yourEpisodesButton-yourEpisodesIcon { 104 | background: var(--spice-text); 105 | } 106 | 107 | .main-yourEpisodesButton-yourEpisodesIcon path { 108 | fill: var(--spice-sidebar); 109 | } 110 | 111 | /* remove opacity of navbar buttons */ 112 | .main-collectionLinkButton-collectionLinkButton .main-collectionLinkButton-icon, 113 | .main-collectionLinkButton-collectionLinkButton .main-collectionLinkButton-collectionLinkText, 114 | .main-createPlaylistButton-button { 115 | opacity: unset; 116 | } 117 | 118 | .main-collectionLinkButton-collectionLinkButton { 119 | color: var(--spice-subtext); 120 | } 121 | 122 | /* change colors of active tab */ 123 | .main-yourLibraryX-navLink { 124 | border-radius: 8px; 125 | margin: 6px 0; 126 | padding: 0 10px; 127 | } 128 | 129 | .main-yourLibraryX-navItem { 130 | padding: 0; 131 | } 132 | 133 | .main-navBar-navBarLinkActive, 134 | .main-navBar-navBarLinkActive:focus, 135 | .main-navBar-navBarLinkActive:hover, 136 | .main-collectionLinkButton-selected, 137 | .main-collectionLinkButton-selected svg, 138 | .main-yourLibraryX-navLinkActive, 139 | .main-yourLibraryX-navLinkActive .home-active-icon, 140 | .main-yourLibraryX-navLinkActive .search-active-icon { 141 | color: var(--spice-nav-active-text) !important; 142 | background-color: var(--spice-nav-active); 143 | } 144 | 145 | /* color of navbar icons */ 146 | .collection-icon, 147 | .premiumSpotifyIcon, 148 | .search-icon { 149 | color: var(--spice-subtext); 150 | } 151 | 152 | .main-navBar-navBarLink { 153 | transition: none; 154 | } 155 | 156 | .main-navBar-navBarLink:not(.main-navBar-navBarLinkActive):hover svg { 157 | color: var(--spice-text); 158 | } 159 | 160 | .main-yourLibraryX-entryPoints { 161 | background-color: var(--spice-sidebar); 162 | } 163 | 164 | .main-yourLibraryX-isScrolled { 165 | -webkit-box-shadow: 0 20px 10px -10px var(--spice-sidebar); 166 | box-shadow: 0 20px 10px -10px var(--spice-sidebar); 167 | } 168 | 169 | /* traclists and playlists loading placeholder */ 170 | .main-trackList-placeholder, 171 | .Pns6F5g4OEwEpdmOWTLg, 172 | .eldivguzYznZgQoShJbe { 173 | background-color: var(--background-base); 174 | background-blend-mode: color-dodge; 175 | } 176 | 177 | /* 178 | --------------- 179 | PLAYBACK BAR 180 | --------------- 181 | */ 182 | /* progress bar moves smoothly */ 183 | .x-progressBar-fillColor { 184 | transition: transform 1s linear; 185 | } 186 | 187 | .progress-bar__slider { 188 | transition: left 1s linear; 189 | } 190 | 191 | .playback-progressbar-isInteractive .DuvrswZugGajIFNXObAr .x-progressBar-fillColor, 192 | .playback-progressbar-isInteractive .DuvrswZugGajIFNXObAr .progress-bar__slider { 193 | transition: none; 194 | } 195 | 196 | /* round cover art when collapsed */ 197 | .main-coverSlotCollapsed-container .cover-art-image { 198 | border-radius: 8px; 199 | transition-duration: 0.15s; 200 | } 201 | 202 | .main-coverSlotExpandedCollapseButton-collapseButton { 203 | right: 10px !important; 204 | top: 10px !important; 205 | } 206 | 207 | /* hide and move progress time location */ 208 | .playback-bar__progress-time-elapsed { 209 | opacity: 0; 210 | position: absolute; 211 | bottom: 13px; 212 | left: 0; 213 | transition-duration: 0.3s; 214 | background-color: rgba(var(--spice-rgb-sidebar),.5); 215 | box-shadow: 0 0 20px 20px rgba(var(--spice-rgb-sidebar),.5); 216 | border-radius: 8px; 217 | z-index: -1; 218 | } 219 | 220 | .main-playbackBarRemainingTime-container { 221 | opacity: 0; 222 | position: absolute; 223 | bottom: 13px; 224 | right: 0; 225 | transition-duration: 0.3s; 226 | background-color: rgba(var(--spice-rgb-sidebar),.5); 227 | box-shadow: 0 0 20px 20px rgba(var(--spice-rgb-sidebar),.5); 228 | border-radius: 8px; 229 | z-index: -1; 230 | } 231 | 232 | /* show time on hover & better visibility */ 233 | .playback-bar:hover .playback-bar__progress-time-elapsed, 234 | .playback-bar:hover .main-playbackBarRemainingTime-container { 235 | opacity: 1; 236 | } 237 | 238 | /* move progress bar */ 239 | html:not(.fullscreen) .playback-bar { 240 | width: 100%; 241 | bottom: 83px; 242 | position: absolute; 243 | left: 0px; 244 | } 245 | 246 | .main-nowPlayingBar-nowPlayingBar:nth-last-child(2) .playback-bar { 247 | bottom: 107px; 248 | } 249 | 250 | .player-controls__buttons { 251 | transform: translateY(3px); 252 | align-items: center; 253 | } 254 | 255 | /* change progress bar color */ 256 | .playback-bar .x-progressBar-fillColor { 257 | background-color: var(--spice-playback-bar); 258 | } 259 | 260 | /* change appearance of play-button */ 261 | .main-playPauseButton-button { 262 | background-color: inherit; 263 | color: var(--spice-play-button); 264 | transition-duration: 0.3s !important; 265 | } 266 | 267 | .main-playPauseButton-button svg { 268 | height: 19px; 269 | width: 19px; 270 | } 271 | 272 | html.fullscreen .main-playPauseButton-button svg { 273 | height: 32px; 274 | width: 32px; 275 | } 276 | 277 | .main-playPauseButton-button:focus, 278 | .main-playPauseButton-button:hover { 279 | transform: none !important; 280 | } 281 | 282 | /* change progress bar slider color */ 283 | .progress-bar__slider { 284 | background-color: var(--spice-subtext); 285 | } 286 | 287 | .x-progressBar-progressBarBg { 288 | background-color: var(--spice-button-disabled); 289 | border-radius: 0px; 290 | } 291 | 292 | /* matching button colors */ 293 | .main-nowPlayingBar-extraControls button { 294 | color: rgba(var(--spice-rgb-selected-row),.7); 295 | } 296 | /* 297 | --------------- 298 | BUDDY FEED 299 | --------------- 300 | */ 301 | /* change text color */ 302 | .main-buddyFeed-activityMetadata .main-buddyFeed-artistAndTrackName a, 303 | .main-buddyFeed-activityMetadata .main-buddyFeed-username a, 304 | .main-buddyFeed-activityMetadata .main-buddyFeed-playbackContextLink, 305 | p.main-buddyFeed-timestamp.main-type-finale, 306 | .main-buddyFeed-findFriendsButton .main-buddyFeed-findFriendsIcon { 307 | color: var(--spice-subtext); 308 | } 309 | 310 | .spotify__os--is-windows .main-buddyFeed-header { 311 | padding-left: 0; 312 | padding-right: 5px; 313 | } 314 | 315 | /* add gradient */ 316 | .main-buddyFeed-friendsFeedContainer { 317 | background-image: linear-gradient(to bottom left, var(--spice-sidebar) 0%, var(--spice-player) 100%) !important; 318 | } 319 | 320 | /* hide buddyfeed scrollbar */ 321 | .main-buddyFeed-scrollableArea > .os-scrollbar { 322 | display: none; 323 | } 324 | 325 | .main-avatar-avatar.BzunmwrVMyWGpopPJRt2:after { 326 | background: var(--spice-button); 327 | } 328 | /* 329 | --------------- 330 | MAIN VIEW 331 | --------------- 332 | */ 333 | /* hide banner ads */ 334 | .main-leaderboardComponent-container { 335 | display: none; 336 | } 337 | 338 | .WiPggcPDzbwGxoxwLWFf.contentSpacing { 339 | display: none; 340 | } 341 | 342 | .desktoproutes-homepage-takeover-ad-hptoComponent-parentContainer, 343 | .desktoproutes-homepage-takeover-ad-hptoComponent-container { 344 | display: none !important; 345 | } 346 | 347 | /* hide upgrade button */ 348 | .main-topBar-UpgradeButton { 349 | display: none; 350 | } 351 | 352 | /* change input box appearance */ 353 | input { 354 | background-color: var(--spice-main-secondary) !important; 355 | border-radius: 8px !important; 356 | padding: 6px 10px 6px 48px; 357 | color: var(--spice-text) !important; 358 | } 359 | ::placeholder { 360 | color: var(--spice-subtext) !important; 361 | } 362 | 363 | /* remove background color from main headers */ 364 | .main-home-homeHeader, 365 | .x-441-entityHeader-overlay, 366 | .main-actionBarBackground-background, 367 | .main-entityHeader-overlay, 368 | .main-entityHeader-backgroundColor { 369 | background-color: unset !important; 370 | background-image: unset !important; 371 | } 372 | 373 | /* change playlist image shadow */ 374 | .main-entityHeader-shadow { 375 | box-shadow: 0 5px 10px rgba(var(--spice-rgb-shadow), 0.5) !important; 376 | } 377 | 378 | /* change playlist image border-radius */ 379 | .main-entityHeader-image { 380 | border-radius: 8px; 381 | } 382 | 383 | /* change playing icon from gif to svg */ 384 | .main-trackList-playingIcon { 385 | -webkit-mask-image: url("data:image/svg+xml,%3Csvg id='playing-icon' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 24'%3E%3Cdefs%3E%3Cstyle%3E %23playing-icon %7B fill: %2320BC54; %7D @keyframes play %7B 0%25 %7Btransform: scaleY(1);%7D 3.3%25 %7Btransform: scaleY(0.9583);%7D 6.6%25 %7Btransform: scaleY(0.9166);%7D 9.9%25 %7Btransform: scaleY(0.8333);%7D 13.3%25 %7Btransform: scaleY(0.7083);%7D 16.6%25 %7Btransform: scaleY(0.5416);%7D 19.9%25 %7Btransform: scaleY(0.4166);%7D 23.3%25 %7Btransform: scaleY(0.25);%7D 26.6%25 %7Btransform: scaleY(0.1666);%7D 29.9%25 %7Btransform: scaleY(0.125);%7D 33.3%25 %7Btransform: scaleY(0.125);%7D 36.6%25 %7Btransform: scaleY(0.1666);%7D 39.9%25 %7Btransform: scaleY(0.1666);%7D 43.3%25 %7Btransform: scaleY(0.2083);%7D 46.6%25 %7Btransform: scaleY(0.2916);%7D 49.9%25 %7Btransform: scaleY(0.375);%7D 53.3%25 %7Btransform: scaleY(0.5);%7D 56.6%25 %7Btransform: scaleY(0.5833);%7D 59.9%25 %7Btransform: scaleY(0.625);%7D 63.3%25 %7Btransform: scaleY(0.6666);%7D 66.6%25 %7Btransform: scaleY(0.6666);%7D 69.9%25 %7Btransform: scaleY(0.6666);%7D 73.3%25 %7Btransform: scaleY(0.6666);%7D 76.6%25 %7Btransform: scaleY(0.7083);%7D 79.9%25 %7Btransform: scaleY(0.75);%7D 83.3%25 %7Btransform: scaleY(0.8333);%7D 86.6%25 %7Btransform: scaleY(0.875);%7D 89.9%25 %7Btransform: scaleY(0.9166);%7D 93.3%25 %7Btransform: scaleY(0.9583);%7D 96.6%25 %7Btransform: scaleY(1);%7D %7D %23bar1 %7B transform-origin: bottom; animation: play 0.9s -0.51s infinite; %7D %23bar2 %7B transform-origin: bottom; animation: play 0.9s infinite; %7D %23bar3 %7B transform-origin: bottom; animation: play 0.9s -0.15s infinite; %7D %23bar4 %7B transform-origin: bottom; animation: play 0.9s -0.75s infinite; %7D %3C/style%3E%3C/defs%3E%3Ctitle%3Eplaying-icon%3C/title%3E%3Crect id='bar1' class='cls-1' width='4' height='24'/%3E%3Crect id='bar2' class='cls-1' x='6' width='4' height='24'/%3E%3Crect id='bar3' class='cls-1' x='12' width='4' height='24'/%3E%3Crect id='bar4' class='cls-1' x='18' width='4' height='24'/%3E%3C/svg%3E"); 386 | background: var(--spice-button); 387 | content-visibility: hidden; 388 | -webkit-mask-repeat: no-repeat; 389 | } 390 | 391 | /* recolor animated liked or heart button on click */ 392 | #_R_G *:not([fill="none"]) { 393 | fill: var(--spice-button-active) !important; 394 | } 395 | #_R_G *:not([stroke="none"]) { 396 | stroke: var(--spice-button-active); 397 | } 398 | 399 | /* change appearance of 'playlist' tag */ 400 | .main-entityHeader-subtitle.main-entityHeader-small.main-entityHeader-uppercase.main-entityHeader-bold { 401 | border: 2px var(--spice-text) solid; 402 | border-radius: 8px; 403 | width: fit-content; 404 | display: inline; 405 | text-align: center; 406 | padding: 3px 7px; 407 | } 408 | 409 | /* change appearance of 'follow' button */ 410 | .artist-artistOverview-overview .main-actionBar-ActionBarRow > button:first-of-type { 411 | border-radius: 8px; 412 | border: 2px solid var(--spice-button); 413 | } 414 | 415 | /* change scrollbar appearance */ 416 | .os-theme-spotify.os-host-transition > .os-scrollbar-vertical > .os-scrollbar-track > .os-scrollbar-handle { 417 | border-radius: 4px; 418 | width: 6px; 419 | background-color: var(--spice-button-disabled); 420 | } 421 | 422 | .os-theme-spotify.os-host-transition > .os-scrollbar-vertical > .os-scrollbar-track { 423 | width: 6px; 424 | } 425 | 426 | /* add smooth shadow under headers */ 427 | .main-trackList-trackListHeaderStuck.main-trackList-trackListHeader, 428 | .artist-artistDiscography-topBar.artist-artistDiscography-topBarScrolled { 429 | background-color: var(--spice-main); 430 | border-bottom: none; 431 | -webkit-box-shadow: 0 0 50px 50px var(--spice-main); 432 | box-shadow: 0 0 50px 50px var(--spice-main); 433 | transition: box-shadow 0.2s; 434 | } 435 | .search-searchCategory-SearchCategory { 436 | -webkit-box-shadow: 0 0 20px 20px var(--spice-main); 437 | box-shadow: 0 0 20px 20px var(--spice-main); 438 | z-index: 3; 439 | } 440 | 441 | /* topbar play button */ 442 | .main-topBar-topbarContent .main-playButton-PlayButton > button > span { 443 | inline-size: 32px; 444 | block-size: 32px; 445 | min-block-size: auto; 446 | } 447 | .main-topBar-topbarContent .main-playButton-PlayButton svg { 448 | width: 18px; 449 | height: 18px; 450 | } 451 | .main-topBar-topbarContent .main-playButton-PlayButton > button > span > span { 452 | position: initial; 453 | height: 18px; 454 | } 455 | 456 | /* change text color on category cards in 'search' tab */ 457 | a.x-categoryCard-CategoryCard, 458 | a.x-heroCategoryCard-HeroCategoryCard { 459 | color: var(--spice-subtext); 460 | } 461 | 462 | /* recolor sub-buttons */ 463 | .main-moreButton-button { 464 | color: var(--spice-button-secondary); 465 | } 466 | 467 | .x-downloadButton-button, 468 | .x-contributorButton-button svg, 469 | .main-actionBar-ActionBarRow .main-addButton-button { 470 | color: var(--spice-button-secondary) !important; 471 | } 472 | 473 | .main-entityHeader-metaDataText, 474 | .x-filterBox-searchIconContainer { 475 | color: var(--spice-button-secondary); 476 | } 477 | 478 | .main-entityHeader-metaDataText span { 479 | color: var(--spice-button-secondary); 480 | } 481 | 482 | .x-sortBox-sortDropdown { 483 | background-color: var(--spice-main-secondary) !important; 484 | border-radius: 8px; 485 | } 486 | 487 | [dir="ltr"] .main-actionBar-ActionBarRow > :first-child { 488 | margin-right: 40px; 489 | } 490 | 491 | .x-filterBox-expandButton:focus, 492 | .x-filterBox-expandButton:hover { 493 | background-color: var(--spice-main-secondary) !important; 494 | border-radius: 8px; 495 | } 496 | 497 | .x-sortBox-sortDropdown, 498 | .x-filterBox-expandButton { 499 | color: var(--spice-text) !important; 500 | } 501 | 502 | /* change background color of 'home' tab shortcut items */ 503 | .view-homeShortcutsGrid-shortcut { 504 | background-color: rgba(var(--spice-rgb-main-secondary), 0.5) !important; 505 | } 506 | 507 | .view-homeShortcutsGrid-shortcut:focus-within, 508 | .view-homeShortcutsGrid-shortcut:hover, 509 | .view-homeShortcutsGrid-shortcut[data-context-menu-open="true"] { 510 | background-color: var(--spice-main-secondary) !important; 511 | } 512 | 513 | .main-card-card { 514 | background-color: rgba(var(--spice-rgb-main-secondary), 0.5) !important; 515 | } 516 | 517 | .main-card-card:focus-within, 518 | .main-card-card:hover { 519 | background-color: var(--spice-main-secondary) !important; 520 | } 521 | 522 | /* card background color for editing playlist details */ 523 | .main-playlistEditDetailsModal-descriptionTextarea { 524 | background: var(--spice-main-secondary); 525 | } 526 | 527 | .main-playlistEditDetailsModal-textElementLabel { 528 | display: none; 529 | } 530 | 531 | /* change color of search icon for new playlists */ 532 | .playlist-inlineSearchBox-searchIcon { 533 | fill: var(--spice-text) !important; 534 | } 535 | 536 | /* change appearance of verified artist badge */ 537 | .main-entityHeader-headerText > span:first-child { 538 | border: 0.25em solid var(--spice-text); 539 | border-radius: 0.5em; 540 | width: fit-content; 541 | gap: 0px; 542 | text-align: center; 543 | padding: 0.25em 0.75em; 544 | --font-family: CircularSp,CircularSp-Arab,CircularSp-Hebr,CircularSp-Cyrl,CircularSp-Grek,CircularSp-Deva,var(--fallback-fonts,sans-serif),sans-serif; 545 | } 546 | 547 | .main-entityHeader-headerText > span:first-child > span { 548 | font-weight: bold; 549 | text-transform: uppercase; 550 | font-size: 0.75rem; 551 | } 552 | 553 | .main-entityHeader-headerText > span:first-child svg, 554 | .main-entityHeader-headerText > span:first-child div { 555 | display: none; 556 | } 557 | 558 | /* change text color of hero card on 'library' tab */ 559 | .main-heroCard-card, 560 | .collection-collectionEntityHeroCard-descriptionContainer { 561 | color: var(--spice-subtext) !important; 562 | } 563 | /* 564 | -------------- 565 | CONTEXT MENU 566 | -------------- 567 | */ 568 | /* change hover color when selecting in context menu */ 569 | .main-contextMenu-menuItemButton:not(.main-contextMenu-disabled):focus, 570 | .main-contextMenu-menuItemButton:not(.main-contextMenu-disabled):hover { 571 | background-color: rgba(0, 0, 0, 0.2) !important; 572 | } 573 | 574 | .main-contextMenu-menuItemButton[aria-expanded="true"] { 575 | background-color: rgba(0, 0, 0, 0.2) !important; 576 | } 577 | 578 | /* disabled options */ 579 | .main-contextMenu-disabled > span { 580 | color: rgba(var(--spice-button-disabled), 0.5); 581 | } 582 | 583 | /* dividers between option subgroups */ 584 | .main-contextMenu-menuItem:not(:first-child) > .main-contextMenu-dividerBefore:before { 585 | border-bottom: 1px solid var(--spice-button-disabled); 586 | } 587 | /* 588 | ------------- 589 | TRACKS GRID 590 | ------------- 591 | */ 592 | /* change color of track titles */ 593 | .main-trackList-rowTitle { 594 | color: var(--spice-subtext); 595 | } 596 | /* change color of 'explicit' badge */ 597 | .main-tag-container { 598 | background-color: var(--spice-subtext); 599 | } 600 | 601 | /* change background color of selected row */ 602 | .main-trackList-trackListRow.main-trackList-selected, 603 | .main-trackList-trackListRow.main-trackList-selected:hover { 604 | background-color: var(--spice-main-secondary) !important; 605 | } 606 | 607 | .main-trackList-trackListRow:focus-within, 608 | .main-trackList-trackListRow:hover { 609 | background-color: rgba(var(--spice-rgb-main-secondary), 0.5); 610 | } 611 | 612 | /* When song is currently playing */ 613 | .main-trackList-active .main-type-mesto, 614 | .main-trackList-active .main-trackList-rowSubTitle, 615 | .main-trackList-active .main-trackList-rowSubTitle a, 616 | .main-trackList-active .main-trackList-rowMarker, 617 | .main-trackList-active .main-trackList-rowSectionVariable, 618 | .main-trackList-active .main-trackList-rowSectionVariable a, 619 | .main-trackList-active .main-trackList-rowSectionVariable span, 620 | .main-trackList-active .main-trackList-rowMarker, 621 | .main-trackList-active .main-trackList-rowDuration { 622 | color: var(--spice-button) !important; 623 | } 624 | 625 | .main-trackList-active .main-tag-container { 626 | background-color: var(--spice-button); 627 | } 628 | 629 | /* When song is hovered/selected */ 630 | .main-trackList-trackListRow.main-trackList-selected:not(.main-trackList-active) .main-tag-container, 631 | .main-trackList-trackListRow:hover:not(.main-trackList-disabled):not(.main-trackList-active) .main-tag-container { 632 | background-color: var(--spice-text); 633 | } 634 | 635 | .main-trackList-trackListRow:hover:not(.main-trackList-disabled) .main-addButton-button, 636 | .main-trackList-trackListRow:focus-within:not(.main-trackList-disabled) .main-addButton-button { 637 | color: var(--spice-text); 638 | } 639 | 640 | .main-trackList-trackListRow.main-trackList-selected:not(.main-trackList-active) .main-trackList-rowTitle, 641 | .main-trackList-trackListRow:hover:not(.main-trackList-disabled):not(.main-trackList-active) .main-trackList-rowTitle { 642 | color: var(--spice-text); 643 | } 644 | 645 | .main-trackList-trackListRow.main-trackList-selected:not(.main-trackList-active) .main-trackList-rowSubTitle, 646 | .main-trackList-trackListRow:hover:not(.main-trackList-disabled):not(.main-trackList-active) .main-trackList-rowSubTitle { 647 | color: var(--spice-text) !important; 648 | } 649 | 650 | /* color of selected row infos */ 651 | .main-trackList-rowSectionVariable span, 652 | .main-trackList-rowSectionEnd div { 653 | color: inherit; 654 | } 655 | /* 656 | --------------- 657 | NEW HOME LAYOUT 658 | --------------- 659 | */ 660 | .main-topBar-navLinks a { 661 | border-radius: 8px; 662 | color: var(--spice-text); 663 | background-color: var(--spice-main-secondary); 664 | } 665 | 666 | .main-topBar-navLinks a:hover { 667 | color: var(--spice-button-active); 668 | background-color: var(--spice-main-secondary); 669 | } 670 | 671 | .main-topBar-navLinks a.main-topBar-buttonActive { 672 | background-color: var(--spice-button-active); 673 | color: var(--spice-main); 674 | } 675 | .nav-alt .x-searchInput-searchInputInput:focus { 676 | box-shadow: none; 677 | } 678 | -------------------------------------------------------------------------------- /.config/waybar/config: -------------------------------------------------------------------------------- 1 | { 2 | "height": 33, // Waybar height (to be removed for auto height) 3 | "spacing": 8, // Gaps between modules (4px) 4 | "modules-left": ["hyprland/workspaces"], 5 | "modules-right": ["pulseaudio", "network", "battery", "clock"], 6 | "keyboard-state": { 7 | "numlock": true, 8 | "capslock": true, 9 | "format": "{name} {icon}", 10 | "format-icons": { 11 | "locked": "", 12 | "unlocked": "" 13 | } 14 | }, 15 | "tray": { 16 | // "icon-size": 21, 17 | "spacing": 10 18 | }, 19 | "clock": { 20 | // "timezone": "America/New_York", 21 | "tooltip-format": "{:%Y %B}\n{calendar}", 22 | "format": "{:%I:%M %p}" 23 | }, 24 | "cpu": { 25 | "format": "{usage}% ", 26 | "tooltip": false 27 | }, 28 | "memory": { 29 | "format": "{}% " 30 | }, 31 | "temperature": { 32 | // "thermal-zone": 2, 33 | // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", 34 | "critical-threshold": 80, 35 | // "format-critical": "{temperatureC}°C {icon}", 36 | "format": "{temperatureC}°C {icon}", 37 | "format-icons": ["", "", ""] 38 | }, 39 | "backlight": { 40 | // "device": "acpi_video1", 41 | "format": "{percent}% {icon}", 42 | "format-icons": ["", "", "", "", "", "", "", "", ""] 43 | }, 44 | "battery": { 45 | "states": { 46 | // "good": 95, 47 | "warning": 30, 48 | "critical": 15 49 | }, 50 | "format": "{capacity}% {icon} ", 51 | "format-charging": "{capacity}% 󰂄", 52 | "format-plugged": "{capacity}% ", 53 | "format-alt": "{time} {icon}", 54 | // "format-good": "", // An empty format will hide the module 55 | // "format-full": "", 56 | "format-icons": ["", "", "", "", ""] 57 | }, 58 | "battery#bat2": { 59 | "bat": "BAT2" 60 | }, 61 | "network": { 62 | // "interface": "wlp2*", // (Optional) To force the use of this interface 63 | "format-wifi": "{essid} ({signalStrength}%)  ", 64 | "format-ethernet": "{ipaddr}/{cidr} ", 65 | "format-linked": "{ifname} (No IP) ", 66 | "format-disconnected": "Disconnected ⚠", 67 | "format-alt": "{ifname}: {ipaddr}/{cidr}" 68 | }, 69 | "pulseaudio": { 70 | // "scroll-step": 1, // %, can be a float 71 | "format": "{volume}% {icon}", 72 | "format-bluetooth": "{volume}% ", 73 | "format-bluetooth-muted": "󰝟 ", 74 | "format-muted": "󰝟", 75 | "format-icons": { 76 | "headphone": "", 77 | "hands-free": "", 78 | "headset": "", 79 | "phone": "", 80 | "portable": "", 81 | "car": "", 82 | "default": ["", "", ""] 83 | }, 84 | "on-click": "pavucontrol" 85 | }, 86 | } 87 | 88 | -------------------------------------------------------------------------------- /.config/waybar/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | /* `otf-font-awesome` is required to be installed for icons */ 3 | font-family: 'SF Pro Text', sans-serif; 4 | font-size: 13px; 5 | } 6 | 7 | window#waybar { 8 | background-color: rgba(30, 35, 38, 0.9); 9 | color: #d3c6aa; 10 | transition-property: background-color; 11 | transition-duration: .5s; 12 | } 13 | 14 | window#waybar.hidden { 15 | opacity: 0.2; 16 | } 17 | 18 | /* 19 | window#waybar.empty { 20 | background-color: transparent; 21 | } 22 | window#waybar.solo { 23 | background-color: #FFFFFF; 24 | } 25 | */ 26 | 27 | window#waybar.termite { 28 | background-color: #3F3F3F; 29 | } 30 | 31 | window#waybar.chromium { 32 | background-color: #000000; 33 | border: none; 34 | } 35 | 36 | button { 37 | /* Use box-shadow instead of border so the text isn't offset */ 38 | box-shadow: inset 0 -1px transparent; 39 | /* Avoid rounded borders under each button name */ 40 | border: none; 41 | border-radius: 0; 42 | } 43 | 44 | /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ 45 | button:hover { 46 | background: inherit; 47 | box-shadow: inset 0 -1px #a7c080; 48 | } 49 | 50 | #workspaces button { 51 | padding: 0 6px; 52 | background-color: transparent; 53 | color: #d3c6aa; 54 | } 55 | 56 | #workspaces button:hover { 57 | background: rgba(0, 0, 0, 0.2); 58 | } 59 | 60 | #workspaces button.active { 61 | color: #a7c080; 62 | background-color: #232a2e; 63 | } 64 | 65 | #workspaces button.urgent { 66 | color: #e67e8c; 67 | } 68 | 69 | #clock, 70 | #battery, 71 | #cpu, 72 | #memory, 73 | #disk, 74 | #temperature, 75 | #backlight, 76 | #network, 77 | #pulseaudio, 78 | #wireplumber, 79 | #custom-media, 80 | #tray, 81 | #mode, 82 | #idle_inhibitor, 83 | #scratchpad, 84 | #mpd { 85 | padding: 0 10px; 86 | margin-top: 3px; 87 | margin-bottom: 3px; 88 | color: #ffffff; 89 | border-radius: 1px; 90 | } 91 | 92 | #window, 93 | #workspaces { 94 | margin: 0 4px; 95 | } 96 | 97 | /* If workspaces is the leftmost module, omit left margin */ 98 | .modules-left > widget:first-child > #workspaces { 99 | margin-left: 0; 100 | } 101 | 102 | /* If workspaces is the rightmost module, omit right margin */ 103 | .modules-right > widget:last-child > #workspaces { 104 | margin-right: 0; 105 | } 106 | 107 | #clock { 108 | background-color: #a7c080; 109 | color: #2d353b; 110 | font-weight: bold; 111 | margin-right: 7px; 112 | } 113 | 114 | #battery { 115 | background-color: #d699b6; 116 | color: #2d353b; 117 | } 118 | 119 | #battery.charging, #battery.plugged { 120 | color: #2d353b; 121 | background-color: #83c092; 122 | } 123 | 124 | @keyframes blink { 125 | to { 126 | background-color: #ffffff; 127 | color: #000000; 128 | } 129 | } 130 | 131 | #battery.critical:not(.charging) { 132 | background-color: #f53c3c; 133 | color: #ffffff; 134 | animation-name: blink; 135 | animation-duration: 0.5s; 136 | animation-timing-function: linear; 137 | animation-iteration-count: infinite; 138 | animation-direction: alternate; 139 | } 140 | 141 | label:focus { 142 | background-color: #000000; 143 | } 144 | 145 | #cpu { 146 | background-color: #2ecc71; 147 | color: #000000; 148 | } 149 | 150 | #memory { 151 | background-color: #9b59b6; 152 | } 153 | 154 | #disk { 155 | background-color: #964B00; 156 | } 157 | 158 | #backlight { 159 | background-color: #90b1b1; 160 | } 161 | 162 | #network { 163 | background-color: #7fbbb3; 164 | color: #232a2e; 165 | } 166 | 167 | #network.disconnected { 168 | background-color: #e67e80; 169 | color: #232a2e; 170 | } 171 | 172 | #pulseaudio { 173 | background-color: #dbbc7f; 174 | color: #232a2e; 175 | } 176 | 177 | #pulseaudio.muted { 178 | background-color: #dbbc7f; 179 | color: #2a5c45; 180 | } 181 | 182 | #wireplumber { 183 | background-color: #fff0f5; 184 | color: #000000; 185 | } 186 | 187 | #wireplumber.muted { 188 | background-color: #f53c3c; 189 | } 190 | 191 | #custom-media { 192 | background-color: #66cc99; 193 | color: #2a5c45; 194 | min-width: 100px; 195 | } 196 | 197 | #custom-media.custom-spotify { 198 | background-color: #66cc99; 199 | } 200 | 201 | #custom-media.custom-vlc { 202 | background-color: #ffa000; 203 | } 204 | 205 | #temperature { 206 | background-color: #f0932b; 207 | } 208 | 209 | #temperature.critical { 210 | background-color: #eb4d4b; 211 | } 212 | 213 | #tray { 214 | background-color: #2980b9; 215 | } 216 | 217 | #tray > .passive { 218 | -gtk-icon-effect: dim; 219 | } 220 | 221 | #tray > .needs-attention { 222 | -gtk-icon-effect: highlight; 223 | background-color: #eb4d4b; 224 | } 225 | 226 | #idle_inhibitor { 227 | background-color: #2d3436; 228 | } 229 | 230 | #idle_inhibitor.activated { 231 | background-color: #ecf0f1; 232 | color: #2d3436; 233 | } 234 | 235 | #mpd { 236 | background-color: #66cc99; 237 | color: #2a5c45; 238 | } 239 | 240 | #mpd.disconnected { 241 | background-color: #f53c3c; 242 | } 243 | 244 | #mpd.stopped { 245 | background-color: #90b1b1; 246 | } 247 | 248 | #mpd.paused { 249 | background-color: #51a37a; 250 | } 251 | 252 | #language { 253 | background: #00b093; 254 | color: #740864; 255 | padding: 0 5px; 256 | margin: 0 5px; 257 | min-width: 16px; 258 | } 259 | 260 | #keyboard-state { 261 | background: #97e1ad; 262 | color: #000000; 263 | padding: 0 0px; 264 | margin: 0 5px; 265 | min-width: 16px; 266 | } 267 | 268 | #keyboard-state > label { 269 | padding: 0 5px; 270 | } 271 | 272 | #keyboard-state > label.locked { 273 | background: rgba(0, 0, 0, 0.2); 274 | } 275 | 276 | #scratchpad { 277 | background: rgba(0, 0, 0, 0.2); 278 | } 279 | 280 | #scratchpad.empty { 281 | background-color: transparent; 282 | } 283 | -------------------------------------------------------------------------------- /.p10k.zsh: -------------------------------------------------------------------------------- 1 | # Generated by Powerlevel10k configuration wizard on 2023-11-05 at 11:55 IST. 2 | # Based on romkatv/powerlevel10k/config/p10k-lean-8colors.zsh, checksum 27973. 3 | # Wizard options: nerdfont-v3 + powerline, small icons, unicode, lean_8colors, 2 lines, 4 | # disconnected, no frame, sparse, few icons, concise, transient_prompt, 5 | # instant_prompt=verbose. 6 | # Type `p10k configure` to generate another config. 7 | # 8 | # Config for Powerlevel10k with 8-color lean prompt style. Type `p10k configure` to generate 9 | # your own config based on it. 10 | # 11 | # Tip: Looking for a nice color? Here's a one-liner to print colormap. 12 | # 13 | # for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done 14 | 15 | # Temporarily change options. 16 | 'builtin' 'local' '-a' 'p10k_config_opts' 17 | [[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') 18 | [[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') 19 | [[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') 20 | 'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' 21 | 22 | () { 23 | emulate -L zsh -o extended_glob 24 | 25 | # Unset all configuration options. This allows you to apply configuration changes without 26 | # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. 27 | unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' 28 | 29 | # Zsh >= 5.1 is required. 30 | [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return 31 | 32 | # The list of segments shown on the left. Fill it with the most important segments. 33 | typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( 34 | # =========================[ Line #1 ]========================= 35 | # os_icon # os identifier 36 | dir # current directory 37 | vcs # git status 38 | # =========================[ Line #2 ]========================= 39 | newline # \n 40 | prompt_char # prompt symbol 41 | ) 42 | 43 | # The list of segments shown on the right. Fill it with less important segments. 44 | # Right prompt on the last prompt line (where you are typing your commands) gets 45 | # automatically hidden when the input line reaches it. Right prompt above the 46 | # last prompt line gets hidden if it would overlap with left prompt. 47 | typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( 48 | # =========================[ Line #1 ]========================= 49 | status # exit code of the last command 50 | command_execution_time # duration of the last command 51 | background_jobs # presence of background jobs 52 | direnv # direnv status (https://direnv.net/) 53 | asdf # asdf version manager (https://github.com/asdf-vm/asdf) 54 | virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) 55 | anaconda # conda environment (https://conda.io/) 56 | pyenv # python environment (https://github.com/pyenv/pyenv) 57 | goenv # go environment (https://github.com/syndbg/goenv) 58 | nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) 59 | nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) 60 | nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) 61 | # node_version # node.js version 62 | # go_version # go version (https://golang.org) 63 | # rust_version # rustc version (https://www.rust-lang.org) 64 | # dotnet_version # .NET version (https://dotnet.microsoft.com) 65 | # php_version # php version (https://www.php.net/) 66 | # laravel_version # laravel php framework version (https://laravel.com/) 67 | # java_version # java version (https://www.java.com/) 68 | # package # name@version from package.json (https://docs.npmjs.com/files/package.json) 69 | rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) 70 | rvm # ruby version from rvm (https://rvm.io) 71 | fvm # flutter version management (https://github.com/leoafarias/fvm) 72 | luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) 73 | jenv # java version from jenv (https://github.com/jenv/jenv) 74 | plenv # perl version from plenv (https://github.com/tokuhirom/plenv) 75 | perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) 76 | phpenv # php version from phpenv (https://github.com/phpenv/phpenv) 77 | scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) 78 | haskell_stack # haskell version from stack (https://haskellstack.org/) 79 | kubecontext # current kubernetes context (https://kubernetes.io/) 80 | terraform # terraform workspace (https://www.terraform.io) 81 | # terraform_version # terraform version (https://www.terraform.io) 82 | aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) 83 | aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) 84 | azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) 85 | gcloud # google cloud cli account and project (https://cloud.google.com/) 86 | google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) 87 | toolbox # toolbox name (https://github.com/containers/toolbox) 88 | context # user@hostname 89 | nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) 90 | ranger # ranger shell (https://github.com/ranger/ranger) 91 | nnn # nnn shell (https://github.com/jarun/nnn) 92 | lf # lf shell (https://github.com/gokcehan/lf) 93 | xplr # xplr shell (https://github.com/sayanarijit/xplr) 94 | vim_shell # vim shell indicator (:sh) 95 | midnight_commander # midnight commander shell (https://midnight-commander.org/) 96 | nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) 97 | chezmoi_shell # chezmoi shell (https://www.chezmoi.io/) 98 | # vpn_ip # virtual private network indicator 99 | # load # CPU load 100 | # disk_usage # disk usage 101 | # ram # free RAM 102 | # swap # used swap 103 | todo # todo items (https://github.com/todotxt/todo.txt-cli) 104 | timewarrior # timewarrior tracking status (https://timewarrior.net/) 105 | taskwarrior # taskwarrior task count (https://taskwarrior.org/) 106 | per_directory_history # Oh My Zsh per-directory-history local/global indicator 107 | # cpu_arch # CPU architecture 108 | # time # current time 109 | # =========================[ Line #2 ]========================= 110 | newline # \n 111 | # ip # ip address and bandwidth usage for a specified network interface 112 | # public_ip # public IP address 113 | # proxy # system-wide http/https/ftp proxy 114 | # battery # internal battery 115 | # wifi # wifi speed 116 | # example # example user-defined segment (see prompt_example function below) 117 | ) 118 | 119 | # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. 120 | typeset -g POWERLEVEL9K_MODE=nerdfont-v3 121 | # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid 122 | # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. 123 | typeset -g POWERLEVEL9K_ICON_PADDING=none 124 | 125 | # Basic style options that define the overall look of your prompt. You probably don't want to 126 | # change them. 127 | typeset -g POWERLEVEL9K_BACKGROUND= # transparent background 128 | typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace 129 | typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space 130 | typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol 131 | 132 | # When set to true, icons appear before content on both sides of the prompt. When set 133 | # to false, icons go after content. If empty or not set, icons go before content in the left 134 | # prompt and after content in the right prompt. 135 | # 136 | # You can also override it for a specific segment: 137 | # 138 | # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false 139 | # 140 | # Or for a specific segment in specific state: 141 | # 142 | # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false 143 | typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true 144 | 145 | # Add an empty line before each prompt. 146 | typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true 147 | 148 | # Connect left prompt lines with these symbols. 149 | typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX= 150 | typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX= 151 | typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX= 152 | # Connect right prompt lines with these symbols. 153 | typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= 154 | typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= 155 | typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX= 156 | 157 | # The left end of left prompt. 158 | typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= 159 | # The right end of right prompt. 160 | typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= 161 | 162 | # Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll 163 | # probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and 164 | # POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below. 165 | typeset -g POWERLEVEL9K_SHOW_RULER=false 166 | typeset -g POWERLEVEL9K_RULER_CHAR='─' # reasonable alternative: '·' 167 | typeset -g POWERLEVEL9K_RULER_FOREGROUND=7 168 | 169 | # Filler between left and right prompt on the first prompt line. You can set it to '·' or '─' 170 | # to make it easier to see the alignment between left and right prompt and to separate prompt 171 | # from command output. It serves the same purpose as ruler (see above) without increasing 172 | # the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false 173 | # if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact 174 | # prompt. 175 | typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' 176 | if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then 177 | # The color of the filler. 178 | typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=7 179 | # Add a space between the end of left prompt and the filler. 180 | typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' ' 181 | # Add a space between the filler and the start of right prompt. 182 | typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' ' 183 | # Start filler from the edge of the screen if there are no left segments on the first line. 184 | typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' 185 | # End filler on the edge of the screen if there are no right segments on the first line. 186 | typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' 187 | fi 188 | 189 | #################################[ os_icon: os identifier ]################################## 190 | # OS identifier color. 191 | typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND= 192 | # Custom icon. 193 | # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' 194 | 195 | ################################[ prompt_char: prompt symbol ]################################ 196 | # Green prompt symbol if the last command succeeded. 197 | typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=2 198 | # Red prompt symbol if the last command failed. 199 | typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=1 200 | # Default prompt symbol. 201 | typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' 202 | # Prompt symbol in command vi mode. 203 | typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' 204 | # Prompt symbol in visual vi mode. 205 | typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' 206 | # Prompt symbol in overwrite vi mode. 207 | typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' 208 | typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true 209 | # No line terminator if prompt_char is the last segment. 210 | typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='' 211 | # No line introducer if prompt_char is the first segment. 212 | typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= 213 | 214 | ##################################[ dir: current directory ]################################## 215 | # Default current directory color. 216 | typeset -g POWERLEVEL9K_DIR_FOREGROUND=4 217 | # If directory is too long, shorten some of its segments to the shortest possible unique 218 | # prefix. The shortened directory can be tab-completed to the original. 219 | typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique 220 | # Replace removed segment suffixes with this symbol. 221 | typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= 222 | # Color of the shortened directory segments. 223 | typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=4 224 | # Color of the anchor directory segments. Anchor segments are never shortened. The first 225 | # segment is always an anchor. 226 | typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=4 227 | # Set to true to display anchor directory segments in bold. 228 | typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=false 229 | # Don't shorten directories that contain any of these files. They are anchors. 230 | local anchor_files=( 231 | .bzr 232 | .citc 233 | .git 234 | .hg 235 | .node-version 236 | .python-version 237 | .go-version 238 | .ruby-version 239 | .lua-version 240 | .java-version 241 | .perl-version 242 | .php-version 243 | .tool-versions 244 | .shorten_folder_marker 245 | .svn 246 | .terraform 247 | CVS 248 | Cargo.toml 249 | composer.json 250 | go.mod 251 | package.json 252 | stack.yaml 253 | ) 254 | typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" 255 | # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains 256 | # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is 257 | # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) 258 | # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers 259 | # and other directories don't. 260 | # 261 | # Optionally, "first" and "last" can be followed by ":" where is an integer. 262 | # This moves the truncation point to the right (positive offset) or to the left (negative offset) 263 | # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" 264 | # respectively. 265 | typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false 266 | # Don't shorten this many last directory segments. They are anchors. 267 | typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 268 | # Shorten directory if it's longer than this even if there is space for it. The value can 269 | # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, 270 | # directory will be shortened only when prompt doesn't fit or when other parameters demand it 271 | # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). 272 | # If set to `0`, directory will always be shortened to its minimum length. 273 | typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 274 | # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this 275 | # many columns for typing commands. 276 | typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 277 | # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least 278 | # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. 279 | typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 280 | # If set to true, embed a hyperlink into the directory. Useful for quickly 281 | # opening a directory in the file manager simply by clicking the link. 282 | # Can also be handy when the directory is shortened, as it allows you to see 283 | # the full directory that was used in previous commands. 284 | typeset -g POWERLEVEL9K_DIR_HYPERLINK=false 285 | 286 | # Enable special styling for non-writable directories. See POWERLEVEL9K_LOCK_ICON and 287 | # POWERLEVEL9K_DIR_CLASSES below. 288 | typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v2 289 | 290 | # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON 291 | # and POWERLEVEL9K_DIR_CLASSES below. 292 | typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 293 | 294 | # The default icon shown next to non-writable and non-existent directories when 295 | # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. 296 | # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' 297 | 298 | # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different 299 | # directories. It must be an array with 3 * N elements. Each triplet consists of: 300 | # 301 | # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with 302 | # extended_glob option enabled. 303 | # 2. Directory class for the purpose of styling. 304 | # 3. An empty string. 305 | # 306 | # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. 307 | # 308 | # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories 309 | # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. 310 | # 311 | # For example, given these settings: 312 | # 313 | # typeset -g POWERLEVEL9K_DIR_CLASSES=( 314 | # '~/work(|/*)' WORK '' 315 | # '~(|/*)' HOME '' 316 | # '*' DEFAULT '') 317 | # 318 | # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one 319 | # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or 320 | # WORK_NON_EXISTENT. 321 | # 322 | # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an 323 | # option to define custom colors and icons for different directory classes. 324 | # 325 | # # Styling for WORK. 326 | # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' 327 | # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=4 328 | # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=4 329 | # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=4 330 | # 331 | # # Styling for WORK_NOT_WRITABLE. 332 | # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' 333 | # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=4 334 | # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=4 335 | # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=4# 336 | # 337 | # Styling for WORK_NON_EXISTENT. 338 | # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' 339 | # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=4 340 | # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=4 341 | # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=4 342 | # 343 | # If a styling parameter isn't explicitly defined for some class, it falls back to the classless 344 | # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls 345 | # back to POWERLEVEL9K_DIR_FOREGROUND. 346 | # 347 | typeset -g POWERLEVEL9K_DIR_CLASSES=() 348 | 349 | # Custom prefix. 350 | # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin ' 351 | 352 | #####################################[ vcs: git status ]###################################### 353 | # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. 354 | typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= 355 | 356 | # Untracked files icon. It's really a question mark, your font isn't broken. 357 | # Change the value of this parameter to show a different icon. 358 | typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' 359 | 360 | # Formatter for Git status. 361 | # 362 | # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. 363 | # 364 | # You can edit the function to customize how Git status looks. 365 | # 366 | # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: 367 | # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. 368 | function my_git_formatter() { 369 | emulate -L zsh 370 | 371 | if [[ -n $P9K_CONTENT ]]; then 372 | # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from 373 | # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. 374 | typeset -g my_git_format=$P9K_CONTENT 375 | return 376 | fi 377 | 378 | if (( $1 )); then 379 | # Styling for up-to-date Git status. 380 | local meta='%f' # default foreground 381 | local clean='%2F' # green foreground 382 | local modified='%3F' # yellow foreground 383 | local untracked='%4F' # blue foreground 384 | local conflicted='%1F' # red foreground 385 | else 386 | # Styling for incomplete and stale Git status. 387 | local meta='%f' # default foreground 388 | local clean='%f' # default foreground 389 | local modified='%f' # default foreground 390 | local untracked='%f' # default foreground 391 | local conflicted='%f' # default foreground 392 | fi 393 | 394 | local res 395 | 396 | if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then 397 | local branch=${(V)VCS_STATUS_LOCAL_BRANCH} 398 | # If local branch name is at most 32 characters long, show it in full. 399 | # Otherwise show the first 12 … the last 12. 400 | # Tip: To always show local branch name in full without truncation, delete the next line. 401 | (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line 402 | res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" 403 | fi 404 | 405 | if [[ -n $VCS_STATUS_TAG 406 | # Show tag only if not on a branch. 407 | # Tip: To always show tag, delete the next line. 408 | && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line 409 | ]]; then 410 | local tag=${(V)VCS_STATUS_TAG} 411 | # If tag name is at most 32 characters long, show it in full. 412 | # Otherwise show the first 12 … the last 12. 413 | # Tip: To always show tag name in full without truncation, delete the next line. 414 | (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line 415 | res+="${meta}#${clean}${tag//\%/%%}" 416 | fi 417 | 418 | # Display the current Git commit if there is no branch and no tag. 419 | # Tip: To always display the current Git commit, delete the next line. 420 | [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line 421 | res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" 422 | 423 | # Show tracking branch name if it differs from local branch. 424 | if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then 425 | res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" 426 | fi 427 | 428 | # Display "wip" if the latest commit's summary contains "wip" or "WIP". 429 | if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then 430 | res+=" ${modified}wip" 431 | fi 432 | 433 | if (( VCS_STATUS_COMMITS_AHEAD || VCS_STATUS_COMMITS_BEHIND )); then 434 | # ⇣42 if behind the remote. 435 | (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" 436 | # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. 437 | (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " 438 | (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" 439 | elif [[ -n $VCS_STATUS_REMOTE_BRANCH ]]; then 440 | # Tip: Uncomment the next line to display '=' if up to date with the remote. 441 | # res+=" ${clean}=" 442 | fi 443 | 444 | # ⇠42 if behind the push remote. 445 | (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" 446 | (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " 447 | # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. 448 | (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" 449 | # *42 if have stashes. 450 | (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" 451 | # 'merge' if the repo is in an unusual state. 452 | [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" 453 | # ~42 if have merge conflicts. 454 | (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" 455 | # +42 if have staged changes. 456 | (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" 457 | # !42 if have unstaged changes. 458 | (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" 459 | # ?42 if have untracked files. It's really a question mark, your font isn't broken. 460 | # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. 461 | # Remove the next line if you don't want to see untracked files at all. 462 | (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" 463 | # "─" if the number of unstaged files is unknown. This can happen due to 464 | # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower 465 | # than the number of files in the Git index, or due to bash.showDirtyState being set to false 466 | # in the repository config. The number of staged and untracked files may also be unknown 467 | # in this case. 468 | (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" 469 | 470 | typeset -g my_git_format=$res 471 | } 472 | functions -M my_git_formatter 2>/dev/null 473 | 474 | # Don't count the number of unstaged, untracked and conflicted files in Git repositories with 475 | # more than this many files in the index. Negative value means infinity. 476 | # 477 | # If you are working in Git repositories with tens of millions of files and seeing performance 478 | # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output 479 | # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's 480 | # config: `git config bash.showDirtyState false`. 481 | typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 482 | 483 | # Don't show Git status in prompt for repositories whose workdir matches this pattern. 484 | # For example, if set to '~', the Git repository at $HOME/.git will be ignored. 485 | # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. 486 | typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' 487 | 488 | # Disable the default Git status formatting. 489 | typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true 490 | # Install our own Git status formatter. 491 | typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' 492 | typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' 493 | # Enable counters for staged, unstaged, etc. 494 | typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 495 | 496 | # Icon color. 497 | typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=2 498 | typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR= 499 | # Custom icon. 500 | typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION= 501 | # Custom prefix. 502 | # typeset -g POWERLEVEL9K_VCS_PREFIX='%fon ' 503 | 504 | # Show status of repositories of these types. You can add svn and/or hg if you are 505 | # using them. If you do, your prompt may become slow even when your current directory 506 | # isn't in an svn or hg repository. 507 | typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) 508 | 509 | # These settings are used for repositories other than Git or when gitstatusd fails and 510 | # Powerlevel10k has to fall back to using vcs_info. 511 | typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=2 512 | typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=2 513 | typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=3 514 | 515 | ##########################[ status: exit code of the last command ]########################### 516 | # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and 517 | # style them independently from the regular OK and ERROR state. 518 | typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true 519 | 520 | # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as 521 | # it will signify success by turning green. 522 | typeset -g POWERLEVEL9K_STATUS_OK=false 523 | typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2 524 | typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' 525 | 526 | # Status when some part of a pipe command fails but the overall exit status is zero. It may look 527 | # like this: 1|0. 528 | typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true 529 | typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2 530 | typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' 531 | 532 | # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as 533 | # it will signify error by turning red. 534 | typeset -g POWERLEVEL9K_STATUS_ERROR=false 535 | typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=1 536 | typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' 537 | 538 | # Status when the last command was terminated by a signal. 539 | typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true 540 | typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=1 541 | # Use terse signal names: "INT" instead of "SIGINT(2)". 542 | typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false 543 | typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' 544 | 545 | # Status when some part of a pipe command fails and the overall exit status is also non-zero. 546 | # It may look like this: 1|0. 547 | typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true 548 | typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=1 549 | typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' 550 | 551 | ###################[ command_execution_time: duration of the last command ]################### 552 | # Show duration of the last command if takes at least this many seconds. 553 | typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 554 | # Show this many fractional digits. Zero means round to seconds. 555 | typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 556 | # Execution time color. 557 | typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=3 558 | # Duration format: 1d 2h 3m 4s. 559 | typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' 560 | # Custom icon. 561 | typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION= 562 | # Custom prefix. 563 | # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook ' 564 | 565 | #######################[ background_jobs: presence of background jobs ]####################### 566 | # Don't show the number of background jobs. 567 | typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false 568 | # Background jobs color. 569 | typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=1 570 | # Custom icon. 571 | # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' 572 | 573 | #######################[ direnv: direnv status (https://direnv.net/) ]######################## 574 | # Direnv color. 575 | typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=3 576 | # Custom icon. 577 | # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 578 | 579 | ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### 580 | # Default asdf color. Only used to display tools for which there is no color override (see below). 581 | # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. 582 | typeset -g POWERLEVEL9K_ASDF_FOREGROUND=6 583 | 584 | # There are four parameters that can be used to hide asdf tools. Each parameter describes 585 | # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at 586 | # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to 587 | # hide a tool, it gets shown. 588 | # 589 | # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and 590 | # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: 591 | # 592 | # asdf local python 3.8.1 593 | # asdf global python 3.8.1 594 | # 595 | # After running both commands the current python version is 3.8.1 and its source is "local" as 596 | # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, 597 | # it'll hide python version in this case because 3.8.1 is the same as the global version. 598 | # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't 599 | # contain "local". 600 | 601 | # Hide tool versions that don't come from one of these sources. 602 | # 603 | # Available sources: 604 | # 605 | # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" 606 | # - local `asdf current` says "set by /some/not/home/directory/file" 607 | # - global `asdf current` says "set by /home/username/file" 608 | # 609 | # Note: If this parameter is set to (shell local global), it won't hide tools. 610 | # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. 611 | typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) 612 | 613 | # If set to false, hide tool versions that are the same as global. 614 | # 615 | # Note: The name of this parameter doesn't reflect its meaning at all. 616 | # Note: If this parameter is set to true, it won't hide tools. 617 | # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. 618 | typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false 619 | 620 | # If set to false, hide tool versions that are equal to "system". 621 | # 622 | # Note: If this parameter is set to true, it won't hide tools. 623 | # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. 624 | typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true 625 | 626 | # If set to non-empty value, hide tools unless there is a file matching the specified file pattern 627 | # in the current directory, or its parent directory, or its grandparent directory, and so on. 628 | # 629 | # Note: If this parameter is set to empty value, it won't hide tools. 630 | # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. 631 | # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. 632 | # 633 | # Example: Hide nodejs version when there is no package.json and no *.js files in the current 634 | # directory, in `..`, in `../..` and so on. 635 | # 636 | # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' 637 | typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= 638 | 639 | # Ruby version from asdf. 640 | typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=1 641 | # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' 642 | # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' 643 | 644 | # Python version from asdf. 645 | typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=6 646 | # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' 647 | # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' 648 | 649 | # Go version from asdf. 650 | typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=6 651 | # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' 652 | # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' 653 | 654 | # Node.js version from asdf. 655 | typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=2 656 | # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' 657 | # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' 658 | 659 | # Rust version from asdf. 660 | typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=4 661 | # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' 662 | # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' 663 | 664 | # .NET Core version from asdf. 665 | typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=5 666 | # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' 667 | # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' 668 | 669 | # Flutter version from asdf. 670 | typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=4 671 | # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' 672 | # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' 673 | 674 | # Lua version from asdf. 675 | typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=4 676 | # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' 677 | # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' 678 | 679 | # Java version from asdf. 680 | typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=4 681 | # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' 682 | # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' 683 | 684 | # Perl version from asdf. 685 | typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=6 686 | # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' 687 | # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' 688 | 689 | # Erlang version from asdf. 690 | typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=1 691 | # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' 692 | # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' 693 | 694 | # Elixir version from asdf. 695 | typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=5 696 | # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' 697 | # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' 698 | 699 | # Postgres version from asdf. 700 | typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=6 701 | # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' 702 | # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' 703 | 704 | # PHP version from asdf. 705 | typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=5 706 | # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' 707 | # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' 708 | 709 | # Haskell version from asdf. 710 | typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=3 711 | # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' 712 | # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' 713 | 714 | # Julia version from asdf. 715 | typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=2 716 | # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' 717 | # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' 718 | 719 | ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### 720 | # NordVPN connection indicator color. 721 | typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=6 722 | # Hide NordVPN connection indicator when not connected. 723 | typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= 724 | typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= 725 | # Custom icon. 726 | # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' 727 | 728 | #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## 729 | # Ranger shell color. 730 | typeset -g POWERLEVEL9K_RANGER_FOREGROUND=3 731 | # Custom icon. 732 | # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' 733 | 734 | ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### 735 | # Nnn shell color. 736 | typeset -g POWERLEVEL9K_NNN_FOREGROUND=3 737 | # Custom icon. 738 | # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' 739 | 740 | ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### 741 | # lf shell color. 742 | typeset -g POWERLEVEL9K_LF_FOREGROUND=3 743 | # Custom icon. 744 | # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' 745 | 746 | ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## 747 | # xplr shell color. 748 | typeset -g POWERLEVEL9K_XPLR_FOREGROUND=3 749 | # Custom icon. 750 | # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' 751 | 752 | ###########################[ vim_shell: vim shell indicator (:sh) ]########################### 753 | # Vim shell indicator color. 754 | typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=3 755 | # Custom icon. 756 | # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' 757 | 758 | ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### 759 | # Midnight Commander shell color. 760 | typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=3 761 | # Custom icon. 762 | # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' 763 | 764 | #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## 765 | # Nix shell color. 766 | typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=4 767 | 768 | # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. 769 | # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false 770 | 771 | # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. 772 | # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= 773 | 774 | # Custom icon. 775 | # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' 776 | 777 | ##################[ chezmoi_shell: chezmoi shell (https://www.chezmoi.io/) ]################## 778 | # chezmoi shell color. 779 | typeset -g POWERLEVEL9K_CHEZMOI_SHELL_FOREGROUND=4 780 | # Custom icon. 781 | # typeset -g POWERLEVEL9K_CHEZMOI_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' 782 | 783 | ##################################[ disk_usage: disk usage ]################################## 784 | # Colors for different levels of disk usage. 785 | typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=2 786 | typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=3 787 | typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=1 788 | # Thresholds for different levels of disk usage (percentage points). 789 | typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 790 | typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 791 | # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. 792 | typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false 793 | # Custom icon. 794 | # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' 795 | 796 | ######################################[ ram: free RAM ]####################################### 797 | # RAM color. 798 | typeset -g POWERLEVEL9K_RAM_FOREGROUND=2 799 | # Custom icon. 800 | # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' 801 | 802 | #####################################[ swap: used swap ]###################################### 803 | # Swap color. 804 | typeset -g POWERLEVEL9K_SWAP_FOREGROUND=3 805 | # Custom icon. 806 | # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' 807 | 808 | ######################################[ load: CPU load ]###################################### 809 | # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. 810 | typeset -g POWERLEVEL9K_LOAD_WHICH=5 811 | # Load color when load is under 50%. 812 | typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=2 813 | # Load color when load is between 50% and 70%. 814 | typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=3 815 | # Load color when load is over 70%. 816 | typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=1 817 | # Custom icon. 818 | # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' 819 | 820 | ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ 821 | # Todo color. 822 | typeset -g POWERLEVEL9K_TODO_FOREGROUND=4 823 | # Hide todo when the total number of tasks is zero. 824 | typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true 825 | # Hide todo when the number of tasks after filtering is zero. 826 | typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false 827 | 828 | # Todo format. The following parameters are available within the expansion. 829 | # 830 | # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. 831 | # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. 832 | # 833 | # These variables correspond to the last line of the output of `todo.sh -p ls`: 834 | # 835 | # TODO: 24 of 42 tasks shown 836 | # 837 | # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. 838 | # 839 | # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' 840 | 841 | # Custom icon. 842 | # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' 843 | 844 | ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ 845 | # Timewarrior color. 846 | typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=4 847 | # If the tracked task is longer than 24 characters, truncate and append "…". 848 | # Tip: To always display tasks without truncation, delete the following parameter. 849 | # Tip: To hide task names and display just the icon when time tracking is enabled, set the 850 | # value of the following parameter to "". 851 | typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' 852 | 853 | # Custom icon. 854 | # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' 855 | 856 | ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## 857 | # Taskwarrior color. 858 | typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=6 859 | 860 | # Taskwarrior segment format. The following parameters are available within the expansion. 861 | # 862 | # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. 863 | # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. 864 | # 865 | # Zero values are represented as empty parameters. 866 | # 867 | # The default format: 868 | # 869 | # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' 870 | # 871 | # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' 872 | 873 | # Custom icon. 874 | # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' 875 | 876 | ######[ per_directory_history: Oh My Zsh per-directory-history local/global indicator ]####### 877 | # Color when using local/global history. 878 | typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_FOREGROUND=5 879 | typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_FOREGROUND=3 880 | 881 | # Tip: Uncomment the next two lines to hide "local"/"global" text and leave just the icon. 882 | # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_CONTENT_EXPANSION='' 883 | # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_CONTENT_EXPANSION='' 884 | 885 | # Custom icon. 886 | # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_VISUAL_IDENTIFIER_EXPANSION='⭐' 887 | # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_VISUAL_IDENTIFIER_EXPANSION='⭐' 888 | 889 | ################################[ cpu_arch: CPU architecture ]################################ 890 | # CPU architecture color. 891 | typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=3 892 | 893 | # Hide the segment when on a specific CPU architecture. 894 | # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= 895 | # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= 896 | 897 | # Custom icon. 898 | # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' 899 | 900 | ##################################[ context: user@hostname ]################################## 901 | # Context color when running with privileges. 902 | typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1 903 | # Context color in SSH without privileges. 904 | typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=7 905 | # Default context color (no privileges, no SSH). 906 | typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=7 907 | 908 | # Context format when running with privileges: bold user@hostname. 909 | typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' 910 | # Context format when in SSH without privileges: user@hostname. 911 | typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' 912 | # Default context format (no privileges, no SSH): user@hostname. 913 | typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' 914 | 915 | # Don't show context unless running with privileges or in SSH. 916 | # Tip: Remove the next line to always show context. 917 | typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= 918 | 919 | # Custom icon. 920 | # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' 921 | # Custom prefix. 922 | # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith ' 923 | 924 | ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### 925 | # Python virtual environment color. 926 | typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=6 927 | # Don't show Python version next to the virtual environment name. 928 | typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false 929 | # If set to "false", won't show virtualenv if pyenv is already shown. 930 | # If set to "if-different", won't show virtualenv if it's the same as pyenv. 931 | typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false 932 | # Separate environment name from Python version only with a space. 933 | typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= 934 | # Custom icon. 935 | # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 936 | 937 | #####################[ anaconda: conda environment (https://conda.io/) ]###################### 938 | # Anaconda environment color. 939 | typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=6 940 | 941 | # Anaconda segment format. The following parameters are available within the expansion. 942 | # 943 | # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. 944 | # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. 945 | # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). 946 | # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). 947 | # 948 | # CONDA_PROMPT_MODIFIER can be configured with the following command: 949 | # 950 | # conda config --set env_prompt '({default_env}) ' 951 | # 952 | # The last argument is a Python format string that can use the following variables: 953 | # 954 | # - prefix The same as CONDA_PREFIX. 955 | # - default_env The same as CONDA_DEFAULT_ENV. 956 | # - name The last segment of CONDA_PREFIX. 957 | # - stacked_env Comma-separated list of names in the environment stack. The first element is 958 | # always the same as default_env. 959 | # 960 | # Note: '({default_env}) ' is the default value of env_prompt. 961 | # 962 | # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER 963 | # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former 964 | # is empty. 965 | typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' 966 | 967 | # Custom icon. 968 | # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' 969 | 970 | ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ 971 | # Pyenv color. 972 | typeset -g POWERLEVEL9K_PYENV_FOREGROUND=6 973 | # Hide python version if it doesn't come from one of these sources. 974 | typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) 975 | # If set to false, hide python version if it's the same as global: 976 | # $(pyenv version-name) == $(pyenv global). 977 | typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false 978 | # If set to false, hide python version if it's equal to "system". 979 | typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true 980 | 981 | # Pyenv segment format. The following parameters are available within the expansion. 982 | # 983 | # - P9K_CONTENT Current pyenv environment (pyenv version-name). 984 | # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). 985 | # 986 | # The default format has the following logic: 987 | # 988 | # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or 989 | # starts with "$P9K_PYENV_PYTHON_VERSION/". 990 | # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". 991 | typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' 992 | 993 | # Custom icon. 994 | # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 995 | 996 | ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ 997 | # Goenv color. 998 | typeset -g POWERLEVEL9K_GOENV_FOREGROUND=6 999 | # Hide go version if it doesn't come from one of these sources. 1000 | typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) 1001 | # If set to false, hide go version if it's the same as global: 1002 | # $(goenv version-name) == $(goenv global). 1003 | typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false 1004 | # If set to false, hide go version if it's equal to "system". 1005 | typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true 1006 | # Custom icon. 1007 | # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 1008 | 1009 | ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## 1010 | # Nodenv color. 1011 | typeset -g POWERLEVEL9K_NODENV_FOREGROUND=2 1012 | # Hide node version if it doesn't come from one of these sources. 1013 | typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) 1014 | # If set to false, hide node version if it's the same as global: 1015 | # $(nodenv version-name) == $(nodenv global). 1016 | typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false 1017 | # If set to false, hide node version if it's equal to "system". 1018 | typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true 1019 | # Custom icon. 1020 | # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 1021 | 1022 | ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### 1023 | # Nvm color. 1024 | typeset -g POWERLEVEL9K_NVM_FOREGROUND=2 1025 | # If set to false, hide node version if it's the same as default: 1026 | # $(nvm version current) == $(nvm version default). 1027 | typeset -g POWERLEVEL9K_NVM_PROMPT_ALWAYS_SHOW=false 1028 | # If set to false, hide node version if it's equal to "system". 1029 | typeset -g POWERLEVEL9K_NVM_SHOW_SYSTEM=true 1030 | # Custom icon. 1031 | # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' 1032 | 1033 | ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ 1034 | # Nodeenv color. 1035 | typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=2 1036 | # Don't show Node version next to the environment name. 1037 | typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false 1038 | # Separate environment name from Node version only with a space. 1039 | typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= 1040 | # Custom icon. 1041 | # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 1042 | 1043 | ##############################[ node_version: node.js version ]############################### 1044 | # Node version color. 1045 | typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=2 1046 | # Show node version only when in a directory tree containing package.json. 1047 | typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true 1048 | # Custom icon. 1049 | # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' 1050 | 1051 | #######################[ go_version: go version (https://golang.org) ]######################## 1052 | # Go version color. 1053 | typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=6 1054 | # Show go version only when in a go project subdirectory. 1055 | typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true 1056 | # Custom icon. 1057 | # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' 1058 | 1059 | #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## 1060 | # Rust version color. 1061 | typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=4 1062 | # Show rust version only when in a rust project subdirectory. 1063 | typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true 1064 | # Custom icon. 1065 | # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' 1066 | 1067 | ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ 1068 | # .NET version color. 1069 | typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=5 1070 | # Show .NET version only when in a .NET project subdirectory. 1071 | typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true 1072 | # Custom icon. 1073 | # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' 1074 | 1075 | #####################[ php_version: php version (https://www.php.net/) ]###################### 1076 | # PHP version color. 1077 | typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=5 1078 | # Show PHP version only when in a PHP project subdirectory. 1079 | typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true 1080 | # Custom icon. 1081 | # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' 1082 | 1083 | ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### 1084 | # Laravel version color. 1085 | typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=1 1086 | # Custom icon. 1087 | # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' 1088 | 1089 | ####################[ java_version: java version (https://www.java.com/) ]#################### 1090 | # Java version color. 1091 | typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=4 1092 | # Show java version only when in a java project subdirectory. 1093 | typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true 1094 | # Show brief version. 1095 | typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false 1096 | # Custom icon. 1097 | # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' 1098 | 1099 | ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### 1100 | # Package color. 1101 | typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=6 1102 | # Package format. The following parameters are available within the expansion. 1103 | # 1104 | # - P9K_PACKAGE_NAME The value of `name` field in package.json. 1105 | # - P9K_PACKAGE_VERSION The value of `version` field in package.json. 1106 | # 1107 | # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' 1108 | # Custom icon. 1109 | # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' 1110 | 1111 | #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## 1112 | # Rbenv color. 1113 | typeset -g POWERLEVEL9K_RBENV_FOREGROUND=1 1114 | # Hide ruby version if it doesn't come from one of these sources. 1115 | typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) 1116 | # If set to false, hide ruby version if it's the same as global: 1117 | # $(rbenv version-name) == $(rbenv global). 1118 | typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false 1119 | # If set to false, hide ruby version if it's equal to "system". 1120 | typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true 1121 | # Custom icon. 1122 | # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 1123 | 1124 | #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## 1125 | # Rvm color. 1126 | typeset -g POWERLEVEL9K_RVM_FOREGROUND=1 1127 | # Don't show @gemset at the end. 1128 | typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false 1129 | # Don't show ruby- at the front. 1130 | typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false 1131 | # Custom icon. 1132 | # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' 1133 | 1134 | ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ 1135 | # Fvm color. 1136 | typeset -g POWERLEVEL9K_FVM_FOREGROUND=4 1137 | # Custom icon. 1138 | # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' 1139 | 1140 | ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### 1141 | # Lua color. 1142 | typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=4 1143 | # Hide lua version if it doesn't come from one of these sources. 1144 | typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) 1145 | # If set to false, hide lua version if it's the same as global: 1146 | # $(luaenv version-name) == $(luaenv global). 1147 | typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false 1148 | # If set to false, hide lua version if it's equal to "system". 1149 | typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true 1150 | # Custom icon. 1151 | # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 1152 | 1153 | ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ 1154 | # Java color. 1155 | typeset -g POWERLEVEL9K_JENV_FOREGROUND=4 1156 | # Hide java version if it doesn't come from one of these sources. 1157 | typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) 1158 | # If set to false, hide java version if it's the same as global: 1159 | # $(jenv version-name) == $(jenv global). 1160 | typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false 1161 | # If set to false, hide java version if it's equal to "system". 1162 | typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true 1163 | # Custom icon. 1164 | # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 1165 | 1166 | ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ 1167 | # Perl color. 1168 | typeset -g POWERLEVEL9K_PLENV_FOREGROUND=6 1169 | # Hide perl version if it doesn't come from one of these sources. 1170 | typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) 1171 | # If set to false, hide perl version if it's the same as global: 1172 | # $(plenv version-name) == $(plenv global). 1173 | typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false 1174 | # If set to false, hide perl version if it's equal to "system". 1175 | typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true 1176 | # Custom icon. 1177 | # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 1178 | 1179 | ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ 1180 | # Perlbrew color. 1181 | typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 1182 | # Show perlbrew version only when in a perl project subdirectory. 1183 | typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true 1184 | # Don't show "perl-" at the front. 1185 | typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false 1186 | # Custom icon. 1187 | # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' 1188 | 1189 | ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ 1190 | # PHP color. 1191 | typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=5 1192 | # Hide php version if it doesn't come from one of these sources. 1193 | typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) 1194 | # If set to false, hide php version if it's the same as global: 1195 | # $(phpenv version-name) == $(phpenv global). 1196 | typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false 1197 | # If set to false, hide php version if it's equal to "system". 1198 | typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true 1199 | # Custom icon. 1200 | # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 1201 | 1202 | #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### 1203 | # Scala color. 1204 | typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=1 1205 | # Hide scala version if it doesn't come from one of these sources. 1206 | typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) 1207 | # If set to false, hide scala version if it's the same as global: 1208 | # $(scalaenv version-name) == $(scalaenv global). 1209 | typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false 1210 | # If set to false, hide scala version if it's equal to "system". 1211 | typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true 1212 | # Custom icon. 1213 | # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 1214 | 1215 | ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### 1216 | # Haskell color. 1217 | typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=3 1218 | # Hide haskell version if it doesn't come from one of these sources. 1219 | # 1220 | # shell: version is set by STACK_YAML 1221 | # local: version is set by stack.yaml up the directory tree 1222 | # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) 1223 | typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) 1224 | # If set to false, hide haskell version if it's the same as in the implicit global project. 1225 | typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true 1226 | # Custom icon. 1227 | # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' 1228 | 1229 | #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# 1230 | # Show kubecontext only when the command you are typing invokes one of these tools. 1231 | # Tip: Remove the next line to always show kubecontext. 1232 | typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor|cmctl|sparkctl' 1233 | 1234 | # Kubernetes context classes for the purpose of using different colors, icons and expansions with 1235 | # different contexts. 1236 | # 1237 | # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element 1238 | # in each pair defines a pattern against which the current kubernetes context gets matched. 1239 | # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) 1240 | # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, 1241 | # you'll see this value in your prompt. The second element of each pair in 1242 | # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The 1243 | # first match wins. 1244 | # 1245 | # For example, given these settings: 1246 | # 1247 | # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( 1248 | # '*prod*' PROD 1249 | # '*test*' TEST 1250 | # '*' DEFAULT) 1251 | # 1252 | # If your current kubernetes context is "deathray-testing/default", its class is TEST 1253 | # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. 1254 | # 1255 | # You can define different colors, icons and content expansions for different classes: 1256 | # 1257 | # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=3 1258 | # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' 1259 | # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' 1260 | typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( 1261 | # '*prod*' PROD # These values are examples that are unlikely 1262 | # '*test*' TEST # to match your needs. Customize them as needed. 1263 | '*' DEFAULT) 1264 | typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=5 1265 | # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' 1266 | 1267 | # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext 1268 | # segment. Parameter expansions are very flexible and fast, too. See reference: 1269 | # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. 1270 | # 1271 | # Within the expansion the following parameters are always available: 1272 | # 1273 | # - P9K_CONTENT The content that would've been displayed if there was no content 1274 | # expansion defined. 1275 | # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the 1276 | # output of `kubectl config get-contexts`. 1277 | # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the 1278 | # output of `kubectl config get-contexts`. 1279 | # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE 1280 | # in the output of `kubectl config get-contexts`. If there is no 1281 | # namespace, the parameter is set to "default". 1282 | # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the 1283 | # output of `kubectl config get-contexts`. 1284 | # 1285 | # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), 1286 | # the following extra parameters are available: 1287 | # 1288 | # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". 1289 | # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. 1290 | # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. 1291 | # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. 1292 | # 1293 | # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, 1294 | # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": 1295 | # 1296 | # - P9K_KUBECONTEXT_CLOUD_NAME=gke 1297 | # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account 1298 | # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a 1299 | # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 1300 | # 1301 | # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": 1302 | # 1303 | # - P9K_KUBECONTEXT_CLOUD_NAME=eks 1304 | # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 1305 | # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 1306 | # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 1307 | typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= 1308 | # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. 1309 | POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' 1310 | # Append the current context's namespace if it's not "default". 1311 | POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' 1312 | 1313 | # Custom prefix. 1314 | # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat ' 1315 | 1316 | ################[ terraform: terraform workspace (https://www.terraform.io) ]################# 1317 | # Don't show terraform workspace if it's literally "default". 1318 | typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false 1319 | # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element 1320 | # in each pair defines a pattern against which the current terraform workspace gets matched. 1321 | # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) 1322 | # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, 1323 | # you'll see this value in your prompt. The second element of each pair in 1324 | # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The 1325 | # first match wins. 1326 | # 1327 | # For example, given these settings: 1328 | # 1329 | # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( 1330 | # '*prod*' PROD 1331 | # '*test*' TEST 1332 | # '*' OTHER) 1333 | # 1334 | # If your current terraform workspace is "project_test", its class is TEST because "project_test" 1335 | # doesn't match the pattern '*prod*' but does match '*test*'. 1336 | # 1337 | # You can define different colors, icons and content expansions for different classes: 1338 | # 1339 | # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=2 1340 | # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' 1341 | # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' 1342 | typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( 1343 | # '*prod*' PROD # These values are examples that are unlikely 1344 | # '*test*' TEST # to match your needs. Customize them as needed. 1345 | '*' OTHER) 1346 | typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=4 1347 | # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' 1348 | 1349 | #############[ terraform_version: terraform version (https://www.terraform.io) ]############## 1350 | # Terraform version color. 1351 | typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=4 1352 | # Custom icon. 1353 | # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' 1354 | 1355 | #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# 1356 | # Show aws only when the command you are typing invokes one of these tools. 1357 | # Tip: Remove the next line to always show aws. 1358 | typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' 1359 | 1360 | # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element 1361 | # in each pair defines a pattern against which the current AWS profile gets matched. 1362 | # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) 1363 | # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, 1364 | # you'll see this value in your prompt. The second element of each pair in 1365 | # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The 1366 | # first match wins. 1367 | # 1368 | # For example, given these settings: 1369 | # 1370 | # typeset -g POWERLEVEL9K_AWS_CLASSES=( 1371 | # '*prod*' PROD 1372 | # '*test*' TEST 1373 | # '*' DEFAULT) 1374 | # 1375 | # If your current AWS profile is "company_test", its class is TEST 1376 | # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. 1377 | # 1378 | # You can define different colors, icons and content expansions for different classes: 1379 | # 1380 | # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=2 1381 | # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' 1382 | # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' 1383 | typeset -g POWERLEVEL9K_AWS_CLASSES=( 1384 | # '*prod*' PROD # These values are examples that are unlikely 1385 | # '*test*' TEST # to match your needs. Customize them as needed. 1386 | '*' DEFAULT) 1387 | typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=3 1388 | # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' 1389 | 1390 | # AWS segment format. The following parameters are available within the expansion. 1391 | # 1392 | # - P9K_AWS_PROFILE The name of the current AWS profile. 1393 | # - P9K_AWS_REGION The region associated with the current AWS profile. 1394 | typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' 1395 | 1396 | #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# 1397 | # AWS Elastic Beanstalk environment color. 1398 | typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=2 1399 | # Custom icon. 1400 | # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' 1401 | 1402 | ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## 1403 | # Show azure only when the command you are typing invokes one of these tools. 1404 | # Tip: Remove the next line to always show azure. 1405 | typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' 1406 | 1407 | # POWERLEVEL9K_AZURE_CLASSES is an array with even number of elements. The first element 1408 | # in each pair defines a pattern against which the current azure account name gets matched. 1409 | # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) 1410 | # that gets matched. If you unset all POWERLEVEL9K_AZURE_*CONTENT_EXPANSION parameters, 1411 | # you'll see this value in your prompt. The second element of each pair in 1412 | # POWERLEVEL9K_AZURE_CLASSES defines the account class. Patterns are tried in order. The 1413 | # first match wins. 1414 | # 1415 | # For example, given these settings: 1416 | # 1417 | # typeset -g POWERLEVEL9K_AZURE_CLASSES=( 1418 | # '*prod*' PROD 1419 | # '*test*' TEST 1420 | # '*' OTHER) 1421 | # 1422 | # If your current azure account is "company_test", its class is TEST because "company_test" 1423 | # doesn't match the pattern '*prod*' but does match '*test*'. 1424 | # 1425 | # You can define different colors, icons and content expansions for different classes: 1426 | # 1427 | # typeset -g POWERLEVEL9K_AZURE_TEST_FOREGROUND=2 1428 | # typeset -g POWERLEVEL9K_AZURE_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' 1429 | # typeset -g POWERLEVEL9K_AZURE_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' 1430 | typeset -g POWERLEVEL9K_AZURE_CLASSES=( 1431 | # '*prod*' PROD # These values are examples that are unlikely 1432 | # '*test*' TEST # to match your needs. Customize them as needed. 1433 | '*' OTHER) 1434 | 1435 | # Azure account name color. 1436 | typeset -g POWERLEVEL9K_AZURE_OTHER_FOREGROUND=4 1437 | # Custom icon. 1438 | # typeset -g POWERLEVEL9K_AZURE_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' 1439 | 1440 | ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### 1441 | # Show gcloud only when the command you are typing invokes one of these tools. 1442 | # Tip: Remove the next line to always show gcloud. 1443 | typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' 1444 | # Google cloud color. 1445 | typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=4 1446 | 1447 | # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or 1448 | # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative 1449 | # enough. You can use the following parameters in the expansions. Each of them corresponds to the 1450 | # output of `gcloud` tool. 1451 | # 1452 | # Parameter | Source 1453 | # -------------------------|-------------------------------------------------------------------- 1454 | # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' 1455 | # P9K_GCLOUD_ACCOUNT | gcloud config get-value account 1456 | # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project 1457 | # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' 1458 | # 1459 | # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. 1460 | # 1461 | # Obtaining project name requires sending a request to Google servers. This can take a long time 1462 | # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud 1463 | # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets 1464 | # set and gcloud prompt segment transitions to state COMPLETE. 1465 | # 1466 | # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL 1467 | # and COMPLETE. You can also hide gcloud in state PARTIAL by setting 1468 | # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and 1469 | # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. 1470 | typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' 1471 | typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' 1472 | 1473 | # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name 1474 | # this often. Negative value disables periodic polling. In this mode project name is retrieved 1475 | # only when the current configuration, account or project id changes. 1476 | typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 1477 | 1478 | # Custom icon. 1479 | # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' 1480 | 1481 | #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# 1482 | # Show google_app_cred only when the command you are typing invokes one of these tools. 1483 | # Tip: Remove the next line to always show google_app_cred. 1484 | typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' 1485 | 1486 | # Google application credentials classes for the purpose of using different colors, icons and 1487 | # expansions with different credentials. 1488 | # 1489 | # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first 1490 | # element in each pair defines a pattern against which the current kubernetes context gets 1491 | # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion 1492 | # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION 1493 | # parameters, you'll see this value in your prompt. The second element of each pair in 1494 | # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. 1495 | # The first match wins. 1496 | # 1497 | # For example, given these settings: 1498 | # 1499 | # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( 1500 | # '*:*prod*:*' PROD 1501 | # '*:*test*:*' TEST 1502 | # '*' DEFAULT) 1503 | # 1504 | # If your current Google application credentials is "service_account deathray-testing x@y.com", 1505 | # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. 1506 | # 1507 | # You can define different colors, icons and content expansions for different classes: 1508 | # 1509 | # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=3 1510 | # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' 1511 | # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' 1512 | typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( 1513 | # '*:*prod*:*' PROD # These values are examples that are unlikely 1514 | # '*:*test*:*' TEST # to match your needs. Customize them as needed. 1515 | '*' DEFAULT) 1516 | typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=5 1517 | # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' 1518 | 1519 | # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by 1520 | # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: 1521 | # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. 1522 | # 1523 | # You can use the following parameters in the expansion. Each of them corresponds to one of the 1524 | # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. 1525 | # 1526 | # Parameter | JSON key file field 1527 | # ---------------------------------+--------------- 1528 | # P9K_GOOGLE_APP_CRED_TYPE | type 1529 | # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id 1530 | # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email 1531 | # 1532 | # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. 1533 | typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' 1534 | 1535 | ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### 1536 | # Toolbox color. 1537 | typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=3 1538 | # Don't display the name of the toolbox if it matches fedora-toolbox-*. 1539 | typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' 1540 | # Custom icon. 1541 | # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' 1542 | # Custom prefix. 1543 | # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%fin ' 1544 | 1545 | ###############################[ public_ip: public IP address ]############################### 1546 | # Public IP color. 1547 | typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=6 1548 | # Custom icon. 1549 | # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' 1550 | 1551 | ########################[ vpn_ip: virtual private network indicator ]######################### 1552 | # VPN IP color. 1553 | typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=3 1554 | # When on VPN, show just an icon without the IP address. 1555 | # Tip: To display the private IP address when on VPN, remove the next line. 1556 | typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= 1557 | # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN 1558 | # to see the name of the interface. 1559 | typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' 1560 | # If set to true, show one segment per matching network interface. If set to false, show only 1561 | # one segment corresponding to the first matching network interface. 1562 | # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. 1563 | typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false 1564 | # Custom icon. 1565 | # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' 1566 | 1567 | ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### 1568 | # IP color. 1569 | typeset -g POWERLEVEL9K_IP_FOREGROUND=4 1570 | # The following parameters are accessible within the expansion: 1571 | # 1572 | # Parameter | Meaning 1573 | # ----------------------+------------------------------------------- 1574 | # P9K_IP_IP | IP address 1575 | # P9K_IP_INTERFACE | network interface 1576 | # P9K_IP_RX_BYTES | total number of bytes received 1577 | # P9K_IP_TX_BYTES | total number of bytes sent 1578 | # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt 1579 | # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt 1580 | # P9K_IP_RX_RATE | receive rate (since last prompt) 1581 | # P9K_IP_TX_RATE | send rate (since last prompt) 1582 | typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='$P9K_IP_IP${P9K_IP_RX_RATE:+ %2F⇣$P9K_IP_RX_RATE}${P9K_IP_TX_RATE:+ %3F⇡$P9K_IP_TX_RATE}' 1583 | # Show information for the first network interface whose name matches this regular expression. 1584 | # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. 1585 | typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' 1586 | # Custom icon. 1587 | # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' 1588 | 1589 | #########################[ proxy: system-wide http/https/ftp proxy ]########################## 1590 | # Proxy color. 1591 | typeset -g POWERLEVEL9K_PROXY_FOREGROUND=2 1592 | # Custom icon. 1593 | # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' 1594 | 1595 | ################################[ battery: internal battery ]################################# 1596 | # Show battery in red when it's below this level and not connected to power supply. 1597 | typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 1598 | typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=1 1599 | # Show battery in green when it's charging or fully charged. 1600 | typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=2 1601 | # Show battery in yellow when it's discharging. 1602 | typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=3 1603 | # Battery pictograms going from low to high level of charge. 1604 | typeset -g POWERLEVEL9K_BATTERY_STAGES='\UF008E\UF007A\UF007B\UF007C\UF007D\UF007E\UF007F\UF0080\UF0081\UF0082\UF0079' 1605 | # Don't show the remaining time to charge/discharge. 1606 | typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false 1607 | 1608 | #####################################[ wifi: wifi speed ]##################################### 1609 | # WiFi color. 1610 | typeset -g POWERLEVEL9K_WIFI_FOREGROUND=4 1611 | # Custom icon. 1612 | # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' 1613 | 1614 | # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). 1615 | # 1616 | # # Wifi colors and icons for different signal strength levels (low to high). 1617 | # typeset -g my_wifi_fg=(4 4 4 4 4) # <-- change these values 1618 | # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values 1619 | # 1620 | # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' 1621 | # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' 1622 | # 1623 | # The following parameters are accessible within the expansions: 1624 | # 1625 | # Parameter | Meaning 1626 | # ----------------------+--------------- 1627 | # P9K_WIFI_SSID | service set identifier, a.k.a. network name 1628 | # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown 1629 | # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second 1630 | # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 1631 | # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 1632 | # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) 1633 | 1634 | ####################################[ time: current time ]#################################### 1635 | # Current time color. 1636 | typeset -g POWERLEVEL9K_TIME_FOREGROUND=6 1637 | # Format for the current time: 09:51:02. See `man 3 strftime`. 1638 | typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' 1639 | # If set to true, time will update when you hit enter. This way prompts for the past 1640 | # commands will contain the start times of their commands as opposed to the default 1641 | # behavior where they contain the end times of their preceding commands. 1642 | typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false 1643 | # Custom icon. 1644 | typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION= 1645 | # Custom prefix. 1646 | # typeset -g POWERLEVEL9K_TIME_PREFIX='%fat ' 1647 | 1648 | # Example of a user-defined prompt segment. Function prompt_example will be called on every 1649 | # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or 1650 | # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and green text greeting the user. 1651 | # 1652 | # Type `p10k help segment` for documentation and a more sophisticated example. 1653 | function prompt_example() { 1654 | p10k segment -f 2 -i '⭐' -t 'hello, %n' 1655 | } 1656 | 1657 | # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job 1658 | # is to generate the prompt segment for display in instant prompt. See 1659 | # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. 1660 | # 1661 | # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function 1662 | # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k 1663 | # will replay these calls without actually calling instant_prompt_*. It is imperative that 1664 | # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this 1665 | # rule is not observed, the content of instant prompt will be incorrect. 1666 | # 1667 | # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If 1668 | # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. 1669 | function instant_prompt_example() { 1670 | # Since prompt_example always makes the same `p10k segment` calls, we can call it from 1671 | # instant_prompt_example. This will give us the same `example` prompt segment in the instant 1672 | # and regular prompts. 1673 | prompt_example 1674 | } 1675 | 1676 | # User-defined prompt segments can be customized the same way as built-in segments. 1677 | # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 1678 | # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' 1679 | 1680 | # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt 1681 | # when accepting a command line. Supported values: 1682 | # 1683 | # - off: Don't change prompt when accepting a command line. 1684 | # - always: Trim down prompt when accepting a command line. 1685 | # - same-dir: Trim down prompt when accepting a command line unless this is the first command 1686 | # typed after changing current working directory. 1687 | typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always 1688 | 1689 | # Instant prompt mode. 1690 | # 1691 | # - off: Disable instant prompt. Choose this if you've tried instant prompt and found 1692 | # it incompatible with your zsh configuration files. 1693 | # - quiet: Enable instant prompt and don't print warnings when detecting console output 1694 | # during zsh initialization. Choose this if you've read and understood 1695 | # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. 1696 | # - verbose: Enable instant prompt and print a warning when detecting console output during 1697 | # zsh initialization. Choose this if you've never tried instant prompt, haven't 1698 | # seen the warning, or if you are unsure what this all means. 1699 | typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose 1700 | 1701 | # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. 1702 | # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload 1703 | # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you 1704 | # really need it. 1705 | typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true 1706 | 1707 | # If p10k is already loaded, reload configuration. 1708 | # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. 1709 | (( ! $+functions[p10k] )) || p10k reload 1710 | } 1711 | 1712 | # Tell `p10k configure` which file it should overwrite. 1713 | typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} 1714 | 1715 | (( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} 1716 | 'builtin' 'unset' 'p10k_config_opts' 1717 | -------------------------------------------------------------------------------- /.zprofile: -------------------------------------------------------------------------------- 1 | if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" -eq 1 ]; then 2 | exec Hyprland >/dev/null 2>&1 3 | fi 4 | -------------------------------------------------------------------------------- /.zshenv: -------------------------------------------------------------------------------- 1 | export PATH=/home/user0/.local/bin:$PATH 2 | export EDITOR='lvim' 3 | export TERM=alacritty 4 | -------------------------------------------------------------------------------- /.zshrc: -------------------------------------------------------------------------------- 1 | # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. 2 | # Initialization code that may require console input (password prompts, [y/n] 3 | # confirmations, etc.) must go above this block; everything else may go below. 4 | if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then 5 | source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" 6 | fi 7 | 8 | # If you come from bash you might have to change your $PATH. 9 | # export PATH=$HOME/bin:/usr/local/bin:$PATH 10 | 11 | # Path to your oh-my-zsh installation. 12 | export ZSH="$HOME/.oh-my-zsh" 13 | 14 | # Set name of the theme to load --- if set to "random", it will 15 | # load a random theme each time oh-my-zsh is loaded, in which case, 16 | # to know which specific one was loaded, run: echo $RANDOM_THEME 17 | # See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes 18 | ZSH_THEME="powerlevel10k/powerlevel10k" 19 | 20 | # Set list of themes to pick from when loading at random 21 | # Setting this variable when ZSH_THEME=random will cause zsh to load 22 | # a theme from this variable instead of looking in $ZSH/themes/ 23 | # If set to an empty array, this variable will have no effect. 24 | # ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) 25 | 26 | # Uncomment the following line to use case-sensitive completion. 27 | # CASE_SENSITIVE="true" 28 | 29 | # Uncomment the following line to use hyphen-insensitive completion. 30 | # Case-sensitive completion must be off. _ and - will be interchangeable. 31 | # HYPHEN_INSENSITIVE="true" 32 | 33 | # Uncomment one of the following lines to change the auto-update behavior 34 | # zstyle ':omz:update' mode disabled # disable automatic updates 35 | # zstyle ':omz:update' mode auto # update automatically without asking 36 | # zstyle ':omz:update' mode reminder # just remind me to update when it's time 37 | 38 | # Uncomment the following line to change how often to auto-update (in days). 39 | # zstyle ':omz:update' frequency 13 40 | 41 | # Uncomment the following line if pasting URLs and other text is messed up. 42 | # DISABLE_MAGIC_FUNCTIONS="true" 43 | 44 | # Uncomment the following line to disable colors in ls. 45 | # DISABLE_LS_COLORS="true" 46 | 47 | # Uncomment the following line to disable auto-setting terminal title. 48 | # DISABLE_AUTO_TITLE="true" 49 | 50 | # Uncomment the following line to enable command auto-correction. 51 | # ENABLE_CORRECTION="true" 52 | 53 | # Uncomment the following line to display red dots whilst waiting for completion. 54 | # You can also set it to another string to have that shown instead of the default red dots. 55 | # e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f" 56 | # Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) 57 | # COMPLETION_WAITING_DOTS="true" 58 | 59 | # Uncomment the following line if you want to disable marking untracked files 60 | # under VCS as dirty. This makes repository status check for large repositories 61 | # much, much faster. 62 | # DISABLE_UNTRACKED_FILES_DIRTY="true" 63 | 64 | # Uncomment the following line if you want to change the command execution time 65 | # stamp shown in the history command output. 66 | # You can set one of the optional three formats: 67 | # "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" 68 | # or set a custom format using the strftime function format specifications, 69 | # see 'man strftime' for details. 70 | # HIST_STAMPS="mm/dd/yyyy" 71 | 72 | # Would you like to use another custom folder than $ZSH/custom? 73 | # ZSH_CUSTOM=/path/to/new-custom-folder 74 | 75 | # Which plugins would you like to load? 76 | # Standard plugins can be found in $ZSH/plugins/ 77 | # Custom plugins may be added to $ZSH_CUSTOM/plugins/ 78 | # Example format: plugins=(rails git textmate ruby lighthouse) 79 | # Add wisely, as too many plugins slow down shell startup. 80 | plugins=(git) 81 | 82 | source $ZSH/oh-my-zsh.sh 83 | 84 | # User configuration 85 | 86 | # export MANPATH="/usr/local/man:$MANPATH" 87 | 88 | # You may need to manually set your language environment 89 | # export LANG=en_US.UTF-8 90 | 91 | # Preferred editor for local and remote sessions 92 | # if [[ -n $SSH_CONNECTION ]]; then 93 | # export EDITOR='vim' 94 | # else 95 | # export EDITOR='mvim' 96 | # fi 97 | 98 | # Compilation flags 99 | # export ARCHFLAGS="-arch x86_64" 100 | 101 | # Set personal aliases, overriding those provided by oh-my-zsh libs, 102 | # plugins, and themes. Aliases can be placed here, though oh-my-zsh 103 | # users are encouraged to define aliases within the ZSH_CUSTOM folder. 104 | # For a full list of active aliases, run `alias`. 105 | # 106 | # Example aliases 107 | # alias zshconfig="mate ~/.zshrc" 108 | # alias ohmyzsh="mate ~/.oh-my-zsh" 109 | 110 | # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. 111 | [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh 112 | 113 | # Aliases 114 | alias i="yay -S" 115 | alias r="yay -Rns" 116 | alias u="yay -Syu" 117 | alias s="yay -Ss" 118 | alias q="yay -Q" 119 | 120 | alias ls="exa -l" 121 | alias cat="bat --theme base16" 122 | alias grep="rg" 123 | alias find="fd" 124 | alias nvim="lvim" 125 | 126 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

My Hyprland Config

2 | 3 | ![Screenshot of setup](assets/screenshots/main.png) 4 | 5 | --- 6 | 7 | # Installation 8 | 9 | `bash install_dotfiles.sh` 10 | 11 | ## Overview 12 | 13 | [Hyprland](https://github.com/vaxerski/Hyprland) is a dynamic tiling Wayland compositor based on wlroots that doesn't sacrifice on its looks. 14 | 15 | - **Operating System**: `Arch Linux` 16 | - **Window Manager**: `Hyprland` 17 | - **Status Bar**: `Waybar` 18 | - **App Launcher**: `Wofi` 19 | - **Terminal**: `Alacritty` 20 | 21 | ## Appearance 22 | 23 | - GTK Theme: [Everforest GTK Theme](https://github.com/Fausto-Korpsvart/Everforest-GTK-Theme) 24 | - Fonts: [JetBrainsMono Nerd Font](https://github.com/ryanoasis/nerd-fonts/releases/download/v3.0.2/JetBrainsMono.zip) 25 | 26 | ## Plain Desktop 27 | 28 | ![hypr](assets/screenshots/plain.png) 29 | -------------------------------------------------------------------------------- /assets/screenshots/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sane1090x/dotfiles/d25d34bd07daa1eacea0d91fa7db5766238bc499/assets/screenshots/main.png -------------------------------------------------------------------------------- /assets/screenshots/plain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sane1090x/dotfiles/d25d34bd07daa1eacea0d91fa7db5766238bc499/assets/screenshots/plain.png -------------------------------------------------------------------------------- /gruvbox_bg_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sane1090x/dotfiles/d25d34bd07daa1eacea0d91fa7db5766238bc499/gruvbox_bg_17.jpg -------------------------------------------------------------------------------- /install_dotfiles.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ### date written: 14-11-2023 4 | 5 | # colors 6 | col_reset='\033[0m' 7 | 8 | # bold 9 | b_red='\033[1;31m' 10 | b_yellow='\033[1;33m' 11 | b_blue='\033[1;34m' 12 | 13 | # config vars 14 | zshrc="$HOME/.zshrc" 15 | zshenv="$HOME/.zshenv" 16 | zprofile="$HOME/.zprofile" 17 | p10kzsh="$HOME/.p10k.zsh" 18 | config_dir="$HOME/.config" 19 | 20 | if command -v git &>/dev/null; then 21 | echo "git exists" &>/dev/null 22 | else 23 | echo "${b_red}Install git!${col_reset}" 24 | fi 25 | 26 | install_dotfiles() { 27 | echo 28 | echo -e "${b_blue}Cloning repositories...${col_reset}" 29 | echo 30 | 31 | sleep 0.5 32 | 33 | if [[ -d "/tmp/dotfiles" ]]; then 34 | cd /tmp/dotfiles || exit 35 | else 36 | git clone --depth 1 --quiet https://github.com/sane1090x/dotfiles /tmp/dotfiles 37 | cd /tmp/dotfiles || exit 38 | fi 39 | 40 | # if these files exist, ask the user for permission to overwrite 41 | if [ -e "$zshrc" ] && [ -e "$zshenv" ] && [ -e "$zprofile" ] && [ -e "$p10kzsh" ]; then 42 | echo -en "${b_yellow}Conflicts found! Overwrite one or more files '.zshrc .zshenv .zprofile .p10k.zsh'? [y/N] ${col_reset}" 43 | read -r res 44 | echo 45 | 46 | if [[ $res =~ ^[Yy]$ ]]; then 47 | cp -f .zshrc .zshenv .zprofile .p10k.zsh "$HOME" || { 48 | echo 49 | echo -e "${b_red}Error copying files.${col_reset}" 50 | return 2 51 | } 52 | else 53 | echo -e "${b_red}Aborting!${col_reset}" 54 | fi 55 | fi 56 | 57 | # check if the last command left an empty line in the prompt 58 | if [[ -z "$PROMPT_EOL" ]]; then 59 | echo -en "${b_yellow}Overwrite one or more directories 'alacritty cava fontconfig hypr lvim spicetify waybar'? [y/N] ${col_reset}" 60 | read -r res2 61 | else 62 | echo -en "${b_yellow}Overwrite one or more directories 'alacritty cava fontconfig hypr lvim spicetify waybar'? [y/N] ${col_reset}" 63 | read -r res2 64 | echo 65 | fi 66 | 67 | # overwrite the dirs with permission 68 | if [[ "$res2" =~ ^[Yy]$ ]]; then 69 | cp -rf .config/* "$config_dir" || { 70 | echo 71 | echo -e "${b_red}Error copying files.${col_reset}" 72 | return 2 73 | } 74 | else 75 | echo -e "${b_red}Aborting!${col_reset}" 76 | fi 77 | } 78 | 79 | main() { 80 | # script interruption and termination 81 | exit_on_signal_SIGINT() { 82 | 83 | # check if the last command left an empty line in the prompt 84 | if [[ -z "$PROMPT_EOL" ]]; then 85 | { 86 | printf "${b_red}\n\n%s\n${col_reset}" "Script interrupted." 2>&1 87 | } 88 | fi 89 | 90 | exit 0 91 | } 92 | 93 | exit_on_signal_SIGTERM() { 94 | 95 | # check if the last command left an empty line in the prompt 96 | if [[ -z "$PROMPT_EOL" ]]; then 97 | { 98 | printf "${b_red}\n\n%s\n${col_reset}" "Script terminated." 2>&1 99 | } 100 | fi 101 | 102 | exit 0 103 | } 104 | 105 | trap exit_on_signal_SIGINT SIGINT 106 | trap exit_on_signal_SIGTERM SIGTERM 107 | 108 | echo 109 | echo -en "${b_blue}This script is tested only on Arch Linux; it might fail on other systems. Do you want to continue? [y/N] ${col_reset}" 110 | read -r start_confirmation 111 | 112 | if [[ ! $start_confirmation =~ ^[Yy]$ ]]; then 113 | echo -e "${b_red}Installation aborted.${col_reset}" 114 | exit 0 115 | fi 116 | 117 | install_dotfiles 118 | } 119 | 120 | main 121 | --------------------------------------------------------------------------------