hyprland updates; nvim updates; misc updates

This commit is contained in:
Johannes Knopp
2026-01-06 01:45:44 +01:00
parent 7c918c3c17
commit 4093701fca
14 changed files with 246 additions and 56 deletions

View File

@ -14,6 +14,12 @@ set incsearch
set hlsearch set hlsearch
set scrolloff=10 set scrolloff=10
let mapleader = " "
let maplocalleader = " "
" Binds " Binds
nnoremap gr :action ShowUsages<CR> nnoremap gr :action ShowUsages<CR>
inoremap <C-e> <Esc>i
nnoremap <C-w>m :action MoveEditorToOppositeTabGroup<CR>
nnoremap <leader>m :action MoveEditorToOppositeTabGroup<CR>

View File

@ -1,2 +1,2 @@
[local] [local]
localhost ansible_connection=local ansible_user=johannes localhost ansible_connection=local ansible_user=johannes ansible_python_interpreter=/usr/sbin/python

View File

@ -23,12 +23,13 @@ $menu = wofi --show drun
# Autostart necessary processes (like notifications daemons, status bars, etc.) # Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this: # Or execute your favorite apps at launch like this:
exec-once = waybar # exec-once = waybar
exec-once = /usr/lib//hhyprpolkitagent/hyprpolkitagent
exec-once = hyprpanel exec-once = hyprpanel
exec-once = dunst exec-once = dunst
exec-once = firefox exec-once = firefox
exec-once = hyprpaper exec-once = hyprpaper
exec-once = [workspace 9 silent] spotify exec-once = [workspace 9 silent] deezer-desktop
# gnome keyring secret service # gnome keyring secret service
exec-once = dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE exec-once = dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE
@ -136,14 +137,14 @@ decoration {
} }
# wofi # wofi
layerrule = blur, wofi # apply compositor blur # layerrule = blur, wofi # apply compositor blur
layerrule = ignorezero, wofi # keep blur even on near-opaque colors # layerrule = ignorezero, wofi # keep blur even on near-opaque colors
layerrule = dimaround, wofi # optional: dim background behind wofi # layerrule = dimaround, wofi # optional: dim background behind wofi
layerrule = ignorealpha 0.90, wofi # target overall opacity for the layer # layerrule = ignorealpha 0.90, wofi # target overall opacity for the layer
#
# waybar # # waybar
layerrule = blur, waybar # layerrule = blur, waybar
layerrule = ignorealpha 0.15, waybar # layerrule = ignorealpha 0.15, waybar
# https://wiki.hypr.land/Configuring/Variables/#animations # https://wiki.hypr.land/Configuring/Variables/#animations
animations { animations {
@ -210,18 +211,18 @@ misc {
# https://wiki.hypr.land/Configuring/Variables/#input # https://wiki.hypr.land/Configuring/Variables/#input
input { input {
kb_layout = us kb_layout = us,de
kb_variant = altgr-intl kb_variant = altgr-intl
kb_model = kb_model =
kb_options = # kb_options = grp:caps_toggle
kb_rules = kb_rules =
follow_mouse = 2 follow_mouse = 2
sensitivity = 0 # -1.0 - 1.0, 0 means no modification. sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
scroll_method = on_button_down # scroll_method = on_button_down
scroll_button = 274 # scroll_button = 274
} }
# Example per-device config # Example per-device config
@ -282,12 +283,12 @@ bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
# Requires playerctl # Requires playerctl
# Spotify controls # Deezer controls
bind = CTRL ALT, K, exec, playerctl --player=spotify play-pause bind = CTRL ALT, K, exec, playerctl --player=deezer play-pause
bind = CTRL ALT, Left, exec, playerctl --player=spotify previous bind = CTRL ALT, Left, exec, playerctl --player=deezer previous
bind = CTRL ALT, Right, exec, playerctl --player=spotify next bind = CTRL ALT, Right, exec, playerctl --player=deezer next
bind = CTRL ALT, Up, exec, playerctl --player=spotify volume 0.05+ bind = CTRL ALT, Up, exec, ~/.config/hypr/scripts/deezer-volume.sh +5%
bind = CTRL ALT, Down, exec, playerctl --player=spotify volume 0.05- bind = CTRL ALT, Down, exec, ~/.config/hypr/scripts/deezer-volume.sh -5%
bind = ,F7,pass,class:^(discord)$ bind = ,F7,pass,class:^(discord)$
bind = ,F8,pass,class:^(discord)$ bind = ,F8,pass,class:^(discord)$
@ -305,18 +306,47 @@ bind = , Print, exec, hyprshot -zm region
# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules # See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules
# Ignore maximize requests from apps. You'll probably like this. # Ignore maximize requests from apps. You'll probably like this.
windowrule = suppressevent maximize, class:.* windowrule {
name = suppress-maximize-events
match:class = .*
suppress_event = maximize
}
# Fix some dragging issues with XWayland # Fix some dragging issues with XWayland
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 windowrule {
name = fix-xwayland-drags
match:class = ^$
match:title = ^$
match:xwayland = true
match:float = true
match:fullscreen = false
match:pin = false
windowrulev2 = tag +jb, class:^jetbrains-.+$,floating:1 no_focus = true
windowrulev2 = stayfocused, tag:jb }
windowrulev2 = noinitialfocus, tag:jb
# 1) Do not allow these windows to inhibit Hyprland shortcuts windowrule {
windowrulev2 = noshortcutsinhibit, class:^(jetbrains-.*|android-studio)$ name = jetbrains-shortcuts
match:class = ^(jetbrains-.*|android-studio)$
no_shortcuts_inhibit = 1
}
windowrule {
name = jetbrains-tile
match:class = ^(jetbrains-.*|android-studio)$
float = 0
}
windowrule {
name = jetbrains-tab-drag
match:class = ^(jetbrains-.*|android-studio)$
match:title = ^(\s*)$
no_initial_focus = 1
stay_focused = 1
float = 1
center = 1
}
# 2) Float and center transient dialogs from these apps
windowrulev2 = float, class:^(jetbrains-.*|android-studio)$, windowtype:^(dialog|utility|popup)$
windowrulev2 = center, class:^(jetbrains-.*|android-studio)$, windowtype:^(dialog|utility|popup)$

View File

@ -1,7 +1,24 @@
preload = /home/johannes/Pictures/Wallpapers/wallhaven-5g22q5.png preload = /home/johannes/Pictures/Wallpapers/wallhaven-5g22q5.png
wallpaper = DP-1,/home/johannes/Pictures/Wallpapers/wallhaven-5g22q5.png wallpaper {
wallpaper = DP-2,/home/johannes/Pictures/Wallpapers/wallhaven-5g22q5.png monitor = DP-1
wallpaper = HDMI-A-2,/home/johannes/Pictures/Wallpapers/wallhaven-5g22q5.png path =/home/johannes/Pictures/Wallpapers/wallhaven-5g22q5.png
# fitmode = cover
}
wallpaper {
monitor = DP-2
path =/home/johannes/Pictures/Wallpapers/wallhaven-5g22q5.png
# fitmode = cover
}
wallpaper {
monitor = HDMI-A-1
path =/home/johannes/Pictures/Wallpapers/wallhaven-5g22q5.png
# fitmode = cover
}
wallpaper {
monitor = HDMI-A-2
path =/home/johannes/Pictures/Wallpapers/wallhaven-5g22q5.png
# fitmode = cover
}
splash = false splash = false

View File

@ -1,4 +1,4 @@
# Generated by nwg-displays on 2025-11-09 at 17:18:32. Do not edit manually. # Generated by nwg-displays on 2025-12-26 at 06:40:37. Do not edit manually.
monitor=DP-1,2560x1440@165.0,6626x876,1.0 monitor=DP-1,2560x1440@165.0,6626x876,1.0
monitor=DP-2,2560x1440@165.0,4066x876,1.0 monitor=DP-2,2560x1440@165.0,4066x876,1.0

View File

@ -0,0 +1,77 @@
#!/usr/bin/env bash
change="$1"
if [ -z "$change" ]; then
echo "Usage: $0 [+5%|-5%|50%]"
exit 1
fi
echo "=== Deezer Volume Debug (FIXED) ==="
# 1) Deezer window PID
root_pid=$(hyprctl clients -j | jq -r '.[] | select(.class == "deezer-desktop") | .pid' | head -n1)
echo "[INFO] Deezer window PID: $root_pid"
if [ -z "$root_pid" ] || [ "$root_pid" = "null" ]; then
echo "[ERROR] Deezer window not found."
exit 1
fi
# 2) Gather ALL descendant PIDs
declare -a pid_array
pid_array+=("$root_pid")
# Direct children
children=($(pgrep -P "$root_pid"))
echo "[INFO] Children: ${children[*]}"
for c in "${children[@]}"; do
pid_array+=("$c")
gc=($(pgrep -P "$c"))
echo "[INFO] Grandchildren of $c: ${gc[*]}"
for g in "${gc[@]}"; do
pid_array+=("$g")
done
done
echo "[INFO] All collected PIDs: ${pid_array[*]}"
echo "----------------------------------"
echo "[INFO] Checking sink inputs..."
echo "----------------------------------"
sink=""
while IFS= read -r block; do
pid=$(echo "$block" | jq -r '.properties["application.process.id"] // empty')
index=$(echo "$block" | jq -r '.index')
echo "[SINK] index=$index pid=$pid"
[ -z "$pid" ] && { echo " -> Skipping"; continue; }
for candidate in "${pid_array[@]}"; do
if [ "$pid" = "$candidate" ]; then
echo " -> MATCH with PID $candidate"
sink="$index"
break 2
fi
done
echo " -> No match"
done < <(pactl -f json list sink-inputs | jq -c '.[]')
echo "----------------------------------"
if [ -z "$sink" ]; then
echo "[ERROR] No audio stream found for Deezer."
exit 1
fi
echo "[INFO] Deezer sink index: $sink"
echo "[INFO] Applying: $change"
pactl set-sink-input-volume "$sink" "$change"

View File

@ -0,0 +1,45 @@
{
"bar.customModules.storage.paths": [
"/"
],
"menus.power.showLabel": false,
"theme.font.size": "1rem",
"theme.font.weight": 500,
"scalingPriority": "gdk",
"menus.power.lowBatteryNotification": false,
"bar.customModules.worldclock.tz": [
"Europe/Vienna"
],
"theme.bar.buttons.modules.power.enableBorder": false,
"menus.dashboard.powermenu.avatar.image": "/home/johannes/Pictures/Wallpapers/wallhaven-852q62.png",
"menus.dashboard.shortcuts.left.shortcut1.tooltip": "Firefox",
"menus.dashboard.shortcuts.left.shortcut1.command": "firefox",
"menus.dashboard.shortcuts.left.shortcut1.icon": "",
"menus.clock.time.military": true,
"menus.clock.weather.location": "Vienna",
"menus.clock.weather.unit": "metric",
"menus.volume.raiseMaximumVolume": true,
"theme.bar.floating": true,
"bar.autoHide": "never",
"theme.bar.buttons.enableBorders": true,
"theme.bar.border.width": "0.1em",
"bar.workspaces.show_icons": false,
"bar.workspaces.show_numbered": false,
"bar.workspaces.workspaceMask": false,
"bar.workspaces.showWsIcons": true,
"bar.workspaces.showApplicationIcons": true,
"bar.workspaces.showAllActive": true,
"bar.workspaces.numbered_active_indicator": "highlight",
"theme.bar.buttons.workspaces.smartHighlight": true,
"theme.bar.buttons.windowtitle.enableBorder": false,
"bar.windowtitle.custom_title": true,
"bar.windowtitle.class_name": true,
"theme.bar.buttons.clock.enableBorder": false,
"bar.clock.format": "%a %b %d %H:%M:%S",
"theme.bar.menus.menu.battery.scaling": 100,
"theme.bar.buttons.battery.visible": false,
"bar.battery.label": false,
"bar.battery.hideLabelWhenFull": true,
"theme.bar.buttons.battery.enableBorder": false,
"theme.osd.enable": true
}

View File

@ -0,0 +1 @@
{}

View File

@ -27,3 +27,9 @@
state: link state: link
force: true force: true
- name: Symlink hyprpanel
file:
src: "{{ role_path }}/files/hyprpanel"
dest: "{{ config_dir }}/hyprpanel"
state: link
force: true

View File

@ -1,41 +1,40 @@
{ {
"LuaSnip": { "branch": "master", "commit": "458560534a73f7f8d7a11a146c801db00b081df0" }, "LuaSnip": { "branch": "master", "commit": "458560534a73f7f8d7a11a146c801db00b081df0" },
"alpha-nvim": { "branch": "main", "commit": "3979b01cb05734331c7873049001d3f2bb8477f4" }, "alpha-nvim": { "branch": "main", "commit": "3979b01cb05734331c7873049001d3f2bb8477f4" },
"auto-session": { "branch": "main", "commit": "4cd20bb5c0138d1ce00ab35f8d7ac0f4fb4a403a" }, "auto-session": { "branch": "main", "commit": "292492ab7af4bd8b9e37e28508bc8ce995722fd5" },
"bufdelete.nvim": { "branch": "master", "commit": "f6bcea78afb3060b198125256f897040538bcb81" }, "bufdelete.nvim": { "branch": "master", "commit": "f6bcea78afb3060b198125256f897040538bcb81" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" }, "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
"cmp-nvim-lsp": { "branch": "main", "commit": "bd5a7d6db125d4654b50eeae9f5217f24bb22fd3" }, "cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" },
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" }, "cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
"dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" }, "dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" },
"flutter-tools.nvim": { "branch": "main", "commit": "69db9cdac65ce536e20a8fc9a83002f007cc049c" }, "flutter-tools.nvim": { "branch": "main", "commit": "293dfc78162ab185bca5f81bb32155dcf45114bf" },
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
"lazygit.nvim": { "branch": "main", "commit": "2305deed25bc61b866d5d39189e9105a45cf1cfb" }, "lazygit.nvim": { "branch": "main", "commit": "a04ad0dbc725134edbee3a5eea29290976695357" },
"lspkind.nvim": { "branch": "master", "commit": "3ddd1b4edefa425fda5a9f95a4f25578727c0bb3" }, "lspkind.nvim": { "branch": "master", "commit": "3ddd1b4edefa425fda5a9f95a4f25578727c0bb3" },
"lualine.nvim": { "branch": "master", "commit": "3946f0122255bc377d14a59b27b609fb3ab25768" }, "lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" }, "mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" },
"mason-tool-installer.nvim": { "branch": "main", "commit": "517ef5994ef9d6b738322664d5fdd948f0fdeb46" }, "mason-tool-installer.nvim": { "branch": "main", "commit": "517ef5994ef9d6b738322664d5fdd948f0fdeb46" },
"mason.nvim": { "branch": "main", "commit": "4da89f3ab04783da990f9bd40aaa36c22e59375b" }, "mason.nvim": { "branch": "main", "commit": "4da89f3ab04783da990f9bd40aaa36c22e59375b" },
"monokai-nightasty.nvim": { "branch": "main", "commit": "91b0798334534394d77b0b6e6089fe0655b241b3" }, "monokai-nightasty.nvim": { "branch": "main", "commit": "8be5e1c6e1d59873505e81b161e923264dfa5c1a" },
"neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" }, "neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" },
"none-ls-extras.nvim": { "branch": "main", "commit": "402c6b5c29f0ab57fac924b863709f37f55dc298" }, "none-ls-extras.nvim": { "branch": "main", "commit": "03955d165621300965a6d685c8f399ec7efd5785" },
"none-ls.nvim": { "branch": "main", "commit": "a96172f673f720cd4f3572e1fcd08400ed3eb25d" }, "none-ls.nvim": { "branch": "main", "commit": "0b457958cb958c16850b5a1fb38bbcd982909181" },
"nvim-autopairs": { "branch": "master", "commit": "7a2c97cccd60abc559344042fefb1d5a85b3e33b" }, "nvim-autopairs": { "branch": "master", "commit": "c2a0dd0d931d0fb07665e1fedb1ea688da3b80b4" },
"nvim-cmp": { "branch": "main", "commit": "a7bcf1d88069fc67c9ace8a62ba480b8fe879025" }, "nvim-cmp": { "branch": "main", "commit": "85bbfad83f804f11688d1ab9486b459e699292d6" },
"nvim-lsp-file-operations": { "branch": "master", "commit": "9744b738183a5adca0f916527922078a965515ed" }, "nvim-lsp-file-operations": { "branch": "master", "commit": "9744b738183a5adca0f916527922078a965515ed" },
"nvim-lspconfig": { "branch": "master", "commit": "87d30189b24caa496b54affd65594a309ac6d929" }, "nvim-lspconfig": { "branch": "master", "commit": "ac04ec3c2af08e9821b4eb64ede86072b9b213bf" },
"nvim-surround": { "branch": "main", "commit": "fcfa7e02323d57bfacc3a141f8a74498e1522064" }, "nvim-surround": { "branch": "main", "commit": "1098d7b3c34adcfa7feb3289ee434529abd4afd1" },
"nvim-tree.lua": { "branch": "master", "commit": "64e2192f5250796aa4a7f33c6ad888515af50640" }, "nvim-tree.lua": { "branch": "master", "commit": "b8b44b6a2494d086a9177251a119f9daec6cace8" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" }, "nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" },
"nvim-web-devicons": { "branch": "master", "commit": "8dcb311b0c92d460fac00eac706abd43d94d68af" }, "nvim-web-devicons": { "branch": "master", "commit": "6788013bb9cb784e606ada44206b0e755e4323d7" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "6fea601bd2b694c6f2ae08a6c6fab14930c60e2c" },
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, "telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
"todo-comments.nvim": { "branch": "main", "commit": "411503d3bedeff88484de572f2509c248e499b38" }, "todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
"venv-selector.nvim": { "branch": "regexp", "commit": "d2326e7433fdeb10f7d0d1237c18b91b353f9f8b" }, "vim-floaterm": { "branch": "master", "commit": "a11b930f55324e9b05e2ef16511fe713f1b456a7" },
"vim-floaterm": { "branch": "master", "commit": "a720490bd9dc02c5492e800aa08d4802f22b01f8" },
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" } "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
} }

View File

@ -92,6 +92,15 @@ return {
} }
}) })
end, end,
['hyprls'] = function ()
lspconfig.hyprls.setup({
capabilities = capabilities,
cmd = { "hyprls" },
root_dir = function(fname)
return vim.fn.getcwd()
end,
})
end,
-- ['pyright'] = function() -- ['pyright'] = function()
-- lspconfig['pyright'].setup({ -- lspconfig['pyright'].setup({
-- -- cmd = { "pyright-langserver", "--stdio" }, -- -- cmd = { "pyright-langserver", "--stdio" },

View File

@ -2,7 +2,7 @@
- name: Update package cache (Arch-based systems) - name: Update package cache (Arch-based systems)
pacman: pacman:
update_cache: yes update_cache: yes
when: ansible_os_family == "Archlinux" when: ansible_facts.os_family == "Archlinux"
become: yes become: yes
- name: Install system packages - name: Install system packages

View File

@ -8,7 +8,7 @@
shell: | shell: |
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" --unattended sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" --unattended
args: args:
creates: "{{ ansible_env.HOME }}/.oh-my-zsh" creates: "{{ ansible_facts.env.HOME }}/.oh-my-zsh"
- name: Check for custom zshrc - name: Check for custom zshrc
stat: stat:
@ -18,7 +18,7 @@
- name: Symlink custom zshrc - name: Symlink custom zshrc
file: file:
src: "{{ role_path }}/files/.zshrc" src: "{{ role_path }}/files/.zshrc"
dest: "{{ ansible_env.HOME }}/.zshrc" dest: "{{ ansible_facts.env.HOME }}/.zshrc"
state: link state: link
force: yes force: yes
when: custom_zshrc.stat.exists when: custom_zshrc.stat.exists