Compare

75b0bef3a2d27c76ae5f5c6705a597e5530cf05amain · 142 commits

merge base 75b0bef3a2d2…

Changed files

FileChanges
.gitignore +1 −0 raw
.gitmodules +3 −0 raw
README.md +21 −1 raw
RyanThinkpad.scm +9 −3 raw
RyanTower.scm +39 −0 raw
SmallLaptop.scm +30 −0 raw
channels.scm +4 −4 raw
deploy.sh +1 −1 raw
home-config/aerc/accounts.conf +0 −21 raw
home-config/aerc/aerc.conf +0 −568 raw
home-config/aerc/binds.conf +0 −144 raw
home-config/aerc/signature_personal +0 −3 raw
home-config/aerc/signature_rit_personal +0 −5 raw
home-config/aerc/templates/quoted_reply +0 −5 raw
home-config/alacritty/alacritty.yml +0 −15 raw
home-config/bash_profile +3 −6 raw
home-config/bashrc +13 −1 raw
home-config/docker/cli-plugins/docker-compose binary raw
home-config/fish/completions/fisher.fish +7 −0 raw
home-config/fish/completions/fzf_configure_bindings.fish +8 −0 raw
home-config/fish/completions/tide.fish +13 −0 raw
home-config/fish/conf.d/_tide_init.fish +44 −0 raw
home-config/fish/conf.d/fzf.fish +28 −0 raw
home-config/fish/conf.d/nix-env.fish +138 −0 raw
home-config/fish/config.fish +43 −0 raw
home-config/fish/functions/_fzf_configure_bindings_help.fish +43 −0 raw
home-config/fish/functions/_fzf_extract_var_info.fish +15 −0 raw
home-config/fish/functions/_fzf_preview_changed_file.fish +49 −0 raw
home-config/fish/functions/_fzf_preview_file.fish +43 −0 raw
home-config/fish/functions/_fzf_report_diff_type.fish +18 −0 raw
home-config/fish/functions/_fzf_report_file_type.fish +6 −0 raw
home-config/fish/functions/_fzf_search_directory.fish +33 −0 raw
home-config/fish/functions/_fzf_search_git_log.fish +36 −0 raw
home-config/fish/functions/_fzf_search_git_status.fish +41 −0 raw
home-config/fish/functions/_fzf_search_history.fish +39 −0 raw
home-config/fish/functions/_fzf_search_processes.fish +32 −0 raw
home-config/fish/functions/_fzf_search_variables.fish +47 −0 raw
home-config/fish/functions/_fzf_wrapper.fish +20 −0 raw
home-config/fish/functions/_tide_1_line_prompt.fish +19 −0 raw
home-config/fish/functions/_tide_2_line_prompt.fish +31 −0 raw
home-config/fish/functions/_tide_cache_variables.fish +17 −0 raw
home-config/fish/functions/_tide_detect_os.fish +77 −0 raw
home-config/fish/functions/_tide_find_and_remove.fish +3 −0 raw
home-config/fish/functions/_tide_fish_colorize.fish +7 −0 raw
home-config/fish/functions/_tide_item_aws.fish +11 −0 raw
home-config/fish/functions/_tide_item_character.fish +17 −0 raw
home-config/fish/functions/_tide_item_cmd_duration.fish +12 −0 raw
home-config/fish/functions/_tide_item_context.fish +14 −0 raw
home-config/fish/functions/_tide_item_crystal.fish +6 −0 raw
home-config/fish/functions/_tide_item_direnv.fish +7 −0 raw
home-config/fish/functions/_tide_item_distrobox.fish +4 −0 raw
home-config/fish/functions/_tide_item_docker.fish +5 −0 raw
home-config/fish/functions/_tide_item_elixir.fish +4 −0 raw
home-config/fish/functions/_tide_item_gcloud.fish +8 −0 raw
home-config/fish/functions/_tide_item_git.fish +72 −0 raw
home-config/fish/functions/_tide_item_go.fish +6 −0 raw
home-config/fish/functions/_tide_item_java.fish +6 −0 raw
home-config/fish/functions/_tide_item_jobs.fish +7 −0 raw
home-config/fish/functions/_tide_item_kubectl.fish +4 −0 raw
home-config/fish/functions/_tide_item_nix_shell.fish +3 −0 raw
home-config/fish/functions/_tide_item_node.fish +6 −0 raw
home-config/fish/functions/_tide_item_os.fish +3 −0 raw
home-config/fish/functions/_tide_item_php.fish +6 −0 raw
home-config/fish/functions/_tide_item_private_mode.fish +3 −0 raw
home-config/fish/functions/_tide_item_pulumi.fish +19 −0 raw
home-config/fish/functions/_tide_item_python.fish +27 −0 raw
home-config/fish/functions/_tide_item_ruby.fish +6 −0 raw
home-config/fish/functions/_tide_item_rustc.fish +6 −0 raw
home-config/fish/functions/_tide_item_shlvl.fish +4 −0 raw
home-config/fish/functions/_tide_item_status.fish +15 −0 raw
home-config/fish/functions/_tide_item_terraform.fish +5 −0 raw
home-config/fish/functions/_tide_item_time.fish +3 −0 raw
home-config/fish/functions/_tide_item_toolbox.fish +4 −0 raw
home-config/fish/functions/_tide_item_vi_mode.fish +16 −0 raw
home-config/fish/functions/_tide_item_zig.fish +6 −0 raw
home-config/fish/functions/_tide_parent_dirs.fish +7 −0 raw
home-config/fish/functions/_tide_print_item.fish +22 −0 raw
home-config/fish/functions/_tide_pwd.fish +42 −0 raw
home-config/fish/functions/_tide_remove_unusable_items.fish +25 −0 raw
home-config/fish/functions/_tide_sub_bug-report.fish +73 −0 raw
home-config/fish/functions/_tide_sub_configure.fish +156 −0 raw
home-config/fish/functions/_tide_sub_reload.fish +3 −0 raw
home-config/fish/functions/fenv.fish +36 −0 raw
home-config/fish/functions/fenv.main.fish +39 −0 raw
home-config/fish/functions/fish_mode_prompt.fish +1 −0 raw
home-config/fish/functions/fish_prompt.fish +171 −0 raw
home-config/fish/functions/fisher.fish +240 −0 raw
home-config/fish/functions/fzf_configure_bindings.fish +46 −0 raw
home-config/fish/functions/tide.fish +28 −0 raw
home-config/fish/functions/tide/configure/choices/all/finish.fish +46 −0 raw
home-config/fish/functions/tide/configure/choices/all/icons.fish +33 −0 raw
home-config/fish/functions/tide/configure/choices/all/prompt_colors.fish +26 −0 raw
home-config/fish/functions/tide/configure/choices/all/prompt_connection.fish +31 −0 raw
home-config/fish/functions/tide/configure/choices/all/prompt_connection_andor_frame_color.fish +40 −0 raw
home-config/fish/functions/tide/configure/choices/all/prompt_spacing.fish +22 −0 raw
home-config/fish/functions/tide/configure/choices/all/show_time.fish +33 −0 raw
home-config/fish/functions/tide/configure/choices/all/style.fish +36 −0 raw
home-config/fish/functions/tide/configure/choices/all/transient.fish +22 −0 raw
home-config/fish/functions/tide/configure/choices/classic/classic_prompt_color.fish +38 −0 raw
home-config/fish/functions/tide/configure/choices/classic/classic_prompt_separators.fish +40 −0 raw
home-config/fish/functions/tide/configure/choices/lean/lean_prompt_height.fish +26 −0 raw
home-config/fish/functions/tide/configure/choices/powerline/powerline_prompt_heads.fish +32 −0 raw
home-config/fish/functions/tide/configure/choices/powerline/powerline_prompt_style.fish +51 −0 raw
home-config/fish/functions/tide/configure/choices/powerline/powerline_prompt_tails.fish +40 −0 raw
home-config/fish/functions/tide/configure/choices/powerline/powerline_right_prompt_frame.fish +20 −0 raw
home-config/fish/functions/tide/configure/choices/rainbow/rainbow_prompt_separators.fish +40 −0 raw
home-config/fish/functions/tide/configure/configs/classic.fish +116 −0 raw
home-config/fish/functions/tide/configure/configs/classic_16color.fish +89 −0 raw
home-config/fish/functions/tide/configure/configs/lean.fish +116 −0 raw
home-config/fish/functions/tide/configure/configs/lean_16color.fish +89 −0 raw
home-config/fish/functions/tide/configure/configs/rainbow.fish +116 −0 raw
home-config/fish/functions/tide/configure/configs/rainbow_16color.fish +93 −0 raw
home-config/fish/functions/tide/configure/functions/_fake_tide_cache_variables.fish +41 −0 raw
home-config/fish/functions/tide/configure/functions/_fake_tide_item_character.fish +8 −0 raw
home-config/fish/functions/tide/configure/functions/_fake_tide_item_cmd_duration.fish +3 −0 raw
home-config/fish/functions/tide/configure/functions/_fake_tide_item_git.fish +3 −0 raw
home-config/fish/functions/tide/configure/functions/_fake_tide_item_newline.fish +5 −0 raw
home-config/fish/functions/tide/configure/functions/_fake_tide_item_os.fish +3 −0 raw
home-config/fish/functions/tide/configure/functions/_fake_tide_item_time.fish +3 −0 raw
home-config/fish/functions/tide/configure/functions/_fake_tide_print_item.fish +22 −0 raw
home-config/fish/functions/tide/configure/functions/_fake_tide_prompt.fish +42 −0 raw
home-config/fish/functions/tide/configure/functions/_fake_tide_pwd.fish +11 −0 raw
home-config/fish/functions/tide/configure/icons.fish +40 −0 raw
home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Bold.ttf binary raw
home-config/fonts/AnonymicePro/AnonymiceProNerdFont-BoldItalic.ttf binary raw
home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Italic.ttf binary raw
home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Regular.ttf binary raw
home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Bold.ttf binary raw
home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-BoldItalic.ttf binary raw
home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Italic.ttf binary raw
home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Regular.ttf binary raw
home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Bold.ttf binary raw
home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-BoldItalic.ttf binary raw
home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Italic.ttf binary raw
home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Regular.ttf binary raw
home-config/fonts/AnonymicePro/OFL.txt +0 −94 raw
home-config/fonts/AnonymicePro/readme.md +0 −8 raw
home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete Mono Windows Compatible.ttf binary raw
home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete Mono.ttf binary raw
home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete Windows Compatible.ttf binary raw
home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete.ttf binary raw
home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete Mono Windows Compatible.ttf binary raw
home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete Mono.ttf binary raw
home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete Windows Compatible.ttf binary raw
home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete.ttf binary raw
home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete Mono Windows Compatible.ttf binary raw
home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete Mono.ttf binary raw
home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete Windows Compatible.ttf binary raw
home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete.ttf binary raw
home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete Mono Windows Compatible.ttf binary raw
home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete Mono.ttf binary raw
home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete Windows Compatible.ttf binary raw
home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete.ttf binary raw
home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete Mono Windows Compatible.ttf binary raw
home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete Mono.ttf binary raw
home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete Windows Compatible.ttf binary raw
home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete.ttf binary raw
home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete Mono Windows Compatible.ttf binary raw
home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete Mono.ttf binary raw
home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete Windows Compatible.ttf binary raw
home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete.ttf binary raw
home-config/fonts/Lilex/LICENSE.txt +0 −93 raw
home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono Windows Compatible.otf binary raw
home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono Windows Compatible.ttf binary raw
home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono.otf binary raw
home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono.ttf binary raw
home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Windows Compatible.otf binary raw
home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Windows Compatible.ttf binary raw
home-config/fonts/Lilex/Lilex Bold Nerd Font Complete.otf binary raw
home-config/fonts/Lilex/Lilex Bold Nerd Font Complete.ttf binary raw
home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono Windows Compatible.otf binary raw
home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono Windows Compatible.ttf binary raw
home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono.otf binary raw
home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono.ttf binary raw
home-config/fonts/Lilex/Lilex Light Nerd Font Complete Windows Compatible.otf binary raw
home-config/fonts/Lilex/Lilex Light Nerd Font Complete Windows Compatible.ttf binary raw
home-config/fonts/Lilex/Lilex Light Nerd Font Complete.otf binary raw
home-config/fonts/Lilex/Lilex Light Nerd Font Complete.ttf binary raw
home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono Windows Compatible.otf binary raw
home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono Windows Compatible.ttf binary raw
home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono.otf binary raw
home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono.ttf binary raw
home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Windows Compatible.otf binary raw
home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Windows Compatible.ttf binary raw
home-config/fonts/Lilex/Lilex Medium Nerd Font Complete.otf binary raw
home-config/fonts/Lilex/Lilex Medium Nerd Font Complete.ttf binary raw
home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono Windows Compatible.otf binary raw
home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono Windows Compatible.ttf binary raw
home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono.otf binary raw
home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono.ttf binary raw
home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Windows Compatible.otf binary raw
home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Windows Compatible.ttf binary raw
home-config/fonts/Lilex/Lilex Regular Nerd Font Complete.otf binary raw
home-config/fonts/Lilex/Lilex Regular Nerd Font Complete.ttf binary raw
home-config/fonts/Lilex/readme.md +0 −8 raw
home-config/fonts/Monofur For Powerline/Monofur Bold for Powerline.ttf binary raw
home-config/fonts/Monofur For Powerline/Monofur Italic for Powerline.ttf binary raw
home-config/fonts/Monofur For Powerline/Monofur for Powerline.ttf binary raw
home-config/fonts/MonofurNerdFont/LICENSE.txt +0 −20 raw
home-config/fonts/MonofurNerdFont/MonofurNerdFont-Bold.ttf binary raw
home-config/fonts/MonofurNerdFont/MonofurNerdFont-Italic.ttf binary raw
home-config/fonts/MonofurNerdFont/MonofurNerdFont-Regular.ttf binary raw
home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Bold.ttf binary raw
home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Italic.ttf binary raw
home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Regular.ttf binary raw
home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Bold.ttf binary raw
home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Italic.ttf binary raw
home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Regular.ttf binary raw
home-config/fonts/MonofurNerdFont/readme.md +0 −8 raw
home-config/foot/foot.ini +0 −6 raw
home-config/gitconfig +14 −0 raw
home-config/gnupg/gpg-agent.conf +0 −3 raw
home-config/gnupg/sshcontrol +0 −10 raw
home-config/home-configuration.scm +185 −118 raw
home-config/hypr/Wallpapers/static/above-clouds.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-eclipse-1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-eternity-1080px.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-light-at-the-end-hd.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-portal-1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-solar-1k.jpg binary raw
home-config/hypr/Wallpapers/static/autumn1.jpg binary raw
home-config/hypr/Wallpapers/static/dawn-mountains-vibrant.jpg binary raw
home-config/hypr/Wallpapers/static/lake-winter.jpg binary raw
home-config/hypr/Wallpapers/static/mountains.jpg binary raw
home-config/hypr/Wallpapers/static/northern-lights-2.jpg binary raw
home-config/hypr/Wallpapers/static/northern-lights-bridge.jpg binary raw
home-config/hypr/Wallpapers/static/purple-grass.jpg binary raw
home-config/hypr/Wallpapers/static/purple-intersection.jpg binary raw
home-config/hypr/Wallpapers/static/purple-lakescape.jpg binary raw
home-config/hypr/Wallpapers/static/scarecrow.jpg binary raw
home-config/hypr/Wallpapers/static/snow-1.jpg binary raw
home-config/hypr/Wallpapers/static/snow-2.jpg binary raw
home-config/hypr/autostart.sh +0 −21 raw
home-config/hypr/family_guy.mp4 binary raw
home-config/hypr/hyprland-monitor-attached binary raw
home-config/hypr/hyprland.conf +0 −257 raw
home-config/hypr/kanshi.conf +0 −21 raw
home-config/hypr/monitors.conf +0 −2 raw
home-config/hypr/subwaysurfer.webm binary raw
home-config/hypr/wallpaper-daemon-animated-old.sh +0 −106 raw
home-config/hypr/wallpaper-daemon.sh +0 −35 raw
home-config/hypr/wallpaper.sh +0 −9 raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/X_cursor.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bd_double_arrow.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_left_corner.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_right_corner.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_side.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_tee.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/center_ptr.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/circle.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/context-menu.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/copy.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/cross.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/crossed_circle.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/crosshair.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd-ask.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd-copy.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd-link.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd_no_drop.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dotbox.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/fd_double_arrow.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/grabbing.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/hand1.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/hand2.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_ptr.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_ptr_watch.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_side.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_tee.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/link.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/ll_angle.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/lr_angle.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/move.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/pencil.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/plus.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/pointer-move.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/question_arrow.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/right_ptr.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/right_side.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/right_tee.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_down_arrow.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_h_double_arrow.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_left_arrow.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_right_arrow.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_up_arrow.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_v_double_arrow.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/tcross.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_left_corner.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_right_corner.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_side.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_tee.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/ul_angle.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/ur_angle.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/vertical-text.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/wait.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/wayland-cursor.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/xterm.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/zoom-in.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/zoom-out.hlc binary raw
home-config/icons/Bibata-Modern-Classic-Hyprland/manifest.hl +4 −0 raw
home-config/icons/Bibata-Modern-Classic/LICENSE +21 −0 raw
home-config/icons/Bibata-Modern-Classic/README.txt +35 −0 raw
home-config/icons/Bibata-Modern-Classic/VERSION +4 −0 raw
home-config/icons/Bibata-Modern-Classic/cursor.theme +3 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/00000000000000020006000e7e9ffc3f +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/00008160000006810000408080010102 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/028006030e0e7ebffc7f7070c0600140 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/03b6e0fcb3499374a867c041f52298f0 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/08e8e1c95fe2fc01f976f1e063a24ccd +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/1081e37283d90000800003c07f3ef6bf +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/14fef782d02440884392942c1120523 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/2870a09082c103050810ffdffffe0204 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/3085a0e285430894940527032f8b26df +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/3ecb610c1bf2410f44200f48c40d3599 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/4498f0e0c1937ffe01fd06f973665830 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/5c6cd98b3f3ebcb1f9c7f1c204630408 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/6407b0e94181790501fd1e167b474872 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/640fb0e74195791501fd1ed57b41487f +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/9081237383d90e509aa00f00170e968f +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/9d800788f1b08800ae810202380a0822 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/X_cursor binary raw
home-config/icons/Bibata-Modern-Classic/cursors/a2a266d0498c3104214a47bd64ab0fc8 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/alias +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/all-scroll +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/arrow +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/b66166c04f8c3109214a4fbd64a50fc8 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/bd_double_arrow binary raw
home-config/icons/Bibata-Modern-Classic/cursors/bottom_left_corner binary raw
home-config/icons/Bibata-Modern-Classic/cursors/bottom_right_corner binary raw
home-config/icons/Bibata-Modern-Classic/cursors/bottom_side binary raw
home-config/icons/Bibata-Modern-Classic/cursors/bottom_tee binary raw
home-config/icons/Bibata-Modern-Classic/cursors/c7088f0f3e6c8088236ef8e1e3e70000 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/cell +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/center_ptr binary raw
home-config/icons/Bibata-Modern-Classic/cursors/circle binary raw
home-config/icons/Bibata-Modern-Classic/cursors/closedhand +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/col-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/color-picker +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/context-menu binary raw
home-config/icons/Bibata-Modern-Classic/cursors/copy binary raw
home-config/icons/Bibata-Modern-Classic/cursors/cross binary raw
home-config/icons/Bibata-Modern-Classic/cursors/cross_reverse +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/crossed_circle binary raw
home-config/icons/Bibata-Modern-Classic/cursors/crosshair binary raw
home-config/icons/Bibata-Modern-Classic/cursors/d9ce0ab605698f320427677b458ad60b +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/default +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/diamond_cross +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/dnd-ask binary raw
home-config/icons/Bibata-Modern-Classic/cursors/dnd-copy binary raw
home-config/icons/Bibata-Modern-Classic/cursors/dnd-link binary raw
home-config/icons/Bibata-Modern-Classic/cursors/dnd-move +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/dnd-none +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/dnd_no_drop binary raw
home-config/icons/Bibata-Modern-Classic/cursors/dot_box_mask +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/dotbox binary raw
home-config/icons/Bibata-Modern-Classic/cursors/double_arrow +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/down-arrow +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/draft +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/draft_large +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/draft_small +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/draped_box +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/e-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/e29285e634086352946a0e7090d73106 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/ew-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/fcf1c3c7cd4491d801f1e1c78f100000 +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/fcf21c00b30f7e3f83fe0dfd12e71cff +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/fd_double_arrow binary raw
home-config/icons/Bibata-Modern-Classic/cursors/fleur +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/forbidden +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/grab +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/grabbing binary raw
home-config/icons/Bibata-Modern-Classic/cursors/h_double_arrow +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/hand1 binary raw
home-config/icons/Bibata-Modern-Classic/cursors/hand2 binary raw
home-config/icons/Bibata-Modern-Classic/cursors/help +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/ibeam +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/icon +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/left-arrow +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/left_ptr binary raw
home-config/icons/Bibata-Modern-Classic/cursors/left_ptr_help +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/left_ptr_watch binary raw
home-config/icons/Bibata-Modern-Classic/cursors/left_side binary raw
home-config/icons/Bibata-Modern-Classic/cursors/left_tee binary raw
home-config/icons/Bibata-Modern-Classic/cursors/link binary raw
home-config/icons/Bibata-Modern-Classic/cursors/ll_angle binary raw
home-config/icons/Bibata-Modern-Classic/cursors/lr_angle binary raw
home-config/icons/Bibata-Modern-Classic/cursors/move binary raw
home-config/icons/Bibata-Modern-Classic/cursors/n-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/ne-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/nesw-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/no-drop +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/not-allowed +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/ns-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/nw-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/nwse-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/openhand +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/pencil binary raw
home-config/icons/Bibata-Modern-Classic/cursors/pirate +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/plus binary raw
home-config/icons/Bibata-Modern-Classic/cursors/pointer +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/pointer-move binary raw
home-config/icons/Bibata-Modern-Classic/cursors/pointing_hand +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/progress +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/question_arrow binary raw
home-config/icons/Bibata-Modern-Classic/cursors/right-arrow +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/right_ptr binary raw
home-config/icons/Bibata-Modern-Classic/cursors/right_side binary raw
home-config/icons/Bibata-Modern-Classic/cursors/right_tee binary raw
home-config/icons/Bibata-Modern-Classic/cursors/row-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/s-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/sb_down_arrow binary raw
home-config/icons/Bibata-Modern-Classic/cursors/sb_h_double_arrow binary raw
home-config/icons/Bibata-Modern-Classic/cursors/sb_left_arrow binary raw
home-config/icons/Bibata-Modern-Classic/cursors/sb_right_arrow binary raw
home-config/icons/Bibata-Modern-Classic/cursors/sb_up_arrow binary raw
home-config/icons/Bibata-Modern-Classic/cursors/sb_v_double_arrow binary raw
home-config/icons/Bibata-Modern-Classic/cursors/se-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/size-hor +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/size-ver +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/size_all +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/size_bdiag +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/size_fdiag +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/size_hor +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/size_ver +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/split_h +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/split_v +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/sw-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/target +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/tcross binary raw
home-config/icons/Bibata-Modern-Classic/cursors/text +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/top_left_arrow +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/top_left_corner binary raw
home-config/icons/Bibata-Modern-Classic/cursors/top_right_corner binary raw
home-config/icons/Bibata-Modern-Classic/cursors/top_side binary raw
home-config/icons/Bibata-Modern-Classic/cursors/top_tee binary raw
home-config/icons/Bibata-Modern-Classic/cursors/ul_angle binary raw
home-config/icons/Bibata-Modern-Classic/cursors/up-arrow +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/ur_angle binary raw
home-config/icons/Bibata-Modern-Classic/cursors/v_double_arrow +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/vertical-text binary raw
home-config/icons/Bibata-Modern-Classic/cursors/w-resize +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/wait binary raw
home-config/icons/Bibata-Modern-Classic/cursors/watch +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/wayland-cursor binary raw
home-config/icons/Bibata-Modern-Classic/cursors/whats_this +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/x-cursor +1 −0 raw
home-config/icons/Bibata-Modern-Classic/cursors/xterm binary raw
home-config/icons/Bibata-Modern-Classic/cursors/zoom-in binary raw
home-config/icons/Bibata-Modern-Classic/cursors/zoom-out binary raw
home-config/icons/Bibata-Modern-Classic/index.theme +4 −0 raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/X_cursor.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/all-scroll.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/bottom_left_corner.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/bottom_right_corner.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/bottom_tee.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/center_ptr.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/context-menu.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/copy.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/cross.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/crossed_circle.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/crosshair.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/dnd_no_drop.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/dotbox.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/hand1.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/hand2.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_ptr.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_ptr_watch.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_side.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_tee.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/link.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/ll_angle.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/lr_angle.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/move.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/pencil.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/person.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/pin.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/plus.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/question_arrow.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/right_ptr.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/right_tee.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_down_arrow.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_h_double_arrow.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_left_arrow.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_right_arrow.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_up_arrow.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_v_double_arrow.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/top_side.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/top_tee.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/ul_angle.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/ur_angle.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/vertical-text.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/wait.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/wayland-cursor.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/xterm.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/zoom-in.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/zoom-out.hlc binary raw
home-config/icons/XCursor-Pro-Dark-Hyprcursor/manifest.hl +4 −0 raw
home-config/icons/XCursor-Pro-Dark/cursor.theme +3 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/00000000000000020006000e7e9ffc3f +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/00008160000006810000408080010102 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/028006030e0e7ebffc7f7070c0600140 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/03b6e0fcb3499374a867c041f52298f0 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/08e8e1c95fe2fc01f976f1e063a24ccd +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/1081e37283d90000800003c07f3ef6bf +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/14fef782d02440884392942c1120523 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/2870a09082c103050810ffdffffe0204 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/3085a0e285430894940527032f8b26df +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/3ecb610c1bf2410f44200f48c40d3599 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/4498f0e0c1937ffe01fd06f973665830 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/5c6cd98b3f3ebcb1f9c7f1c204630408 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/6407b0e94181790501fd1e167b474872 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/640fb0e74195791501fd1ed57b41487f +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/9081237383d90e509aa00f00170e968f +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/9d800788f1b08800ae810202380a0822 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/X_cursor binary raw
home-config/icons/XCursor-Pro-Dark/cursors/a2a266d0498c3104214a47bd64ab0fc8 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/alias +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/all-scroll binary raw
home-config/icons/XCursor-Pro-Dark/cursors/arrow +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/b66166c04f8c3109214a4fbd64a50fc8 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/bd_double_arrow +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/bottom_left_corner binary raw
home-config/icons/XCursor-Pro-Dark/cursors/bottom_right_corner binary raw
home-config/icons/XCursor-Pro-Dark/cursors/bottom_side +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/bottom_tee binary raw
home-config/icons/XCursor-Pro-Dark/cursors/c7088f0f3e6c8088236ef8e1e3e70000 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/cell +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/center_ptr binary raw
home-config/icons/XCursor-Pro-Dark/cursors/circle +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/closedhand +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/col-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/color-picker +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/context-menu binary raw
home-config/icons/XCursor-Pro-Dark/cursors/copy binary raw
home-config/icons/XCursor-Pro-Dark/cursors/cross binary raw
home-config/icons/XCursor-Pro-Dark/cursors/cross_reverse +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/crossed_circle binary raw
home-config/icons/XCursor-Pro-Dark/cursors/crosshair binary raw
home-config/icons/XCursor-Pro-Dark/cursors/d9ce0ab605698f320427677b458ad60b +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/default +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/diamond_cross +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/dnd-ask +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/dnd-copy +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/dnd-link +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/dnd-move +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/dnd-none +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/dnd_no_drop binary raw
home-config/icons/XCursor-Pro-Dark/cursors/dot_box_mask +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/dotbox binary raw
home-config/icons/XCursor-Pro-Dark/cursors/double_arrow +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/down-arrow +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/draft +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/draft_large +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/draft_small +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/draped_box +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/e-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/e29285e634086352946a0e7090d73106 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/ew-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/fcf1c3c7cd4491d801f1e1c78f100000 +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/fcf21c00b30f7e3f83fe0dfd12e71cff +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/fd_double_arrow +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/fleur +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/forbidden +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/grab +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/grabbing +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/h_double_arrow +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/hand1 binary raw
home-config/icons/XCursor-Pro-Dark/cursors/hand2 binary raw
home-config/icons/XCursor-Pro-Dark/cursors/help +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/ibeam +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/icon +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/left-arrow +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/left_ptr binary raw
home-config/icons/XCursor-Pro-Dark/cursors/left_ptr_help +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/left_ptr_watch binary raw
home-config/icons/XCursor-Pro-Dark/cursors/left_side binary raw
home-config/icons/XCursor-Pro-Dark/cursors/left_tee binary raw
home-config/icons/XCursor-Pro-Dark/cursors/link binary raw
home-config/icons/XCursor-Pro-Dark/cursors/ll_angle binary raw
home-config/icons/XCursor-Pro-Dark/cursors/lr_angle binary raw
home-config/icons/XCursor-Pro-Dark/cursors/move binary raw
home-config/icons/XCursor-Pro-Dark/cursors/n-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/ne-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/nesw-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/no-drop +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/not-allowed +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/ns-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/nw-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/nwse-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/openhand +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/pencil binary raw
home-config/icons/XCursor-Pro-Dark/cursors/pirate +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/plus binary raw
home-config/icons/XCursor-Pro-Dark/cursors/pointer +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/pointer_move +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/pointing_hand +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/progress +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/question_arrow binary raw
home-config/icons/XCursor-Pro-Dark/cursors/right-arrow +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/right_ptr binary raw
home-config/icons/XCursor-Pro-Dark/cursors/right_side +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/right_tee binary raw
home-config/icons/XCursor-Pro-Dark/cursors/row-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/s-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/sb_down_arrow binary raw
home-config/icons/XCursor-Pro-Dark/cursors/sb_h_double_arrow binary raw
home-config/icons/XCursor-Pro-Dark/cursors/sb_left_arrow binary raw
home-config/icons/XCursor-Pro-Dark/cursors/sb_right_arrow binary raw
home-config/icons/XCursor-Pro-Dark/cursors/sb_up_arrow binary raw
home-config/icons/XCursor-Pro-Dark/cursors/sb_v_double_arrow binary raw
home-config/icons/XCursor-Pro-Dark/cursors/se-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/size-hor +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/size-ver +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/size_all +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/size_bdiag +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/size_fdiag +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/size_hor +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/size_ver +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/split_h +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/split_v +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/sw-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/target +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/tcross +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/text +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/top_left_arrow +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/top_left_corner +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/top_right_corner +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/top_side binary raw
home-config/icons/XCursor-Pro-Dark/cursors/top_tee binary raw
home-config/icons/XCursor-Pro-Dark/cursors/ul_angle binary raw
home-config/icons/XCursor-Pro-Dark/cursors/up-arrow +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/ur_angle binary raw
home-config/icons/XCursor-Pro-Dark/cursors/v_double_arrow +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/vertical-text binary raw
home-config/icons/XCursor-Pro-Dark/cursors/w-resize +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/wait binary raw
home-config/icons/XCursor-Pro-Dark/cursors/watch +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/wayland-cursor binary raw
home-config/icons/XCursor-Pro-Dark/cursors/whats_this +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/x-cursor +1 −0 raw
home-config/icons/XCursor-Pro-Dark/cursors/xterm binary raw
home-config/icons/XCursor-Pro-Dark/cursors/zoom-in binary raw
home-config/icons/XCursor-Pro-Dark/cursors/zoom-out binary raw
home-config/icons/XCursor-Pro-Dark/index.theme +4 −0 raw
home-config/nix-channels +0 −2 raw
home-config/nix-config/nix.conf +0 −1 raw
home-config/nix-files +1 −0 raw
home-config/nix-home-manager/flake.lock +0 −69 raw
home-config/nix-home-manager/flake.nix +0 −39 raw
home-config/nix-home-manager/home.nix +0 −91 raw
home-config/nvim/config/after/ftplugin/mail/custom.vim +0 −2 raw
home-config/nvim/config/after/ftplugin/markdown/custom.vim +0 −2 raw
home-config/nvim/config/init.vim +0 −101 raw
home-config/nvim/plugin-manager/plug.vim +0 −2812 raw
home-config/spotify-player/app.toml +0 −34 raw
home-config/ssh/config +0 −16 raw
home-config/waybar/config +0 −154 raw
home-config/waybar/modules/check-for-music.sh +0 −7 raw
home-config/waybar/modules/spotify.sh +0 −19 raw
home-config/waybar/modules/storage.sh +0 −25 raw
home-config/waybar/modules/weather.sh +0 −77 raw
home-config/waybar/style.css +0 −77 raw
modules/ryan-bootloader/uki.scm +115 −0 raw
modules/ryan-config/base-system.scm +119 −50 raw
modules/ryan-config/lyconfig.ini +10 −0 raw
modules/ryan-packages/binaries.bak +68 −0 raw
modules/ryan-packages/bootloaders.scm +148 −0 raw
modules/ryan-packages/calcurse.scm +6 −1 raw
modules/ryan-packages/freedesktop.scm +1 −1 raw
modules/ryan-packages/gl.scm +224 −0 raw
modules/ryan-packages/hyprland.-ryan.bak +46 −0 raw
modules/ryan-packages/hyprland.bak +495 −0 raw
modules/ryan-packages/linux.scm +54 −13 raw
modules/ryan-packages/login.scm +102 −0 raw
modules/ryan-packages/networking.scm +24 −1 raw
modules/ryan-packages/package-management.scm +237 −0 raw
modules/ryan-packages/patches/aquamarine-fix-cmake.patch +25 −0 raw
modules/ryan-packages/patches/hyprland-fix-cmake.patch +41 −0 raw
modules/ryan-packages/wm.scm +76 −36 raw
modules/ryan-packages/wmrosenthal.bak +371 −0 raw
modules/ryan-services/file-manager.scm +66 −0 raw
modules/ryan-services/networking.scm +84 −0 raw
modules/ryan-services/nix.scm +182 −0 raw
modules/ryan-services/udev.bak +17 −0 raw

Commits

HashSubjectAuthorDate
b7559d2d bump nix-files Ryan Schanzenbacher
6c4fc5e4 remove old filesand bump nix-files Ryan Schanzenbacher
72d1c1aa bump nix-files Ryan Schanzenbacher
0f472179 migration to mostly nix Ryan Schanzenbacher
a16f1941 update nix files Ryan Schanzenbacher
d40a56ec move more packages and prep for migration Ryan Schanzenbacher
044a02a1 re-add submodule Ryan Schanzenbacher
e094c2eb update ryantower kernel args Ryan Schanzenbacher
01132663 delete modules Ryan Schanzenbacher
8811e556 submodule chores Ryan Schanzenbacher
753b1518 prep for bump Ryan Schanzenbacher
6eb6fb89 updated deprecated option Ryan Schanzenbacher
49288569 updated channels Ryan Schanzenbacher
51dfd859 added lyconfig, fork seems to work kinda, need to update to get newest kmscon Ryan Schanzenbacher
7a693dde half working ly display Ryan Schanzenbacher
a68eca16 defined ly Ryan Schanzenbacher
69433624 updated netbird and added supercell wx Ryan Schanzenbacher
9c982aa7 update windowrules for screenshot tool Ryan Schanzenbacher
30239e43 new wallpaper Ryan Schanzenbacher
7351aa54 need tree-sitter-cli now Ryan Schanzenbacher
7f01041b forgot to enable marks Ryan Schanzenbacher
be3902a7 nvim fixes and new plugin Ryan Schanzenbacher
062e1a68 I am feeling OOGLY GOO Ryan Schanzenbacher
e1360107 Talos and k8s stuff Ryan Schanzenbacher
69df0e16 Netbird service Ryan Schanzenbacher
5855a033 Added netbird binary Ryan Schanzenbacher
65cfa0ed Auto pop-out video when playing Ryan Schanzenbacher
ad097168 Migrate to bluetui instead of blueman Ryan Schanzenbacher
756a6f61 initial systemd-cryptsetup testing for fido2 unlocking Ryan Schanzenbacher
e04163af Manage more zen settings via nix Ryan Schanzenbacher
2be21394 RyanTower V1 Ryan Schanzenbacher
be43161f Update SmallLaptop with new UUIDs Ryan Schanzenbacher
1e1225d6 Fixed hyprlock Ryan Schanzenbacher
edb6623a fixed wpaperd Ryan Schanzenbacher
ed9918f2 Finalized update Ryan Schanzenbacher
ffa13af6 Package name change Ryan Schanzenbacher
412c2ffd Fixed neovim and systemd-stub Ryan Schanzenbacher
ff9e209f Removed openconnect Ryan Schanzenbacher
b3071729 bumped channels Ryan Schanzenbacher
bb168b86 Moved kdenlive to nix, added hibernate key inhibitor, moved email to JMAP Ryan Schanzenbacher
5555894e bumped flake lockfile Ryan Schanzenbacher
7cc0f11d Bumped zen-browser to 1.15 Ryan Schanzenbacher
f2efb254 changed sleep settings when docked Ryan Schanzenbacher
2d5c431c fixed nvim issue Ryan Schanzenbacher
a3bb1315 added waybar entry for second battery Ryan Schanzenbacher
3e08a754 updated neovim Ryan Schanzenbacher
a4b31544 switched to signed bootloader Ryan Schanzenbacher
6d16b960 update flake.lock Ryan Schanzenbacher
5fac2fe2 updated all nix flakes Ryan Schanzenbacher
86245d77 updated all guix channels Ryan Schanzenbacher
8417362b updated guix channel url Ryan Schanzenbacher
6734df2e updated nonguix url for substitutes due to outage Ryan Schanzenbacher
b469379f updated nix Ryan Schanzenbacher
4d22f5ac fixed spacing in packages Ryan Schanzenbacher
dfef019f Changed to codeberg mirror Ryan Schanzenbacher
342f5aa6 SmallLaptop config added, home-config changed before adding SOPs, README updat… Ryan Schanzenbacher
335ac274 changed readme for time-machine woes Ryan Schanzenbacher
77dbb818 fix vertical monitor wallpaper issue Ryan Schanzenbacher
8b506661 changed restic to be nix, updated wpaperd Ryan Schanzenbacher
48d0963e Added talosctl and kubectl Ryan Schanzenbacher
ce414f70 new screenshot stuff that is good Ryan Schanzenbacher
3d07221e updated zen and have policies again Ryan Schanzenbacher
66c84675 added new texlive package for tikz Ryan Schanzenbacher
930ee906 Fixed zen PiP and added wallpapers Ryan Schanzenbacher
6e286466 Added pyprland for zoom and updated some options for hyprland Ryan Schanzenbacher
f77555e1 updated zen (broken policies for now) and hyprland Ryan Schanzenbacher
04342290 Use temp updated nix Ryan Schanzenbacher
8e7ca704 updated tridactyl native_host Ryan Schanzenbacher
5db04dd0 fix modules that do not exist anymore Ryan Schanzenbacher
88b87ca0 Flake updates Ryan Schanzenbacher
f34e77ef Temp home config change, added mailvelope native-host Ryan Schanzenbacher
20d64b16 Changes to screenshots that didn't work, change script location Ryan Schanzenbacher
d465e926 Using Zen, added nix update to be upstreamed Ryan Schanzenbacher
365a13de changed hyprland build, added mouse fx, firefox changes Ryan Schanzenbacher
b64aeaac changed to try and fix policies Ryan Schanzenbacher
aa1a1e82 updates to channels, new cursor, probably other fixes idk Ryan Schanzenbacher
bd9bdb7b just gonna use -delete Ryan Schanzenbacher
51bdc767 Fixed download folder manager service Ryan Schanzenbacher
ba2e2d7b Added dockerg alias for GUI docker runs Ryan Schanzenbacher
f1bc7731 enabled secure boot on the thinkpad Ryan Schanzenbacher
05c721a1 Added openconnect to try and connect to rit vpn. Seems like it will not work. Ryan Schanzenbacher
2cbe73ac Updated hyprland to 0.47.2 Ryan Schanzenbacher
eb7e7cb7 nix flake updated after commit woops Ryan Schanzenbacher
6b3c30c7 Added chromium, delta is git pager, updated hyprland and friends Ryan Schanzenbacher
cd99ce84 Updated bashrc to use eza and delta, installed delta. Ryan Schanzenbacher
479e112a Taskwarrior is now nix, updated bluez Ryan Schanzenbacher
012e5869 Added service to periodically clean Downloads folder Ryan Schanzenbacher
de3f5434 fixed hyprlock and updated hyprpicker Ryan Schanzenbacher
ddd6e973 Updated Thinkpad config to latest, updated all packages, updated docker compos… Ryan Schanzenbacher
ce1c24e3 added uki bootloader maybe Ryan Schanzenbacher
67da3160 updated nix channels Ryan Schanzenbacher
a5218684 Adding updates from however long ago Ryan Schanzenbacher
a04498c0 Changed firefox to use nix configuration, completely reset profile. No longer … Ryan Schanzenbacher
bdb08351 Changed firefox to nightly bin overlay. Flake will be impure for the time bein… Ryan Schanzenbacher
c23b60f8 wttr popup fix, firefox on nix, fontconfig fixes Ryan Schanzenbacher
1c3f6332 Changed kanshi config and trying to debug hyprland Ryan Schanzenbacher
ebc32292 changed wrapper for fonts Ryan Schanzenbacher
a0ac1133 Some updates to get locking working again, also added performance mode script Ryan Schanzenbacher
f4b1d571 added wpaperd config Ryan Schanzenbacher
f8a56388 Have you tried the wallpaper drug? Ryan Schanzenbacher
9f740aa8 Re-arranged some packages to allow mpv and imv to work again Ryan Schanzenbacher
bde398cb got portals working again for screensharing Ryan Schanzenbacher
260a2e3d Added hyprlock Ryan Schanzenbacher
cc6e0d95 added fix for pinentry Ryan Schanzenbacher
9a7ddba4 added hyprland to flakes and added cursor theme Ryan Schanzenbacher
a01f7ce1 Changed things, i dunno Ryan Schanzenbacher
ca201bd9 Changed some packages around for update to succeed Ryan Schanzenbacher
1c883be6 Updated packages to latest Ryan Schanzenbacher
f3ee8355 changes for wails development Ryan Schanzenbacher
f2d68275 added tmux Ryan Schanzenbacher
6cc18a0d added tridactyl stuffs Ryan Schanzenbacher
7b8185c6 various thinkpad changes Ryan Schanzenbacher
08263029 working on hyprland update Ryan Schanzenbacher
16a21d07 added new account to aerc and other changes Ryan Schanzenbacher
145ab802 added jq and changed scroll direction for screen brightness Ryan Schanzenbacher
f2f31f0b hyprlock wrapped and working Ryan Schanzenbacher
13038d11 hyprlock 0.5, still need to wrap env Ryan Schanzenbacher
028b1ad6 fixed merge conflict Ryan Schanzenbacher
0cb6e214 Added mpv script for live cropping, changes to hyprlock and base-system Ryan Schanzenbacher
ef2dba34 updated packages Ryan Schanzenbacher
c4ce810a updated hyprland and waybar Ryan Schanzenbacher
d3fc4f94 committing some changes Ryan Schanzenbacher
b05ac877 removed superfile and prepped for more flakes maybe Ryan Schanzenbacher
924924ef added tailscale fr Ryan Schanzenbacher
adf9468e broken flakes atm, migrated nix to symlinks, added new hetzner host Ryan Schanzenbacher
c5bc1749 fixed mistake, I was right the first time Ryan Schanzenbacher
83c500ac updated waybar Ryan Schanzenbacher
5a3315b7 fixed wrong command Ryan Schanzenbacher
c211aece added signal Ryan Schanzenbacher
4b0f0837 fixed gitignore Ryan Schanzenbacher
25f812f6 New fonts Ryan Schanzenbacher
73047489 added new screenshot shortcut Ryan Schanzenbacher
9c780360 updated things and fish stuff Ryan Schanzenbacher
8a48a577 removed hyprland-monitor-attached Ryan Schanzenbacher
5e9fa348 removed zoxide plugin Ryan Schanzenbacher
a8b7e972 added zoxide helper plugin Ryan Schanzenbacher
0c1f7cae cursed Ryan Schanzenbacher
1d58393e added fish plugin and changed fish config to exist entirely outside of store Ryan Schanzenbacher
9026be36 FISH Ryan Schanzenbacher
b88d77fb ahhh sloppy fish, still needs fixing, esp with the vars Ryan Schanzenbacher
776a7ca5 preparations for presentation Ryan Schanzenbacher
47649ff1 added aerc aliases for mailing lists Ryan Schanzenbacher
diff --git a/.gitignore b/.gitignore
index 746d54b..c93597c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
current
home-config/sway/monitors
*.gif
+home-config/fish/fish_variables
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..006b8ae
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "home-config/nix-files"]
+ path = home-config/nix-files
+ url = ssh://git@git.rschanz.org/nix-combined.git
diff --git a/README.md b/README.md
index e224cc1..57922c3 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,27 @@
## Installing Guix
-### Instructions
+### New Instructions
+
+- Boot from Bootable media
+- Setup network and partitions with graphical installer
+- bail out before installation, go to terminal
+ - mount cow-store using `herd start cow-store /mnt`
+ - download latest personal config
+ - add authorization keys
+ - use guix time-machine with `env GUILE_LOAD_PATH='' GUILD_LOAD_COMPILED_PATH='' ...` to init system
+ - place copy of config in /mnt to copy over later. MAKE SURE TO INCLUDE .git FOLDER!!
+ - reboot into new system
+- assign root and ryan pw
+- login to ryan
+ - place config into ~/.config/guix
+ - run `guix pull -C ~/.config/guix/channels.scm`
+ - run `sudo -E guix system -L ~/.config/guix/modules reconfigure ...`
+ - run `guix home -L ~/.config/guix/modules reconfigure ...`
+ - run `nix run --no-write-lock-file github:nix-community/home-manager/ -- --flake ".#$USER" switch`
+- you may have a system now
+
+### Instructions (old, for reference)
- Create USB with Guix installation image
- Boot and create partitions using graphical installer
diff --git a/RyanThinkpad.scm b/RyanThinkpad.scm
index 1066bac..f27974d 100644
--- a/RyanThinkpad.scm
+++ b/RyanThinkpad.scm
@@ -1,4 +1,5 @@
(use-modules (ryan-config base-system)
+ (ryan-bootloader uki)
(gnu))
(operating-system
@@ -10,7 +11,7 @@
(host-name "RyanThinkpad")
(mapped-devices (list (mapped-device
(source (uuid
- "adcaf322-7ee5-48ec-abf6-4a9b10643878"))
+ "40a2c899-a54f-400b-b3b8-9f83b8378c61"))
(target "sysroot")
(type luks-device-mapping))))
(file-systems (cons* (file-system
@@ -20,9 +21,14 @@
(dependencies mapped-devices))
(file-system
(mount-point "/boot/efi")
- (device (uuid "DFE8-32EF"
+ (device (uuid "A73D-7D13"
'fat32))
(type "vfat")) %base-file-systems))
+ (bootloader (bootloader-configuration
+ (bootloader (uefi-uki-signed-bootloader
+ "/var/lib/sbctl/keys/db/db.pem" "/var/lib/sbctl/keys/db/db.key"))
+ (targets (list "/boot/efi"))
+ (keyboard-layout (keyboard-layout "us"))))
(swap-devices
(list
- (swap-space (target (uuid "7e1bb7c5-da2a-4509-8263-f707fc752993"))))))
+ (swap-space (target (uuid "87b91351-93b6-4dcc-814f-64c0f901c4f3"))))))
diff --git a/RyanTower.scm b/RyanTower.scm
new file mode 100644
index 0000000..01e5985
--- /dev/null
+++ b/RyanTower.scm
@@ -0,0 +1,39 @@
+(use-modules (ryan-config base-system)
+ (ryan-bootloader uki)
+ (gnu))
+
+(operating-system
+ (inherit base-operating-system)
+ (kernel-arguments (append (list "amd_iommu=on"
+ "iommu=pt"
+ "pci=noats"
+ "pcie_aspm=off"
+ "modprobe.blacklist=nouveau"
+ "vfio-pci.disable_idle_d3=1"
+ "vfio-pci.ids=10de:13f1,10de:0fbb")
+ %default-kernel-arguments))
+ (initrd-modules (cons* "vfio_pci" "vfio" "vfio_iommu_type1"
+ %base-initrd-modules))
+ (host-name "RyanTower")
+ (mapped-devices (list (mapped-device
+ (source (uuid
+ "e9f000b6-5532-499b-8278-bba30c1a2673"))
+ (target "sysroot")
+ (type luks-device-mapping))))
+ (file-systems (cons* (file-system
+ (mount-point "/")
+ (device "/dev/mapper/sysroot")
+ (type "ext4")
+ (dependencies mapped-devices))
+ (file-system
+ (mount-point "/boot/efi")
+ (device (uuid "89A8-89B0"
+ 'fat32))
+ (type "vfat")) %base-file-systems))
+ (bootloader (bootloader-configuration
+ (bootloader uefi-uki-bootloader)
+ (targets (list "/boot/efi"))
+ (keyboard-layout (keyboard-layout "us"))))
+ (swap-devices
+ (list
+ (swap-space (target (uuid "e9f000b6-5532-499b-8278-bba30c1a2673"))))))
diff --git a/SmallLaptop.scm b/SmallLaptop.scm
new file mode 100644
index 0000000..70d6114
--- /dev/null
+++ b/SmallLaptop.scm
@@ -0,0 +1,30 @@
+(use-modules (ryan-config base-system)
+ (ryan-bootloader uki)
+ (gnu))
+
+(operating-system
+ (inherit base-operating-system)
+ (host-name "SmallLaptop")
+ (mapped-devices (list (mapped-device
+ (source (uuid
+ "f2daabc9-543e-4128-8c61-dd5278988781"))
+ (target "sysroot")
+ (type luks-device-mapping))))
+ (file-systems (cons* (file-system
+ (mount-point "/")
+ (device "/dev/mapper/sysroot")
+ (type "ext4")
+ (dependencies mapped-devices))
+ (file-system
+ (mount-point "/boot/efi")
+ (device (uuid "1E29-F197"
+ 'fat32))
+ (type "vfat")) %base-file-systems))
+ (bootloader (bootloader-configuration
+ (bootloader (uefi-uki-signed-bootloader
+ "/var/lib/sbctl/keys/db/db.pem" "/var/lib/sbctl/keys/db/db.key"))
+ (targets (list "/boot/efi"))
+ (keyboard-layout (keyboard-layout "us"))))
+ (swap-devices
+ (list
+ (swap-space (target (uuid "93ded2d1-da41-4b74-a1ca-697fe99b7efb"))))))
diff --git a/channels.scm b/channels.scm
index 6f77fb8..a82a043 100644
--- a/channels.scm
+++ b/channels.scm
@@ -1,9 +1,9 @@
(list (channel
(name 'guix)
- (url "https://git.savannah.gnu.org/git/guix.git")
+ (url "https://codeberg.org/guix/guix.git")
(branch "master")
(commit
- "c3f15443bc6d457758aad1326dcc6dcad9cf8d6e")
+ "85a7d902c039d82a646f771f661d6935f0a6a1cf")
(introduction
(make-channel-introduction
"9edb3f66fd807b096b48283debdcddccfea34bad"
@@ -14,7 +14,7 @@
(url "https://gitlab.com/nonguix/nonguix")
(branch "master")
(commit
- "a4356defe7d4ee9b0ac6789d67f94d00714a9409")
+ "a3f4e7bff779da4593a2922516064a8edaafa3e6")
(introduction
(make-channel-introduction
"897c1a470da759236cc11798f4e0a5f7d4d59fbc"
@@ -25,7 +25,7 @@
(url "https://codeberg.org/hako/rosenthal.git")
(branch "trunk")
(commit
- "2c967e048f53aaaef002f114a9ee6c985be1278b")
+ "9e60a11917cbdca57e10c51e174dfa56379e74cc")
(introduction
(make-channel-introduction
"7677db76330121a901604dfbad19077893865f35"
diff --git a/deploy.sh b/deploy.sh
index 5971681..de88a93 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -95,7 +95,7 @@ install_user_env() {
# Copy some files over to prepare for reboot
USER=ryan
- guix shell git -- git clone https://git.stationery.faith/ryan77627/guix-dotfiles /mnt/home/$USER/.config/guix
+ guix shell git -- git clone --recurse-submodules https://git.stationery.faith/ryan77627/guix-dotfiles /mnt/home/$USER/.config/guix
cp ~/guix-dotfiles/$install_hostname.scm /mnt/home/$USER/.config/guix/$install_hostname.scm
cp ~/guix-dotfiles/modules/ryan-config/user_first_run.sh /mnt/home/$USER/.bashrc
diff --git a/home-config/aerc/accounts.conf b/home-config/aerc/accounts.conf
deleted file mode 100644
index 6f4018a..0000000
--- a/home-config/aerc/accounts.conf
+++ /dev/null
@@ -1,21 +0,0 @@
-[Personal]
-source = imaps://ryan%40rschanz.org@mail.rschanz.org:993
-source-cred-cmd = pass emails/personal 2>/dev/null | tr -d '\n'
-outgoing = smtps://ryan%40rschanz.org@mail.rschanz.org:465
-outgoing-cred-cmd = pass emails/personal 2>/dev/null | tr -d '\n'
-default = INBOX
-from = Ryan Schanzenbacher <ryan@rschanz.org>
-copy-to = Sent
-signature-file = ~/.config/aerc/signature_personal
-check-mail = 5m
-
-[School]
-source = imaps+oauthbearer://rjs1877%40rit.edu@imap.gmail.com:993?token_endpoint=https%3A%2F%2Faccounts.google.com%2Fo%2Foauth2%2Ftoken&client_id=667738788924-0rdfvaq9ijfo1vk4474eb3quf8206h2t.apps.googleusercontent.com&client_secret=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
-source-cred-cmd = pass emails/rit_personal 2>/dev/null | tr -d '\n'
-outgoing = smtps+oauthbearer://rjs1877%40rit.edu@imap.gmail.com:465?token_endpoint=https%3A%2F%2Faccounts.google.com%2Fo%2Foauth2%2Ftoken&client_id=667738788924-0rdfvaq9ijfo1vk4474eb3quf8206h2t.apps.googleusercontent.com&client_secret=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
-outgoing-cred-cmd = pass emails/rit_personal 2>/dev/null | tr -d '\n'
-from = Ryan Schanzenbacher <rjs1877@rit.edu>
-signature-file = ~/.config/aerc/signature_rit_personal
-check-mail = 5m
-default = INBOX
-copy-to = [Gmail]/Sent Mail
diff --git a/home-config/aerc/aerc.conf b/home-config/aerc/aerc.conf
deleted file mode 100644
index 04ac815..0000000
--- a/home-config/aerc/aerc.conf
+++ /dev/null
@@ -1,568 +0,0 @@
-#
-# aerc main configuration
-
-[general]
-#
-# Used as a default path for save operations if no other path is specified.
-# ~ is expanded to the current user home dir.
-#
-default-save-path=~/Downloads/
-
-# If set to "gpg", aerc will use system gpg binary and keystore for all crypto
-# operations. If set to "internal", the internal openpgp keyring will be used.
-# If set to "auto", the system gpg will be preferred unless the internal
-# keyring already exists, in which case the latter will be used.
-#
-# Default: auto
-pgp-provider=gpg
-
-# By default, the file permissions of accounts.conf must be restrictive and
-# only allow reading by the file owner (0600). Set this option to true to
-# ignore this permission check. Use this with care as it may expose your
-# credentials.
-#
-# Default: false
-unsafe-accounts-conf=true # I don't store my creds in this
-
-# Output log messages to specified file. A path starting with ~/ is expanded to
-# the user home dir. When redirecting aerc's output to a file using > shell
-# redirection, this setting is ignored and log messages are printed to stdout.
-#
-#log-file=~/aerc_log
-
-# Only log messages above the specified level to log-file. Supported levels
-# are: trace, debug, info, warn and error. When redirecting aerc's output to
-# a file using > shell redirection, this setting is ignored and the log level
-# is forced to trace.
-#
-# Default: info
-log-level=trace
-
-# Set the $TERM environment variable used for the embedded terminal.
-#
-# Default: xterm-256color
-#term=xterm-256color
-
-# Display OSC8 strings in the embedded terminal
-#
-# Default: false
-#enable-osc8=false
-
-[ui]
-#
-# Describes the format for each row in a mailbox view. This is a comma
-# separated list of column names with an optional align and width suffix. After
-# the column name, one of the '<' (left), ':' (center) or '>' (right) alignment
-# characters can be added (by default, left) followed by an optional width
-# specifier. The width is either an integer representing a fixed number of
-# characters, or a percentage between 1% and 99% representing a fraction of the
-# terminal width. It can also be one of the '*' (auto) or '=' (fit) special
-# width specifiers. Auto width columns will be equally attributed the remaining
-# terminal width. Fit width columns take the width of their contents. If no
-# width specifier is set, '*' is used by default.
-#
-# Default: date<20,name<17,flags>4,subject<*
-#index-columns=date<20,name<17,flags>4,subject<*
-
-spinner = '/,-,\,|'
-
-#
-# Each name in index-columns must have a corresponding column-$name setting.
-# All column-$name settings accept golang text/template syntax. See
-# aerc-templates(7) for available template attributes and functions.
-#
-# Default settings
-#column-date={{.DateAutoFormat .Date.Local}}
-#column-name={{index (.From | names) 0}}
-#column-flags={{.Flags | join ""}}
-#column-subject={{.ThreadPrefix}}{{.Subject}}
-
-#
-# String separator inserted between columns. When the column width specifier is
-# an exact number of characters, the separator is added to it (i.e. the exact
-# width will be fully available for the column contents).
-#
-# Default: " "
-#column-separator=" "
-
-#
-# See time.Time#Format at https://godoc.org/time#Time.Format
-#
-# Default: 2006-01-02 03:04 PM (ISO 8601 + 12 hour time)
-#timestamp-format=2006-01-02 03:04 PM
-
-#
-# Index-only time format for messages that were received/sent today.
-# If this is not specified, timestamp-format is used instead.
-#
-#this-day-time-format=
-
-#
-# Index-only time format for messages that were received/sent within the last
-# 7 days. If this is not specified, timestamp-format is used instead.
-#
-#this-week-time-format=
-
-#
-# Index-only time format for messages that were received/sent this year.
-# If this is not specified, timestamp-format is used instead.
-#
-#this-year-time-format=
-
-#
-# Width of the sidebar, including the border.
-#
-# Default: 20
-#sidebar-width=20
-
-#
-# Message to display when viewing an empty folder.
-#
-# Default: (no messages)
-#empty-message=(no messages)
-
-# Message to display when no folders exists or are all filtered
-#
-# Default: (no folders)
-#empty-dirlist=(no folders)
-
-# Enable mouse events in the ui, e.g. clicking and scrolling with the mousewheel
-#
-# Default: false
-#mouse-enabled=false
-
-#
-# Ring the bell when new messages are received
-#
-# Default: true
-#new-message-bell=true
-
-#
-# Template to use for Account tab titles
-#
-# Default: {{.Account}}
-#tab-title-account={{.Account}}
-
-# Marker to show before a pinned tab's name.
-#
-# Default: `
-#pinned-tab-marker='`'
-
-# Template for the left side of the directory list.
-# See aerc-templates(7) for all available fields and functions.
-#
-# Default: {{.Folder}}
-#dirlist-left={{.Folder}}
-
-# Template for the right side of the directory list.
-# See aerc-templates(7) for all available fields and functions.
-#
-# Default: {{if .Unread}}{{humanReadable .Unread}}/{{end}}{{if .Exists}}{{humanReadable .Exists}}{{end}}
-#dirlist-right={{if .Unread}}{{humanReadable .Unread}}/{{end}}{{if .Exists}}{{humanReadable .Exists}}{{end}}
-
-# Delay after which the messages are actually listed when entering a directory.
-# This avoids loading messages when skipping over folders and makes the UI more
-# responsive. If you do not want that, set it to 0s.
-#
-# Default: 200ms
-#dirlist-delay=200ms
-
-# Display the directory list as a foldable tree that allows to collapse and
-# expand the folders.
-#
-# Default: false
-#dirlist-tree=false
-
-# If dirlist-tree is enabled, set level at which folders are collapsed by
-# default. Set to 0 to disable.
-#
-# Default: 0
-#dirlist-collapse=0
-
-# List of space-separated criteria to sort the messages by, see *sort*
-# command in *aerc*(1) for reference. Prefixing a criterion with "-r "
-# reverses that criterion.
-#
-# Example: "from -r date"
-#
-#sort=
-
-# Moves to next message when the current message is deleted
-#
-# Default: true
-#next-message-on-delete=true
-
-# Automatically set the "seen" flag when a message is opened in the message
-# viewer.
-#
-# Default: true
-#auto-mark-read=true
-
-# The directories where the stylesets are stored. It takes a colon-separated
-# list of directories. If this is unset or if a styleset cannot be found, the
-# following paths will be used as a fallback in that order:
-#
-# ${XDG_CONFIG_HOME:-~/.config}/aerc/stylesets
-# ${XDG_DATA_HOME:-~/.local/share}/aerc/stylesets
-# /usr/local/share/aerc/stylesets
-# /usr/share/aerc/stylesets
-#
-#stylesets-dirs=
-
-# Uncomment to use box-drawing characters for vertical and horizontal borders.
-#
-# Default: " "
-#border-char-vertical=" "
-#border-char-horizontal=" "
-
-# Sets the styleset to use for the aerc ui elements.
-#
-# Default: default
-#styleset-name=default
-
-# Activates fuzzy search in commands and their arguments: the typed string is
-# searched in the command or option in any position, and need not be
-# consecutive characters in the command or option.
-#
-# Default: false
-#fuzzy-complete=false
-
-# How long to wait after the last input before auto-completion is triggered.
-#
-# Default: 250ms
-#completion-delay=250ms
-
-# The minimum required characters to allow auto-completion to be triggered after
-# completion-delay.
-#
-# Default: 1
-#completion-min-chars=1
-
-#
-# Global switch for completion popovers
-#
-# Default: true
-#completion-popovers=true
-
-# Uncomment to use UTF-8 symbols to indicate PGP status of messages
-#
-# Default: ASCII
-#icon-unencrypted=
-#icon-encrypted=✔
-#icon-signed=✔
-#icon-signed-encrypted=✔
-#icon-unknown=✘
-#icon-invalid=⚠
-
-# Reverses the order of the message list. By default, the message list is
-# ordered with the newest (highest UID) message on top. Reversing the order
-# will put the oldest (lowest UID) message on top. This can be useful in cases
-# where the backend does not support sorting.
-#
-# Default: false
-#reverse-msglist-order = false
-
-# Reverse display of the mesage threads. Default order is the the intial
-# message is on the top with all the replies being displayed below. The
-# reverse option will put the initial message at the bottom with the
-# replies on top.
-#
-# Default: false
-#reverse-thread-order=false
-
-# Sort the thread siblings according to the sort criteria for the messages. If
-# sort-thread-siblings is false, the thread siblings will be sorted based on
-# the message UID in ascending order. This option is only applicable for
-# client-side threading with a backend that enables sorting. Note that there's
-# a performance impact when sorting is activated.
-#
-# Default: false
-#sort-thread-siblings=false
-
-#[ui:account=Personal]
-#
-# Enable a threaded view of messages. If this is not supported by the backend
-# (IMAP server or notmuch), threads will be built by the client.
-#
-# Default: false
-threading-enabled=true
-
-# Force client-side thread building
-#
-# Default: false
-#force-client-threads=false
-
-# Debounce client-side thread building
-#
-# Default: 50ms
-#client-threads-delay=50ms
-
-[statusline]
-#
-# Describes the format for the status line. This is a comma separated list of
-# column names with an optional align and width suffix. See [ui].index-columns
-# for more details. To completely mute the status line except for push
-# notifications, explicitly set status-columns to an empty string.
-#
-# Default: left<*,center:=,right>*
-#status-columns=left<*,center:=,right>*
-
-#
-# Each name in status-columns must have a corresponding column-$name setting.
-# All column-$name settings accept golang text/template syntax. See
-# aerc-templates(7) for available template attributes and functions.
-#
-# Default settings
-#column-left=[{{.Account}}] {{.StatusInfo}}
-#column-center={{.PendingKeys}}
-#column-right={{.TrayInfo}}
-
-#
-# String separator inserted between columns.
-# See [ui].column-separator for more details.
-#
-#column-separator=" "
-
-# Specifies the separator between grouped statusline elements.
-#
-# Default: " | "
-#separator=" | "
-
-# Defines the mode for displaying the status elements.
-# Options: text, icon
-#
-# Default: text
-#display-mode=text
-
-[viewer]
-#
-# Specifies the pager to use when displaying emails. Note that some filters
-# may add ANSI codes to add color to rendered emails, so you may want to use a
-# pager which supports ANSI codes.
-#
-# Default: less -R
-#pager=less -R
-
-#
-# If an email offers several versions (multipart), you can configure which
-# mimetype to prefer. For example, this can be used to prefer plaintext over
-# html emails.
-#
-# Default: text/plain,text/html
-#alternatives=text/plain,text/html
-
-#
-# Default setting to determine whether to show full headers or only parsed
-# ones in message viewer.
-#
-# Default: false
-#show-headers=false
-
-#
-# Layout of headers when viewing a message. To display multiple headers in the
-# same row, separate them with a pipe, e.g. "From|To". Rows will be hidden if
-# none of their specified headers are present in the message.
-#
-# Default: From|To,Cc|Bcc,Date,Subject
-#header-layout=From|To,Cc|Bcc,Date,Subject
-
-# Whether to always show the mimetype of an email, even when it is just a single part
-#
-# Default: false
-#always-show-mime=false
-
-# Parses and extracts http links when viewing a message. Links can then be
-# accessed with the open-link command.
-#
-# Default: true
-#parse-http-links=true
-
-[compose]
-#
-# Specifies the command to run the editor with. It will be shown in an embedded
-# terminal, though it may also launch a graphical window if the environment
-# supports it. Defaults to $EDITOR, or vi.
-#editor=
-
-# Address book command
-address-book-cmd = sh -c 'abook --mutt-query "%s" | tail -n +2'
-
-#
-# Default header fields to display when composing a message. To display
-# multiple headers in the same row, separate them with a pipe, e.g. "To|From".
-#
-# Default: To|From,Subject
-#header-layout=To|From,Subject
-
-#
-# Specifies the command to be used to tab-complete email addresses. Any
-# occurrence of "%s" in the address-book-cmd will be replaced with what the
-# user has typed so far.
-#
-# The command must output the completions to standard output, one completion
-# per line. Each line must be tab-delimited, with an email address occurring as
-# the first field. Only the email address field is required. The second field,
-# if present, will be treated as the contact name. Additional fields are
-# ignored.
-#
-# This parameter can also be set per account in accounts.conf.
-#address-book-cmd=
-
-# Specifies the command to be used to select attachments. Any occurence of '%s'
-# in the file-picker-cmd will be replaced the argument <arg> to :attach -m
-# <arg>.
-#
-# The command must output the selected files to standard output, one file per
-# line.
-file-picker-cmd=fzf --multi --query=%s
-
-#
-# Allow to address yourself when replying
-#
-# Default: true
-#reply-to-self=true
-
-#
-# Warn before sending an email that matches the specified regexp but does not
-# have any attachments. Leave empty to disable this feature.
-#
-# Uses Go's regexp syntax, documented at https://golang.org/s/re2syntax. The
-# "(?im)" flags are set by default (case-insensitive and multi-line).
-#
-# Example:
-# no-attachment-warning=^[^>]*attach(ed|ment)
-#
-#no-attachment-warning=
-
-#
-# When set, aerc will generate "format=flowed" bodies with a content type of
-# "text/plain; format=flowed" as described in RFC3676. This format is easier to
-# handle for some mailing software, and generally just looks like ordinary
-# text. To actually make use of this format's features, you'll need support in
-# your editor.
-#
-format-flowed=true
-
-[multipart-converters]
-#
-# Converters allow to generate multipart/alternative messages by converting the
-# main text/plain part into any other MIME type. Only exact MIME types are
-# accepted. The commands are invoked with sh -c and are expected to output
-# valid UTF-8 text.
-#
-# Example (obviously, this requires that you write your main text/plain body
-# using the markdown syntax):
-text/html=pandoc --wrap=preserve -f gfm+hard_line_breaks -t html --standalone
-
-[filters]
-#
-# Filters allow you to pipe an email body through a shell command to render
-# certain emails differently, e.g. highlighting them with ANSI escape codes.
-#
-# The commands are invoked with sh -c. The following folders are appended to
-# the system $PATH to allow referencing filters from their name only:
-#
-# ${XDG_CONFIG_HOME:-~/.config}/aerc/filters
-# ${XDG_DATA_HOME:-~/.local/share}/aerc/filters
-# $PREFIX/share/aerc/filters
-# /usr/share/aerc/filters
-#
-# The following variables are defined in the filter command environment:
-#
-# AERC_MIME_TYPE the part MIME type/subtype
-# AERC_FORMAT the part content type format= parameter
-# AERC_FILENAME the attachment filename (if any)
-# AERC_SUBJECT the message Subject header value
-# AERC_FROM the message From header value
-#
-# The first filter which matches the email's mimetype will be used, so order
-# them from most to least specific.
-#
-# You can also match on non-mimetypes, by prefixing with the header to match
-# against (non-case-sensitive) and a comma, e.g. subject,text will match a
-# subject which contains "text". Use header,~regex to match against a regex.
-#
-#text/plain=colorize
-#text/calendar=calendar
-message/delivery-status=bat -fn
-message/rfc822=bat -fn
-text/html=pandoc -f html -t plain | bat -fn
-#text/html=html | colorize
-text/*=bat -fn
-application/x-sh=bat -fn -l sh
-#image/*=catimg -w $(tput cols) -
-#subject,~Git(hub|lab)=lolcat -f
-#from,thatguywhodoesnothardwraphismessages=wrap -w 100 | colorize
-
-# This special filter is only used to post-process email headers when
-# [viewer].show-headers=true
-# By default, headers are piped directly into the pager.
-#
-#.headers=bat -fp
-
-[openers]
-#
-# Openers allow you to specify the command to use for the :open and :open-link
-# actions on a per-MIME-type basis. The :open-link URL scheme is used to
-# determine the MIME type as follows: x-scheme-handler/<scheme>.
-#
-# {} is expanded as the temporary filename to be opened. If it is not
-# encountered in the command, the temporary filename will be appened to the end
-# of the command.
-#
-# Like [filters], openers support basic shell globbing. The first opener which
-# matches the part's MIME type (or URL scheme handler MIME type) will be used,
-# so order them from most to least specific.
-#
-# Examples:
-# x-scheme-handler/irc=hexchat
-# x-scheme-handler/http*=firefox
-# text/html=surf -dfgms
-# text/plain=gvim {} +125
-# message/rfc822=thunderbird
-
-[hooks]
-#
-# Hooks are triggered whenever the associated event occurs.
-
-#
-# Executed when a new email arrives in the selected folder
-mail-received=notify-send "$AERC_FROM_NAME" "$AERC_SUBJECT"
-
-#
-# Executed when aerc starts
-#aerc-startup=aerc :terminal calcurse && aerc :next-tab
-
-#
-# Executed when aerc shuts down.
-#aerc-shutdown=
-
-[templates]
-# Templates are used to populate email bodies automatically.
-#
-
-# The directories where the templates are stored. It takes a colon-separated
-# list of directories. If this is unset or if a template cannot be found, the
-# following paths will be used as a fallback in that order:
-#
-# ${XDG_CONFIG_HOME:-~/.config}/aerc/templates
-# ${XDG_DATA_HOME:-~/.local/share}/aerc/templates
-# /usr/local/share/aerc/templates
-# /usr/share/aerc/templates
-#
-#template-dirs=
-
-# The default template to be used for new messages.
-#
-# default: new_message
-#new-message=new_message
-
-# The default template to be used for quoted replies.
-#
-# default: quoted_reply
-#quoted-reply=quoted_reply
-
-# The default template to be used for forward as body.
-#
-# default: forward_as_body
-#forwards=forward_as_body
diff --git a/home-config/aerc/binds.conf b/home-config/aerc/binds.conf
deleted file mode 100644
index f06ee85..0000000
--- a/home-config/aerc/binds.conf
+++ /dev/null
@@ -1,144 +0,0 @@
-# Binds are of the form <key sequence> = <command to run>
-# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
-# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit
-<C-p> = :prev-tab<Enter>
-<C-n> = :next-tab<Enter>
-<C-t> = :term<Enter>
-? = :help keys<Enter>
-
-[messages]
-q = :quit<Enter>
-
-j = :next<Enter>
-<Down> = :next<Enter>
-<C-d> = :next 50%<Enter>
-<C-f> = :next 100%<Enter>
-<PgDn> = :next 100%<Enter>
-
-k = :prev<Enter>
-<Up> = :prev<Enter>
-<C-u> = :prev 50%<Enter>
-<C-b> = :prev 100%<Enter>
-<PgUp> = :prev 100%<Enter>
-g = :select 0<Enter>
-G = :select -1<Enter>
-<C-r> = :read<Enter>
-<C-u> = :unread<Enter>
-
-J = :next-folder<Enter>
-K = :prev-folder<Enter>
-H = :collapse-folder<Enter>
-L = :expand-folder<Enter>
-
-v = :mark -t<Enter>
-V = :mark -v<Enter>
-
-T = :toggle-threads<Enter>
-
-<Enter> = :view<Enter>
-dd = :mv Trash<Enter>
-dg = :mv [Gmail]/Trash<Enter>
-D = :delete<Enter>
-A = :archive year<Enter>
-
-C = :compose<Enter>
-
-rr = :reply -a<Enter>
-rq = :reply -aq<Enter>
-Rr = :reply<Enter>
-Rq = :reply -q<Enter>
-f = :forward -A<Enter>
-
-c = :cf<space>
-$ = :term<space>
-! = :term<space>
-| = :pipe<space>
-
-/ = :search<space>
-\ = :filter<space>
-n = :next-result<Enter>
-N = :prev-result<Enter>
-<Esc> = :clear<Enter>
-
-[messages:folder=Drafts]
-<Enter> = :recall<Enter>
-
-[view]
-/ = :toggle-key-passthrough<Enter>/
-q = :close<Enter>
-O = :open<Enter>
-S = :save<space>
-| = :pipe<space>
-D = :delete<Enter>
-dd = :mv Trash<Enter>
-dg = :mv [Gmail]/Trash<Enter>
-A = :archive year<Enter>
-
-<C-l> = :open-link <space>
-
-f = :forward -A<Enter>
-rr = :reply -a<Enter>
-rq = :reply -aq<Enter>
-Rr = :reply<Enter>
-Rq = :reply -q<Enter>
-
-H = :toggle-headers<Enter>
-<C-k> = :prev-part<Enter>
-<C-j> = :next-part<Enter>
-J = :next<Enter>
-K = :prev<Enter>
-
-[view::passthrough]
-$noinherit = true
-$ex = <C-x>
-<Esc> = :toggle-key-passthrough<Enter>
-
-[compose]
-# Keybindings used when the embedded terminal is not selected in the compose
-# view
-$noinherit = true
-$ex = <C-x>
-<C-k> = :prev-field<Enter>
-<C-j> = :next-field<Enter>
-<A-p> = :switch-account -p<Enter>
-<A-n> = :switch-account -n<Enter>
-<tab> = :next-field<Enter>
-<backtab> = :prev-field<Enter>
-<C-p> = :prev-tab<Enter>
-<C-n> = :next-tab<Enter>
-<C-c> = :cc<Enter>
-<C-b> = :bcc<Enter>
-<C-q> = :abort<Enter>
-
-[compose::editor]
-# Keybindings used when the embedded terminal is selected in the compose view
-$noinherit = true
-$ex = <C-x>
-<C-k> = :prev-field<Enter>
-<C-j> = :next-field<Enter>
-<C-p> = :prev-tab<Enter>
-<C-n> = :next-tab<Enter>
-<C-q> = :abort<Enter>
-
-[compose::review]
-# Keybindings used when reviewing a message to be sent
-y = :send<Enter>
-n = :abort<Enter>
-v = :preview<Enter>
-p = :postpone<Enter>
-q = :choose -o d discard abort -o p postpone postpone<Enter>
-e = :edit<Enter>
-a = :attach<space>
-d = :detach<space>
-S = :sign<Enter>
-E = :encrypt<Enter>
-A = :attach-key<Enter>
-C = :multipart text/html<Enter>
-
-[terminal]
-$noinherit = true
-$ex = <C-x>
-<C-q> = :close<Enter>
-
-<C-p> = :prev-tab<Enter>
-<C-n> = :next-tab<Enter>
diff --git a/home-config/aerc/signature_personal b/home-config/aerc/signature_personal
deleted file mode 100644
index d9a8de7..0000000
--- a/home-config/aerc/signature_personal
+++ /dev/null
@@ -1,3 +0,0 @@
---
-Best,
-Ryan Schanzenbacher
diff --git a/home-config/aerc/signature_rit_personal b/home-config/aerc/signature_rit_personal
deleted file mode 100644
index efe4ceb..0000000
--- a/home-config/aerc/signature_rit_personal
+++ /dev/null
@@ -1,5 +0,0 @@
---
-Best,
-Ryan Schanzenbacher
-Rochester Institute of Technology
-Cybersecurity BS/MS Student
diff --git a/home-config/aerc/templates/quoted_reply b/home-config/aerc/templates/quoted_reply
deleted file mode 100644
index dc184d9..0000000
--- a/home-config/aerc/templates/quoted_reply
+++ /dev/null
@@ -1,5 +0,0 @@
-X-Mailer: aerc {{version}}
-
-
-On {{dateFormat (.OriginalDate | toLocal) "Mon Jan 2, 2006 at 3:04 PM MST"}}, {{(index .OriginalFrom 0).Name}} wrote:
-{{trimSignature .OriginalText | quote}}
diff --git a/home-config/alacritty/alacritty.yml b/home-config/alacritty/alacritty.yml
deleted file mode 100644
index 4fbd991..0000000
--- a/home-config/alacritty/alacritty.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-window:
- opacity: 0.70
-font:
- size: 15
- normal:
- family: "Monofur Nerd Font Mono"
- style: Regular
-
- bold:
- family: "Monofur Nerd Font Mono"
- style: Bold
-
- italic:
- family: "Monofur Nerd Font Mono"
- style: Italic
diff --git a/home-config/bash_profile b/home-config/bash_profile
index 6bc7def..72ea319 100644
--- a/home-config/bash_profile
+++ b/home-config/bash_profile
@@ -1,16 +1,13 @@
export MOZ_ENABLE_WAYLAND=1
-export XDG_CURRENT_DESKTOP=sway
-export XDG_SESSION_DESKTOP=sway
-export _JAVA_AWT_WM_NONREPEATING=1
-
export XDG_DATA_DIRS=$XDG_DATA_DIRS:~/.nix-profile/share
-export PATH=~/.local/bin:$PATH:~/.nix-profile/bin
+export PATH=~/.local/bin:$PATH:~/.nix-profile/bin:~/.go/bin
+export GOPATH=~/.go
# Honor per-interactive-shell startup file
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
if [ -z "$SSH_CLIENT" ] && [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
- exec Hyprland
+ exec nixGLIntel Hyprland
fi
diff --git a/home-config/bashrc b/home-config/bashrc
index 0c61ee6..5e12cf6 100644
--- a/home-config/bashrc
+++ b/home-config/bashrc
@@ -44,6 +44,8 @@ alias gc='git -C ~/.config/guix add . && git -C ~/.config/guix commit && git -C
alias cg='git -C ~/.config/guix pull'
alias cgh='git -C ~/.config/guix pull stationeryh main'
alias gencs="awk 'BEGIN {print \"# Crib Sheet\"} /<!-- START CS -->/,/<!-- END CS -->/ {if (! /<!-- START CS -->/ && ! /<!-- END CS -->/) print; if (/<!-- END CS -->/) print \"\"}' notes.mkd | pandoc -f gfm -t pdf | zathura -"
+alias dockerg="docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix"
+
export XDG_DATA_DIRS=$XDG_DATA_DIRS:/var/lib/flatpak/exports/share:/home/ryan/.local/share/flatpak/exports/share
# GPG SETUP FOR SSH
@@ -51,5 +53,15 @@ export XDG_DATA_DIRS=$XDG_DATA_DIRS:/var/lib/flatpak/exports/share:/home/ryan/.l
#gpgconf --launch gpg-agent
export GPG_TTY=$(tty)
-# Setup zoxide for cd command provider
+# eza
+alias ls='eza --icons=always -Gx'
+
+# Delta
+alias diff='delta'
+
+# Starship
+eval "$(starship init bash)"
+
+# Zoxide
eval "$(zoxide init --cmd cd bash)"
+
diff --git a/home-config/docker/cli-plugins/docker-compose b/home-config/docker/cli-plugins/docker-compose
index bf829e0..911e760 100755
Binary files a/home-config/docker/cli-plugins/docker-compose and b/home-config/docker/cli-plugins/docker-compose differ
diff --git a/home-config/fish/completions/fisher.fish b/home-config/fish/completions/fisher.fish
new file mode 100644
index 0000000..6d23ce4
--- /dev/null
+++ b/home-config/fish/completions/fisher.fish
@@ -0,0 +1,7 @@
+complete --command fisher --exclusive --long help --description "Print help"
+complete --command fisher --exclusive --long version --description "Print version"
+complete --command fisher --exclusive --condition __fish_use_subcommand --arguments install --description "Install plugins"
+complete --command fisher --exclusive --condition __fish_use_subcommand --arguments update --description "Update installed plugins"
+complete --command fisher --exclusive --condition __fish_use_subcommand --arguments remove --description "Remove installed plugins"
+complete --command fisher --exclusive --condition __fish_use_subcommand --arguments list --description "List installed plugins matching regex"
+complete --command fisher --exclusive --condition "__fish_seen_subcommand_from update remove" --arguments "(fisher list)"
diff --git a/home-config/fish/completions/fzf_configure_bindings.fish b/home-config/fish/completions/fzf_configure_bindings.fish
new file mode 100644
index 0000000..b38ef92
--- /dev/null
+++ b/home-config/fish/completions/fzf_configure_bindings.fish
@@ -0,0 +1,8 @@
+complete fzf_configure_bindings --no-files
+complete fzf_configure_bindings --long help --short h --description "Print help" --condition "not __fish_seen_argument --help -h"
+complete fzf_configure_bindings --long directory --description "Change the key binding for Search Directory" --condition "not __fish_seen_argument --directory"
+complete fzf_configure_bindings --long git_log --description "Change the key binding for Search Git Log" --condition "not __fish_seen_argument --git_log"
+complete fzf_configure_bindings --long git_status --description "Change the key binding for Search Git Status" --condition "not __fish_seen_argument --git_status"
+complete fzf_configure_bindings --long history --description "Change the key binding for Search History" --condition "not __fish_seen_argument --history"
+complete fzf_configure_bindings --long processes --description "Change the key binding for Search Processes" --condition "not __fish_seen_argument --processes"
+complete fzf_configure_bindings --long variables --description "Change the key binding for Search Variables" --condition "not __fish_seen_argument --variables"
diff --git a/home-config/fish/completions/tide.fish b/home-config/fish/completions/tide.fish
new file mode 100644
index 0000000..1ba1960
--- /dev/null
+++ b/home-config/fish/completions/tide.fish
@@ -0,0 +1,13 @@
+complete tide --no-files
+
+set -l subcommands bug-report configure reload
+
+complete tide -x -n __fish_use_subcommand -a bug-report -d "Print info for use in bug reports"
+complete tide -x -n __fish_use_subcommand -a configure -d "Run the configuration wizard"
+complete tide -x -n __fish_use_subcommand -a reload -d "Reload tide configuration"
+
+complete tide -x -n "not __fish_seen_subcommand_from $subcommands" -s h -l help -d "Print help message"
+complete tide -x -n "not __fish_seen_subcommand_from $subcommands" -s v -l version -d "Print tide version"
+
+complete tide -x -n '__fish_seen_subcommand_from bug-report' -l clean -d "Run clean Fish instance and install Tide"
+complete tide -x -n '__fish_seen_subcommand_from bug-report' -l verbose -d "Print full Tide configuration"
diff --git a/home-config/fish/conf.d/_tide_init.fish b/home-config/fish/conf.d/_tide_init.fish
new file mode 100644
index 0000000..b448002
--- /dev/null
+++ b/home-config/fish/conf.d/_tide_init.fish
@@ -0,0 +1,44 @@
+function _tide_init_install --on-event _tide_init_install
+ set -U VIRTUAL_ENV_DISABLE_PROMPT true
+
+ source (functions --details _tide_sub_configure)
+ _load_config lean
+ _tide_finish
+
+ if status is-interactive
+ tide bug-report --check || sleep 4
+
+ if contains ilancosman/tide (string lower $_fisher_plugins)
+ set_color bryellow
+ echo "ilancosman/tide is a development branch. Please install from a release tag:"
+ _tide_fish_colorize "fisher install ilancosman/tide@v6"
+ sleep 3
+ end
+
+ switch (read --prompt-str="Configure tide prompt? [Y/n] " | string lower)
+ case y ye yes ''
+ tide configure
+ case '*'
+ echo -s \n 'Run ' (_tide_fish_colorize "tide configure") ' to customize your prompt.'
+ end
+ end
+end
+
+function _tide_init_update --on-event _tide_init_update
+ # Warn users who install from main branch
+ if contains ilancosman/tide (string lower $_fisher_plugins)
+ set_color bryellow
+ echo "ilancosman/tide is a development branch. Please install from a release tag:"
+ _tide_fish_colorize "fisher install ilancosman/tide@v6"
+ sleep 3
+ end
+
+ # Set (disable) the new jobs variable
+ set -q tide_jobs_number_threshold || set -U tide_jobs_number_threshold 1000
+end
+
+function _tide_init_uninstall --on-event _tide_init_uninstall
+ set -e VIRTUAL_ENV_DISABLE_PROMPT
+ set -e (set -U --names | string match --entire -r '^_?tide')
+ functions --erase (functions --all | string match --entire -r '^_?tide')
+end
diff --git a/home-config/fish/conf.d/fzf.fish b/home-config/fish/conf.d/fzf.fish
new file mode 100644
index 0000000..8156c11
--- /dev/null
+++ b/home-config/fish/conf.d/fzf.fish
@@ -0,0 +1,28 @@
+# fzf.fish is only meant to be used in interactive mode. If not in interactive mode and not in CI, skip the config to speed up shell startup
+if not status is-interactive && test "$CI" != true
+ exit
+end
+
+# Because of scoping rules, to capture the shell variables exactly as they are, we must read
+# them before even executing _fzf_search_variables. We use psub to store the
+# variables' info in temporary files and pass in the filenames as arguments.
+# This variable is global so that it can be referenced by fzf_configure_bindings and in tests
+set --global _fzf_search_vars_command '_fzf_search_variables (set --show | psub) (set --names | psub)'
+
+
+# Install the default bindings, which are mnemonic and minimally conflict with fish's preset bindings
+fzf_configure_bindings
+
+# Doesn't erase autoloaded _fzf_* functions because they are not easily accessible once key bindings are erased
+function _fzf_uninstall --on-event fzf_uninstall
+ _fzf_uninstall_bindings
+
+ set --erase _fzf_search_vars_command
+ functions --erase _fzf_uninstall _fzf_migration_message _fzf_uninstall_bindings fzf_configure_bindings
+ complete --erase fzf_configure_bindings
+
+ set_color cyan
+ echo "fzf.fish uninstalled."
+ echo "You may need to manually remove fzf_configure_bindings from your config.fish if you were using custom key bindings."
+ set_color normal
+end
diff --git a/home-config/fish/conf.d/nix-env.fish b/home-config/fish/conf.d/nix-env.fish
new file mode 100644
index 0000000..22d7b31
--- /dev/null
+++ b/home-config/fish/conf.d/nix-env.fish
@@ -0,0 +1,138 @@
+# Setup Nix
+
+# We need to distinguish between single-user and multi-user installs.
+# This is difficult because there's no official way to do this.
+# We could look for the presence of /nix/var/nix/daemon-socket/socket but this will fail if the
+# daemon hasn't started yet. /nix/var/nix/daemon-socket will exist if the daemon has ever run, but
+# I don't think there's any protection against accidentally running `nix-daemon` as a user.
+# We also can't just look for /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh because
+# older single-user installs used the default profile instead of a per-user profile.
+# We can still check for it first, because all multi-user installs should have it, and so if it's
+# not present that's a pretty big indicator that this is a single-user install. If it does exist,
+# we still need to verify the install type. To that end we'll look for a root owner and sticky bit
+# on /nix/store. Multi-user installs set both, single-user installs don't. It's certainly possible
+# someone could do a single-user install as root and then manually set the sticky bit but that
+# would be extremely unusual.
+
+set -l nix_profile_path /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
+set -l single_user_profile_path ~/.nix-profile/etc/profile.d/nix.sh
+if test -e $nix_profile_path
+ # The path exists. Double-check that this is a multi-user install.
+ # We can't just check for ~/.nix-profile/… because this may be a single-user install running as
+ # the wrong user.
+
+ # stat is not portable. Splitting the output of ls -nd is reliable on most platforms.
+ set -l owner (string split -n ' ' (command ls -nd /nix/store 2>/dev/null))[3]
+ if not test -k /nix/store -a $owner -eq 0
+ # /nix/store is either not owned by root or not sticky. Assume single-user.
+ set nix_profile_path $single_user_profile_path
+ end
+else
+ # The path doesn't exist. Assume single-user
+ set nix_profile_path $single_user_profile_path
+end
+
+if test -e $nix_profile_path
+ # Source the nix setup script
+ # We're going to run the regular Nix profile under bash and then print out a few variables
+ for line in (command env -u BASH_ENV bash -c '. "$0"; for name in PATH "${!NIX_@}"; do printf "%s=%s\0" "$name" "${!name}"; done' $nix_profile_path | string split0)
+ set -xg (string split -m 1 = $line)
+ end
+
+ # Insert Nix's fish share directories into fish's special variables.
+ # nixpkgs-installed fish tries to set these up already if NIX_PROFILES is defined, which won't
+ # be the case when sourcing $__fish_data_dir/share/config.fish normally, but might be for a
+ # recursive invocation. To guard against that, we'll only insert paths that don't already exit.
+ # Furthermore, for the vendor_conf.d sourcing, we'll use the pre-existing presence of a path in
+ # $fish_function_path to determine whether we want to source the relevant vendor_conf.d folder.
+
+ # To start, let's locally define NIX_PROFILES if it doesn't already exist.
+ set -al NIX_PROFILES
+ if test (count $NIX_PROFILES) -eq 0
+ set -a NIX_PROFILES $HOME/.nix-profile
+ end
+ # Replicate the logic from nixpkgs version of $__fish_data_dir/__fish_build_paths.fish.
+ set -l __nix_profile_paths (string split ' ' -- $NIX_PROFILES)[-1..1]
+ set -l __extra_completionsdir \
+ $__nix_profile_paths/etc/fish/completions \
+ $__nix_profile_paths/share/fish/vendor_completions.d
+ set -l __extra_functionsdir \
+ $__nix_profile_paths/etc/fish/functions \
+ $__nix_profile_paths/share/fish/vendor_functions.d
+ set -l __extra_confdir \
+ $__nix_profile_paths/etc/fish/conf.d \
+ $__nix_profile_paths/share/fish/vendor_conf.d \
+
+ ### Configure fish_function_path ###
+ # Remove any of our extra paths that may already exist.
+ # Record the equivalent __extra_confdir path for any function path that exists.
+ set -l existing_conf_paths
+ for path in $__extra_functionsdir
+ if set -l idx (contains --index -- $path $fish_function_path)
+ set -e fish_function_path[$idx]
+ set -a existing_conf_paths $__extra_confdir[(contains --index -- $path $__extra_functionsdir)]
+ end
+ end
+ # Insert the paths before $__fish_data_dir.
+ if set -l idx (contains --index -- $__fish_data_dir/functions $fish_function_path)
+ # Fish has no way to simply insert into the middle of an array.
+ set -l new_path $fish_function_path[1..$idx]
+ set -e new_path[$idx]
+ set -a new_path $__extra_functionsdir
+ set fish_function_path $new_path $fish_function_path[$idx..-1]
+ else
+ set -a fish_function_path $__extra_functionsdir
+ end
+
+ ### Configure fish_complete_path ###
+ # Remove any of our extra paths that may already exist.
+ for path in $__extra_completionsdir
+ if set -l idx (contains --index -- $path $fish_complete_path)
+ set -e fish_complete_path[$idx]
+ end
+ end
+ # Insert the paths before $__fish_data_dir.
+ if set -l idx (contains --index -- $__fish_data_dir/completions $fish_complete_path)
+ set -l new_path $fish_complete_path[1..$idx]
+ set -e new_path[$idx]
+ set -a new_path $__extra_completionsdir
+ set fish_complete_path $new_path $fish_complete_path[$idx..-1]
+ else
+ set -a fish_complete_path $__extra_completionsdir
+ end
+
+ ### Source conf directories ###
+ # The built-in directories were already sourced during shell initialization.
+ # Any __extra_confdir that came from $__fish_data_dir/__fish_build_paths.fish was also sourced.
+ # As explained above, we're using the presence of pre-existing paths in $fish_function_path as a
+ # signal that the corresponding conf dir has also already been sourced.
+ # In order to simulate this, we'll run through the same algorithm as found in
+ # $__fish_data_dir/config.fish except we'll avoid sourcing the file if it comes from an
+ # already-sourced location.
+ # Caveats:
+ # * Files will be sourced in a different order than we'd ideally do (because we're coming in
+ # after the fact to source them).
+ # * If there are existing extra conf paths, files in them may have been sourced that should have
+ # been suppressed by paths we're inserting in front.
+ # * Similarly any files in $__fish_data_dir/vendor_conf.d that should have been suppressed won't
+ # have been.
+ set -l sourcelist
+ for file in $__fish_config_dir/conf.d/*.fish $__fish_sysconf_dir/conf.d/*.fish
+ # We know these paths were sourced already. Just record them.
+ set -l basename (string replace -r '^.*/' '' -- $file)
+ contains -- $basename $sourcelist
+ or set -a sourcelist $basename
+ end
+ for root in $__extra_confdir
+ for file in $root/*.fish
+ set -l basename (string replace -r '^.*/' '' -- $file)
+ contains -- $basename $sourcelist
+ and continue
+ set -a sourcelist $basename
+ contains -- $root $existing_conf_paths
+ and continue # this is a pre-existing path, it will have been sourced already
+ [ -f $file -a -r $file ]
+ and source $file
+ end
+ end
+end
diff --git a/home-config/fish/config.fish b/home-config/fish/config.fish
new file mode 100644
index 0000000..7e054bf
--- /dev/null
+++ b/home-config/fish/config.fish
@@ -0,0 +1,43 @@
+if status is-login
+ eval "$(guix package --search-paths \
+ -p ~/.config/guix/current \
+ -p ~/.guix-profile \
+ -p /run/current-system/profile)"
+
+ fenv source /etc/profile
+ set -gx HOME_ENVIRONMENT $HOME/.guix-home
+ fenv source $HOME_ENVIRONMENT/setup-environment
+ fenv $HOME_ENVIRONMENT/on-first-login
+ fish_add_path -Pp ~/.local/bin
+ fish_add_path -Pp ~/.guix-home/profile/bin
+ fish_add_path -Pp /run/setuid-programs
+ fish_add_path -Pp ~/.nix-profile/bin
+ fish_add_path -Pp ~/.go/bin
+ set -gx GOPATH ~/.go
+ set -gx EDITOR nvim
+ set -gax --path XDG_DATA_DIRS ~/.nix-profile/share
+ # Bad
+ find ~/.config/fish/ -name "*tmp*" -exec rm {} +
+end
+if status is-interactive
+ set -gax --path XDG_DATA_DIRS ~/.local/share/flatpak/exports/share
+
+ set GPG_TTY $(tty)
+ export GPG_TTY
+ # Commands to run in interactive sessions can go here
+ alias quit exit
+ alias cat "bat --paging=never"
+ alias ds "sudo -E guix system -L ~/.config/guix/modules reconfigure ~/.config/guix/$(prompt_hostname).scm"
+ alias dh "guix home -L ~/.config/guix/modules reconfigure ~/.config/guix/home-config/home-configuration.scm && home-manager switch"
+ alias gc "git -C ~/.config/guix add . && git -C ~/.config/guix commit && git -C ~/.config/guix push all"
+ alias cg "git -C ~/.config/guix pull"
+ alias cgh "git -C ~/.config/guix pull stationeryh main"
+ alias python "python3"
+ alias spt "spotify_player"
+ alias ls "ls -p --color=auto"
+ alias grep "grep --color=auto"
+ alias ll "ls -l"
+
+ zoxide init --cmd cd fish | source
+
+end
diff --git a/home-config/fish/functions/_fzf_configure_bindings_help.fish b/home-config/fish/functions/_fzf_configure_bindings_help.fish
new file mode 100644
index 0000000..ecfe68e
--- /dev/null
+++ b/home-config/fish/functions/_fzf_configure_bindings_help.fish
@@ -0,0 +1,43 @@
+function _fzf_configure_bindings_help --description "Prints the help message for fzf_configure_bindings."
+ echo "\
+USAGE:
+ fzf_configure_bindings [--COMMAND=[KEY_SEQUENCE]...]
+
+DESCRIPTION
+ fzf_configure_bindings installs key bindings for fzf.fish's commands and erases any bindings it
+ previously installed. It installs bindings for both default and insert modes. fzf.fish executes
+ it without options on fish startup to install the out-of-the-box key bindings.
+
+ By default, commands are bound to a mnemonic key sequence, shown below. Each command's binding
+ can be configured using a namesake corresponding option:
+ COMMAND | DEFAULT KEY SEQUENCE | CORRESPONDING OPTION
+ Search Directory | Ctrl+Alt+F (F for file) | --directory
+ Search Git Log | Ctrl+Alt+L (L for log) | --git_log
+ Search Git Status | Ctrl+Alt+S (S for status) | --git_status
+ Search History | Ctrl+R (R for reverse) | --history
+ Search Processes | Ctrl+Alt+P (P for process) | --processes
+ Search Variables | Ctrl+V (V for variable) | --variables
+ Override a command's binding by specifying its corresponding option with the desired key
+ sequence. Disable a command's binding by specifying its corresponding option with no value.
+
+ Because fzf_configure_bindings erases bindings it previously installed, it can be cleanly
+ executed multiple times. Once the desired fzf_configure_bindings command has been found, add it
+ to your config.fish in order to persist the customized bindings.
+
+ In terms of validation, fzf_configure_bindings fails if passed unknown options. It expects an
+ equals sign between an option's name and value. However, it does not validate key sequences.
+
+ Pass -h or --help to print this help message and exit.
+
+EXAMPLES
+ Default bindings but bind Search Directory to Ctrl+F and Search Variables to Ctrl+Alt+V
+ \$ fzf_configure_bindings --directory=\cf --variables=\e\cv
+ Default bindings but disable Search History
+ \$ fzf_configure_bindings --history=
+ An agglomeration of different options
+ \$ fzf_configure_bindings --git_status=\cg --history=\ch --variables= --processes=
+
+SEE Also
+ To learn more about fish key bindings, see bind(1) and fish_key_reader(1).
+"
+end
diff --git a/home-config/fish/functions/_fzf_extract_var_info.fish b/home-config/fish/functions/_fzf_extract_var_info.fish
new file mode 100644
index 0000000..dd4e952
--- /dev/null
+++ b/home-config/fish/functions/_fzf_extract_var_info.fish
@@ -0,0 +1,15 @@
+# helper function for _fzf_search_variables
+function _fzf_extract_var_info --argument-names variable_name set_show_output --description "Extract and reformat lines pertaining to \$variable_name from \$set_show_output."
+ # Extract only the lines about the variable, all of which begin with either
+ # $variable_name: ...or... $variable_name[
+ string match --regex "^\\\$$variable_name(?::|\[).*" <$set_show_output |
+
+ # Strip the variable name prefix, including ": " for scope info lines
+ string replace --regex "^\\\$$variable_name(?:: )?" '' |
+
+ # Distill the lines of values, replacing...
+ # [1]: |value|
+ # ...with...
+ # [1] value
+ string replace --regex ": \|(.*)\|" ' $1'
+end
diff --git a/home-config/fish/functions/_fzf_preview_changed_file.fish b/home-config/fish/functions/_fzf_preview_changed_file.fish
new file mode 100644
index 0000000..78dd561
--- /dev/null
+++ b/home-config/fish/functions/_fzf_preview_changed_file.fish
@@ -0,0 +1,49 @@
+# helper for _fzf_search_git_status
+# arg should be a line from git status --short, e.g.
+# MM functions/_fzf_preview_changed_file.fish
+# D README.md
+# R LICENSE -> "New License"
+function _fzf_preview_changed_file --argument-names path_status --description "Show the git diff of the given file."
+ # remove quotes because they'll be interpreted literally by git diff
+ # no need to requote when referencing $path because fish does not perform word splitting
+ # https://fishshell.com/docs/current/fish_for_bash_users.html
+ set -f path (string unescape (string sub --start 4 $path_status))
+ # first letter of short format shows index, second letter shows working tree
+ # https://git-scm.com/docs/git-status/2.35.0#_short_format
+ set -f index_status (string sub --length 1 $path_status)
+ set -f working_tree_status (string sub --start 2 --length 1 $path_status)
+
+ set -f diff_opts --color=always
+
+ if test $index_status = '?'
+ _fzf_report_diff_type Untracked
+ _fzf_preview_file $path
+ else if contains {$index_status}$working_tree_status DD AU UD UA DU AA UU
+ # Unmerged statuses taken directly from git status help's short format table
+ # Unmerged statuses are mutually exclusive with other statuses, so if we see
+ # these, then safe to assume the path is unmerged
+ _fzf_report_diff_type Unmerged
+ git diff $diff_opts -- $path
+ else
+ if test $index_status != ' '
+ _fzf_report_diff_type Staged
+
+ # renames are only detected in the index, never working tree, so only need to test for it here
+ # https://stackoverflow.com/questions/73954214
+ if test $index_status = R
+ # diff the post-rename path with the original path, otherwise the diff will show the entire file as being added
+ set -f orig_and_new_path (string split --max 1 -- ' -> ' $path)
+ git diff --staged $diff_opts -- $orig_and_new_path[1] $orig_and_new_path[2]
+ # path currently has the form of "original -> current", so we need to correct it before it's used below
+ set path $orig_and_new_path[2]
+ else
+ git diff --staged $diff_opts -- $path
+ end
+ end
+
+ if test $working_tree_status != ' '
+ _fzf_report_diff_type Unstaged
+ git diff $diff_opts -- $path
+ end
+ end
+end
diff --git a/home-config/fish/functions/_fzf_preview_file.fish b/home-config/fish/functions/_fzf_preview_file.fish
new file mode 100644
index 0000000..c926475
--- /dev/null
+++ b/home-config/fish/functions/_fzf_preview_file.fish
@@ -0,0 +1,43 @@
+# helper function for _fzf_search_directory and _fzf_search_git_status
+function _fzf_preview_file --description "Print a preview for the given file based on its file type."
+ # because there's no way to guarantee that _fzf_search_directory passes the path to _fzf_preview_file
+ # as one argument, we collect all the arguments into one single variable and treat that as the path
+ set -f file_path $argv
+
+ if test -L "$file_path" # symlink
+ # notify user and recurse on the target of the symlink, which can be any of these file types
+ set -l target_path (realpath "$file_path")
+
+ set_color yellow
+ echo "'$file_path' is a symlink to '$target_path'."
+ set_color normal
+
+ _fzf_preview_file "$target_path"
+ else if test -f "$file_path" # regular file
+ if set --query fzf_preview_file_cmd
+ # need to escape quotes to make sure eval receives file_path as a single arg
+ eval "$fzf_preview_file_cmd '$file_path'"
+ else
+ bat --style=numbers --color=always "$file_path"
+ end
+ else if test -d "$file_path" # directory
+ if set --query fzf_preview_dir_cmd
+ # see above
+ eval "$fzf_preview_dir_cmd '$file_path'"
+ else
+ # -A list hidden files as well, except for . and ..
+ # -F helps classify files by appending symbols after the file name
+ command ls -A -F "$file_path"
+ end
+ else if test -c "$file_path"
+ _fzf_report_file_type "$file_path" "character device file"
+ else if test -b "$file_path"
+ _fzf_report_file_type "$file_path" "block device file"
+ else if test -S "$file_path"
+ _fzf_report_file_type "$file_path" socket
+ else if test -p "$file_path"
+ _fzf_report_file_type "$file_path" "named pipe"
+ else
+ echo "$file_path doesn't exist." >&2
+ end
+end
diff --git a/home-config/fish/functions/_fzf_report_diff_type.fish b/home-config/fish/functions/_fzf_report_diff_type.fish
new file mode 100644
index 0000000..cc26fb3
--- /dev/null
+++ b/home-config/fish/functions/_fzf_report_diff_type.fish
@@ -0,0 +1,18 @@
+# helper for _fzf_preview_changed_file
+# prints out something like
+# ╭────────╮
+# │ Staged │
+# ╰────────╯
+function _fzf_report_diff_type --argument-names diff_type --description "Print a distinct colored header meant to preface a git patch."
+ # number of "-" to draw is the length of the string to box + 2 for padding
+ set -f repeat_count (math 2 + (string length $diff_type))
+ set -f line (string repeat --count $repeat_count ─)
+ set -f top_border ╭$line╮
+ set -f btm_border ╰$line╯
+
+ set_color yellow
+ echo $top_border
+ echo "│ $diff_type │"
+ echo $btm_border
+ set_color normal
+end
diff --git a/home-config/fish/functions/_fzf_report_file_type.fish b/home-config/fish/functions/_fzf_report_file_type.fish
new file mode 100644
index 0000000..49e02e1
--- /dev/null
+++ b/home-config/fish/functions/_fzf_report_file_type.fish
@@ -0,0 +1,6 @@
+# helper function for _fzf_preview_file
+function _fzf_report_file_type --argument-names file_path file_type --description "Explain the file type for a file."
+ set_color red
+ echo "Cannot preview '$file_path': it is a $file_type."
+ set_color normal
+end
diff --git a/home-config/fish/functions/_fzf_search_directory.fish b/home-config/fish/functions/_fzf_search_directory.fish
new file mode 100644
index 0000000..4541eec
--- /dev/null
+++ b/home-config/fish/functions/_fzf_search_directory.fish
@@ -0,0 +1,33 @@
+function _fzf_search_directory --description "Search the current directory. Replace the current token with the selected file paths."
+ # Directly use fd binary to avoid output buffering delay caused by a fd alias, if any.
+ # Debian-based distros install fd as fdfind and the fd package is something else, so
+ # check for fdfind first. Fall back to "fd" for a clear error message.
+ set -f fd_cmd (command -v fdfind || command -v fd || echo "fd")
+ set -f --append fd_cmd --color=always $fzf_fd_opts
+
+ set -f fzf_arguments --multi --ansi $fzf_directory_opts
+ set -f token (commandline --current-token)
+ # expand any variables or leading tilde (~) in the token
+ set -f expanded_token (eval echo -- $token)
+ # unescape token because it's already quoted so backslashes will mess up the path
+ set -f unescaped_exp_token (string unescape -- $expanded_token)
+
+ # If the current token is a directory and has a trailing slash,
+ # then use it as fd's base directory.
+ if string match --quiet -- "*/" $unescaped_exp_token && test -d "$unescaped_exp_token"
+ set --append fd_cmd --base-directory=$unescaped_exp_token
+ # use the directory name as fzf's prompt to indicate the search is limited to that directory
+ set --prepend fzf_arguments --prompt="Directory $unescaped_exp_token> " --preview="_fzf_preview_file $expanded_token{}"
+ set -f file_paths_selected $unescaped_exp_token($fd_cmd 2>/dev/null | _fzf_wrapper $fzf_arguments)
+ else
+ set --prepend fzf_arguments --prompt="Directory> " --query="$unescaped_exp_token" --preview='_fzf_preview_file {}'
+ set -f file_paths_selected ($fd_cmd 2>/dev/null | _fzf_wrapper $fzf_arguments)
+ end
+
+
+ if test $status -eq 0
+ commandline --current-token --replace -- (string escape -- $file_paths_selected | string join ' ')
+ end
+
+ commandline --function repaint
+end
diff --git a/home-config/fish/functions/_fzf_search_git_log.fish b/home-config/fish/functions/_fzf_search_git_log.fish
new file mode 100644
index 0000000..aa54724
--- /dev/null
+++ b/home-config/fish/functions/_fzf_search_git_log.fish
@@ -0,0 +1,36 @@
+function _fzf_search_git_log --description "Search the output of git log and preview commits. Replace the current token with the selected commit hash."
+ if not git rev-parse --git-dir >/dev/null 2>&1
+ echo '_fzf_search_git_log: Not in a git repository.' >&2
+ else
+ if not set --query fzf_git_log_format
+ # %h gives you the abbreviated commit hash, which is useful for saving screen space, but we will have to expand it later below
+ set -f fzf_git_log_format '%C(bold blue)%h%C(reset) - %C(cyan)%ad%C(reset) %C(yellow)%d%C(reset) %C(normal)%s%C(reset) %C(dim normal)[%an]%C(reset)'
+ end
+
+ set -f preview_cmd 'git show --color=always --stat --patch {1}'
+ if set --query fzf_diff_highlighter
+ set preview_cmd "$preview_cmd | $fzf_diff_highlighter"
+ end
+
+ set -f selected_log_lines (
+ git log --no-show-signature --color=always --format=format:$fzf_git_log_format --date=short | \
+ _fzf_wrapper --ansi \
+ --multi \
+ --scheme=history \
+ --prompt="Git Log> " \
+ --preview=$preview_cmd \
+ --query=(commandline --current-token) \
+ $fzf_git_log_opts
+ )
+ if test $status -eq 0
+ for line in $selected_log_lines
+ set -f abbreviated_commit_hash (string split --field 1 " " $line)
+ set -f full_commit_hash (git rev-parse $abbreviated_commit_hash)
+ set -f --append commit_hashes $full_commit_hash
+ end
+ commandline --current-token --replace (string join ' ' $commit_hashes)
+ end
+ end
+
+ commandline --function repaint
+end
diff --git a/home-config/fish/functions/_fzf_search_git_status.fish b/home-config/fish/functions/_fzf_search_git_status.fish
new file mode 100644
index 0000000..358f88c
--- /dev/null
+++ b/home-config/fish/functions/_fzf_search_git_status.fish
@@ -0,0 +1,41 @@
+function _fzf_search_git_status --description "Search the output of git status. Replace the current token with the selected file paths."
+ if not git rev-parse --git-dir >/dev/null 2>&1
+ echo '_fzf_search_git_status: Not in a git repository.' >&2
+ else
+ set -f preview_cmd '_fzf_preview_changed_file {}'
+ if set --query fzf_diff_highlighter
+ set preview_cmd "$preview_cmd | $fzf_diff_highlighter"
+ end
+
+ set -f selected_paths (
+ # Pass configuration color.status=always to force status to use colors even though output is sent to a pipe
+ git -c color.status=always status --short |
+ _fzf_wrapper --ansi \
+ --multi \
+ --prompt="Git Status> " \
+ --query=(commandline --current-token) \
+ --preview=$preview_cmd \
+ --nth="2.." \
+ $fzf_git_status_opts
+ )
+ if test $status -eq 0
+ # git status --short automatically escapes the paths of most files for us so not going to bother trying to handle
+ # the few edges cases of weird file names that should be extremely rare (e.g. "this;needs;escaping")
+ set -f cleaned_paths
+
+ for path in $selected_paths
+ if test (string sub --length 1 $path) = R
+ # path has been renamed and looks like "R LICENSE -> LICENSE.md"
+ # extract the path to use from after the arrow
+ set --append cleaned_paths (string split -- "-> " $path)[-1]
+ else
+ set --append cleaned_paths (string sub --start=4 $path)
+ end
+ end
+
+ commandline --current-token --replace -- (string join ' ' $cleaned_paths)
+ end
+ end
+
+ commandline --function repaint
+end
diff --git a/home-config/fish/functions/_fzf_search_history.fish b/home-config/fish/functions/_fzf_search_history.fish
new file mode 100644
index 0000000..cafbce9
--- /dev/null
+++ b/home-config/fish/functions/_fzf_search_history.fish
@@ -0,0 +1,39 @@
+function _fzf_search_history --description "Search command history. Replace the command line with the selected command."
+ # history merge incorporates history changes from other fish sessions
+ # it errors out if called in private mode
+ if test -z "$fish_private_mode"
+ builtin history merge
+ end
+
+ if not set --query fzf_history_time_format
+ # Reference https://devhints.io/strftime to understand strftime format symbols
+ set -f fzf_history_time_format "%m-%d %H:%M:%S"
+ end
+
+ # Delinate time from command in history entries using the vertical box drawing char (U+2502).
+ # Then, to get raw command from history entries, delete everything up to it. The ? on regex is
+ # necessary to make regex non-greedy so it won't match into commands containing the char.
+ set -f time_prefix_regex '^.*? │ '
+ # Delinate commands throughout pipeline using null rather than newlines because commands can be multi-line
+ set -f commands_selected (
+ builtin history --null --show-time="$fzf_history_time_format │ " |
+ _fzf_wrapper --read0 \
+ --print0 \
+ --multi \
+ --scheme=history \
+ --prompt="History> " \
+ --query=(commandline) \
+ --preview="string replace --regex '$time_prefix_regex' '' -- {} | fish_indent --ansi" \
+ --preview-window="bottom:3:wrap" \
+ $fzf_history_opts |
+ string split0 |
+ # remove timestamps from commands selected
+ string replace --regex $time_prefix_regex ''
+ )
+
+ if test $status -eq 0
+ commandline --replace -- $commands_selected
+ end
+
+ commandline --function repaint
+end
diff --git a/home-config/fish/functions/_fzf_search_processes.fish b/home-config/fish/functions/_fzf_search_processes.fish
new file mode 100644
index 0000000..133a880
--- /dev/null
+++ b/home-config/fish/functions/_fzf_search_processes.fish
@@ -0,0 +1,32 @@
+function _fzf_search_processes --description "Search all running processes. Replace the current token with the pid of the selected process."
+ # Directly use ps command because it is often aliased to a different command entirely
+ # or with options that dirty the search results and preview output
+ set -f ps_cmd (command -v ps || echo "ps")
+ # use all caps to be consistent with ps default format
+ # snake_case because ps doesn't seem to allow spaces in the field names
+ set -f ps_preview_fmt (string join ',' 'pid' 'ppid=PARENT' 'user' '%cpu' 'rss=RSS_IN_KB' 'start=START_TIME' 'command')
+ set -f processes_selected (
+ $ps_cmd -A -opid,command | \
+ _fzf_wrapper --multi \
+ --prompt="Processes> " \
+ --query (commandline --current-token) \
+ --ansi \
+ # first line outputted by ps is a header, so we need to mark it as so
+ --header-lines=1 \
+ # ps uses exit code 1 if the process was not found, in which case show an message explaining so
+ --preview="$ps_cmd -o '$ps_preview_fmt' -p {1} || echo 'Cannot preview {1} because it exited.'" \
+ --preview-window="bottom:4:wrap" \
+ $fzf_processes_opts
+ )
+
+ if test $status -eq 0
+ for process in $processes_selected
+ set -f --append pids_selected (string split --no-empty --field=1 -- " " $process)
+ end
+
+ # string join to replace the newlines outputted by string split with spaces
+ commandline --current-token --replace -- (string join ' ' $pids_selected)
+ end
+
+ commandline --function repaint
+end
diff --git a/home-config/fish/functions/_fzf_search_variables.fish b/home-config/fish/functions/_fzf_search_variables.fish
new file mode 100644
index 0000000..52a7c70
--- /dev/null
+++ b/home-config/fish/functions/_fzf_search_variables.fish
@@ -0,0 +1,47 @@
+# This function expects the following two arguments:
+# argument 1 = output of (set --show | psub), i.e. a file with the scope info and values of all variables
+# argument 2 = output of (set --names | psub), i.e. a file with all variable names
+function _fzf_search_variables --argument-names set_show_output set_names_output --description "Search and preview shell variables. Replace the current token with the selected variable."
+ if test -z "$set_names_output"
+ printf '%s\n' '_fzf_search_variables requires 2 arguments.' >&2
+
+ commandline --function repaint
+ return 22 # 22 means invalid argument in POSIX
+ end
+
+ # Exclude the history variable from being piped into fzf because
+ # 1. it's not included in $set_names_output
+ # 2. it tends to be a very large value => increases computation time
+ # 3._fzf_search_history is a much better way to examine history anyway
+ set -f all_variable_names (string match --invert history <$set_names_output)
+
+ set -f current_token (commandline --current-token)
+ # Use the current token to pre-populate fzf's query. If the current token begins
+ # with a $, remove it from the query so that it will better match the variable names
+ set -f cleaned_curr_token (string replace -- '$' '' $current_token)
+
+ set -f variable_names_selected (
+ printf '%s\n' $all_variable_names |
+ _fzf_wrapper --preview "_fzf_extract_var_info {} $set_show_output" \
+ --prompt="Variables> " \
+ --preview-window="wrap" \
+ --multi \
+ --query=$cleaned_curr_token \
+ $fzf_variables_opts
+ )
+
+ if test $status -eq 0
+ # If the current token begins with a $, do not overwrite the $ when
+ # replacing the current token with the selected variable.
+ # Uses brace expansion to prepend $ to each variable name.
+ commandline --current-token --replace (
+ if string match --quiet -- '$*' $current_token
+ string join " " \${$variable_names_selected}
+ else
+ string join " " $variable_names_selected
+ end
+ )
+ end
+
+ commandline --function repaint
+end
diff --git a/home-config/fish/functions/_fzf_wrapper.fish b/home-config/fish/functions/_fzf_wrapper.fish
new file mode 100644
index 0000000..45556ce
--- /dev/null
+++ b/home-config/fish/functions/_fzf_wrapper.fish
@@ -0,0 +1,20 @@
+function _fzf_wrapper --description "Prepares some environment variables before executing fzf."
+ # Make sure fzf uses fish to execute preview commands, some of which
+ # are autoloaded fish functions so don't exist in other shells.
+ # Use --function so that it doesn't clobber SHELL outside this function.
+ set -f --export SHELL (command --search fish)
+
+ # If FZF_DEFAULT_OPTS is not set, then set some sane defaults.
+ # See https://github.com/junegunn/fzf#environment-variables
+ if not set --query FZF_DEFAULT_OPTS
+ # cycle allows jumping between the first and last results, making scrolling faster
+ # layout=reverse lists results top to bottom, mimicking the familiar layouts of git log, history, and env
+ # border shows where the fzf window begins and ends
+ # height=90% leaves space to see the current command and some scrollback, maintaining context of work
+ # preview-window=wrap wraps long lines in the preview window, making reading easier
+ # marker=* makes the multi-select marker more distinguishable from the pointer (since both default to >)
+ set --export FZF_DEFAULT_OPTS '--cycle --layout=reverse --border --height=90% --preview-window=wrap --marker="*"'
+ end
+
+ fzf $argv
+end
diff --git a/home-config/fish/functions/_tide_1_line_prompt.fish b/home-config/fish/functions/_tide_1_line_prompt.fish
new file mode 100644
index 0000000..5772223
--- /dev/null
+++ b/home-config/fish/functions/_tide_1_line_prompt.fish
@@ -0,0 +1,19 @@
+function _tide_1_line_prompt
+ set -g add_prefix
+ _tide_side=left for item in $_tide_left_items
+ _tide_item_$item
+ end
+ set_color $prev_bg_color -b normal
+ echo $tide_left_prompt_suffix
+
+ set -g add_prefix
+ _tide_side=right for item in $_tide_right_items
+ _tide_item_$item
+ end
+ set_color $prev_bg_color -b normal
+ echo $tide_right_prompt_suffix
+end
+
+function _tide_item_pwd
+ _tide_print_item pwd @PWD@
+end
diff --git a/home-config/fish/functions/_tide_2_line_prompt.fish b/home-config/fish/functions/_tide_2_line_prompt.fish
new file mode 100644
index 0000000..e9017af
--- /dev/null
+++ b/home-config/fish/functions/_tide_2_line_prompt.fish
@@ -0,0 +1,31 @@
+function _tide_2_line_prompt
+ set -g add_prefix
+ _tide_side=left for item in $_tide_left_items
+ _tide_item_$item
+ end
+ if not set -e add_prefix
+ set_color $prev_bg_color -b normal
+ echo $tide_left_prompt_suffix
+ end
+
+ echo
+
+ set -g add_prefix
+ _tide_side=right for item in $_tide_right_items
+ _tide_item_$item
+ end
+ if not set -e add_prefix
+ set_color $prev_bg_color -b normal
+ echo $tide_right_prompt_suffix
+ end
+end
+
+function _tide_item_pwd
+ _tide_print_item pwd @PWD@
+end
+
+function _tide_item_newline
+ set_color $prev_bg_color -b normal
+ v=tide_"$_tide_side"_prompt_suffix echo $$v
+ set -g add_prefix
+end
diff --git a/home-config/fish/functions/_tide_cache_variables.fish b/home-config/fish/functions/_tide_cache_variables.fish
new file mode 100644
index 0000000..31e3850
--- /dev/null
+++ b/home-config/fish/functions/_tide_cache_variables.fish
@@ -0,0 +1,17 @@
+function _tide_cache_variables
+ # Same-color-separator color
+ set_color $tide_prompt_color_separator_same_color | read -gx _tide_color_separator_same_color
+
+ # git
+ contains git $_tide_left_items $_tide_right_items && set_color $tide_git_color_branch | read -gx _tide_location_color
+
+ # private_mode
+ if contains private_mode $_tide_left_items $_tide_right_items && test -n "$fish_private_mode"
+ set -gx _tide_private_mode
+ else
+ set -e _tide_private_mode
+ end
+
+ # item padding
+ test "$tide_prompt_pad_items" = true && set -gx _tide_pad ' ' || set -e _tide_pad
+end
diff --git a/home-config/fish/functions/_tide_detect_os.fish b/home-config/fish/functions/_tide_detect_os.fish
new file mode 100644
index 0000000..cf38388
--- /dev/null
+++ b/home-config/fish/functions/_tide_detect_os.fish
@@ -0,0 +1,77 @@
+# Outputs icon, color, bg_color
+function _tide_detect_os
+ set -lx defaultColor 080808 CED7CF
+ switch (uname | string lower)
+ case darwin
+ printf %s\n  D6D6D6 333333 # from apple.com header
+ case freebsd openbsd dragonfly
+ printf %s\n  FFFFFF AB2B28 # https://freebsdfoundation.org/about-us/about-the-foundation/project/
+ case 'cygwin*' 'mingw*_nt*' 'msys_nt*'
+ printf %s\n  FFFFFF 00CCFF # https://answers.microsoft.com/en-us/windows/forum/all/what-is-the-official-windows-8-blue-rgb-or-hex/fd57144b-f69b-42d8-8c21-6ca911646e44
+ case linux
+ if test (uname -o) = Android
+ echo ﲎ # This character is evil and messes up code display, so it's put on its own line
+ # https://developer.android.com/distribute/marketing-tools/brand-guidelines
+ printf %s\n 3DDC84 3C3F41 # fg is from above link, bg is from Android Studio default dark theme
+ else
+ _tide_detect_os_linux_cases /etc/os-release ID ||
+ _tide_detect_os_linux_cases /etc/os-release ID_LIKE ||
+ _tide_detect_os_linux_cases /etc/lsb-release DISTRIB_ID ||
+ printf %s\n  $defaultColor
+ end
+ case '*'
+ echo -ns '?'
+ end
+end
+
+function _tide_detect_os_linux_cases -a file key
+ test -e $file || return
+ set -l split_file (string split '=' <$file)
+ set -l key_index (contains --index $key $split_file) || return
+ set -l value (string trim --chars='"' $split_file[(math $key_index + 1)])
+
+ # Anything which would have pure white background has been changed to D4D4D4
+ # It was just too bright otherwise
+ switch (string lower $value)
+ case alpine
+ printf %s\n  FFFFFF 0D597F # from alpine logo
+ case arch
+ printf %s\n  1793D1 4D4D4D # from arch wiki header
+ case centos
+ printf %s\n  000000 D4D4D4 # https://wiki.centos.org/ArtWork/Brand/Logo, monochromatic
+ case debian
+ printf %s\n  C70036 D4D4D4 # from debian logo https://www.debian.org/logos/openlogo-nd-100.png
+ case devuan
+ printf %s\n  $defaultColor # logo is monochromatic
+ case elementary
+ printf %s\n  000000 D4D4D4 # https://elementary.io/brand, encouraged to be monochromatic
+ case fedora
+ printf %s\n  FFFFFF 294172 # from logo https://fedoraproject.org/w/uploads/2/2d/Logo_fedoralogo.png
+ case gentoo
+ printf %s\n  FFFFFF 54487A # https://wiki.gentoo.org/wiki/Project:Artwork/Colors
+ case mageia
+ printf %s\n  FFFFFF 262F45 # https://wiki.mageia.org/en/Artwork_guidelines
+ case manjaro
+ printf %s\n  FFFFFF 35BF5C # from https://gitlab.manjaro.org/artwork/branding/logo/-/blob/master/logo.svg
+ case mint linuxmint
+ printf %s\n  FFFFFF 69B53F # extracted from https://linuxmint.com/web/img/favicon.ico
+ case nixos
+ printf %s\n  FFFFFF 5277C3 # https://github.com/NixOS/nixos-artwork/tree/master/logo
+ case opensuse-leap opensuse-tumbleweed opensuse-microos
+ printf %s\n  73BA25 173f4f # https://en.opensuse.org/openSUSE:Artwork_brand
+ case raspbian
+ printf %s\n  FFFFFF A22846 # https://static.raspberrypi.org/files/Raspberry_Pi_Visual_Guidelines_2020.pdf
+ case rhel
+ printf %s\n  EE0000 000000 # https://www.redhat.com/en/about/brand/standards/color
+ case sabayon
+ printf %s\n  $defaultColor # Can't find colors, and they are rebranding anyway
+ case slackware
+ printf %s\n  $defaultColor # Doesn't really have a logo, and the colors are too close to PWD blue anyway
+ case ubuntu
+ printf %s\n  E95420 D4D4D4 # https://design.ubuntu.com/brand/
+ case void
+ printf %s\n  FFFFFF 478061 # from https://alpha.de.repo.voidlinux.org/logos/void.svg
+ case '*'
+ return 1
+ end
+end
diff --git a/home-config/fish/functions/_tide_find_and_remove.fish b/home-config/fish/functions/_tide_find_and_remove.fish
new file mode 100644
index 0000000..29f2180
--- /dev/null
+++ b/home-config/fish/functions/_tide_find_and_remove.fish
@@ -0,0 +1,3 @@
+function _tide_find_and_remove -a name list --no-scope-shadowing
+ contains --index $name $$list | read -l index && set -e "$list"[$index]
+end
diff --git a/home-config/fish/functions/_tide_fish_colorize.fish b/home-config/fish/functions/_tide_fish_colorize.fish
new file mode 100644
index 0000000..f79b188
--- /dev/null
+++ b/home-config/fish/functions/_tide_fish_colorize.fish
@@ -0,0 +1,7 @@
+function _tide_fish_colorize
+ if command -q fish_indent
+ echo -ns "$argv" | fish_indent --ansi
+ else
+ echo -ns "$argv"
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_aws.fish b/home-config/fish/functions/_tide_item_aws.fish
new file mode 100644
index 0000000..7cb6338
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_aws.fish
@@ -0,0 +1,11 @@
+function _tide_item_aws
+ # AWS_PROFILE overrides AWS_DEFAULT_PROFILE, AWS_REGION overrides AWS_DEFAULT_REGION
+ set -q AWS_PROFILE && set -l AWS_DEFAULT_PROFILE $AWS_PROFILE
+ set -q AWS_REGION && set -l AWS_DEFAULT_REGION $AWS_REGION
+
+ if test -n "$AWS_DEFAULT_PROFILE" && test -n "$AWS_DEFAULT_REGION"
+ _tide_print_item aws $tide_aws_icon' ' "$AWS_DEFAULT_PROFILE/$AWS_DEFAULT_REGION"
+ else if test -n "$AWS_DEFAULT_PROFILE$AWS_DEFAULT_REGION"
+ _tide_print_item aws $tide_aws_icon' ' "$AWS_DEFAULT_PROFILE$AWS_DEFAULT_REGION"
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_character.fish b/home-config/fish/functions/_tide_item_character.fish
new file mode 100644
index 0000000..10bb324
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_character.fish
@@ -0,0 +1,17 @@
+function _tide_item_character
+ test $_tide_status = 0 && set_color $tide_character_color || set_color $tide_character_color_failure
+
+ set -q add_prefix || echo -ns ' '
+
+ test "$fish_key_bindings" = fish_default_key_bindings && echo -ns $tide_character_icon ||
+ switch $fish_bind_mode
+ case insert
+ echo -ns $tide_character_icon
+ case default
+ echo -ns $tide_character_vi_icon_default
+ case replace replace_one
+ echo -ns $tide_character_vi_icon_replace
+ case visual
+ echo -ns $tide_character_vi_icon_visual
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_cmd_duration.fish b/home-config/fish/functions/_tide_item_cmd_duration.fish
new file mode 100644
index 0000000..bc48bac
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_cmd_duration.fish
@@ -0,0 +1,12 @@
+function _tide_item_cmd_duration
+ test $CMD_DURATION -gt $tide_cmd_duration_threshold && t=(
+ math -s0 "$CMD_DURATION/3600000" # Hours
+ math -s0 "$CMD_DURATION/60000"%60 # Minutes
+ math -s$tide_cmd_duration_decimals "$CMD_DURATION/1000"%60) if test $t[1] != 0
+ _tide_print_item cmd_duration $tide_cmd_duration_icon' ' "$t[1]h $t[2]m $t[3]s"
+ else if test $t[2] != 0
+ _tide_print_item cmd_duration $tide_cmd_duration_icon' ' "$t[2]m $t[3]s"
+ else
+ _tide_print_item cmd_duration $tide_cmd_duration_icon' ' "$t[3]s"
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_context.fish b/home-config/fish/functions/_tide_item_context.fish
new file mode 100644
index 0000000..cbdf420
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_context.fish
@@ -0,0 +1,14 @@
+function _tide_item_context
+ if set -q SSH_TTY
+ set -fx tide_context_color $tide_context_color_ssh
+ else if test "$EUID" = 0
+ set -fx tide_context_color $tide_context_color_root
+ else if test "$tide_context_always_display" = true
+ set -fx tide_context_color $tide_context_color_default
+ else
+ return
+ end
+
+ string match -qr "^(?<h>(\.?[^\.]*){0,$tide_context_hostname_parts})" @$hostname
+ _tide_print_item context $USER$h
+end
diff --git a/home-config/fish/functions/_tide_item_crystal.fish b/home-config/fish/functions/_tide_item_crystal.fish
new file mode 100644
index 0000000..620dde4
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_crystal.fish
@@ -0,0 +1,6 @@
+function _tide_item_crystal
+ if path is $_tide_parent_dirs/shard.yml
+ crystal --version | string match -qr "(?<v>[\d.]+)"
+ _tide_print_item crystal $tide_crystal_icon' ' $v
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_direnv.fish b/home-config/fish/functions/_tide_item_direnv.fish
new file mode 100644
index 0000000..f3c892b
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_direnv.fish
@@ -0,0 +1,7 @@
+function _tide_item_direnv
+ set -q DIRENV_DIR || return
+ direnv status | string match -q 'Found RC allowed false' &&
+ set -lx tide_direnv_color $tide_direnv_color_denied &&
+ set -lx tide_direnv_bg_color $tide_direnv_bg_color_denied
+ _tide_print_item direnv $tide_direnv_icon
+end
diff --git a/home-config/fish/functions/_tide_item_distrobox.fish b/home-config/fish/functions/_tide_item_distrobox.fish
new file mode 100644
index 0000000..5e06a8b
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_distrobox.fish
@@ -0,0 +1,4 @@
+function _tide_item_distrobox
+ test -e /etc/profile.d/distrobox_profile.sh && test -e /run/.containerenv &&
+ _tide_print_item distrobox $tide_distrobox_icon' ' (string match -rg 'name="(.*)"' </run/.containerenv)
+end
diff --git a/home-config/fish/functions/_tide_item_docker.fish b/home-config/fish/functions/_tide_item_docker.fish
new file mode 100644
index 0000000..4eec0bf
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_docker.fish
@@ -0,0 +1,5 @@
+function _tide_item_docker
+ docker context inspect --format '{{.Name}}' | read -l context
+ contains -- "$context" $tide_docker_default_contexts ||
+ _tide_print_item docker $tide_docker_icon' ' $context
+end
diff --git a/home-config/fish/functions/_tide_item_elixir.fish b/home-config/fish/functions/_tide_item_elixir.fish
new file mode 100644
index 0000000..fa9d36a
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_elixir.fish
@@ -0,0 +1,4 @@
+function _tide_item_elixir
+ path is $_tide_parent_dirs/mix.exs &&
+ _tide_print_item elixir $tide_elixir_icon' ' (elixir --short-version)
+end
diff --git a/home-config/fish/functions/_tide_item_gcloud.fish b/home-config/fish/functions/_tide_item_gcloud.fish
new file mode 100644
index 0000000..609783a
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_gcloud.fish
@@ -0,0 +1,8 @@
+function _tide_item_gcloud
+ set -q CLOUDSDK_CONFIG || set -l CLOUDSDK_CONFIG ~/.config/gcloud
+ path is $CLOUDSDK_CONFIG/active_config &&
+ read -l config <$CLOUDSDK_CONFIG/active_config &&
+ path is $CLOUDSDK_CONFIG/configurations/config_$config &&
+ string match -qr '^\s*project\s*=\s*(?<project>.*)' <$CLOUDSDK_CONFIG/configurations/config_$config &&
+ _tide_print_item gcloud $tide_gcloud_icon' ' $project
+end
diff --git a/home-config/fish/functions/_tide_item_git.fish b/home-config/fish/functions/_tide_item_git.fish
new file mode 100644
index 0000000..3154acc
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_git.fish
@@ -0,0 +1,72 @@
+function _tide_item_git
+ if git branch --show-current 2>/dev/null | string shorten -"$tide_git_truncation_strategy"m$tide_git_truncation_length | read -l location
+ git rev-parse --git-dir --is-inside-git-dir | read -fL gdir in_gdir
+ set location $_tide_location_color$location
+ else if test $pipestatus[1] != 0
+ return
+ else if git tag --points-at HEAD | string shorten -"$tide_git_truncation_strategy"m$tide_git_truncation_length | read location
+ git rev-parse --git-dir --is-inside-git-dir | read -fL gdir in_gdir
+ set location '#'$_tide_location_color$location
+ else
+ git rev-parse --git-dir --is-inside-git-dir --short HEAD | read -fL gdir in_gdir location
+ set location @$_tide_location_color$location
+ end
+
+ # Operation
+ if test -d $gdir/rebase-merge
+ # Turn ANY into ALL, via double negation
+ if not path is -v $gdir/rebase-merge/{msgnum,end}
+ read -f step <$gdir/rebase-merge/msgnum
+ read -f total_steps <$gdir/rebase-merge/end
+ end
+ test -f $gdir/rebase-merge/interactive && set -f operation rebase-i || set -f operation rebase-m
+ else if test -d $gdir/rebase-apply
+ if not path is -v $gdir/rebase-apply/{next,last}
+ read -f step <$gdir/rebase-apply/next
+ read -f total_steps <$gdir/rebase-apply/last
+ end
+ if test -f $gdir/rebase-apply/rebasing
+ set -f operation rebase
+ else if test -f $gdir/rebase-apply/applying
+ set -f operation am
+ else
+ set -f operation am/rebase
+ end
+ else if test -f $gdir/MERGE_HEAD
+ set -f operation merge
+ else if test -f $gdir/CHERRY_PICK_HEAD
+ set -f operation cherry-pick
+ else if test -f $gdir/REVERT_HEAD
+ set -f operation revert
+ else if test -f $gdir/BISECT_LOG
+ set -f operation bisect
+ end
+
+ # Git status/stash + Upstream behind/ahead
+ test $in_gdir = true && set -l _set_dir_opt -C $gdir/..
+ # Suppress errors in case we are in a bare repo or there is no upstream
+ set -l stat (git $_set_dir_opt --no-optional-locks status --porcelain 2>/dev/null)
+ string match -qr '(0|(?<stash>.*))\n(0|(?<conflicted>.*))\n(0|(?<staged>.*))
+(0|(?<dirty>.*))\n(0|(?<untracked>.*))(\n(0|(?<behind>.*))\t(0|(?<ahead>.*)))?' \
+ "$(git $_set_dir_opt stash list 2>/dev/null | count
+ string match -r ^UU $stat | count
+ string match -r ^[ADMR]. $stat | count
+ string match -r ^.[ADMR] $stat | count
+ string match -r '^\?\?' $stat | count
+ git rev-list --count --left-right @{upstream}...HEAD 2>/dev/null)"
+
+ if test -n "$operation$conflicted"
+ set -g tide_git_bg_color $tide_git_bg_color_urgent
+ else if test -n "$staged$dirty$untracked"
+ set -g tide_git_bg_color $tide_git_bg_color_unstable
+ end
+
+ _tide_print_item git $_tide_location_color$tide_git_icon' ' (set_color white; echo -ns $location
+ set_color $tide_git_color_operation; echo -ns ' '$operation ' '$step/$total_steps
+ set_color $tide_git_color_upstream; echo -ns ' ⇣'$behind ' ⇡'$ahead
+ set_color $tide_git_color_stash; echo -ns ' *'$stash
+ set_color $tide_git_color_conflicted; echo -ns ' ~'$conflicted
+ set_color $tide_git_color_staged; echo -ns ' +'$staged
+ set_color $tide_git_color_dirty; echo -ns ' !'$dirty
+ set_color $tide_git_color_untracked; echo -ns ' ?'$untracked)
+end
diff --git a/home-config/fish/functions/_tide_item_go.fish b/home-config/fish/functions/_tide_item_go.fish
new file mode 100644
index 0000000..b9aacae
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_go.fish
@@ -0,0 +1,6 @@
+function _tide_item_go
+ if path is $_tide_parent_dirs/go.mod
+ go version | string match -qr "(?<v>[\d.]+)"
+ _tide_print_item go $tide_go_icon' ' $v
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_java.fish b/home-config/fish/functions/_tide_item_java.fish
new file mode 100644
index 0000000..804ec05
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_java.fish
@@ -0,0 +1,6 @@
+function _tide_item_java
+ if path is $_tide_parent_dirs/pom.xml
+ java -version &| string match -qr "(?<v>[\d.]+)"
+ _tide_print_item java $tide_java_icon' ' $v
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_jobs.fish b/home-config/fish/functions/_tide_item_jobs.fish
new file mode 100644
index 0000000..2a02118
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_jobs.fish
@@ -0,0 +1,7 @@
+function _tide_item_jobs
+ set -q _tide_jobs && if test $_tide_jobs -ge $tide_jobs_number_threshold
+ _tide_print_item jobs $tide_jobs_icon' ' $_tide_jobs
+ else
+ _tide_print_item jobs $tide_jobs_icon
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_kubectl.fish b/home-config/fish/functions/_tide_item_kubectl.fish
new file mode 100644
index 0000000..ab044b3
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_kubectl.fish
@@ -0,0 +1,4 @@
+function _tide_item_kubectl
+ kubectl config view --minify --output 'jsonpath={.current-context}/{..namespace}' 2>/dev/null | read -l context &&
+ _tide_print_item kubectl $tide_kubectl_icon' ' (string replace -r '/(|default)$' '' $context)
+end
diff --git a/home-config/fish/functions/_tide_item_nix_shell.fish b/home-config/fish/functions/_tide_item_nix_shell.fish
new file mode 100644
index 0000000..647f606
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_nix_shell.fish
@@ -0,0 +1,3 @@
+function _tide_item_nix_shell
+ set -q IN_NIX_SHELL && _tide_print_item nix_shell $tide_nix_shell_icon' ' $IN_NIX_SHELL
+end
diff --git a/home-config/fish/functions/_tide_item_node.fish b/home-config/fish/functions/_tide_item_node.fish
new file mode 100644
index 0000000..fc57832
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_node.fish
@@ -0,0 +1,6 @@
+function _tide_item_node
+ if path is $_tide_parent_dirs/package.json
+ node --version | string match -qr "v(?<v>.*)"
+ _tide_print_item node $tide_node_icon' ' $v
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_os.fish b/home-config/fish/functions/_tide_item_os.fish
new file mode 100644
index 0000000..8a6208c
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_os.fish
@@ -0,0 +1,3 @@
+function _tide_item_os
+ _tide_print_item os $tide_os_icon
+end
diff --git a/home-config/fish/functions/_tide_item_php.fish b/home-config/fish/functions/_tide_item_php.fish
new file mode 100644
index 0000000..c8d28d9
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_php.fish
@@ -0,0 +1,6 @@
+function _tide_item_php
+ if path is $_tide_parent_dirs/composer.json
+ php --version | string match -qr "(?<v>[\d.]+)"
+ _tide_print_item php $tide_php_icon' ' $v
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_private_mode.fish b/home-config/fish/functions/_tide_item_private_mode.fish
new file mode 100644
index 0000000..4eb4684
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_private_mode.fish
@@ -0,0 +1,3 @@
+function _tide_item_private_mode
+ set -q _tide_private_mode && _tide_print_item private_mode $tide_private_mode_icon
+end
diff --git a/home-config/fish/functions/_tide_item_pulumi.fish b/home-config/fish/functions/_tide_item_pulumi.fish
new file mode 100644
index 0000000..6302a7e
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_pulumi.fish
@@ -0,0 +1,19 @@
+function _tide_item_pulumi
+ if path filter $_tide_parent_dirs/Pulumi.yaml | read -l yaml_path
+ if command -q sha1sum
+ echo -n "$yaml_path" | sha1sum | string match -qr "(?<path_hash>.{40})"
+ else if command -q shasum
+ echo -n "$yaml_path" | shasum | string match -qr "(?<path_hash>.{40})"
+ else
+ return
+ end
+
+ string match -qr 'name: *(?<project_name>.*)' <$yaml_path
+ set -l workspace_file "$HOME/.pulumi/workspaces/$project_name-$path_hash-workspace.json"
+
+ if test -e $workspace_file
+ string match -qr '"stack": *"(?<stack>.*)"' <$workspace_file
+ _tide_print_item pulumi $tide_pulumi_icon' ' $stack
+ end
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_python.fish b/home-config/fish/functions/_tide_item_python.fish
new file mode 100644
index 0000000..57f7075
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_python.fish
@@ -0,0 +1,27 @@
+function _tide_item_python
+ if test -n "$VIRTUAL_ENV"
+ if command -q python3
+ python3 --version | string match -qr "(?<v>[\d.]+)"
+ else
+ python --version | string match -qr "(?<v>[\d.]+)"
+ end
+ string match -qr "^.*/(?<dir>.*)/(?<base>.*)" $VIRTUAL_ENV
+ # pipenv $VIRTUAL_ENV looks like /home/ilan/.local/share/virtualenvs/pipenv_project-EwRYuc3l
+ # Detect whether we are using pipenv by looking for 'virtualenvs'. If so, remove the hash at the end.
+ if test "$dir" = virtualenvs
+ string match -qr "(?<base>.*)-.*" $base
+ _tide_print_item python $tide_python_icon' ' "$v ($base)"
+ else if contains -- "$base" virtualenv venv .venv env # avoid generic names
+ _tide_print_item python $tide_python_icon' ' "$v ($dir)"
+ else
+ _tide_print_item python $tide_python_icon' ' "$v ($base)"
+ end
+ else if path is .python-version Pipfile __init__.py pyproject.toml requirements.txt setup.py
+ if command -q python3
+ python3 --version | string match -qr "(?<v>[\d.]+)"
+ else
+ python --version | string match -qr "(?<v>[\d.]+)"
+ end
+ _tide_print_item python $tide_python_icon' ' $v
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_ruby.fish b/home-config/fish/functions/_tide_item_ruby.fish
new file mode 100644
index 0000000..bde84eb
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_ruby.fish
@@ -0,0 +1,6 @@
+function _tide_item_ruby
+ if path is $_tide_parent_dirs/{*.gemspec,Gemfile,Rakefile,.ruby-version}
+ ruby --version | string match -qr "(?<v>[\d.]+)"
+ _tide_print_item ruby $tide_ruby_icon' ' $v
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_rustc.fish b/home-config/fish/functions/_tide_item_rustc.fish
new file mode 100644
index 0000000..b46cd99
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_rustc.fish
@@ -0,0 +1,6 @@
+function _tide_item_rustc
+ if path is $_tide_parent_dirs/Cargo.toml
+ rustc --version | string match -qr "(?<v>[\d.]+)"
+ _tide_print_item rustc $tide_rustc_icon' ' $v
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_shlvl.fish b/home-config/fish/functions/_tide_item_shlvl.fish
new file mode 100644
index 0000000..95dd5ff
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_shlvl.fish
@@ -0,0 +1,4 @@
+function _tide_item_shlvl
+ # Non-interactive shells do not increment SHLVL, so we don't need to subtract 1
+ test $SHLVL -gt $tide_shlvl_threshold && _tide_print_item shlvl $tide_shlvl_icon' ' $SHLVL
+end
diff --git a/home-config/fish/functions/_tide_item_status.fish b/home-config/fish/functions/_tide_item_status.fish
new file mode 100644
index 0000000..3a040fd
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_status.fish
@@ -0,0 +1,15 @@
+function _tide_item_status
+ if string match -qv 0 $_tide_pipestatus # If there is a failure anywhere in the pipestatus
+ if test "$_tide_pipestatus" = 1 # If simple failure
+ contains character $_tide_left_items || tide_status_bg_color=$tide_status_bg_color_failure \
+ tide_status_color=$tide_status_color_failure _tide_print_item status $tide_status_icon_failure' ' 1
+ else
+ fish_status_to_signal $_tide_pipestatus | string replace SIG '' | string join '|' | read -l out
+ test $_tide_status = 0 && _tide_print_item status $tide_status_icon' ' $out ||
+ tide_status_bg_color=$tide_status_bg_color_failure tide_status_color=$tide_status_color_failure \
+ _tide_print_item status $tide_status_icon_failure' ' $out
+ end
+ else if not contains character $_tide_left_items
+ _tide_print_item status $tide_status_icon
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_terraform.fish b/home-config/fish/functions/_tide_item_terraform.fish
new file mode 100644
index 0000000..c079ce3
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_terraform.fish
@@ -0,0 +1,5 @@
+function _tide_item_terraform
+ path is $_tide_parent_dirs/.terraform &&
+ terraform workspace show | string match -v default | read -l w &&
+ _tide_print_item terraform $tide_terraform_icon' ' $w
+end
diff --git a/home-config/fish/functions/_tide_item_time.fish b/home-config/fish/functions/_tide_item_time.fish
new file mode 100644
index 0000000..b8522bc
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_time.fish
@@ -0,0 +1,3 @@
+function _tide_item_time
+ _tide_print_item time (date +$tide_time_format)
+end
diff --git a/home-config/fish/functions/_tide_item_toolbox.fish b/home-config/fish/functions/_tide_item_toolbox.fish
new file mode 100644
index 0000000..0b33f29
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_toolbox.fish
@@ -0,0 +1,4 @@
+function _tide_item_toolbox
+ test -e /run/.toolboxenv &&
+ _tide_print_item toolbox $tide_toolbox_icon' ' (string match -rg 'name="(.*)"' </run/.containerenv)
+end
diff --git a/home-config/fish/functions/_tide_item_vi_mode.fish b/home-config/fish/functions/_tide_item_vi_mode.fish
new file mode 100644
index 0000000..582855d
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_vi_mode.fish
@@ -0,0 +1,16 @@
+function _tide_item_vi_mode
+ test "$fish_key_bindings" != fish_default_key_bindings && switch $fish_bind_mode
+ case default
+ tide_vi_mode_bg_color=$tide_vi_mode_bg_color_default tide_vi_mode_color=$tide_vi_mode_color_default \
+ _tide_print_item vi_mode $tide_vi_mode_icon_default
+ case insert
+ tide_vi_mode_bg_color=$tide_vi_mode_bg_color_insert tide_vi_mode_color=$tide_vi_mode_color_insert \
+ _tide_print_item vi_mode $tide_vi_mode_icon_insert
+ case replace replace_one
+ tide_vi_mode_bg_color=$tide_vi_mode_bg_color_replace tide_vi_mode_color=$tide_vi_mode_color_replace \
+ _tide_print_item vi_mode $tide_vi_mode_icon_replace
+ case visual
+ tide_vi_mode_bg_color=$tide_vi_mode_bg_color_visual tide_vi_mode_color=$tide_vi_mode_color_visual \
+ _tide_print_item vi_mode $tide_vi_mode_icon_visual
+ end
+end
diff --git a/home-config/fish/functions/_tide_item_zig.fish b/home-config/fish/functions/_tide_item_zig.fish
new file mode 100644
index 0000000..2ac2741
--- /dev/null
+++ b/home-config/fish/functions/_tide_item_zig.fish
@@ -0,0 +1,6 @@
+function _tide_item_zig
+ if path is $_tide_parent_dirs/build.zig
+ zig version | string match -qr "(?<v>[\d.]+(-dev)?)"
+ _tide_print_item zig $tide_zig_icon' ' $v
+ end
+end
diff --git a/home-config/fish/functions/_tide_parent_dirs.fish b/home-config/fish/functions/_tide_parent_dirs.fish
new file mode 100644
index 0000000..9f31b04
--- /dev/null
+++ b/home-config/fish/functions/_tide_parent_dirs.fish
@@ -0,0 +1,7 @@
+function _tide_parent_dirs --on-variable PWD
+ set -g _tide_parent_dirs (string escape (
+ for dir in (string split / -- $PWD)
+ set -la parts $dir
+ string join / -- $parts
+ end))
+end
diff --git a/home-config/fish/functions/_tide_print_item.fish b/home-config/fish/functions/_tide_print_item.fish
new file mode 100644
index 0000000..db5c98b
--- /dev/null
+++ b/home-config/fish/functions/_tide_print_item.fish
@@ -0,0 +1,22 @@
+function _tide_print_item -a item
+ v=tide_"$item"_bg_color set -f item_bg_color $$v
+
+ if set -e add_prefix
+ set_color $item_bg_color -b normal
+ v=tide_"$_tide_side"_prompt_prefix echo -ns $$v
+ else if test "$item_bg_color" = "$prev_bg_color"
+ v=tide_"$_tide_side"_prompt_separator_same_color echo -ns $_tide_color_separator_same_color$$v
+ else if test $_tide_side = left
+ set_color $prev_bg_color -b $item_bg_color
+ echo -ns $tide_left_prompt_separator_diff_color
+ else
+ set_color $item_bg_color -b $prev_bg_color
+ echo -ns $tide_right_prompt_separator_diff_color
+ end
+
+ v=tide_"$item"_color set_color $$v -b $item_bg_color
+
+ echo -ns $_tide_pad $argv[2..] $_tide_pad
+
+ set -g prev_bg_color $item_bg_color
+end
diff --git a/home-config/fish/functions/_tide_pwd.fish b/home-config/fish/functions/_tide_pwd.fish
new file mode 100644
index 0000000..5447dd4
--- /dev/null
+++ b/home-config/fish/functions/_tide_pwd.fish
@@ -0,0 +1,42 @@
+set_color -o $tide_pwd_color_anchors | read -l color_anchors
+set_color $tide_pwd_color_truncated_dirs | read -l color_truncated
+set -l reset_to_color_dirs (set_color normal -b $tide_pwd_bg_color; set_color $tide_pwd_color_dirs)
+
+set -l unwritable_icon $tide_pwd_icon_unwritable' '
+set -l home_icon $tide_pwd_icon_home' '
+set -l pwd_icon $tide_pwd_icon' '
+
+eval "function _tide_pwd
+ if set -l split_pwd (string replace -r '^$HOME' '~' -- \$PWD | string split /)
+ test -w . && set -f split_output \"$pwd_icon\$split_pwd[1]\" \$split_pwd[2..] ||
+ set -f split_output \"$unwritable_icon\$split_pwd[1]\" \$split_pwd[2..]
+ set split_output[-1] \"$color_anchors\$split_output[-1]$reset_to_color_dirs\"
+ else
+ set -f split_output \"$home_icon$color_anchors~\"
+ end
+
+ string join / -- \$split_output | string length -V | read -g _tide_pwd_len
+
+ i=1 for dir_section in \$split_pwd[2..-2]
+ string join -- / \$split_pwd[..\$i] | string replace '~' $HOME | read -l parent_dir # Uses i before increment
+
+ math \$i+1 | read i
+
+ if path is \$parent_dir/\$dir_section/\$tide_pwd_markers
+ set split_output[\$i] \"$color_anchors\$dir_section$reset_to_color_dirs\"
+ else if test \$_tide_pwd_len -gt \$dist_btwn_sides
+ string match -qr \"(?<trunc>\..|.)\" \$dir_section
+
+ set -l glob \$parent_dir/\$trunc*/
+ set -e glob[(contains -i \$parent_dir/\$dir_section/ \$glob)] # This is faster than inverse string match
+
+ while string match -qr \"^\$parent_dir/\$(string escape --style=regex \$trunc)\" \$glob &&
+ string match -qr \"(?<trunc>\$(string escape --style=regex \$trunc).)\" \$dir_section
+ end
+ test -n \"\$trunc\" && set split_output[\$i] \"$color_truncated\$trunc$reset_to_color_dirs\" &&
+ string join / \$split_output | string length -V | read _tide_pwd_len
+ end
+ end
+
+ string join -- / \"$reset_to_color_dirs\$split_output[1]\" \$split_output[2..]
+end"
diff --git a/home-config/fish/functions/_tide_remove_unusable_items.fish b/home-config/fish/functions/_tide_remove_unusable_items.fish
new file mode 100644
index 0000000..deb4c10
--- /dev/null
+++ b/home-config/fish/functions/_tide_remove_unusable_items.fish
@@ -0,0 +1,25 @@
+function _tide_remove_unusable_items
+ # Remove tool-specific items for tools the machine doesn't have installed
+ set -l removed_items
+ for item in aws crystal direnv distrobox docker elixir gcloud git go java kubectl nix_shell node php pulumi python ruby rustc terraform toolbox zig
+ contains $item $tide_left_prompt_items $tide_right_prompt_items || continue
+
+ set -l cli_names $item
+ switch $item
+ case distrobox # there is no 'distrobox' command inside the container
+ set cli_names distrobox-export # 'distrobox-export' and 'distrobox-host-exec' are available
+ case nix_shell
+ set cli_names nix nix-shell
+ case python
+ set cli_names python python3
+ end
+ type --query $cli_names || set -a removed_items $item
+ end
+
+ set -U _tide_left_items (for item in $tide_left_prompt_items
+ contains $item $removed_items || echo $item
+ end)
+ set -U _tide_right_items (for item in $tide_right_prompt_items
+ contains $item $removed_items || echo $item
+ end)
+end
diff --git a/home-config/fish/functions/_tide_sub_bug-report.fish b/home-config/fish/functions/_tide_sub_bug-report.fish
new file mode 100644
index 0000000..a8065c8
--- /dev/null
+++ b/home-config/fish/functions/_tide_sub_bug-report.fish
@@ -0,0 +1,73 @@
+function _tide_sub_bug-report
+ argparse c/clean v/verbose check -- $argv
+
+ set -l fish_path (status fish-path)
+
+ if set -q _flag_clean
+ HOME=(mktemp -d) $fish_path --init-command "curl --silent \
+ https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish |
+ source && fisher install ilancosman/tide@v6"
+ else if set -q _flag_verbose
+ set --long | string match -r "^_?tide.*" | # Get only tide variables
+ string match -r --invert "^_tide_prompt_var.*" # Remove _tide_prompt_var
+ else
+ set -l fish_version ($fish_path --version | string match -r "fish, version (\d\.\d\.\d)")[2]
+ _tide_check_version Fish fish-shell/fish-shell "(\d\.\d\.\d)" $fish_version || return
+
+ set -l tide_version (tide --version | string match -r "tide, version (\d\.\d\.\d)")[2]
+ _tide_check_version Tide IlanCosman/tide "v(\d\.\d\.\d)" $tide_version || return
+
+ if command --query git
+ test (git --version | string match -r "git version ([\d\.]*)" | string replace --all . '')[2] -gt 2220
+ _tide_check_condition \
+ "Your git version is too old." \
+ "Tide requires at least version 2.22." \
+ "Please update before submitting a bug report." || return
+ end
+
+ # Check that omf is not installed
+ not functions --query omf
+ _tide_check_condition \
+ "Tide does not work with oh-my-fish installed." \
+ "Please uninstall it before submitting a bug report." || return
+
+ if not set -q _flag_check
+ set -l fish_startup_time ($fish_path -ic "time $fish_path -c exit" 2>|
+ string match -r "Executed in(.*)fish" | string trim)[2]
+
+ read --local --prompt-str "What operating system are you using? (e.g Ubuntu 20.04): " os
+ read --local --prompt-str "What terminal emulator are you using? (e.g Kitty): " terminal_emulator
+
+ printf '%b\n' "\nPlease copy the following information into the issue:\n" \
+ "fish version: $fish_version" \
+ "tide version: $tide_version" \
+ "term: $TERM" \
+ "os: $os" \
+ "terminal emulator: $terminal_emulator" \
+ "fish startup: $fish_startup_time" \
+ "fisher plugins: $_fisher_plugins"
+ end
+ end
+end
+
+function _tide_check_version -a program_name repo_name regex_to_get_version current_version
+ curl --silent https://github.com/$repo_name/releases/latest |
+ string match -r ".*$repo_name/releases/tag/$regex_to_get_version.*" |
+ read --local --line __ latestVersion
+
+ string match --quiet -r "^$latestVersion" "$current_version"
+ _tide_check_condition \
+ "Your $program_name version is out of date." \
+ "The latest is $latestVersion. You have $current_version." \
+ "Please update before submitting a bug report."
+end
+
+function _tide_check_condition
+ if test "$status" != 0
+ set_color red
+ printf '%s\n' $argv
+ set_color normal
+ return 1
+ end
+ return 0
+end
diff --git a/home-config/fish/functions/_tide_sub_configure.fish b/home-config/fish/functions/_tide_sub_configure.fish
new file mode 100644
index 0000000..22faf3a
--- /dev/null
+++ b/home-config/fish/functions/_tide_sub_configure.fish
@@ -0,0 +1,156 @@
+set -g _tide_color_dark_blue 0087AF
+set -g _tide_color_dark_green 5FAF00
+set -g _tide_color_gold D7AF00
+set -g _tide_color_green 5FD700
+set -g _tide_color_light_blue 00AFFF
+
+# Create an empty fake function for each item
+for func in _fake(functions --all | string match --entire _tide_item)
+ function $func
+ end
+end
+
+for file in (status dirname)/tide/configure/{choices, functions}/**.fish
+ source $file
+end
+
+function _tide_sub_configure
+ set -l choices (path basename (status dirname)/tide/configure/choices/**.fish | path change-extension '')
+ argparse auto $choices= -- $argv
+
+ for var in (set -l --names | string match -e _flag)
+ set -x $var $$var
+ end
+
+ if set -q _flag_auto
+ set -fx _flag_finish 'Overwrite your current tide config'
+ else if test $COLUMNS -lt 55 -o $LINES -lt 21
+ echo 'Terminal size too small; must be at least 55 x 21'
+ return 1
+ end
+
+ _tide_detect_os | read -g --line os_branding_icon os_branding_color os_branding_bg_color
+
+ set -g fake_columns $COLUMNS
+ test $fake_columns -gt 90 && set fake_columns 90
+ set -g fake_lines $LINES
+
+ set -g _tide_selected_option
+ _next_choice all/style
+end
+
+function _next_choice -a nextChoice
+ set -q _tide_selected_option || return 0
+ set -l cmd (string split '/' $nextChoice)[2]
+ $cmd
+end
+
+function _tide_title -a text
+ set -q _flag_auto && return
+
+ command -q clear && clear
+ set_color -o
+ string pad --width (math --scale=0 "$fake_columns/2" + (string length $text)/2) $text
+ set_color normal
+
+ set -g _tide_configure_first_option_after_title
+end
+
+function _tide_option -a symbol text
+ set -ga _tide_symbol_list $symbol
+ set -ga _tide_option_list $text
+
+ if not set -q _flag_auto
+ set -g _tide_configure_first_prompt_after_option
+
+ set_color -o
+ set -e _tide_configure_first_option_after_title || echo
+ echo "($symbol) $text"
+ set_color normal
+ end
+end
+
+function _tide_menu -a func
+ if set -q _flag_auto
+ set -l flag_var_name _flag_$func
+ set -g _tide_selected_option $$flag_var_name
+
+ if test -z "$_tide_selected_option"
+ echo "Missing input for choice '$func'"
+ _tide_exit_configure
+ else if not contains $_tide_selected_option $_tide_option_list
+ echo "Invalid input '$_tide_selected_option' for choice '$func'"
+ _tide_exit_configure
+ else
+ set -e _tide_symbol_list
+ set -e _tide_option_list
+ end
+ return
+ end
+
+ argparse no-restart -- $argv # Add no-restart option for first menu
+
+ echo
+ if not set -q _flag_no_restart
+ set -f r r
+ echo '(r) Restart from the beginning'
+ end
+ echo '(q) Quit and do nothing'\n
+
+ while read --nchars 1 --prompt-str \
+ "$(set_color -o)Choice [$(string join '/' $_tide_symbol_list $r q)] $(set_color normal)" input
+ switch $input
+ case r
+ set -q _flag_no_restart && continue
+ set -e _tide_symbol_list
+ set -e _tide_option_list
+ _next_choice all/style
+ break
+ case q
+ _tide_exit_configure
+ set -e _tide_symbol_list
+ set -e _tide_option_list
+ command -q clear && clear
+ break
+ case $_tide_symbol_list
+ set -g _tide_selected_option $_tide_option_list[(contains -i $input $_tide_symbol_list)]
+ test "$func" != finish &&
+ set -a _tide_configure_current_options --$func=(string escape $_tide_selected_option)
+ set -e _tide_symbol_list
+ set -e _tide_option_list
+ break
+ end
+ end
+end
+
+function _tide_display_prompt
+ set -q _flag_auto && return
+
+ _fake_tide_cache_variables
+ set -l prompt (_fake_tide_prompt)
+
+ set -l bottom_left_prompt_string_length (string length --visible $prompt[-1])
+ set -l right_prompt_string (string pad --width (math $fake_columns-$bottom_left_prompt_string_length) $prompt[1])
+ set -l prompt[-1] "$prompt[-1]$right_prompt_string"
+
+ if set -q _configure_transient
+ if contains newline $fake_tide_left_prompt_items
+ string unescape $prompt[3..]
+ else
+ _fake_tide_item_character
+ echo
+ end
+ else
+ if not set -q _tide_configure_first_prompt_after_option
+ test "$fake_tide_prompt_add_newline_before" = true && echo
+ end
+ string unescape $prompt[2..]
+ end
+
+ set -e _tide_configure_first_prompt_after_option
+ set_color normal
+end
+
+function _tide_exit_configure
+ set -e _tide_selected_option # Skip through all switch and _next_choice
+end
diff --git a/home-config/fish/functions/_tide_sub_reload.fish b/home-config/fish/functions/_tide_sub_reload.fish
new file mode 100644
index 0000000..5a45fbd
--- /dev/null
+++ b/home-config/fish/functions/_tide_sub_reload.fish
@@ -0,0 +1,3 @@
+function _tide_sub_reload
+ source (functions --details fish_prompt)
+end
diff --git a/home-config/fish/functions/fenv.fish b/home-config/fish/functions/fenv.fish
new file mode 100644
index 0000000..3cc246e
--- /dev/null
+++ b/home-config/fish/functions/fenv.fish
@@ -0,0 +1,36 @@
+# The MIT License (MIT)
+
+# Copyright (c) 2015 Derek Willian Stavis
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+
+function fenv -d "Run bash scripts and import variables modified by them"
+ if count $argv >/dev/null
+ if string trim -- $argv | string length -q
+ fenv.main $argv
+ return $status
+ end
+ return 0
+ else
+ echo (set_color red)'error:' (set_color normal)'parameter missing'
+ echo (set_color cyan)'usage:' (set_color normal)'fenv <bash command>'
+ return 23 # EINVAL
+ end
+end
diff --git a/home-config/fish/functions/fenv.main.fish b/home-config/fish/functions/fenv.main.fish
new file mode 100644
index 0000000..c07714c
--- /dev/null
+++ b/home-config/fish/functions/fenv.main.fish
@@ -0,0 +1,39 @@
+# The MIT License (MIT)
+
+# Copyright (c) 2015 Derek Willian Stavis
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+
+function fenv.main
+ bash -c "$argv && env -0 >&31" 31>| while read -l -z env_var
+ set -l kv (string split -m 1 = $env_var); or continue
+ # Skip read-only variables
+ contains $kv[1] _ SHLVL PWD; and continue
+ string match -rq '^BASH_.*%%$' $kv[1]; and continue
+ # Variable
+ # - is not defined
+ # - OR variable differs
+ # - OR variable is not exported
+ if not set -q $kv[1]; or test "$$kv[1]" != $kv[2]; or not set -qx $kv[1]
+ set -gx $kv
+ end
+ end
+ return $pipestatus[1]
+end
diff --git a/home-config/fish/functions/fish_mode_prompt.fish b/home-config/fish/functions/fish_mode_prompt.fish
new file mode 100644
index 0000000..f37cf7d
--- /dev/null
+++ b/home-config/fish/functions/fish_mode_prompt.fish
@@ -0,0 +1 @@
+# Disable default vi prompt
diff --git a/home-config/fish/functions/fish_prompt.fish b/home-config/fish/functions/fish_prompt.fish
new file mode 100644
index 0000000..3b58b7b
--- /dev/null
+++ b/home-config/fish/functions/fish_prompt.fish
@@ -0,0 +1,171 @@
+function fish_prompt
+end # In case this file gets loaded non-interactively, e.g by conda
+status is-interactive || exit
+
+_tide_remove_unusable_items
+_tide_cache_variables
+_tide_parent_dirs
+source (functions --details _tide_pwd)
+
+set -l prompt_var _tide_prompt_$fish_pid
+set -U $prompt_var # Set var here so if we erase $prompt_var, bg job won't set a uvar
+
+set_color normal | read -l color_normal
+status fish-path | read -l fish_path
+
+# _tide_repaint prevents us from creating a second background job
+function _tide_refresh_prompt --on-variable $prompt_var --on-variable COLUMNS
+ set -g _tide_repaint
+ commandline -f repaint
+end
+
+if contains newline $_tide_left_items # two line prompt initialization
+ test "$tide_prompt_add_newline_before" = true && set -l add_newline '\n'
+
+ set_color $tide_prompt_color_frame_and_connection -b normal | read -l prompt_and_frame_color
+
+ set -l column_offset 5
+ test "$tide_left_prompt_frame_enabled" = true &&
+ set -l top_left_frame "$prompt_and_frame_color╭─" &&
+ set -l bot_left_frame "$prompt_and_frame_color╰─" &&
+ set column_offset (math $column_offset-2)
+ test "$tide_right_prompt_frame_enabled" = true &&
+ set -l top_right_frame "$prompt_and_frame_color─╮" &&
+ set -l bot_right_frame "$prompt_and_frame_color─╯" &&
+ set column_offset (math $column_offset-2)
+
+ if test "$tide_prompt_transient_enabled" = true
+ eval "
+function fish_prompt
+ _tide_status=\$status _tide_pipestatus=\$pipestatus if not set -e _tide_repaint
+ jobs -q && jobs -p | count | read -lx _tide_jobs
+ $fish_path -c \"set _tide_pipestatus \$_tide_pipestatus
+set _tide_parent_dirs \$_tide_parent_dirs
+PATH=\$(string escape \"\$PATH\") CMD_DURATION=\$CMD_DURATION fish_bind_mode=\$fish_bind_mode set $prompt_var (_tide_2_line_prompt)\" &
+ builtin disown
+
+ command kill \$_tide_last_pid 2>/dev/null
+ set -g _tide_last_pid \$last_pid
+ end
+
+ if not set -q _tide_transient
+ math \$COLUMNS-(string length -V \"\$$prompt_var[1][1]\$$prompt_var[1][3]\")+$column_offset | read -lx dist_btwn_sides
+
+ echo -n $add_newline'$top_left_frame'(string replace @PWD@ (_tide_pwd) \"\$$prompt_var[1][1]\")'$prompt_and_frame_color'
+ string repeat -Nm(math max 0, \$dist_btwn_sides-\$_tide_pwd_len) '$tide_prompt_icon_connection'
+
+ echo \"\$$prompt_var[1][3]$top_right_frame\"
+ end
+ echo -n \e\[0J\"$bot_left_frame\$$prompt_var[1][2]$color_normal \"
+end
+
+function fish_right_prompt
+ set -e _tide_transient || string unescape \"\$$prompt_var[1][4]$bot_right_frame$color_normal\"
+end"
+ else
+ eval "
+function fish_prompt
+ _tide_status=\$status _tide_pipestatus=\$pipestatus if not set -e _tide_repaint
+ jobs -q && jobs -p | count | read -lx _tide_jobs
+ $fish_path -c \"set _tide_pipestatus \$_tide_pipestatus
+set _tide_parent_dirs \$_tide_parent_dirs
+PATH=\$(string escape \"\$PATH\") CMD_DURATION=\$CMD_DURATION fish_bind_mode=\$fish_bind_mode set $prompt_var (_tide_2_line_prompt)\" &
+ builtin disown
+
+ command kill \$_tide_last_pid 2>/dev/null
+ set -g _tide_last_pid \$last_pid
+ end
+
+ math \$COLUMNS-(string length -V \"\$$prompt_var[1][1]\$$prompt_var[1][3]\")+$column_offset | read -lx dist_btwn_sides
+
+ echo -ns $add_newline'$top_left_frame'(string replace @PWD@ (_tide_pwd) \"\$$prompt_var[1][1]\")'$prompt_and_frame_color'
+ string repeat -Nm(math max 0, \$dist_btwn_sides-\$_tide_pwd_len) '$tide_prompt_icon_connection'
+ echo -ns \"\$$prompt_var[1][3]$top_right_frame\"\n\"$bot_left_frame\$$prompt_var[1][2]$color_normal \"
+end
+
+function fish_right_prompt
+ string unescape \"\$$prompt_var[1][4]$bot_right_frame$color_normal\"
+end"
+ end
+else # one line prompt initialization
+ test "$tide_prompt_add_newline_before" = true && set -l add_newline '\0'
+
+ math 5 -$tide_prompt_min_cols | read -l column_offset
+ test $column_offset -ge 0 && set column_offset "+$column_offset"
+
+ if test "$tide_prompt_transient_enabled" = true
+ eval "
+function fish_prompt
+ set -lx _tide_status \$status
+ _tide_pipestatus=\$pipestatus if not set -e _tide_repaint
+ jobs -q && jobs -p | count | read -lx _tide_jobs
+ $fish_path -c \"set _tide_pipestatus \$_tide_pipestatus
+set _tide_parent_dirs \$_tide_parent_dirs
+PATH=\$(string escape \"\$PATH\") CMD_DURATION=\$CMD_DURATION fish_bind_mode=\$fish_bind_mode set $prompt_var (_tide_1_line_prompt)\" &
+ builtin disown
+
+ command kill \$_tide_last_pid 2>/dev/null
+ set -g _tide_last_pid \$last_pid
+ end
+
+ if set -q _tide_transient
+ echo -n \e\[0J
+ add_prefix= _tide_item_character
+ echo -n '$color_normal '
+ else
+ math \$COLUMNS-(string length -V \"\$$prompt_var[1][1]\$$prompt_var[1][2]\")$column_offset | read -lx dist_btwn_sides
+ string replace @PWD@ (_tide_pwd) $add_newline \$$prompt_var[1][1]'$color_normal '
+ end
+end
+
+function fish_right_prompt
+ set -e _tide_transient || string unescape \"\$$prompt_var[1][2]$color_normal\"
+end"
+ else
+ eval "
+function fish_prompt
+ _tide_status=\$status _tide_pipestatus=\$pipestatus if not set -e _tide_repaint
+ jobs -q && jobs -p | count | read -lx _tide_jobs
+ $fish_path -c \"set _tide_pipestatus \$_tide_pipestatus
+set _tide_parent_dirs \$_tide_parent_dirs
+PATH=\$(string escape \"\$PATH\") CMD_DURATION=\$CMD_DURATION fish_bind_mode=\$fish_bind_mode set $prompt_var (_tide_1_line_prompt)\" &
+ builtin disown
+
+ command kill \$_tide_last_pid 2>/dev/null
+ set -g _tide_last_pid \$last_pid
+ end
+
+ math \$COLUMNS-(string length -V \"\$$prompt_var[1][1]\$$prompt_var[1][2]\")$column_offset | read -lx dist_btwn_sides
+ string replace @PWD@ (_tide_pwd) $add_newline \$$prompt_var[1][1]'$color_normal '
+end
+
+function fish_right_prompt
+ string unescape \"\$$prompt_var[1][2]$color_normal\"
+end"
+ end
+end
+
+eval "function _tide_on_fish_exit --on-event fish_exit
+ set -e $prompt_var
+end"
+
+if test "$tide_prompt_transient_enabled" = true
+ function _tide_enter_transient
+ # If the commandline will be executed, or is empty
+ if commandline --is-valid || test -z "$(commandline)"
+ # Pager open usually means selecting, not running
+ # Can be untrue, but it's better than the alternative
+ if not commandline --paging-mode
+ set -g _tide_transient
+ set -g _tide_repaint
+ commandline -f repaint
+ end
+ end
+ commandline -f execute
+ end
+
+ bind \r _tide_enter_transient
+ bind \n _tide_enter_transient
+ bind -M insert \r _tide_enter_transient
+ bind -M insert \n _tide_enter_transient
+end
diff --git a/home-config/fish/functions/fisher.fish b/home-config/fish/functions/fisher.fish
new file mode 100644
index 0000000..b1513d3
--- /dev/null
+++ b/home-config/fish/functions/fisher.fish
@@ -0,0 +1,240 @@
+function fisher --argument-names cmd --description "A plugin manager for Fish"
+ set --query fisher_path || set --local fisher_path $__fish_config_dir
+ set --local fisher_version 4.4.4
+ set --local fish_plugins $__fish_config_dir/fish_plugins
+
+ switch "$cmd"
+ case -v --version
+ echo "fisher, version $fisher_version"
+ case "" -h --help
+ echo "Usage: fisher install <plugins...> Install plugins"
+ echo " fisher remove <plugins...> Remove installed plugins"
+ echo " fisher update <plugins...> Update installed plugins"
+ echo " fisher update Update all installed plugins"
+ echo " fisher list [<regex>] List installed plugins matching regex"
+ echo "Options:"
+ echo " -v, --version Print version"
+ echo " -h, --help Print this help message"
+ echo "Variables:"
+ echo " \$fisher_path Plugin installation path. Default: $__fish_config_dir" | string replace --regex -- $HOME \~
+ case ls list
+ string match --entire --regex -- "$argv[2]" $_fisher_plugins
+ case install update remove
+ isatty || read --local --null --array stdin && set --append argv $stdin
+
+ set --local install_plugins
+ set --local update_plugins
+ set --local remove_plugins
+ set --local arg_plugins $argv[2..-1]
+ set --local old_plugins $_fisher_plugins
+ set --local new_plugins
+
+ test -e $fish_plugins && set --local file_plugins (string match --regex -- '^[^\s]+$' <$fish_plugins)
+
+ if ! set --query argv[2]
+ if test "$cmd" != update
+ echo "fisher: Not enough arguments for command: \"$cmd\"" >&2 && return 1
+ else if ! set --query file_plugins
+ echo "fisher: \"$fish_plugins\" file not found: \"$cmd\"" >&2 && return 1
+ end
+ set arg_plugins $file_plugins
+ end
+
+ for plugin in $arg_plugins
+ set plugin (test -e "$plugin" && realpath $plugin || string lower -- $plugin)
+ contains -- "$plugin" $new_plugins || set --append new_plugins $plugin
+ end
+
+ if set --query argv[2]
+ for plugin in $new_plugins
+ if contains -- "$plugin" $old_plugins
+ test "$cmd" = remove &&
+ set --append remove_plugins $plugin ||
+ set --append update_plugins $plugin
+ else if test "$cmd" = install
+ set --append install_plugins $plugin
+ else
+ echo "fisher: Plugin not installed: \"$plugin\"" >&2 && return 1
+ end
+ end
+ else
+ for plugin in $new_plugins
+ contains -- "$plugin" $old_plugins &&
+ set --append update_plugins $plugin ||
+ set --append install_plugins $plugin
+ end
+
+ for plugin in $old_plugins
+ contains -- "$plugin" $new_plugins || set --append remove_plugins $plugin
+ end
+ end
+
+ set --local pid_list
+ set --local source_plugins
+ set --local fetch_plugins $update_plugins $install_plugins
+ set --local fish_path (status fish-path)
+
+ echo (set_color --bold)fisher $cmd version $fisher_version(set_color normal)
+
+ for plugin in $fetch_plugins
+ set --local source (command mktemp -d)
+ set --append source_plugins $source
+
+ command mkdir -p $source/{completions,conf.d,themes,functions}
+
+ $fish_path --command "
+ if test -e $plugin
+ command cp -Rf $plugin/* $source
+ else
+ set temp (command mktemp -d)
+ set repo (string split -- \@ $plugin) || set repo[2] HEAD
+
+ if set path (string replace --regex -- '^(https://)?gitlab.com/' '' \$repo[1])
+ set name (string split -- / \$path)[-1]
+ set url https://gitlab.com/\$path/-/archive/\$repo[2]/\$name-\$repo[2].tar.gz
+ else
+ set url https://api.github.com/repos/\$repo[1]/tarball/\$repo[2]
+ end
+
+ echo Fetching (set_color --underline)\$url(set_color normal)
+
+ if command curl -q --silent -L \$url | command tar -xzC \$temp -f - 2>/dev/null
+ command cp -Rf \$temp/*/* $source
+ else
+ echo fisher: Invalid plugin name or host unavailable: \\\"$plugin\\\" >&2
+ command rm -rf $source
+ end
+
+ command rm -rf \$temp
+ end
+
+ set files $source/* && string match --quiet --regex -- .+\.fish\\\$ \$files
+ " &
+
+ set --append pid_list (jobs --last --pid)
+ end
+
+ wait $pid_list 2>/dev/null
+
+ for plugin in $fetch_plugins
+ if set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] && test ! -e $source
+ if set --local index (contains --index -- "$plugin" $install_plugins)
+ set --erase install_plugins[$index]
+ else
+ set --erase update_plugins[(contains --index -- "$plugin" $update_plugins)]
+ end
+ end
+ end
+
+ for plugin in $update_plugins $remove_plugins
+ if set --local index (contains --index -- "$plugin" $_fisher_plugins)
+ set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files
+
+ if contains -- "$plugin" $remove_plugins
+ for name in (string replace --filter --regex -- '.+/conf\.d/([^/]+)\.fish$' '$1' $$plugin_files_var)
+ emit {$name}_uninstall
+ end
+ printf "%s\n" Removing\ (set_color red --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~
+ set --erase _fisher_plugins[$index]
+ end
+
+ command rm -rf (string replace -- \~ ~ $$plugin_files_var)
+
+ functions --erase (string replace --filter --regex -- '.+/functions/([^/]+)\.fish$' '$1' $$plugin_files_var)
+
+ for name in (string replace --filter --regex -- '.+/completions/([^/]+)\.fish$' '$1' $$plugin_files_var)
+ complete --erase --command $name
+ end
+
+ set --erase $plugin_files_var
+ end
+ end
+
+ if set --query update_plugins[1] || set --query install_plugins[1]
+ command mkdir -p $fisher_path/{functions,themes,conf.d,completions}
+ end
+
+ for plugin in $update_plugins $install_plugins
+ set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)]
+ set --local files $source/{functions,themes,conf.d,completions}/*
+
+ if set --local index (contains --index -- $plugin $install_plugins)
+ set --local user_files $fisher_path/{functions,themes,conf.d,completions}/*
+ set --local conflict_files
+
+ for file in (string replace -- $source/ $fisher_path/ $files)
+ contains -- $file $user_files && set --append conflict_files $file
+ end
+
+ if set --query conflict_files[1] && set --erase install_plugins[$index]
+ echo -s "fisher: Cannot install \"$plugin\": please remove or move conflicting files first:" \n" "$conflict_files >&2
+ continue
+ end
+ end
+
+ for file in (string replace -- $source/ "" $files)
+ command cp -RLf $source/$file $fisher_path/$file
+ end
+
+ set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files
+
+ set --query files[1] && set --universal $plugin_files_var (string replace -- $source $fisher_path $files | string replace -- ~ \~)
+
+ contains -- $plugin $_fisher_plugins || set --universal --append _fisher_plugins $plugin
+ contains -- $plugin $install_plugins && set --local event install || set --local event update
+
+ printf "%s\n" Installing\ (set_color --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~
+
+ for file in (string match --regex -- '.+/[^/]+\.fish$' $$plugin_files_var | string replace -- \~ ~)
+ source $file
+ if set --local name (string replace --regex -- '.+conf\.d/([^/]+)\.fish$' '$1' $file)
+ emit {$name}_$event
+ end
+ end
+ end
+
+ command rm -rf $source_plugins
+
+ if set --query _fisher_plugins[1]
+ set --local commit_plugins
+
+ for plugin in $file_plugins
+ contains -- (string lower -- $plugin) (string lower -- $_fisher_plugins) && set --append commit_plugins $plugin
+ end
+
+ for plugin in $_fisher_plugins
+ contains -- (string lower -- $plugin) (string lower -- $commit_plugins) || set --append commit_plugins $plugin
+ end
+
+ printf "%s\n" $commit_plugins >$fish_plugins
+ else
+ set --erase _fisher_plugins
+ command rm -f $fish_plugins
+ end
+
+ set --local total (count $install_plugins) (count $update_plugins) (count $remove_plugins)
+
+ test "$total" != "0 0 0" && echo (string join ", " (
+ test $total[1] = 0 || echo "Installed $total[1]") (
+ test $total[2] = 0 || echo "Updated $total[2]") (
+ test $total[3] = 0 || echo "Removed $total[3]")
+ ) plugin/s
+ case \*
+ echo "fisher: Unknown command: \"$cmd\"" >&2 && return 1
+ end
+end
+
+if ! set --query _fisher_upgraded_to_4_4
+ set --universal _fisher_upgraded_to_4_4
+ if functions --query _fisher_list
+ set --query XDG_DATA_HOME[1] || set --local XDG_DATA_HOME ~/.local/share
+ command rm -rf $XDG_DATA_HOME/fisher
+ functions --erase _fisher_{list,plugin_parse}
+ fisher update >/dev/null 2>/dev/null
+ else
+ for var in (set --names | string match --entire --regex '^_fisher_.+_files$')
+ set $var (string replace -- ~ \~ $$var)
+ end
+ functions --erase _fisher_fish_postexec
+ end
+end
diff --git a/home-config/fish/functions/fzf_configure_bindings.fish b/home-config/fish/functions/fzf_configure_bindings.fish
new file mode 100644
index 0000000..4b4e7a2
--- /dev/null
+++ b/home-config/fish/functions/fzf_configure_bindings.fish
@@ -0,0 +1,46 @@
+# Always installs bindings for insert and default mode for simplicity and b/c it has almost no side-effect
+# https://gitter.im/fish-shell/fish-shell?at=60a55915ee77a74d685fa6b1
+function fzf_configure_bindings --description "Installs the default key bindings for fzf.fish with user overrides passed as options."
+ # no need to install bindings if not in interactive mode or running tests
+ status is-interactive || test "$CI" = true; or return
+
+ set -f options_spec h/help 'directory=?' 'git_log=?' 'git_status=?' 'history=?' 'processes=?' 'variables=?'
+ argparse --max-args=0 --ignore-unknown $options_spec -- $argv 2>/dev/null
+ if test $status -ne 0
+ echo "Invalid option or a positional argument was provided." >&2
+ _fzf_configure_bindings_help
+ return 22
+ else if set --query _flag_help
+ _fzf_configure_bindings_help
+ return
+ else
+ # Initialize with default key sequences and then override or disable them based on flags
+ # index 1 = directory, 2 = git_log, 3 = git_status, 4 = history, 5 = processes, 6 = variables
+ set -f key_sequences \e\cf \e\cl \e\cs \cr \e\cp \cv # \c = control, \e = escape
+ set --query _flag_directory && set key_sequences[1] "$_flag_directory"
+ set --query _flag_git_log && set key_sequences[2] "$_flag_git_log"
+ set --query _flag_git_status && set key_sequences[3] "$_flag_git_status"
+ set --query _flag_history && set key_sequences[4] "$_flag_history"
+ set --query _flag_processes && set key_sequences[5] "$_flag_processes"
+ set --query _flag_variables && set key_sequences[6] "$_flag_variables"
+
+ # If fzf bindings already exists, uninstall it first for a clean slate
+ if functions --query _fzf_uninstall_bindings
+ _fzf_uninstall_bindings
+ end
+
+ for mode in default insert
+ test -n $key_sequences[1] && bind --mode $mode $key_sequences[1] _fzf_search_directory
+ test -n $key_sequences[2] && bind --mode $mode $key_sequences[2] _fzf_search_git_log
+ test -n $key_sequences[3] && bind --mode $mode $key_sequences[3] _fzf_search_git_status
+ test -n $key_sequences[4] && bind --mode $mode $key_sequences[4] _fzf_search_history
+ test -n $key_sequences[5] && bind --mode $mode $key_sequences[5] _fzf_search_processes
+ test -n $key_sequences[6] && bind --mode $mode $key_sequences[6] "$_fzf_search_vars_command"
+ end
+
+ function _fzf_uninstall_bindings --inherit-variable key_sequences
+ bind --erase -- $key_sequences
+ bind --erase --mode insert -- $key_sequences
+ end
+ end
+end
diff --git a/home-config/fish/functions/tide.fish b/home-config/fish/functions/tide.fish
new file mode 100644
index 0000000..092a722
--- /dev/null
+++ b/home-config/fish/functions/tide.fish
@@ -0,0 +1,28 @@
+function tide --description 'Manage your Tide prompt'
+ argparse --stop-nonopt v/version h/help -- $argv
+
+ if set -q _flag_version
+ echo 'tide, version 6.1.1'
+ else if set -q _flag_help
+ _tide_help
+ else if functions --query _tide_sub_$argv[1]
+ _tide_sub_$argv[1] $argv[2..]
+ else
+ _tide_help
+ return 1
+ end
+end
+
+function _tide_help
+ printf %s\n \
+ 'Usage: tide [options] subcommand [options]' \
+ '' \
+ 'Options:' \
+ ' -v or --version print tide version number' \
+ ' -h or --help print this help message' \
+ '' \
+ 'Subcommands:' \
+ ' configure run interactive configuration wizard' \
+ ' reload reload tide configuration' \
+ ' bug-report print info for use in bug reports'
+end
diff --git a/home-config/fish/functions/tide/configure/choices/all/finish.fish b/home-config/fish/functions/tide/configure/choices/all/finish.fish
new file mode 100644
index 0000000..f670b1e
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/all/finish.fish
@@ -0,0 +1,46 @@
+function finish
+ _tide_title Finish
+
+ echo
+ set_color red
+ _tide_option y 'Overwrite your current tide config'
+ set_color normal
+ echo
+
+ _tide_option p 'Exit and print the config you just generated'
+ echo
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case 'Overwrite your current tide config'
+ _tide_finish
+ command -q clear && clear
+ set -q _flag_auto || _tide_print_configure_current_options
+ case 'Exit and print the config you just generated'
+ _tide_exit_configure
+ command -q clear && clear
+ _tide_print_configure_current_options
+ end
+end
+
+function _tide_finish
+ _tide_exit_configure
+
+ # Deal with prompt char/vi mode
+ contains character $fake_tide_left_prompt_items || set -p fake_tide_left_prompt_items vi_mode
+
+ # Set the real variables
+ for fakeVar in (set --names | string match -r "^fake_tide.*")
+ set -U (string replace 'fake_' '' $fakeVar) $$fakeVar
+ end
+
+ # Make sure old prompt won't display
+ set -e $_tide_prompt_var 2>/dev/null
+
+ # Re-initialize the prompt
+ tide reload
+end
+
+function _tide_print_configure_current_options
+ _tide_fish_colorize "tide configure --auto $_tide_configure_current_options"
+end
diff --git a/home-config/fish/functions/tide/configure/choices/all/icons.fish b/home-config/fish/functions/tide/configure/choices/all/icons.fish
new file mode 100644
index 0000000..be167bb
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/all/icons.fish
@@ -0,0 +1,33 @@
+function icons
+ _tide_title Icons
+
+ _tide_option 1 'Few icons'
+ _tide_display_prompt
+
+ _tide_option 2 'Many icons'
+ _enable_icons
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case 'Few icons'
+ _disable_icons
+ end
+ _next_choice all/transient
+end
+
+function _enable_icons
+ set -p fake_tide_left_prompt_items os
+ set -g fake_tide_pwd_icon 
+ set -g fake_tide_pwd_icon_home 
+ set -g fake_tide_cmd_duration_icon 
+ set -g fake_tide_git_icon 
+end
+
+function _disable_icons
+ _tide_find_and_remove os fake_tide_left_prompt_items
+ set fake_tide_pwd_icon
+ set fake_tide_pwd_icon_home
+ set fake_tide_cmd_duration_icon
+ set fake_tide_git_icon
+end
diff --git a/home-config/fish/functions/tide/configure/choices/all/prompt_colors.fish b/home-config/fish/functions/tide/configure/choices/all/prompt_colors.fish
new file mode 100644
index 0000000..247ef4e
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/all/prompt_colors.fish
@@ -0,0 +1,26 @@
+function prompt_colors
+ _tide_title 'Prompt Colors'
+
+ _tide_option 1 'True color'
+ _tide_display_prompt
+
+ _tide_option 2 '16 colors'
+ _load_config "$_tide_configure_style"_16color
+ set -g _tide_16color true
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case 'True color'
+ _load_config "$_tide_configure_style"
+ set -e _tide_16color
+ switch $_tide_configure_style
+ case lean rainbow
+ _next_choice all/show_time
+ case classic
+ _next_choice classic/classic_prompt_color
+ end
+ case '16 colors'
+ _next_choice all/show_time
+ end
+end
diff --git a/home-config/fish/functions/tide/configure/choices/all/prompt_connection.fish b/home-config/fish/functions/tide/configure/choices/all/prompt_connection.fish
new file mode 100644
index 0000000..ff76546
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/all/prompt_connection.fish
@@ -0,0 +1,31 @@
+function prompt_connection
+ _tide_title 'Prompt Connection'
+
+ _tide_option 1 Disconnected
+ set -g fake_tide_prompt_icon_connection ' '
+ _tide_display_prompt
+
+ _tide_option 2 Dotted
+ set -g fake_tide_prompt_icon_connection '·'
+ _tide_display_prompt
+
+ _tide_option 3 Solid
+ set -g fake_tide_prompt_icon_connection '─'
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case Disconnected
+ set -g fake_tide_prompt_icon_connection ' '
+ case Dotted
+ set -g fake_tide_prompt_icon_connection '·'
+ case Solid
+ set -g fake_tide_prompt_icon_connection '─'
+ end
+ switch $_tide_configure_style
+ case lean
+ _next_choice all/prompt_connection_andor_frame_color
+ case classic rainbow
+ _next_choice powerline/powerline_right_prompt_frame
+ end
+end
diff --git a/home-config/fish/functions/tide/configure/choices/all/prompt_connection_andor_frame_color.fish b/home-config/fish/functions/tide/configure/choices/all/prompt_connection_andor_frame_color.fish
new file mode 100644
index 0000000..cefbf2c
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/all/prompt_connection_andor_frame_color.fish
@@ -0,0 +1,40 @@
+function prompt_connection_andor_frame_color
+ if test "$_tide_16color" = true ||
+ test "$fake_tide_left_prompt_frame_enabled" = false -a \
+ "$fake_tide_right_prompt_frame_enabled" = false -a \
+ "$fake_tide_prompt_icon_connection" = ' '
+ _next_choice all/prompt_spacing
+ return 0
+ end
+
+ _tide_title "Connection & Frame Color"
+
+ _tide_option 1 Lightest
+ set -g fake_tide_prompt_color_frame_and_connection 808080
+ _tide_display_prompt
+
+ _tide_option 2 Light
+ set -g fake_tide_prompt_color_frame_and_connection 6C6C6C
+ _tide_display_prompt
+
+ _tide_option 3 Dark
+ set -g fake_tide_prompt_color_frame_and_connection 585858
+ _tide_display_prompt
+
+ _tide_option 4 Darkest
+ set -g fake_tide_prompt_color_frame_and_connection 444444
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case Lightest
+ set -g fake_tide_prompt_color_frame_and_connection 808080
+ case Light
+ set -g fake_tide_prompt_color_frame_and_connection 6C6C6C
+ case Dark
+ set -g fake_tide_prompt_color_frame_and_connection 585858
+ case Darkest
+ set -g fake_tide_prompt_color_frame_and_connection 444444
+ end
+ _next_choice all/prompt_spacing
+end
diff --git a/home-config/fish/functions/tide/configure/choices/all/prompt_spacing.fish b/home-config/fish/functions/tide/configure/choices/all/prompt_spacing.fish
new file mode 100644
index 0000000..f68be68
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/all/prompt_spacing.fish
@@ -0,0 +1,22 @@
+function prompt_spacing
+ _tide_title 'Prompt Spacing'
+
+ _tide_option 1 Compact
+ set -g fake_tide_prompt_add_newline_before false
+ _tide_display_prompt
+ _tide_display_prompt
+
+ _tide_option 2 Sparse
+ set -g fake_tide_prompt_add_newline_before true
+ _tide_display_prompt
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case Compact
+ set -g fake_tide_prompt_add_newline_before false
+ case Sparse
+ set -g fake_tide_prompt_add_newline_before true
+ end
+ _next_choice all/icons
+end
diff --git a/home-config/fish/functions/tide/configure/choices/all/show_time.fish b/home-config/fish/functions/tide/configure/choices/all/show_time.fish
new file mode 100644
index 0000000..b66c785
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/all/show_time.fish
@@ -0,0 +1,33 @@
+function show_time
+ _tide_title 'Show current time?'
+
+ _tide_option 1 No
+ _tide_display_prompt
+
+ set -a fake_tide_right_prompt_items time
+
+ _tide_option 2 '24-hour format'
+ set -g fake_tide_time_format %T
+ _tide_display_prompt
+
+ _tide_option 3 '12-hour format'
+ set -g fake_tide_time_format %r
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case No
+ set -g fake_tide_time_format ''
+ set -e fake_tide_right_prompt_items[-1]
+ case '24-hour format'
+ set -g fake_tide_time_format %T
+ case '12-hour format'
+ set -g fake_tide_time_format %r
+ end
+ switch $_tide_configure_style
+ case lean
+ _next_choice "$_tide_configure_style"/"$_tide_configure_style"_prompt_height
+ case classic rainbow
+ _next_choice "$_tide_configure_style"/"$_tide_configure_style"_prompt_separators
+ end
+end
diff --git a/home-config/fish/functions/tide/configure/choices/all/style.fish b/home-config/fish/functions/tide/configure/choices/all/style.fish
new file mode 100644
index 0000000..fe9a58f
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/all/style.fish
@@ -0,0 +1,36 @@
+function style
+ set -g _tide_configure_current_options
+
+ _tide_title 'Prompt Style'
+
+ _tide_option 1 Lean
+ _load_config lean
+ _tide_display_prompt
+
+ _tide_option 2 Classic
+ _load_config classic
+ _tide_display_prompt
+
+ _tide_option 3 Rainbow
+ _load_config rainbow
+ _tide_display_prompt
+
+ _tide_menu (status function) --no-restart
+ switch $_tide_selected_option
+ case Lean
+ _load_config lean
+ set -g _tide_configure_style lean
+ case Classic
+ _load_config classic
+ set -g _tide_configure_style classic
+ case Rainbow
+ _load_config rainbow
+ set -g _tide_configure_style rainbow
+ end
+ _next_choice all/prompt_colors
+end
+
+function _load_config -a name
+ string replace -r '^' 'set -g fake_' <(status dirname)/../../icons.fish | source
+ string replace -r '^' 'set -g fake_' <(status dirname)/../../configs/$name.fish | source
+end
diff --git a/home-config/fish/functions/tide/configure/choices/all/transient.fish b/home-config/fish/functions/tide/configure/choices/all/transient.fish
new file mode 100644
index 0000000..df2b6b6
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/all/transient.fish
@@ -0,0 +1,22 @@
+function transient
+ _tide_title 'Enable transient prompt?'
+
+ _tide_option 1 No
+ _tide_display_prompt
+ _tide_display_prompt
+ _tide_display_prompt
+
+ _tide_option 2 Yes
+ _configure_transient= _tide_display_prompt
+ _configure_transient= _tide_display_prompt
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case No
+ set fake_tide_prompt_transient_enabled false
+ case Yes
+ set fake_tide_prompt_transient_enabled true
+ end
+ _next_choice all/finish
+end
diff --git a/home-config/fish/functions/tide/configure/choices/classic/classic_prompt_color.fish b/home-config/fish/functions/tide/configure/choices/classic/classic_prompt_color.fish
new file mode 100644
index 0000000..77ceeaf
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/classic/classic_prompt_color.fish
@@ -0,0 +1,38 @@
+function classic_prompt_color
+ _tide_title 'Prompt Color'
+
+ _tide_option 1 Lightest
+ _set_all_items_bg_color 585858
+ _tide_display_prompt
+
+ _tide_option 2 Light
+ _set_all_items_bg_color 444444
+ _tide_display_prompt
+
+ _tide_option 3 Dark
+ _set_all_items_bg_color 303030
+ _tide_display_prompt
+
+ _tide_option 4 Darkest
+ _set_all_items_bg_color 1C1C1C
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case Lightest
+ _set_all_items_bg_color 585858
+ case Light
+ _set_all_items_bg_color 444444
+ case Dark
+ _set_all_items_bg_color 303030
+ case Darkest
+ _set_all_items_bg_color 1C1C1C
+ end
+ _next_choice all/show_time
+end
+
+function _set_all_items_bg_color -a color
+ for var in (set --names | string match -r "fake_.*_bg_color.*")
+ set $var $color
+ end
+end
diff --git a/home-config/fish/functions/tide/configure/choices/classic/classic_prompt_separators.fish b/home-config/fish/functions/tide/configure/choices/classic/classic_prompt_separators.fish
new file mode 100644
index 0000000..20af6cd
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/classic/classic_prompt_separators.fish
@@ -0,0 +1,40 @@
+function classic_prompt_separators
+ _tide_title 'Prompt Separators'
+
+ _tide_option 1 Angled
+ set -g fake_tide_left_prompt_separator_same_color 
+ set -g fake_tide_right_prompt_separator_same_color 
+ _tide_display_prompt
+
+ _tide_option 2 Vertical
+ set -g fake_tide_left_prompt_separator_same_color │
+ set -g fake_tide_right_prompt_separator_same_color │
+ _tide_display_prompt
+
+ _tide_option 3 Slanted
+ set -g fake_tide_left_prompt_separator_same_color ╱
+ set -g fake_tide_right_prompt_separator_same_color ╱
+ _tide_display_prompt
+
+ _tide_option 4 Round
+ set -g fake_tide_left_prompt_separator_same_color 
+ set -g fake_tide_right_prompt_separator_same_color 
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case Angled
+ set -g fake_tide_left_prompt_separator_same_color 
+ set -g fake_tide_right_prompt_separator_same_color 
+ case Vertical
+ set -g fake_tide_left_prompt_separator_same_color │
+ set -g fake_tide_right_prompt_separator_same_color │
+ case Slanted
+ set -g fake_tide_left_prompt_separator_same_color ╱
+ set -g fake_tide_right_prompt_separator_same_color ╱
+ case Round
+ set -g fake_tide_left_prompt_separator_same_color 
+ set -g fake_tide_right_prompt_separator_same_color 
+ end
+ _next_choice powerline/powerline_prompt_heads
+end
diff --git a/home-config/fish/functions/tide/configure/choices/lean/lean_prompt_height.fish b/home-config/fish/functions/tide/configure/choices/lean/lean_prompt_height.fish
new file mode 100644
index 0000000..2077241
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/lean/lean_prompt_height.fish
@@ -0,0 +1,26 @@
+function lean_prompt_height
+ _tide_title 'Prompt Height'
+
+ _tide_option 1 'One line'
+ _tide_find_and_remove newline fake_tide_left_prompt_items
+ set -g fake_tide_left_prompt_suffix ''
+ _tide_display_prompt
+
+ _tide_option 2 'Two lines'
+ set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items[1..-2] newline $fake_tide_left_prompt_items[-1]
+ set -g fake_tide_left_prompt_suffix ' '
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case 'One line'
+ _tide_find_and_remove newline fake_tide_left_prompt_items
+ set fake_tide_left_prompt_suffix ''
+ _next_choice all/prompt_connection_andor_frame_color
+ case 'Two lines'
+ _tide_find_and_remove newline fake_tide_left_prompt_items
+ set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items[1..-2] newline $fake_tide_left_prompt_items[-1]
+ set -g fake_tide_left_prompt_suffix ' '
+ _next_choice all/prompt_connection
+ end
+end
diff --git a/home-config/fish/functions/tide/configure/choices/powerline/powerline_prompt_heads.fish b/home-config/fish/functions/tide/configure/choices/powerline/powerline_prompt_heads.fish
new file mode 100644
index 0000000..0030cad
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/powerline/powerline_prompt_heads.fish
@@ -0,0 +1,32 @@
+function powerline_prompt_heads
+ _tide_title 'Prompt Heads'
+
+ _tide_option 1 Sharp
+ set -g fake_tide_left_prompt_suffix 
+ set -g fake_tide_right_prompt_prefix 
+ _tide_display_prompt
+
+ _tide_option 2 Slanted
+ set -g fake_tide_left_prompt_suffix 
+ set -g fake_tide_right_prompt_prefix 
+ _tide_display_prompt
+
+ _tide_option 3 Round
+ set -g fake_tide_left_prompt_suffix 
+ set -g fake_tide_right_prompt_prefix 
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case Sharp
+ set -g fake_tide_left_prompt_suffix 
+ set -g fake_tide_right_prompt_prefix 
+ case Slanted
+ set -g fake_tide_left_prompt_suffix 
+ set -g fake_tide_right_prompt_prefix 
+ case Round
+ set -g fake_tide_left_prompt_suffix 
+ set -g fake_tide_right_prompt_prefix 
+ end
+ _next_choice powerline/powerline_prompt_tails
+end
diff --git a/home-config/fish/functions/tide/configure/choices/powerline/powerline_prompt_style.fish b/home-config/fish/functions/tide/configure/choices/powerline/powerline_prompt_style.fish
new file mode 100644
index 0000000..b374757
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/powerline/powerline_prompt_style.fish
@@ -0,0 +1,51 @@
+function powerline_prompt_style
+ _tide_title 'Powerline Prompt Style'
+
+ _tide_option 1 'One line'
+ _tide_find_and_remove newline fake_tide_left_prompt_items
+ _tide_find_and_remove character fake_tide_left_prompt_items
+ set fake_tide_left_prompt_frame_enabled false
+ set fake_tide_right_prompt_frame_enabled false
+ _tide_display_prompt
+
+ set -a fake_tide_left_prompt_items newline
+
+ _tide_option 2 'Two lines, character'
+ set -a fake_tide_left_prompt_items character
+ set fake_tide_left_prompt_frame_enabled false
+ set fake_tide_right_prompt_frame_enabled false
+ _tide_display_prompt
+
+ _tide_option 3 'Two lines, frame'
+ _tide_find_and_remove character fake_tide_left_prompt_items
+ set fake_tide_left_prompt_frame_enabled true
+ set fake_tide_right_prompt_frame_enabled true
+ _tide_display_prompt
+
+ _tide_option 4 'Two lines, character and frame'
+ set -a fake_tide_left_prompt_items character
+ set fake_tide_left_prompt_frame_enabled true
+ set fake_tide_right_prompt_frame_enabled true
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case 'One line'
+ _tide_find_and_remove newline fake_tide_left_prompt_items
+ _tide_find_and_remove character fake_tide_left_prompt_items
+ set fake_tide_left_prompt_frame_enabled false
+ set fake_tide_right_prompt_frame_enabled false
+ _next_choice all/prompt_connection_andor_frame_color
+ case 'Two lines, character'
+ set fake_tide_left_prompt_frame_enabled false
+ set fake_tide_right_prompt_frame_enabled false
+ _next_choice all/prompt_connection
+ case 'Two lines, frame'
+ _tide_find_and_remove character fake_tide_left_prompt_items
+ set fake_tide_left_prompt_frame_enabled true
+ set fake_tide_right_prompt_frame_enabled true
+ _next_choice all/prompt_connection
+ case 'Two lines, character and frame'
+ _next_choice all/prompt_connection
+ end
+end
diff --git a/home-config/fish/functions/tide/configure/choices/powerline/powerline_prompt_tails.fish b/home-config/fish/functions/tide/configure/choices/powerline/powerline_prompt_tails.fish
new file mode 100644
index 0000000..6b1574b
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/powerline/powerline_prompt_tails.fish
@@ -0,0 +1,40 @@
+function powerline_prompt_tails
+ _tide_title 'Prompt Tails'
+
+ _tide_option 1 Flat
+ set -g fake_tide_left_prompt_prefix ''
+ set -g fake_tide_right_prompt_suffix ''
+ _tide_display_prompt
+
+ _tide_option 2 Sharp
+ set -g fake_tide_left_prompt_prefix 
+ set -g fake_tide_right_prompt_suffix 
+ _tide_display_prompt
+
+ _tide_option 3 Slanted
+ set -g fake_tide_left_prompt_prefix 
+ set -g fake_tide_right_prompt_suffix 
+ _tide_display_prompt
+
+ _tide_option 4 Round
+ set -g fake_tide_left_prompt_prefix 
+ set -g fake_tide_right_prompt_suffix 
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case Flat
+ set -g fake_tide_left_prompt_prefix ''
+ set -g fake_tide_right_prompt_suffix ''
+ case Sharp
+ set -g fake_tide_left_prompt_prefix 
+ set -g fake_tide_right_prompt_suffix 
+ case Slanted
+ set -g fake_tide_left_prompt_prefix 
+ set -g fake_tide_right_prompt_suffix 
+ case Round
+ set -g fake_tide_left_prompt_prefix 
+ set -g fake_tide_right_prompt_suffix 
+ end
+ _next_choice powerline/powerline_prompt_style
+end
diff --git a/home-config/fish/functions/tide/configure/choices/powerline/powerline_right_prompt_frame.fish b/home-config/fish/functions/tide/configure/choices/powerline/powerline_right_prompt_frame.fish
new file mode 100644
index 0000000..a2d0a5b
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/powerline/powerline_right_prompt_frame.fish
@@ -0,0 +1,20 @@
+function powerline_right_prompt_frame
+ _tide_title 'Right Prompt Frame'
+
+ _tide_option 1 No
+ set fake_tide_right_prompt_frame_enabled false
+ _tide_display_prompt
+
+ _tide_option 2 Yes
+ set fake_tide_right_prompt_frame_enabled true
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case No
+ set fake_tide_right_prompt_frame_enabled false
+ case Yes
+ set fake_tide_right_prompt_frame_enabled true
+ end
+ _next_choice all/prompt_connection_andor_frame_color
+end
diff --git a/home-config/fish/functions/tide/configure/choices/rainbow/rainbow_prompt_separators.fish b/home-config/fish/functions/tide/configure/choices/rainbow/rainbow_prompt_separators.fish
new file mode 100644
index 0000000..14b9319
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/choices/rainbow/rainbow_prompt_separators.fish
@@ -0,0 +1,40 @@
+function rainbow_prompt_separators
+ _tide_title 'Prompt Separators'
+
+ _tide_option 1 Angled
+ set -g fake_tide_left_prompt_separator_diff_color 
+ set -g fake_tide_right_prompt_separator_diff_color 
+ _tide_display_prompt
+
+ _tide_option 2 Vertical
+ set -g fake_tide_left_prompt_separator_diff_color ''
+ set -g fake_tide_right_prompt_separator_diff_color ''
+ _tide_display_prompt
+
+ _tide_option 3 Slanted
+ set -g fake_tide_left_prompt_separator_diff_color ''
+ set -g fake_tide_right_prompt_separator_diff_color ''
+ _tide_display_prompt
+
+ _tide_option 4 Round
+ set -g fake_tide_left_prompt_separator_diff_color ''
+ set -g fake_tide_right_prompt_separator_diff_color ''
+ _tide_display_prompt
+
+ _tide_menu (status function)
+ switch $_tide_selected_option
+ case Angled
+ set -g fake_tide_left_prompt_separator_diff_color 
+ set -g fake_tide_right_prompt_separator_diff_color 
+ case Vertical
+ set -g fake_tide_left_prompt_separator_diff_color ''
+ set -g fake_tide_right_prompt_separator_diff_color ''
+ case Slanted
+ set -g fake_tide_left_prompt_separator_diff_color ''
+ set -g fake_tide_right_prompt_separator_diff_color ''
+ case Round
+ set -g fake_tide_left_prompt_separator_diff_color ''
+ set -g fake_tide_right_prompt_separator_diff_color ''
+ end
+ _next_choice powerline/powerline_prompt_heads
+end
diff --git a/home-config/fish/functions/tide/configure/configs/classic.fish b/home-config/fish/functions/tide/configure/configs/classic.fish
new file mode 100644
index 0000000..8973cbc
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/configs/classic.fish
@@ -0,0 +1,116 @@
+tide_aws_bg_color 444444
+tide_aws_color FF9900
+tide_character_color $_tide_color_green
+tide_character_color_failure FF0000
+tide_cmd_duration_bg_color 444444
+tide_cmd_duration_color 87875F
+tide_cmd_duration_decimals 0
+tide_cmd_duration_threshold 3000
+tide_context_always_display false
+tide_context_bg_color 444444
+tide_context_color_default D7AF87
+tide_context_color_root $_tide_color_gold
+tide_context_color_ssh D7AF87
+tide_context_hostname_parts 1
+tide_crystal_bg_color 444444
+tide_crystal_color FFFFFF
+tide_direnv_bg_color 444444
+tide_direnv_bg_color_denied 444444
+tide_direnv_color $_tide_color_gold
+tide_direnv_color_denied FF0000
+tide_distrobox_bg_color 444444
+tide_distrobox_color FF00FF
+tide_docker_bg_color 444444
+tide_docker_color 2496ED
+tide_docker_default_contexts default colima
+tide_elixir_bg_color 444444
+tide_elixir_color 4E2A8E
+tide_gcloud_bg_color 444444
+tide_gcloud_color 4285F4
+tide_git_bg_color 444444
+tide_git_bg_color_unstable 444444
+tide_git_bg_color_urgent 444444
+tide_git_color_branch $_tide_color_green
+tide_git_color_conflicted FF0000
+tide_git_color_dirty $_tide_color_gold
+tide_git_color_operation FF0000
+tide_git_color_staged $_tide_color_gold
+tide_git_color_stash $_tide_color_green
+tide_git_color_untracked $_tide_color_light_blue
+tide_git_color_upstream $_tide_color_green
+tide_git_truncation_length 24
+tide_git_truncation_strategy
+tide_go_bg_color 444444
+tide_go_color 00ACD7
+tide_java_bg_color 444444
+tide_java_color ED8B00
+tide_jobs_bg_color 444444
+tide_jobs_color $_tide_color_dark_green
+tide_jobs_number_threshold 1000
+tide_kubectl_bg_color 444444
+tide_kubectl_color 326CE5
+tide_left_prompt_frame_enabled true
+tide_left_prompt_items pwd git newline
+tide_left_prompt_prefix ''
+tide_left_prompt_separator_diff_color 
+tide_left_prompt_separator_same_color 
+tide_left_prompt_suffix 
+tide_nix_shell_bg_color 444444
+tide_nix_shell_color 7EBAE4
+tide_node_bg_color 444444
+tide_node_color 44883E
+tide_os_bg_color 444444
+tide_os_color EEEEEE
+tide_php_bg_color 444444
+tide_php_color 617CBE
+tide_private_mode_bg_color 444444
+tide_private_mode_color FFFFFF
+tide_prompt_add_newline_before true
+tide_prompt_color_frame_and_connection 6C6C6C
+tide_prompt_color_separator_same_color 949494
+tide_prompt_min_cols 34
+tide_prompt_pad_items true
+tide_prompt_transient_enabled false
+tide_pulumi_bg_color 444444
+tide_pulumi_color F7BF2A
+tide_pwd_bg_color 444444
+tide_pwd_color_anchors $_tide_color_light_blue
+tide_pwd_color_dirs $_tide_color_dark_blue
+tide_pwd_color_truncated_dirs 8787AF
+tide_pwd_markers .bzr .citc .git .hg .node-version .python-version .ruby-version .shorten_folder_marker .svn .terraform Cargo.toml composer.json CVS go.mod package.json build.zig
+tide_python_bg_color 444444
+tide_python_color 00AFAF
+tide_right_prompt_frame_enabled true
+tide_right_prompt_items status cmd_duration context jobs direnv node python rustc java php pulumi ruby go gcloud kubectl distrobox toolbox terraform aws nix_shell crystal elixir zig
+tide_right_prompt_prefix 
+tide_right_prompt_separator_diff_color 
+tide_right_prompt_separator_same_color 
+tide_right_prompt_suffix ''
+tide_ruby_bg_color 444444
+tide_ruby_color B31209
+tide_rustc_bg_color 444444
+tide_rustc_color F74C00
+tide_shlvl_bg_color 444444
+tide_shlvl_color d78700
+tide_shlvl_threshold 1
+tide_status_bg_color 444444
+tide_status_bg_color_failure 444444
+tide_status_color $_tide_color_dark_green
+tide_status_color_failure D70000
+tide_terraform_bg_color 444444
+tide_terraform_color 844FBA
+tide_time_bg_color 444444
+tide_time_color 5F8787
+tide_time_format %T
+tide_toolbox_bg_color 444444
+tide_toolbox_color 613583
+tide_vi_mode_bg_color_default 444444
+tide_vi_mode_bg_color_insert 444444
+tide_vi_mode_bg_color_replace 444444
+tide_vi_mode_bg_color_visual 444444
+tide_vi_mode_color_default 949494
+tide_vi_mode_color_insert 87AFAF
+tide_vi_mode_color_replace 87AF87
+tide_vi_mode_color_visual FF8700
+tide_zig_bg_color 444444
+tide_zig_color F7A41D
diff --git a/home-config/fish/functions/tide/configure/configs/classic_16color.fish b/home-config/fish/functions/tide/configure/configs/classic_16color.fish
new file mode 100644
index 0000000..670170f
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/configs/classic_16color.fish
@@ -0,0 +1,89 @@
+tide_aws_bg_color black
+tide_aws_color yellow
+tide_character_color brgreen
+tide_character_color_failure brred
+tide_cmd_duration_bg_color black
+tide_cmd_duration_color brblack
+tide_context_bg_color black
+tide_context_color_default yellow
+tide_context_color_root bryellow
+tide_context_color_ssh yellow
+tide_crystal_bg_color black
+tide_crystal_color brwhite
+tide_direnv_bg_color black
+tide_direnv_bg_color_denied black
+tide_direnv_color bryellow
+tide_direnv_color_denied brred
+tide_distrobox_bg_color black
+tide_distrobox_color brmagenta
+tide_docker_bg_color black
+tide_docker_color blue
+tide_elixir_bg_color black
+tide_elixir_color magenta
+tide_gcloud_bg_color black
+tide_gcloud_color blue
+tide_git_bg_color black
+tide_git_bg_color_unstable black
+tide_git_bg_color_urgent black
+tide_git_color_branch brgreen
+tide_git_color_conflicted brred
+tide_git_color_dirty bryellow
+tide_git_color_operation brred
+tide_git_color_staged bryellow
+tide_git_color_stash brgreen
+tide_git_color_untracked brblue
+tide_git_color_upstream brgreen
+tide_go_bg_color black
+tide_go_color brcyan
+tide_java_bg_color black
+tide_java_color yellow
+tide_jobs_bg_color black
+tide_jobs_color green
+tide_kubectl_bg_color black
+tide_kubectl_color blue
+tide_nix_shell_bg_color black
+tide_nix_shell_color brblue
+tide_node_bg_color black
+tide_node_color green
+tide_os_bg_color black
+tide_os_color brwhite
+tide_php_bg_color black
+tide_php_color blue
+tide_private_mode_bg_color black
+tide_private_mode_color brwhite
+tide_prompt_color_frame_and_connection brblack
+tide_prompt_color_separator_same_color brblack
+tide_pulumi_bg_color black
+tide_pulumi_color yellow
+tide_pwd_bg_color black
+tide_pwd_color_anchors brcyan
+tide_pwd_color_dirs cyan
+tide_pwd_color_truncated_dirs magenta
+tide_python_bg_color black
+tide_python_color cyan
+tide_ruby_bg_color black
+tide_ruby_color red
+tide_rustc_bg_color black
+tide_rustc_color red
+tide_shlvl_bg_color black
+tide_shlvl_color yellow
+tide_status_bg_color black
+tide_status_bg_color_failure black
+tide_status_color green
+tide_status_color_failure red
+tide_terraform_bg_color black
+tide_terraform_color magenta
+tide_time_bg_color black
+tide_time_color brblack
+tide_toolbox_bg_color black
+tide_toolbox_color magenta
+tide_vi_mode_bg_color_default black
+tide_vi_mode_bg_color_insert black
+tide_vi_mode_bg_color_replace black
+tide_vi_mode_bg_color_visual black
+tide_vi_mode_color_default white
+tide_vi_mode_color_insert cyan
+tide_vi_mode_color_replace green
+tide_vi_mode_color_visual yellow
+tide_zig_bg_color black
+tide_zig_color yellow
diff --git a/home-config/fish/functions/tide/configure/configs/lean.fish b/home-config/fish/functions/tide/configure/configs/lean.fish
new file mode 100644
index 0000000..a958a17
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/configs/lean.fish
@@ -0,0 +1,116 @@
+tide_aws_bg_color normal
+tide_aws_color FF9900
+tide_character_color $_tide_color_green
+tide_character_color_failure FF0000
+tide_cmd_duration_bg_color normal
+tide_cmd_duration_color 87875F
+tide_cmd_duration_decimals 0
+tide_cmd_duration_threshold 3000
+tide_context_always_display false
+tide_context_bg_color normal
+tide_context_color_default D7AF87
+tide_context_color_root $_tide_color_gold
+tide_context_color_ssh D7AF87
+tide_context_hostname_parts 1
+tide_crystal_bg_color normal
+tide_crystal_color FFFFFF
+tide_direnv_bg_color normal
+tide_direnv_bg_color_denied normal
+tide_direnv_color $_tide_color_gold
+tide_direnv_color_denied FF0000
+tide_distrobox_bg_color normal
+tide_distrobox_color FF00FF
+tide_docker_bg_color normal
+tide_docker_color 2496ED
+tide_docker_default_contexts default colima
+tide_elixir_bg_color normal
+tide_elixir_color 4E2A8E
+tide_gcloud_bg_color normal
+tide_gcloud_color 4285F4
+tide_git_bg_color normal
+tide_git_bg_color_unstable normal
+tide_git_bg_color_urgent normal
+tide_git_color_branch $_tide_color_green
+tide_git_color_conflicted FF0000
+tide_git_color_dirty $_tide_color_gold
+tide_git_color_operation FF0000
+tide_git_color_staged $_tide_color_gold
+tide_git_color_stash $_tide_color_green
+tide_git_color_untracked $_tide_color_light_blue
+tide_git_color_upstream $_tide_color_green
+tide_git_truncation_length 24
+tide_git_truncation_strategy
+tide_go_bg_color normal
+tide_go_color 00ACD7
+tide_java_bg_color normal
+tide_java_color ED8B00
+tide_jobs_bg_color normal
+tide_jobs_color $_tide_color_dark_green
+tide_jobs_number_threshold 1000
+tide_kubectl_bg_color normal
+tide_kubectl_color 326CE5
+tide_left_prompt_frame_enabled false
+tide_left_prompt_items pwd git newline character
+tide_left_prompt_prefix ''
+tide_left_prompt_separator_diff_color ' '
+tide_left_prompt_separator_same_color ' '
+tide_left_prompt_suffix ' '
+tide_nix_shell_bg_color normal
+tide_nix_shell_color 7EBAE4
+tide_node_bg_color normal
+tide_node_color 44883E
+tide_os_bg_color normal
+tide_os_color normal
+tide_php_bg_color normal
+tide_php_color 617CBE
+tide_private_mode_bg_color normal
+tide_private_mode_color FFFFFF
+tide_prompt_add_newline_before true
+tide_prompt_color_frame_and_connection 6C6C6C
+tide_prompt_color_separator_same_color 949494
+tide_prompt_min_cols 34
+tide_prompt_pad_items false
+tide_prompt_transient_enabled false
+tide_pulumi_bg_color normal
+tide_pulumi_color F7BF2A
+tide_pwd_bg_color normal
+tide_pwd_color_anchors $_tide_color_light_blue
+tide_pwd_color_dirs $_tide_color_dark_blue
+tide_pwd_color_truncated_dirs 8787AF
+tide_pwd_markers .bzr .citc .git .hg .node-version .python-version .ruby-version .shorten_folder_marker .svn .terraform Cargo.toml composer.json CVS go.mod package.json build.zig
+tide_python_bg_color normal
+tide_python_color 00AFAF
+tide_right_prompt_frame_enabled false
+tide_right_prompt_items status cmd_duration context jobs direnv node python rustc java php pulumi ruby go gcloud kubectl distrobox toolbox terraform aws nix_shell crystal elixir zig
+tide_right_prompt_prefix ' '
+tide_right_prompt_separator_diff_color ' '
+tide_right_prompt_separator_same_color ' '
+tide_right_prompt_suffix ''
+tide_ruby_bg_color normal
+tide_ruby_color B31209
+tide_rustc_bg_color normal
+tide_rustc_color F74C00
+tide_shlvl_bg_color normal
+tide_shlvl_color d78700
+tide_shlvl_threshold 1
+tide_status_bg_color normal
+tide_status_bg_color_failure normal
+tide_status_color $_tide_color_dark_green
+tide_status_color_failure D70000
+tide_terraform_bg_color normal
+tide_terraform_color 844FBA
+tide_time_bg_color normal
+tide_time_color 5F8787
+tide_time_format %T
+tide_toolbox_bg_color normal
+tide_toolbox_color 613583
+tide_vi_mode_bg_color_default normal
+tide_vi_mode_bg_color_insert normal
+tide_vi_mode_bg_color_replace normal
+tide_vi_mode_bg_color_visual normal
+tide_vi_mode_color_default 949494
+tide_vi_mode_color_insert 87AFAF
+tide_vi_mode_color_replace 87AF87
+tide_vi_mode_color_visual FF8700
+tide_zig_bg_color normal
+tide_zig_color F7A41D
diff --git a/home-config/fish/functions/tide/configure/configs/lean_16color.fish b/home-config/fish/functions/tide/configure/configs/lean_16color.fish
new file mode 100644
index 0000000..16c2511
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/configs/lean_16color.fish
@@ -0,0 +1,89 @@
+tide_aws_bg_color normal
+tide_aws_color yellow
+tide_character_color brgreen
+tide_character_color_failure brred
+tide_cmd_duration_bg_color normal
+tide_cmd_duration_color brblack
+tide_context_bg_color normal
+tide_context_color_default yellow
+tide_context_color_root bryellow
+tide_context_color_ssh yellow
+tide_crystal_bg_color normal
+tide_crystal_color brwhite
+tide_direnv_bg_color normal
+tide_direnv_bg_color_denied normal
+tide_direnv_color bryellow
+tide_direnv_color_denied brred
+tide_distrobox_bg_color normal
+tide_distrobox_color brmagenta
+tide_docker_bg_color normal
+tide_docker_color blue
+tide_elixir_bg_color normal
+tide_elixir_color magenta
+tide_gcloud_bg_color normal
+tide_gcloud_color blue
+tide_git_bg_color normal
+tide_git_bg_color_unstable normal
+tide_git_bg_color_urgent normal
+tide_git_color_branch brgreen
+tide_git_color_conflicted brred
+tide_git_color_dirty bryellow
+tide_git_color_operation brred
+tide_git_color_staged bryellow
+tide_git_color_stash brgreen
+tide_git_color_untracked brblue
+tide_git_color_upstream brgreen
+tide_go_bg_color normal
+tide_go_color brcyan
+tide_java_bg_color normal
+tide_java_color yellow
+tide_jobs_bg_color normal
+tide_jobs_color green
+tide_kubectl_bg_color normal
+tide_kubectl_color blue
+tide_nix_shell_bg_color normal
+tide_nix_shell_color brblue
+tide_node_bg_color normal
+tide_node_color green
+tide_os_bg_color normal
+tide_os_color brwhite
+tide_php_bg_color normal
+tide_php_color blue
+tide_private_mode_bg_color normal
+tide_private_mode_color brwhite
+tide_prompt_color_frame_and_connection brblack
+tide_prompt_color_separator_same_color brblack
+tide_pulumi_bg_color normal
+tide_pulumi_color yellow
+tide_pwd_bg_color normal
+tide_pwd_color_anchors brcyan
+tide_pwd_color_dirs cyan
+tide_pwd_color_truncated_dirs magenta
+tide_python_bg_color normal
+tide_python_color cyan
+tide_ruby_bg_color normal
+tide_ruby_color red
+tide_rustc_bg_color normal
+tide_rustc_color red
+tide_shlvl_bg_color normal
+tide_shlvl_color yellow
+tide_status_bg_color normal
+tide_status_bg_color_failure normal
+tide_status_color green
+tide_status_color_failure red
+tide_terraform_bg_color normal
+tide_terraform_color magenta
+tide_time_bg_color normal
+tide_time_color brblack
+tide_toolbox_bg_color normal
+tide_toolbox_color magenta
+tide_vi_mode_bg_color_default normal
+tide_vi_mode_bg_color_insert normal
+tide_vi_mode_bg_color_replace normal
+tide_vi_mode_bg_color_visual normal
+tide_vi_mode_color_default white
+tide_vi_mode_color_insert cyan
+tide_vi_mode_color_replace green
+tide_vi_mode_color_visual yellow
+tide_zig_bg_color normal
+tide_zig_color yellow
diff --git a/home-config/fish/functions/tide/configure/configs/rainbow.fish b/home-config/fish/functions/tide/configure/configs/rainbow.fish
new file mode 100644
index 0000000..60c1592
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/configs/rainbow.fish
@@ -0,0 +1,116 @@
+tide_aws_bg_color FF9900
+tide_aws_color 232F3E
+tide_character_color $_tide_color_green
+tide_character_color_failure FF0000
+tide_cmd_duration_bg_color C4A000
+tide_cmd_duration_color 000000
+tide_cmd_duration_decimals 0
+tide_cmd_duration_threshold 3000
+tide_context_always_display false
+tide_context_bg_color 444444
+tide_context_color_default D7AF87
+tide_context_color_root $_tide_color_gold
+tide_context_color_ssh D7AF87
+tide_context_hostname_parts 1
+tide_crystal_bg_color FFFFFF
+tide_crystal_color 000000
+tide_direnv_bg_color $_tide_color_gold
+tide_direnv_bg_color_denied FF0000
+tide_direnv_color 000000
+tide_direnv_color_denied 000000
+tide_distrobox_bg_color FF00FF
+tide_distrobox_color 000000
+tide_docker_bg_color 2496ED
+tide_docker_color 000000
+tide_docker_default_contexts default colima
+tide_elixir_bg_color 4E2A8E
+tide_elixir_color 000000
+tide_gcloud_bg_color 4285F4
+tide_gcloud_color 000000
+tide_git_bg_color 4E9A06
+tide_git_bg_color_unstable C4A000
+tide_git_bg_color_urgent CC0000
+tide_git_color_branch 000000
+tide_git_color_conflicted 000000
+tide_git_color_dirty 000000
+tide_git_color_operation 000000
+tide_git_color_staged 000000
+tide_git_color_stash 000000
+tide_git_color_untracked 000000
+tide_git_color_upstream 000000
+tide_git_truncation_length 24
+tide_git_truncation_strategy
+tide_go_bg_color 00ACD7
+tide_go_color 000000
+tide_java_bg_color ED8B00
+tide_java_color 000000
+tide_jobs_bg_color 444444
+tide_jobs_color 4E9A06
+tide_jobs_number_threshold 1000
+tide_kubectl_bg_color 326CE5
+tide_kubectl_color 000000
+tide_left_prompt_frame_enabled true
+tide_left_prompt_items pwd git newline
+tide_left_prompt_prefix ''
+tide_left_prompt_separator_diff_color 
+tide_left_prompt_separator_same_color 
+tide_left_prompt_suffix 
+tide_nix_shell_bg_color 7EBAE4
+tide_nix_shell_color 000000
+tide_node_bg_color 44883E
+tide_node_color 000000
+tide_os_bg_color $os_branding_bg_color
+tide_os_color $os_branding_color
+tide_php_bg_color 617CBE
+tide_php_color 000000
+tide_private_mode_bg_color F1F3F4
+tide_private_mode_color 000000
+tide_prompt_add_newline_before true
+tide_prompt_color_frame_and_connection 6C6C6C
+tide_prompt_color_separator_same_color 949494
+tide_prompt_min_cols 34
+tide_prompt_pad_items true
+tide_prompt_transient_enabled false
+tide_pulumi_bg_color F7BF2A
+tide_pulumi_color 000000
+tide_pwd_bg_color 3465A4
+tide_pwd_color_anchors E4E4E4
+tide_pwd_color_dirs E4E4E4
+tide_pwd_color_truncated_dirs BCBCBC
+tide_pwd_markers .bzr .citc .git .hg .node-version .python-version .ruby-version .shorten_folder_marker .svn .terraform Cargo.toml composer.json CVS go.mod package.json build.zig
+tide_python_bg_color 444444
+tide_python_color 00AFAF
+tide_right_prompt_frame_enabled true
+tide_right_prompt_items status cmd_duration context jobs direnv node python rustc java php pulumi ruby go gcloud kubectl distrobox toolbox terraform aws nix_shell crystal elixir zig
+tide_right_prompt_prefix 
+tide_right_prompt_separator_diff_color 
+tide_right_prompt_separator_same_color 
+tide_right_prompt_suffix ''
+tide_ruby_bg_color B31209
+tide_ruby_color 000000
+tide_rustc_bg_color F74C00
+tide_rustc_color 000000
+tide_shlvl_bg_color 808000
+tide_shlvl_color 000000
+tide_shlvl_threshold 1
+tide_status_bg_color 2E3436
+tide_status_bg_color_failure CC0000
+tide_status_color 4E9A06
+tide_status_color_failure FFFF00
+tide_terraform_bg_color 800080
+tide_terraform_color 000000
+tide_time_bg_color D3D7CF
+tide_time_color 000000
+tide_time_format %T
+tide_toolbox_bg_color 613583
+tide_toolbox_color 000000
+tide_vi_mode_bg_color_default 949494
+tide_vi_mode_bg_color_insert 87AFAF
+tide_vi_mode_bg_color_replace 87AF87
+tide_vi_mode_bg_color_visual FF8700
+tide_vi_mode_color_default 000000
+tide_vi_mode_color_insert 000000
+tide_vi_mode_color_replace 000000
+tide_vi_mode_color_visual 000000
+tide_zig_bg_color F7A41D
+tide_zig_color 000000
diff --git a/home-config/fish/functions/tide/configure/configs/rainbow_16color.fish b/home-config/fish/functions/tide/configure/configs/rainbow_16color.fish
new file mode 100644
index 0000000..a040f58
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/configs/rainbow_16color.fish
@@ -0,0 +1,93 @@
+tide_aws_bg_color yellow
+tide_aws_color brblack
+tide_character_color brgreen
+tide_character_color_failure brred
+tide_cmd_duration_bg_color yellow
+tide_cmd_duration_color black
+tide_context_bg_color brblack
+tide_context_color_default yellow
+tide_context_color_root yellow
+tide_context_color_ssh yellow
+tide_crystal_bg_color brwhite
+tide_crystal_color black
+tide_direnv_bg_color bryellow
+tide_direnv_bg_color_denied brred
+tide_direnv_color black
+tide_direnv_color_denied black
+tide_distrobox_bg_color brmagenta
+tide_distrobox_color black
+tide_docker_bg_color blue
+tide_docker_color black
+tide_elixir_bg_color magenta
+tide_elixir_color black
+tide_gcloud_bg_color blue
+tide_gcloud_color black
+tide_git_bg_color green
+tide_git_bg_color_unstable yellow
+tide_git_bg_color_urgent red
+tide_git_color_branch black
+tide_git_color_conflicted black
+tide_git_color_dirty black
+tide_git_color_operation black
+tide_git_color_staged black
+tide_git_color_stash black
+tide_git_color_untracked black
+tide_git_color_upstream black
+tide_go_bg_color brcyan
+tide_go_color black
+tide_java_bg_color yellow
+tide_java_color black
+tide_jobs_bg_color brblack
+tide_jobs_color green
+tide_kubectl_bg_color blue
+tide_kubectl_color black
+tide_nix_shell_bg_color brblue
+tide_nix_shell_color black
+tide_node_bg_color green
+tide_node_color black
+tide_os_bg_color white
+tide_os_color black
+tide_php_bg_color blue
+tide_php_color black
+tide_private_mode_bg_color brwhite
+tide_private_mode_color black
+tide_prompt_color_frame_and_connection brblack
+tide_prompt_color_separator_same_color brblack
+tide_pulumi_bg_color yellow
+tide_pulumi_color black
+tide_pwd_bg_color blue
+tide_pwd_color_anchors brwhite
+tide_pwd_color_dirs brwhite
+tide_pwd_color_truncated_dirs white
+tide_python_bg_color brblack
+tide_python_color cyan
+tide_ruby_bg_color red
+tide_ruby_color black
+tide_rustc_bg_color red
+tide_rustc_color black
+tide_shlvl_bg_color yellow
+tide_shlvl_color black
+tide_status_bg_color black
+tide_status_bg_color_failure red
+tide_status_color green
+tide_status_color_failure bryellow
+tide_terraform_bg_color magenta
+tide_terraform_color black
+tide_time_bg_color white
+tide_time_color black
+tide_toolbox_bg_color magenta
+tide_toolbox_color black
+tide_vi_mode_bg_color_default white
+tide_vi_mode_bg_color_insert cyan
+tide_vi_mode_bg_color_replace green
+tide_vi_mode_bg_color_visual yellow
+tide_vi_mode_color_default black
+tide_vi_mode_color_insert black
+tide_vi_mode_color_replace black
+tide_vi_mode_color_visual black
+tide_vi_mode_icon_default D
+tide_vi_mode_icon_insert I
+tide_vi_mode_icon_replace R
+tide_vi_mode_icon_visual V
+tide_zig_bg_color yellow
+tide_zig_color black
diff --git a/home-config/fish/functions/tide/configure/functions/_fake_tide_cache_variables.fish b/home-config/fish/functions/tide/configure/functions/_fake_tide_cache_variables.fish
new file mode 100644
index 0000000..4661ab1
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/functions/_fake_tide_cache_variables.fish
@@ -0,0 +1,41 @@
+function _fake_tide_cache_variables
+ # pwd
+ set_color -o $fake_tide_pwd_color_anchors | read -gx _fake_tide_color_anchors
+ set -gx _fake_tide_color_truncated_dirs "$(set_color $fake_tide_pwd_color_truncated_dirs)"
+ set -gx _fake_tide_reset_to_color_dirs (set_color normal -b $fake_tide_pwd_bg_color; set_color $fake_tide_pwd_color_dirs)
+
+ # git
+ contains git $fake_tide_left_prompt_items $fake_tide_right_prompt_items &&
+ set -gx _fake_tide_location_color "$(set_color $fake_tide_git_color_branch)"
+
+ # private_mode
+ if contains private_mode $fake_tide_left_prompt_items $fake_tide_right_prompt_items && test -n "$fish_private_mode"
+ set -gx _fake_tide_private_mode
+ else
+ set -e _fake_tide_private_mode
+ end
+
+ # Same-color-separator color
+ set -gx _fake_tide_color_separator_same_color "$(set_color $fake_tide_prompt_color_separator_same_color)"
+
+ # two line prompt
+ if contains newline $fake_tide_left_prompt_items
+ set_color $fake_tide_prompt_color_frame_and_connection -b normal | read -gx _fake_tide_prompt_and_frame_color
+ else
+ set -e _fake_tide_prompt_and_frame_color
+ end
+
+ # newline before
+ if test "$fake_tide_prompt_add_newline_before" = true
+ set -g _fake_tide_add_newline ''
+ else
+ set -e _fake_tide_add_newline
+ end
+
+ # item padding
+ if test "$fake_tide_prompt_pad_items" = true
+ set -gx _fake_tide_pad ' '
+ else
+ set -e _fake_tide_pad
+ end
+end
diff --git a/home-config/fish/functions/tide/configure/functions/_fake_tide_item_character.fish b/home-config/fish/functions/tide/configure/functions/_fake_tide_item_character.fish
new file mode 100644
index 0000000..94892ec
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/functions/_fake_tide_item_character.fish
@@ -0,0 +1,8 @@
+function _fake_tide_item_character
+ set_color $fake_tide_character_color
+ if contains newline $fake_tide_left_prompt_items || set -q _configure_transient
+ echo -ns $fake_tide_character_icon
+ else
+ echo -ns ' '$fake_tide_character_icon
+ end
+end
diff --git a/home-config/fish/functions/tide/configure/functions/_fake_tide_item_cmd_duration.fish b/home-config/fish/functions/tide/configure/functions/_fake_tide_item_cmd_duration.fish
new file mode 100644
index 0000000..5aa13b2
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/functions/_fake_tide_item_cmd_duration.fish
@@ -0,0 +1,3 @@
+function _fake_tide_item_cmd_duration
+ _fake_tide_print_item cmd_duration $fake_tide_cmd_duration_icon' ' 5s
+end
diff --git a/home-config/fish/functions/tide/configure/functions/_fake_tide_item_git.fish b/home-config/fish/functions/tide/configure/functions/_fake_tide_item_git.fish
new file mode 100644
index 0000000..fb5b957
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/functions/_fake_tide_item_git.fish
@@ -0,0 +1,3 @@
+function _fake_tide_item_git
+ _fake_tide_print_item git (set_color $fake_tide_git_color_branch) $fake_tide_git_icon' ' main
+end
diff --git a/home-config/fish/functions/tide/configure/functions/_fake_tide_item_newline.fish b/home-config/fish/functions/tide/configure/functions/_fake_tide_item_newline.fish
new file mode 100644
index 0000000..c614bab
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/functions/_fake_tide_item_newline.fish
@@ -0,0 +1,5 @@
+function _fake_tide_item_newline
+ set_color $prev_bg_color -b normal
+ var=fake_tide_"$_fake_tide_side"_prompt_suffix echo $$var
+ set -g add_prefix
+end
diff --git a/home-config/fish/functions/tide/configure/functions/_fake_tide_item_os.fish b/home-config/fish/functions/tide/configure/functions/_fake_tide_item_os.fish
new file mode 100644
index 0000000..5255721
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/functions/_fake_tide_item_os.fish
@@ -0,0 +1,3 @@
+function _fake_tide_item_os
+ _fake_tide_print_item os $fake_tide_os_icon
+end
diff --git a/home-config/fish/functions/tide/configure/functions/_fake_tide_item_time.fish b/home-config/fish/functions/tide/configure/functions/_fake_tide_item_time.fish
new file mode 100644
index 0000000..bbce0b5
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/functions/_fake_tide_item_time.fish
@@ -0,0 +1,3 @@
+function _fake_tide_item_time
+ _fake_tide_print_item time (date +$fake_tide_time_format)
+end
diff --git a/home-config/fish/functions/tide/configure/functions/_fake_tide_print_item.fish b/home-config/fish/functions/tide/configure/functions/_fake_tide_print_item.fish
new file mode 100644
index 0000000..30cd024
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/functions/_fake_tide_print_item.fish
@@ -0,0 +1,22 @@
+function _fake_tide_print_item -a item
+ var=fake_tide_"$item"_bg_color set -f item_bg_color $$var
+
+ if set -e add_prefix
+ set_color $item_bg_color -b normal
+ var=fake_tide_"$_fake_tide_side"_prompt_prefix echo -ns $$var
+ else if test "$item_bg_color" = "$prev_bg_color"
+ var=fake_tide_"$_fake_tide_side"_prompt_separator_same_color echo -ns $_fake_tide_color_separator_same_color$$var
+ else if test "$_fake_tide_side" = left
+ set_color $prev_bg_color -b $item_bg_color
+ echo -ns $fake_tide_left_prompt_separator_diff_color
+ else
+ set_color $item_bg_color -b $prev_bg_color
+ echo -ns $fake_tide_right_prompt_separator_diff_color
+ end
+
+ var=fake_tide_"$item"_color set_color $$var -b $item_bg_color
+
+ echo -ns $_fake_tide_pad $argv[2..] $_fake_tide_pad
+
+ set -g prev_bg_color $item_bg_color
+end
diff --git a/home-config/fish/functions/tide/configure/functions/_fake_tide_prompt.fish b/home-config/fish/functions/tide/configure/functions/_fake_tide_prompt.fish
new file mode 100644
index 0000000..11f20ca
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/functions/_fake_tide_prompt.fish
@@ -0,0 +1,42 @@
+function _fake_tide_prompt
+ set -g add_prefix
+ _fake_tide_side=left set -f left (for item in $fake_tide_left_prompt_items
+ _fake_tide_item_$item
+ end
+ if not set -e add_prefix
+ set_color $prev_bg_color -b normal
+ echo -ns $fake_tide_left_prompt_suffix
+ end)
+
+ set -g add_prefix
+ _fake_tide_side=right set -f right (for item in $fake_tide_right_prompt_items
+ _fake_tide_item_$item
+ end
+ if not set -e add_prefix
+ set_color $prev_bg_color -b normal
+ echo -ns $fake_tide_right_prompt_suffix
+ end)
+
+ if set -q _fake_tide_prompt_and_frame_color # If prompt is two lines
+ test "$fake_tide_left_prompt_frame_enabled" = true &&
+ set left[1] "$_fake_tide_prompt_and_frame_color╭─$left[1]" &&
+ set left[2] "$_fake_tide_prompt_and_frame_color╰─$left[2]"
+ test "$fake_tide_right_prompt_frame_enabled" = true &&
+ set right[1] "$right[1]$_fake_tide_prompt_and_frame_color─╮" &&
+ set right[2] "$right[2]$_fake_tide_prompt_and_frame_color─╯"
+
+ # 5 = @PWD@ length which will be replaced
+ math $fake_columns+5-(string length --visible "$left[1]$right[1]") | read -lx dist_btwn_sides
+ echo -ns "$right[2]"\n(string replace @PWD@ (_fake_tide_pwd) "$left[1]")$_fake_tide_prompt_and_frame_color
+
+ string repeat --no-newline --max (math max 0, $dist_btwn_sides-$_tide_pwd_len) $fake_tide_prompt_icon_connection
+ echo -ns "$right[1]"\n"$left[2] "
+ else
+ math $fake_columns+5-(string length --visible "$left[1]$right[1]") -$fake_tide_prompt_min_cols | read -lx dist_btwn_sides
+ string replace @PWD@ (_fake_tide_pwd) "$right[1]" "$left[1] "
+ end
+end
+
+function _fake_tide_item_pwd
+ _fake_tide_print_item pwd @PWD@
+end
diff --git a/home-config/fish/functions/tide/configure/functions/_fake_tide_pwd.fish b/home-config/fish/functions/tide/configure/functions/_fake_tide_pwd.fish
new file mode 100644
index 0000000..433eafa
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/functions/_fake_tide_pwd.fish
@@ -0,0 +1,11 @@
+function _fake_tide_pwd
+ set -l out (
+ set_color $fake_tide_pwd_color_dirs
+ echo -ns $fake_tide_pwd_icon' ' '~/'
+ set_color -o $fake_tide_pwd_color_anchors
+ echo -ns src
+ set_color normal -b $fake_tide_pwd_bg_color
+ )
+ set -g _tide_pwd_len (string length --visible $out)
+ echo -ns $out
+end
diff --git a/home-config/fish/functions/tide/configure/icons.fish b/home-config/fish/functions/tide/configure/icons.fish
new file mode 100644
index 0000000..70611cd
--- /dev/null
+++ b/home-config/fish/functions/tide/configure/icons.fish
@@ -0,0 +1,40 @@
+tide_aws_icon  # Actual aws glyph is harder to see
+tide_character_icon ❯
+tide_character_vi_icon_default ❮
+tide_character_vi_icon_replace ▶
+tide_character_vi_icon_visual V
+tide_cmd_duration_icon
+tide_crystal_icon 
+tide_direnv_icon ▼
+tide_distrobox_icon 󰆧
+tide_docker_icon 
+tide_elixir_icon 
+tide_gcloud_icon 󰊭 # Actual google cloud glyph is harder to see
+tide_git_icon
+tide_go_icon 
+tide_java_icon 
+tide_jobs_icon 
+tide_kubectl_icon 󱃾
+tide_nix_shell_icon 
+tide_node_icon  # Actual nodejs glyph is harder to see
+tide_os_icon $os_branding_icon
+tide_php_icon 
+tide_private_mode_icon 󰗹
+tide_prompt_icon_connection ' '
+tide_pulumi_icon 
+tide_pwd_icon
+tide_pwd_icon_home
+tide_pwd_icon_unwritable 
+tide_python_icon 󰌠
+tide_ruby_icon 
+tide_rustc_icon 
+tide_shlvl_icon 
+tide_status_icon ✔
+tide_status_icon_failure ✘
+tide_terraform_icon 󱁢
+tide_toolbox_icon 
+tide_vi_mode_icon_default D
+tide_vi_mode_icon_insert I
+tide_vi_mode_icon_replace R
+tide_vi_mode_icon_visual V
+tide_zig_icon 
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Bold.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Bold.ttf
deleted file mode 100644
index 0482a5d..0000000
Binary files a/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Bold.ttf and /dev/null differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-BoldItalic.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-BoldItalic.ttf
deleted file mode 100644
index 0ea8dfe..0000000
Binary files a/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-BoldItalic.ttf and /dev/null differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Italic.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Italic.ttf
deleted file mode 100644
index c373d01..0000000
Binary files a/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Italic.ttf and /dev/null differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Regular.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Regular.ttf
deleted file mode 100644
index 5fcf955..0000000
Binary files a/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Regular.ttf and /dev/null differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Bold.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Bold.ttf
deleted file mode 100644
index ccdfff1..0000000
Binary files a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Bold.ttf and /dev/null differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-BoldItalic.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-BoldItalic.ttf
deleted file mode 100644
index 2091671..0000000
Binary files a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-BoldItalic.ttf and /dev/null differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Italic.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Italic.ttf
deleted file mode 100644
index 67103b6..0000000
Binary files a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Italic.ttf and /dev/null differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Regular.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Regular.ttf
deleted file mode 100644
index 8610b5b..0000000
Binary files a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Regular.ttf and /dev/null differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Bold.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Bold.ttf
deleted file mode 100644
index 303c6cf..0000000
Binary files a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Bold.ttf and /dev/null differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-BoldItalic.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-BoldItalic.ttf
deleted file mode 100644
index 71f2427..0000000
Binary files a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-BoldItalic.ttf and /dev/null differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Italic.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Italic.ttf
deleted file mode 100644
index 5e1885e..0000000
Binary files a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Italic.ttf and /dev/null differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Regular.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Regular.ttf
deleted file mode 100644
index 2ef511d..0000000
Binary files a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Regular.ttf and /dev/null differ
diff --git a/home-config/fonts/AnonymicePro/OFL.txt b/home-config/fonts/AnonymicePro/OFL.txt
deleted file mode 100644
index 68d1d00..0000000
--- a/home-config/fonts/AnonymicePro/OFL.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-Copyright (c) 2009, Mark Simonson (http://www.ms-studio.com, mark@marksimonson.com),
-with Reserved Font Name Anonymous Pro.
-
-This Font Software is licensed under the SIL Open Font License, Version 1.1.
-This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
-
-
------------------------------------------------------------
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
------------------------------------------------------------
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font creation
-efforts of academic and linguistic communities, and to provide a free and
-open framework in which fonts may be shared and improved in partnership
-with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded,
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply
-to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software components as
-distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to, deleting,
-or substituting -- in part or in whole -- any of the components of the
-Original Version, by changing formats or by porting the Font Software to a
-new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed, modify,
-redistribute, and sell modified and unmodified copies of the Font
-Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components,
-in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the corresponding
-Copyright Holder. This restriction only applies to the primary font name as
-presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created
-using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/home-config/fonts/AnonymicePro/readme.md b/home-config/fonts/AnonymicePro/readme.md
deleted file mode 100644
index 9f2e700..0000000
--- a/home-config/fonts/AnonymicePro/readme.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# Nerd Fonts
-
-This is an archived font from a Nerd Fonts release.
-
-For more information see:
-* https://github.com/ryanoasis/nerd-fonts/
-* https://github.com/ryanoasis/nerd-fonts/releases/latest/
diff --git a/home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete Mono Windows Compatible.ttf b/home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete Mono Windows Compatible.ttf
deleted file mode 100644
index 73fdee5..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete Mono Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete Mono.ttf b/home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete Mono.ttf
deleted file mode 100644
index 08fa68f..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete Mono.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete Windows Compatible.ttf b/home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete Windows Compatible.ttf
deleted file mode 100644
index 9bebcda..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete.ttf b/home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete.ttf
deleted file mode 100644
index 2be7265..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Bold Nerd Font Complete.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete Mono Windows Compatible.ttf b/home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete Mono Windows Compatible.ttf
deleted file mode 100644
index 5a096ab..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete Mono Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete Mono.ttf b/home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete Mono.ttf
deleted file mode 100644
index e962f63..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete Mono.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete Windows Compatible.ttf b/home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete Windows Compatible.ttf
deleted file mode 100644
index 4121a0f..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete.ttf b/home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete.ttf
deleted file mode 100644
index c481973..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Light Nerd Font Complete.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete Mono Windows Compatible.ttf b/home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete Mono Windows Compatible.ttf
deleted file mode 100644
index 0cad1c9..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete Mono Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete Mono.ttf b/home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete Mono.ttf
deleted file mode 100644
index 399b713..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete Mono.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete Windows Compatible.ttf b/home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete Windows Compatible.ttf
deleted file mode 100644
index a4bb8f4..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete.ttf b/home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete.ttf
deleted file mode 100644
index 5d05cec..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Medium Nerd Font Complete.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete Mono Windows Compatible.ttf b/home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete Mono Windows Compatible.ttf
deleted file mode 100644
index 83e3f02..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete Mono Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete Mono.ttf b/home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete Mono.ttf
deleted file mode 100644
index e237398..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete Mono.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete Windows Compatible.ttf b/home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete Windows Compatible.ttf
deleted file mode 100644
index 807b5a8..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete.ttf b/home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete.ttf
deleted file mode 100644
index 0d48c23..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Regular Nerd Font Complete.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete Mono Windows Compatible.ttf b/home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete Mono Windows Compatible.ttf
deleted file mode 100644
index 7394fcf..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete Mono Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete Mono.ttf b/home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete Mono.ttf
deleted file mode 100644
index fb042d6..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete Mono.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete Windows Compatible.ttf b/home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete Windows Compatible.ttf
deleted file mode 100644
index 1039298..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete.ttf b/home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete.ttf
deleted file mode 100644
index 6b9dd2c..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code Retina Nerd Font Complete.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete Mono Windows Compatible.ttf b/home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete Mono Windows Compatible.ttf
deleted file mode 100644
index b272520..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete Mono Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete Mono.ttf b/home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete Mono.ttf
deleted file mode 100644
index 9521c6f..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete Mono.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete Windows Compatible.ttf b/home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete Windows Compatible.ttf
deleted file mode 100644
index 0707a13..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete.ttf b/home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete.ttf
deleted file mode 100644
index a147dac..0000000
Binary files a/home-config/fonts/Fira Code/Fira Code SemiBold Nerd Font Complete.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/LICENSE.txt b/home-config/fonts/Lilex/LICENSE.txt
deleted file mode 100644
index 9324092..0000000
--- a/home-config/fonts/Lilex/LICENSE.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-Copyright (c) 2019, The Lilex Project Authors (https://github.com/mishamyrt/lilex)
-
-This Font Software is licensed under the SIL Open Font License, Version 1.1.
-This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
-
-
------------------------------------------------------------
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
------------------------------------------------------------
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font creation
-efforts of academic and linguistic communities, and to provide a free and
-open framework in which fonts may be shared and improved in partnership
-with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded,
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply
-to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software components as
-distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to, deleting,
-or substituting -- in part or in whole -- any of the components of the
-Original Version, by changing formats or by porting the Font Software to a
-new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed, modify,
-redistribute, and sell modified and unmodified copies of the Font
-Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components,
-in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the corresponding
-Copyright Holder. This restriction only applies to the primary font name as
-presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created
-using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
\ No newline at end of file
diff --git a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono Windows Compatible.otf b/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono Windows Compatible.otf
deleted file mode 100644
index 9cc9c73..0000000
Binary files a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono Windows Compatible.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono Windows Compatible.ttf b/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono Windows Compatible.ttf
deleted file mode 100644
index ab2cfa8..0000000
Binary files a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono.otf b/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono.otf
deleted file mode 100644
index 196c009..0000000
Binary files a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono.ttf b/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono.ttf
deleted file mode 100644
index aaf04cb..0000000
Binary files a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Mono.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Windows Compatible.otf b/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Windows Compatible.otf
deleted file mode 100644
index bd3e16e..0000000
Binary files a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Windows Compatible.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Windows Compatible.ttf b/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Windows Compatible.ttf
deleted file mode 100644
index b37fa75..0000000
Binary files a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete.otf b/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete.otf
deleted file mode 100644
index 1d19c61..0000000
Binary files a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete.ttf b/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete.ttf
deleted file mode 100644
index 6145e13..0000000
Binary files a/home-config/fonts/Lilex/Lilex Bold Nerd Font Complete.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono Windows Compatible.otf b/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono Windows Compatible.otf
deleted file mode 100644
index 5b37eff..0000000
Binary files a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono Windows Compatible.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono Windows Compatible.ttf b/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono Windows Compatible.ttf
deleted file mode 100644
index a2313c3..0000000
Binary files a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono.otf b/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono.otf
deleted file mode 100644
index 94d9cb5..0000000
Binary files a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono.ttf b/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono.ttf
deleted file mode 100644
index 6093346..0000000
Binary files a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Mono.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Windows Compatible.otf b/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Windows Compatible.otf
deleted file mode 100644
index b79185e..0000000
Binary files a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Windows Compatible.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Windows Compatible.ttf b/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Windows Compatible.ttf
deleted file mode 100644
index ec7d243..0000000
Binary files a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete.otf b/home-config/fonts/Lilex/Lilex Light Nerd Font Complete.otf
deleted file mode 100644
index 56b628e..0000000
Binary files a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete.ttf b/home-config/fonts/Lilex/Lilex Light Nerd Font Complete.ttf
deleted file mode 100644
index 1923b69..0000000
Binary files a/home-config/fonts/Lilex/Lilex Light Nerd Font Complete.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono Windows Compatible.otf b/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono Windows Compatible.otf
deleted file mode 100644
index e53a8a3..0000000
Binary files a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono Windows Compatible.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono Windows Compatible.ttf b/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono Windows Compatible.ttf
deleted file mode 100644
index 7609438..0000000
Binary files a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono.otf b/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono.otf
deleted file mode 100644
index 918b51c..0000000
Binary files a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono.ttf b/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono.ttf
deleted file mode 100644
index 6f69c22..0000000
Binary files a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Mono.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Windows Compatible.otf b/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Windows Compatible.otf
deleted file mode 100644
index 560195d..0000000
Binary files a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Windows Compatible.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Windows Compatible.ttf b/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Windows Compatible.ttf
deleted file mode 100644
index 5156d10..0000000
Binary files a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete.otf b/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete.otf
deleted file mode 100644
index d36e405..0000000
Binary files a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete.ttf b/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete.ttf
deleted file mode 100644
index 9f7569f..0000000
Binary files a/home-config/fonts/Lilex/Lilex Medium Nerd Font Complete.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono Windows Compatible.otf b/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono Windows Compatible.otf
deleted file mode 100644
index 44b8006..0000000
Binary files a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono Windows Compatible.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono Windows Compatible.ttf b/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono Windows Compatible.ttf
deleted file mode 100644
index db6cc87..0000000
Binary files a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono.otf b/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono.otf
deleted file mode 100644
index 6501442..0000000
Binary files a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono.ttf b/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono.ttf
deleted file mode 100644
index 7a2abdb..0000000
Binary files a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Mono.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Windows Compatible.otf b/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Windows Compatible.otf
deleted file mode 100644
index 186f51d..0000000
Binary files a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Windows Compatible.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Windows Compatible.ttf b/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Windows Compatible.ttf
deleted file mode 100644
index 0607745..0000000
Binary files a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete Windows Compatible.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete.otf b/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete.otf
deleted file mode 100644
index ea24b14..0000000
Binary files a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete.otf and /dev/null differ
diff --git a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete.ttf b/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete.ttf
deleted file mode 100644
index d52389f..0000000
Binary files a/home-config/fonts/Lilex/Lilex Regular Nerd Font Complete.ttf and /dev/null differ
diff --git a/home-config/fonts/Lilex/readme.md b/home-config/fonts/Lilex/readme.md
deleted file mode 100644
index 9f2e700..0000000
--- a/home-config/fonts/Lilex/readme.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# Nerd Fonts
-
-This is an archived font from a Nerd Fonts release.
-
-For more information see:
-* https://github.com/ryanoasis/nerd-fonts/
-* https://github.com/ryanoasis/nerd-fonts/releases/latest/
diff --git a/home-config/fonts/Monofur For Powerline/Monofur Bold for Powerline.ttf b/home-config/fonts/Monofur For Powerline/Monofur Bold for Powerline.ttf
deleted file mode 100644
index f27b5a2..0000000
Binary files a/home-config/fonts/Monofur For Powerline/Monofur Bold for Powerline.ttf and /dev/null differ
diff --git a/home-config/fonts/Monofur For Powerline/Monofur Italic for Powerline.ttf b/home-config/fonts/Monofur For Powerline/Monofur Italic for Powerline.ttf
deleted file mode 100644
index d5c8db0..0000000
Binary files a/home-config/fonts/Monofur For Powerline/Monofur Italic for Powerline.ttf and /dev/null differ
diff --git a/home-config/fonts/Monofur For Powerline/Monofur for Powerline.ttf b/home-config/fonts/Monofur For Powerline/Monofur for Powerline.ttf
deleted file mode 100644
index baf799e..0000000
Binary files a/home-config/fonts/Monofur For Powerline/Monofur for Powerline.ttf and /dev/null differ
diff --git a/home-config/fonts/MonofurNerdFont/LICENSE.txt b/home-config/fonts/MonofurNerdFont/LICENSE.txt
deleted file mode 100644
index b20cf9b..0000000
--- a/home-config/fonts/MonofurNerdFont/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-------------------------------------------------------------------------
-The monofur typeface by tobias b koehler (unci@tigerden.com)
-------------------------------------------------------------------------
-
-This is a monospaced geometric rounded sans serif font based on the
-eurofurence typeface family.
-
-The character set includes Roman, Greek and Cyrillic characters as well
-as box drawing characters. File format is TrueType for PC (under
-Windows, Linux etc).
-
-These fonts are freeware and can be distributed as long as they are
-together with this text file. I would appreciate it though if you could
-contact me at unci@tigerden.com if you put them on a server. Free
-samples from commercial users are always very welcome. :)
-
-For more information, please see the uncifonts WWW page at:
-http://mercurio.iet.unipi.it/users/tobias/uncifonts.html
-
-Have fun! tobias b koehler, 2000-04-02
\ No newline at end of file
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Bold.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Bold.ttf
deleted file mode 100644
index a7f5a8f..0000000
Binary files a/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Bold.ttf and /dev/null differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Italic.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Italic.ttf
deleted file mode 100644
index 4ae48d3..0000000
Binary files a/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Italic.ttf and /dev/null differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Regular.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Regular.ttf
deleted file mode 100644
index bfce77f..0000000
Binary files a/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Regular.ttf and /dev/null differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Bold.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Bold.ttf
deleted file mode 100644
index 459891e..0000000
Binary files a/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Bold.ttf and /dev/null differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Italic.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Italic.ttf
deleted file mode 100644
index 75e7ed9..0000000
Binary files a/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Italic.ttf and /dev/null differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Regular.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Regular.ttf
deleted file mode 100644
index f69999c..0000000
Binary files a/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Regular.ttf and /dev/null differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Bold.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Bold.ttf
deleted file mode 100644
index 7b3a405..0000000
Binary files a/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Bold.ttf and /dev/null differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Italic.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Italic.ttf
deleted file mode 100644
index a639973..0000000
Binary files a/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Italic.ttf and /dev/null differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Regular.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Regular.ttf
deleted file mode 100644
index f02fd35..0000000
Binary files a/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Regular.ttf and /dev/null differ
diff --git a/home-config/fonts/MonofurNerdFont/readme.md b/home-config/fonts/MonofurNerdFont/readme.md
deleted file mode 100644
index 9f2e700..0000000
--- a/home-config/fonts/MonofurNerdFont/readme.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# Nerd Fonts
-
-This is an archived font from a Nerd Fonts release.
-
-For more information see:
-* https://github.com/ryanoasis/nerd-fonts/
-* https://github.com/ryanoasis/nerd-fonts/releases/latest/
diff --git a/home-config/foot/foot.ini b/home-config/foot/foot.ini
deleted file mode 100644
index 97e4433..0000000
--- a/home-config/foot/foot.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-font=Monofur Nerd Font Mono:size=15
-
-notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body}
-
-[colors]
-alpha=0.75
diff --git a/home-config/gitconfig b/home-config/gitconfig
index ee6224b..7b9df6a 100644
--- a/home-config/gitconfig
+++ b/home-config/gitconfig
@@ -8,7 +8,21 @@
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
+[core]
+ pager = delta
+[interactive]
+ diffFilter = delta --color-only
+[delta]
+ navigate = true
+ side-by-side = true
+[merge]
+ conflictStyle = zdiff3
[color]
ui = auto
[init]
defaultBranch = main
+[sendemail]
+ smtpserver = mail.rschanz.org
+ smtpuser = ryan@rschanz.org
+ smtpencryption = ssl
+ smtpserverport = 465
diff --git a/home-config/gnupg/gpg-agent.conf b/home-config/gnupg/gpg-agent.conf
deleted file mode 100644
index 53927ac..0000000
--- a/home-config/gnupg/gpg-agent.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-enable-ssh-support
-
-pinentry-program /run/current-system/profile/bin/pinentry
diff --git a/home-config/gnupg/sshcontrol b/home-config/gnupg/sshcontrol
deleted file mode 100644
index 55e6073..0000000
--- a/home-config/gnupg/sshcontrol
+++ /dev/null
@@ -1,10 +0,0 @@
-# List of allowed ssh keys. Only keys present in this file are used
-# in the SSH protocol. The ssh-add tool may add new entries to this
-# file to enable them; you may also add them manually. Comment
-# lines, like this one, as well as empty lines are ignored. Lines do
-# have a certain length limit but this is not serious limitation as
-# the format of the entries is fixed and checked by gpg-agent. A
-# non-comment line starts with optional white spaces, followed by the
-# keygrip of the key given as 40 hex digits, optionally followed by a
-# caching TTL in seconds, and another optional field for arbitrary
-# flags. Prepend the keygrip with an '!' mark to disable it.
diff --git a/home-config/home-configuration.scm b/home-config/home-configuration.scm
index 77bfdbb..47cd45c 100644
--- a/home-config/home-configuration.scm
+++ b/home-config/home-configuration.scm
@@ -15,108 +15,135 @@
(gnu home services shells)
(gnu home services desktop)
(gnu home services gnupg)
+ (gnu home services fontutils)
(gnu home services)
(ryan-services pipewire)
(ryan-services spotify)
+ (ryan-services file-manager)
(ryan-config utils)
(ryan-packages freedesktop)
(ryan-packages calcurse)
+ ;(ryan-packages binaries)
+ (rosenthal packages binaries)
(ryan-packages mozilla))
-(define my-neovim
- (package
- (inherit neovim)
- (native-inputs
- (modify-inputs (package-native-inputs neovim)
- (prepend gcc-12)))))
+; (define my-neovim
+; (package
+; (inherit neovim)
+; (native-inputs
+; (modify-inputs (package-native-inputs neovim)
+; (prepend gcc-13)))))
+
+ (define %home-symlinks
+; `((".config/guix/home-config/fish" ".config/fish")
+; (".config/guix/home-config/nix-config" ".config/nix")
+ `((".config/guix/home-config/nix-files" ".config/home-manager")))
+
+(home-symlinks %home-symlinks)
(home-environment
;; Below is the list of packages that will show up in your
;; Home profile, under ~/.guix-home/profile.
- (packages (append (specifications->packages (list "bat"
- "xdg-utils"
- "abook"
- "libnotify"
- "fzf"
- "waypipe"
- "pulseaudio" ;only for pactl
- "qpwgraph"
- "gnunet"
- "ffmpeg"
- "qrencode"
- "binutils"
- "gcc-toolchain"
- "borg"
- "restic"
- "rsync"
- "cloc"
- "sc-im"
- "pv"
- "bombadillo"
- "python-msgpack"
- "wdisplays"
- "kanshi"
- "libreoffice"
- "flatpak"
- "gnupg"
- "spotifyd"
- "lsof"
- "pavucontrol"
- "netcat"
- "bind:utils"
- "font-cns11643"
- "font-google-noto-emoji"
- "syncthing"
- "taskwarrior"
- "tasksh"
- "imv"
- "perl"
- "tor"
- "unzip"
- "htop"
- "curl"
- "pandoc"
- "texlive-bin"
- "texlive-scheme-basic"
- "texlive-txfonts"
- "texlive-amsfonts"
- "texlive-lm"
- "texlive-lm-math"
- "texlive-iftex"
- "texlive-unicode-math"
- "texlive-fontspec"
- "texlive-xcolor"
- "texlive-geometry"
- "texlive-hyperref"
- "texlive-parskip"
- "texlive-etoolbox"
- "texlive-setspace"
- "zathura"
- "zathura-pdf-mupdf"
- "go"
- "fzf"
- "weechat"
- "gimp"
- "python"
- "python:tk"
- "file"
- "python-lsp-server"
- "kdenlive"
- "sqlite"
- "mpv"
- "qbittorrent"
- "playerctl"
- "aerc"
- "tcpdump"
- "pamixer"
- "git"
- "git:send-email"
- "password-store"
- "node"
- "kanshi"
+ ;(packages (append (specifications->packages (list ;"bat"
+ ;"fd"
+ ;"fish"
+ ;"xdg-utils"
+ ;"abook"
+ ;"libnotify"
+ ;"fzf"
+ ;"waypipe"
+ ;"foot"
+ ;"pulseaudio" ;only for pactl
+ ;"qpwgraph"
+ ;"gnunet"
+ ;"ffmpeg" ; removed for mpv prop input
+ ;"qrencode"
+ ;"tmux"
+ ;"binutils"
+ ;"gcc-toolchain"
+ ;"borg"
+ ;"restic"
+ ;"rsync"
+ ;"cloc"
+ ;"sc-im"
+ ;"pv"
+ ;"jq"
+ ;"gpgme"
+ ;"bombadillo"
+ ;"python-msgpack"
+ ;"wdisplays"
+ ;"kanshi"
+ ;"libreoffice"
+ ;"flatpak"
+ ;"gnupg"
+ ;"spotifyd"
+ ;"lsof"
+ ;"pavucontrol"
+ ;"netcat"
+ ;"bind:utils"
+ ;"font-cns11643-swjz"
+ ;"font-google-noto-emoji"
+ ;"syncthing"
+ ;"taskwarrior"
+ ;"tasksh"
+ ;"imv" ; Nix pkg now for MESA stuff
+ ;"perl"
+ ;"tor"
+ ;"unzip"
+ ;"htop"
+ ;"curl"
+ ;"pandoc"
+ ;"texlive-bin"
+ ;"texlive-scheme-basic"
+ ;"texlive-txfonts"
+ ;"texlive-amsfonts"
+ ;"texlive-lm"
+ ;"texlive-lm-math"
+ ;"texlive-iftex"
+ ;"texlive-unicode-math"
+ ;"texlive-fontspec"
+ ;"texlive-xcolor"
+ ;"texlive-geometry"
+ ;"texlive-hyperref"
+ ;"texlive-parskip"
+ ;"texlive-etoolbox"
+ ;"texlive-setspace"
+ ;"texlive-booktabs"
+ ;"texlive-mdwtools"
+ ;"texlive-caption"
+ ;"texlive-diagbox"
+ ;"texlive-pict2e"
+ ;"texlive-ulem"
+ ;"texlive-pgf"
+ ;"zathura"
+ ;"zathura-pdf-mupdf"
+ ;"go"
+ ;"fzf"
+ ;"weechat"
+ ;"gimp"
+ ;"python"
+ ;"python:tk"
+ ;"file"
+ ;"python-lsp-server"
+ ;"kdenlive"
+ ;"sqlite"
+ ;"mpv" ; Now a nix pkg for MESA stuff
+ ;"qbittorrent"
+ ;"playerctl"
+ ;"aerc"
+ ;"tcpdump"
+ ;"pamixer"
+ ;"git"
+ ;"git:send-email"
+ ;"password-store"
+ ;"node"
+ ;"kanshi"
;"firefox"
- "git-lfs"))
- (list my-neovim wl-mirror firefox-wrapped calcurse-fixed)))
+ ;"signal-desktop"
+ ;"sc-im"
+ ;"tree-sitter-cli"
+ ;"git-lfs"))
+ ;(list calcurse-fixed )))
;; Below is the list of Home services. To search for available
;; services, run 'guix home search KEYWORD' in a terminal.
@@ -125,43 +152,83 @@
(home-bash-configuration
(aliases '(("grep" . "grep --color=auto") ("ll" . "ls -l")
("ls" . "ls -p --color=auto")
- ("spt" . "spotify_player")
- ("python" . "python3")))
+ ;("spt" . "spotify_player")
+ ;("python" . "python3")))
+ ))
(bashrc (list (local-file
"bashrc")))
(bash-profile (list (local-file
"bash_profile")))))
- (service home-xdg-configuration-files-service-type
- `(("nvim/init.vim" ,(local-file "nvim/config/init.vim"))
- ("nvim/after/ftplugin/markdown/custom.vim" ,(local-file "nvim/config/after/ftplugin/markdown/custom.vim"))
- ("nvim/after/ftplugin/mail/custom.vim" ,(local-file "nvim/config/after/ftplugin/mail/custom.vim"))
- ("sway" ,(local-file "sway" #:recursive? #t))
- ("hypr" ,(local-file "hypr" #:recursive? #t))
- ("foot" ,(local-file "foot" #:recursive? #t))
- ("pulse/client.conf" ,(local-file "pulseaudio/client.conf"))
- ("waybar" ,(local-file "waybar" #:recursive? #t))
- ("alacritty" ,(local-file "alacritty" #:recursive? #t))
- ("aerc" ,(local-file "aerc" #:recursive? #t))
- ("home-manager" ,(local-file "nix-home-manager" #:recursive? #t))
- ("nix" ,(local-file "nix-config" #:recursive? #t)) ))
- (service home-files-service-type
- `((".local/share/nvim/site/autoload/plug.vim" ,(local-file "nvim/plugin-manager/plug.vim"))
- (".ssh/config" ,(local-file "ssh/config"))
+ ;(service home-xdg-configuration-files-service-type
+ ; Migrated to nix
+ ;`(("nvim/init.vim" ,(local-file "nvim/config/init.vim"))
+ ;("nvim/after/ftplugin/markdown/custom.vim" ,(local-file "nvim/config/after/ftplugin/markdown/custom.vim"))
+ ;("nvim/after/ftplugin/mail/custom.vim" ,(local-file "nvim/config/after/ftplugin/mail/custom.vim"))
+ ;("sway" ,(local-file "sway" #:recursive? #t))
+ ;("hypr" ,(local-file "hypr" #:recursive? #t))
+ ;("hypr/monitors.conf", (local-file "hypr/monitors.conf"))
+ ;("hypr/pyprland.toml", (local-file "hypr/pyprland.toml"))
+ ;("hypr/family_guy.mp4", (local-file "hypr/family_guy.mp4"))
+ ;("hypr/hyprlock.conf", (local-file "hypr/hyprlock.conf"))
+ ;("hypr/hypridle.conf", (local-file "hypr/hypridle.conf"))
+ ;("hypr/kanshi.conf", (local-file "hypr/kanshi.conf"))
+ ;("hypr/subwaysurfer.webm", (local-file "hypr/subwaysurfer.webm"))
+ ;("hypr/Wallpapers", (local-file "hypr/Wallpapers" #:recursive? #t))
+ ;("hypr/scripts", (local-file "hypr/scripts" #:recursive? #t))
+ ;("wpaperd" ,(local-file "wpaperd" #:recursive? #t))
+ ;("mpv" ,(local-file "mpv" #:recursive? #t))
+ ;("foot" ,(local-file "foot" #:recursive? #t))
+ ;("pulse/client.conf" ,(local-file "pulseaudio/client.conf"))
+ ;("waybar" ,(local-file "waybar" #:recursive? #t))
+ ;("alacritty" ,(local-file "alacritty" #:recursive? #t))
+ ;("aerc" ,(local-file "aerc" #:recursive? #t)) ))
+ ;(service home-files-service-type
+ ;l`(;(".local/share/nvim/site/autoload/plug.vim" ,(local-file "nvim/plugin-manager/plug.vim"))
+ ;(".ssh/config" ,(local-file "ssh/config"))
+ ;(".icons" ,(local-file "icons" #:recursive? #t))
+ ;(".mozilla/native-messaging-hosts/gpgmejson.json" ,(local-file "mailvelope/gpgmejson.json"))
+ ;(".local/share/mailvelope" ,(local-file "mailvelope" #:recursive? #t))
+ ;(".mozilla/native-messaging-hosts/tridactyl.json" ,(local-file "tridactyl/tridactyl.json"))
+ ;(".local/share/tridactyl" ,(local-file "tridactyl" #:recursive? #t))
;(".gnupg/sshcontrol" ,(local-file "gnupg/sshcontrol"))
;(".gnupg/gpg-agent.conf" ,(local-file "gnupg/gpg-agent.conf"))
- (".fonts" ,(local-file "fonts" #:recursive? #t))
- (".gitconfig" ,(local-file "gitconfig"))
- (".docker/cli-plugins" ,(local-file "docker/cli-plugins" #:recursive? #t))
- (".nix-channels" ,(local-file "nix-channels"))))
+ ;(".gnupg/gpg.conf" ,(local-file "gnupg/gpg.conf"))
+ ;(".local/share/fonts" ,(local-file "fonts" #:recursive? #t))
+ ;(".gitconfig" ,(local-file "gitconfig"))
+ ;(".docker/cli-plugins" ,(local-file "docker/cli-plugins" #:recursive? #t))
+ ;(".nix-channels" ,(local-file "nix-channels"))))
(service home-pipewire-service-type)
- (service home-spotifyd-service-type)
+ ;(service home-spotifyd-service-type)
+ ; font things for nix to play nice
+ ; (simple-service 'additional-fonts-service
+ ; home-fontconfig-service-type
+ ; (list "~/.nix-profile/share/fonts"
+ ; '(match (@ (target "pattern"))
+ ; (edit (@ (name "family") (mode "prepend"))
+ ; (string "DejaVu Sans")))
+ ; '(alias
+ ; (family "serif")
+ ; (prefer
+ ; (family "DejaVu Serif")))
+ ; '(alias
+ ; (family "sans")
+ ; (prefer
+ ; (family "DejaVu Sans")))
+ ; '(alias
+ ; (family "monospace")
+ ; (prefer
+ ; (family "DejaVu Sans Mono")))))
(service home-dbus-service-type)
- ;;; trying some changes
+ (service downloads-garbage-collector-service-type
+ (downloads-garbage-collector-configuration
+ (user "ryan")))
+ ;;; trying some changes
;(template-files "."
;'("spotify-player/app.toml"
;;;
- (service home-gpg-agent-service-type
- (home-gpg-agent-configuration
- (pinentry-program
- (file-append pinentry "/bin/pinentry"))
- (ssh-support? #t))) )))
+ ;(service home-gpg-agent-service-type
+ ; (home-gpg-agent-configuration
+ ; (pinentry-program
+ ; (file-append pinentry "/bin/pinentry"))
+ ; (ssh-support? #t))) )))
+)))
diff --git a/home-config/hypr/Wallpapers/static/above-clouds.jpg b/home-config/hypr/Wallpapers/static/above-clouds.jpg
deleted file mode 100644
index a525ee8..0000000
Binary files a/home-config/hypr/Wallpapers/static/above-clouds.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-eclipse-1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-eclipse-1k.jpg
deleted file mode 100644
index acf008e..0000000
Binary files a/home-config/hypr/Wallpapers/static/alena-aenami-eclipse-1k.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-eternity-1080px.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-eternity-1080px.jpg
deleted file mode 100644
index f8a50f8..0000000
Binary files a/home-config/hypr/Wallpapers/static/alena-aenami-eternity-1080px.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-light-at-the-end-hd.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-light-at-the-end-hd.jpg
deleted file mode 100644
index 00cbcb1..0000000
Binary files a/home-config/hypr/Wallpapers/static/alena-aenami-light-at-the-end-hd.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-portal-1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-portal-1k.jpg
deleted file mode 100644
index 24311ff..0000000
Binary files a/home-config/hypr/Wallpapers/static/alena-aenami-portal-1k.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-solar-1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-solar-1k.jpg
deleted file mode 100644
index cb71169..0000000
Binary files a/home-config/hypr/Wallpapers/static/alena-aenami-solar-1k.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/autumn1.jpg b/home-config/hypr/Wallpapers/static/autumn1.jpg
deleted file mode 100644
index 1f06edd..0000000
Binary files a/home-config/hypr/Wallpapers/static/autumn1.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/dawn-mountains-vibrant.jpg b/home-config/hypr/Wallpapers/static/dawn-mountains-vibrant.jpg
deleted file mode 100644
index c678fec..0000000
Binary files a/home-config/hypr/Wallpapers/static/dawn-mountains-vibrant.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/lake-winter.jpg b/home-config/hypr/Wallpapers/static/lake-winter.jpg
deleted file mode 100644
index b47a8c9..0000000
Binary files a/home-config/hypr/Wallpapers/static/lake-winter.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/mountains.jpg b/home-config/hypr/Wallpapers/static/mountains.jpg
deleted file mode 100644
index f51a09b..0000000
Binary files a/home-config/hypr/Wallpapers/static/mountains.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/northern-lights-2.jpg b/home-config/hypr/Wallpapers/static/northern-lights-2.jpg
deleted file mode 100644
index cb2a7f4..0000000
Binary files a/home-config/hypr/Wallpapers/static/northern-lights-2.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/northern-lights-bridge.jpg b/home-config/hypr/Wallpapers/static/northern-lights-bridge.jpg
deleted file mode 100644
index 8fa7b28..0000000
Binary files a/home-config/hypr/Wallpapers/static/northern-lights-bridge.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/purple-grass.jpg b/home-config/hypr/Wallpapers/static/purple-grass.jpg
deleted file mode 100644
index 2a81c54..0000000
Binary files a/home-config/hypr/Wallpapers/static/purple-grass.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/purple-intersection.jpg b/home-config/hypr/Wallpapers/static/purple-intersection.jpg
deleted file mode 100644
index cf75de4..0000000
Binary files a/home-config/hypr/Wallpapers/static/purple-intersection.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/purple-lakescape.jpg b/home-config/hypr/Wallpapers/static/purple-lakescape.jpg
deleted file mode 100644
index 23d28e2..0000000
Binary files a/home-config/hypr/Wallpapers/static/purple-lakescape.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/scarecrow.jpg b/home-config/hypr/Wallpapers/static/scarecrow.jpg
deleted file mode 100644
index f095d15..0000000
Binary files a/home-config/hypr/Wallpapers/static/scarecrow.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/snow-1.jpg b/home-config/hypr/Wallpapers/static/snow-1.jpg
deleted file mode 100644
index d00fcd1..0000000
Binary files a/home-config/hypr/Wallpapers/static/snow-1.jpg and /dev/null differ
diff --git a/home-config/hypr/Wallpapers/static/snow-2.jpg b/home-config/hypr/Wallpapers/static/snow-2.jpg
deleted file mode 100644
index 5343822..0000000
Binary files a/home-config/hypr/Wallpapers/static/snow-2.jpg and /dev/null differ
diff --git a/home-config/hypr/autostart.sh b/home-config/hypr/autostart.sh
deleted file mode 100755
index 7b327df..0000000
--- a/home-config/hypr/autostart.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env bash
-
-waybar &
-
-mako &
-
-#swaybg -i ~/.config/hypr/Wallpapers/above-clouds.jpg &
-
-nice -n13 swww init &
-
-~/.config/hypr/wallpaper-daemon.sh &
-
-swayidle -w timeout 300 'swaylock --screenshots --clock --indicator --grace 3 --fade-in 1 --effect-blur 7x5 --effect-greyscale' timeout 600 'hyprctl dispatch dpms off' resume 'hyprctl dispatch dpms on' before-sleep 'swaylock -f -c 000000' &
-
-syncthing serve --no-browser &
-
-wl-clip-persist -c regular &
-
-~/.config/guix/home-config/hypr/hyprland-monitor-attached ~/.config/hypr/wallpaper.sh ~/.config/hypr/wallpaper.sh &
-
-kanshi -c ~/.config/hypr/kanshi.conf
diff --git a/home-config/hypr/family_guy.mp4 b/home-config/hypr/family_guy.mp4
deleted file mode 100644
index 077fe49..0000000
Binary files a/home-config/hypr/family_guy.mp4 and /dev/null differ
diff --git a/home-config/hypr/hyprland-monitor-attached b/home-config/hypr/hyprland-monitor-attached
deleted file mode 100755
index 9c22710..0000000
Binary files a/home-config/hypr/hyprland-monitor-attached and /dev/null differ
diff --git a/home-config/hypr/hyprland.conf b/home-config/hypr/hyprland.conf
deleted file mode 100644
index ce2913c..0000000
--- a/home-config/hypr/hyprland.conf
+++ /dev/null
@@ -1,257 +0,0 @@
-exec-once = dbus-update-activation-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP=Hyprland
-
-#
-# Please note not all available settings / options are set here.
-# For a full list, see the wiki
-#
-
-# See https://wiki.hyprland.org/Configuring/Monitors/
-monitor=,preferred,auto,1
-
-
-# See https://wiki.hyprland.org/Configuring/Keywords/ for more
-
-# Execute your favorite apps at launch
-# exec-once = waybar & hyprpaper & firefox
-
-# Source a file (multi-file configs)
-source = ~/.config/hypr/monitors.conf
-
-# Some default env vars.
-env = XCURSOR_SIZE,24
-
-# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
-input {
- kb_layout = us
- kb_variant =
- kb_model =
- kb_options =
- kb_rules =
- numlock_by_default = true
-
- follow_mouse = 1
-
- touchpad {
- natural_scroll = no
- }
-
- sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
-}
-
-general {
- # See https://wiki.hyprland.org/Configuring/Variables/ for more
-
- gaps_in = 5
- gaps_out = 10
- border_size = 2
- col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
- col.inactive_border = rgba(595959aa)
-
- layout = dwindle
-}
-
-decoration {
- # See https://wiki.hyprland.org/Configuring/Variables/ for more
-
- rounding = 5
- blur {
- enabled = yes
- size = 3
- passes = 1
- new_optimizations = on
- }
-
- drop_shadow = yes
- shadow_range = 4
- shadow_render_power = 3
- col.shadow = rgba(1a1a1aee)
-}
-
-animations {
- enabled = yes
-
- # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
-
- bezier = myBezier, 0.05, 0.9, 0.1, 1.05
-
- animation = windows, 1, 7, myBezier
- animation = windowsOut, 1, 7, default, popin 80%
- animation = border, 1, 10, default
- animation = borderangle, 1, 8, default
- animation = fade, 1, 7, default
- animation = workspaces, 1, 6, default
-}
-
-dwindle {
- # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
- pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
- preserve_split = yes # you probably want this
-}
-
-master {
- # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
- new_is_master = true
-}
-
-gestures {
- # See https://wiki.hyprland.org/Configuring/Variables/ for more
- workspace_swipe = off
-}
-
-# Example per-device config
-# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
-device {
- name = epic-mouse-v1
- sensitivity = -0.5
-}
-
-# Example windowrule v1
-# windowrule = float, ^(kitty)$
-# Example windowrule v2
-# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
-# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
-
-
-# See https://wiki.hyprland.org/Configuring/Keywords/ for more
-$mainMod = SUPER
-
-# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
-bind = $mainMod, Return, exec, foot
-bind = $mainMod CTRL, Return, exec, foot -a float-foot
-bind = $mainMod SHIFT, Q, killactive
-bind = $mainMod SHIFT, E, exit
-bind = $mainMod SHIFT, Space, togglefloating
-bind = $mainMod SHIFT, Return, pin, active
-bind = $mainMod, D, exec, fuzzel --width=35 --font='Hack:weight=bold:size=12' --background-color='282a36fa' --selection-color='3d4460fa' --line-height=20 --border-radius=20
-bind = $mainMod, P, pseudo, # dwindle
-bind = $mainMod, J, togglesplit, # dwindle
-bind = $mainMod, F, fullscreen, 1
-bind = $mainMod SHIFT, F, fullscreen
-bind = ,XF86MonBrightnessUp, exec, light -A 10
-bind = ,XF86MonBrightnessDown, exec, light -U 10
-bind = ,XF86AudioRaiseVolume, exec, pamixer -i 5
-bind = ,XF86AudioLowerVolume, exec, pamixer -d 5
-bind = ,XF86AudioMute, exec, pamixer -t
-bind = ,XF86AudioPlay, exec, playerctl play-pause
-bind = ,XF86AudioPause, exec, playerctl play-pause
-bind = ,XF86AudioNext, exec, playerctl next
-bind = ,XF86AudioPrev, exec, playerctl previous
-bind = ,XF86AudioStop, exec, playerctl stop
-
-# "Auto-connect headphones"
-bind = $mainMod, H, exec, bluetoothctl connect AC:80:0A:1C:D6:C7
-
-# Move workspace between monitors
-bind = $mainMod CTRL SHIFT, left, movecurrentworkspacetomonitor, l
-bind = $mainMod CTRL SHIFT, right, movecurrentworkspacetomonitor, r
-bind = $mainMod CTRL SHIFT, up, movecurrentworkspacetomonitor, u
-bind = $mainMod CTRL SHIFT, down, movecurrentworkspacetomonitor, d
-
-# Move focus with mainMod + arrow keys
-bind = $mainMod, left, movefocus, l
-bind = $mainMod, right, movefocus, r
-bind = $mainMod, up, movefocus, u
-bind = $mainMod, down, movefocus, d
-
-# Move window with mainMod + SHIFT + arrow keys
-bind = $mainMod SHIFT, left, movewindow, l
-bind = $mainMod SHIFT, right, movewindow, r
-bind = $mainMod SHIFT, up, movewindow, u
-bind = $mainMod SHIFT, down, movewindow, d
-
-# Switch workspaces with mainMod + [0-9]
-bind = $mainMod, 1, workspace, 1
-bind = $mainMod, 2, workspace, 2
-bind = $mainMod, 3, workspace, 3
-bind = $mainMod, 4, workspace, 4
-bind = $mainMod, 5, workspace, 5
-bind = $mainMod, 6, workspace, 6
-bind = $mainMod, 7, workspace, 7
-bind = $mainMod, 8, workspace, 8
-bind = $mainMod, 9, workspace, 9
-bind = $mainMod, 0, workspace, 10
-
-# Move active window to a workspace with mainMod + SHIFT + [0-9]
-bind = $mainMod SHIFT, 1, movetoworkspace, 1
-bind = $mainMod SHIFT, 2, movetoworkspace, 2
-bind = $mainMod SHIFT, 3, movetoworkspace, 3
-bind = $mainMod SHIFT, 4, movetoworkspace, 4
-bind = $mainMod SHIFT, 5, movetoworkspace, 5
-bind = $mainMod SHIFT, 6, movetoworkspace, 6
-bind = $mainMod SHIFT, 7, movetoworkspace, 7
-bind = $mainMod SHIFT, 8, movetoworkspace, 8
-bind = $mainMod SHIFT, 9, movetoworkspace, 9
-bind = $mainMod SHIFT, 0, movetoworkspace, 10
-
-# Scroll through existing workspaces with mainMod + scroll
-bind = $mainMod, mouse_down, workspace, e+1
-bind = $mainMod, mouse_up, workspace, e-1
-
-# Move/resize windows with mainMod + LMB/RMB and dragging
-bindm = $mainMod, mouse:272, movewindow
-bindm = $mainMod, mouse:273, resizewindow
-
-# Bind mainMod + L to screenlocker
-bind = $mainMod, L, exec, swaylock --screenshots --clock --indicator --fade-in 0.3 --effect-blur 7x5 --effect-greyscale
-bind = $mainMod SHIFT, L, exec, swaylock --screenshots --clock --indicator --effect-blur 7x5 --effect-greyscale & sleep 0.5; loginctl suspend
-
-# Keybind for screenshot
-bind = $mainMod SHIFT, S, exec, grimblast copy area
-bind = $mainMod SHIFT, Print, exec, grimblast edit area
-
-# Notifications keybinds
-bind = $mainMod, N, exec, makoctl dismiss
-bind = $mainMod SHIFT, N, exec, makoctl dismiss -a
-
-# Color picker
-bind = $mainMod SHIFT, C, exec, hyprpicker -a
-
-# LinkedIn Joke (very serious)
-bind = $mainMod SHIFT CTRL ALT, L, exec, xdg-open https://linkedin.com
-
-# Window Rules
-
-# Firefox PiP
-windowrulev2 = float, class:^(firefox)$, title:^(Picture-in-Picture)$
-windowrulev2 = pin, class:^(firefox)$, title:^(Picture-in-Picture)$
-windowrulev2 = size 578 326, class:^(firefox)$, title:^(Picture-in-Picture)$
-
-# Firefox Sharing Indicator
-windowrulev2 = float, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$
-windowrulev2 = size 56 31, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$
-windowrulev2 = move 50% 0, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$
-windowrulev2 = suppressevent fullscreen maximize, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$
-
-# Weather
-windowrulev2 = float,class:^(ala-wttr)$
-windowrulev2 = size 740 712, class:^(ala-wttr)$
-
-# Floating terminal
-windowrulev2 = float,class:^(float-foot)$
-windowrulev2 = size 930 680,class:^(float-foot)$
-windowrulev2 = center,class:^(float-foot)$
-
-# Change color of pinned windows
-windowrulev2 = bordercolor rgba(bf0000ee) rgba(ab00adee) 45deg,pinned:1
-
-# Fun Keybinds
-# Subway surfer
-bind = $mainMod CTRL SHIFT, S, exec, mpv ~/.config/hypr/subwaysurfer.webm
-windowrulev2 = float,class:^(mpv)$, title:^(subwaysurfer.webm - mpv)$
-windowrulev2 = size 310 554,class:^(mpv)$, title:^(subwaysurfer.webm - mpv)$
-windowrulev2 = move 81% 46% ,class:^(mpv)$, title:^(subwaysurfer.webm - mpv)$
-windowrulev2 = pin,class:^(mpv)$, title:^(subwaysurfer.webm - mpv)$
-
-# Family guy funny moments
-bind = $mainMod CTRL SHIFT, F, exec, mpv ~/.config/hypr/family_guy.mp4
-windowrulev2 = float,class:^(mpv)$, title:^(family_guy.mp4 - mpv)$
-windowrulev2 = size 595 336,class:^(mpv)$, title:^(family_guy.mp4 - mpv)$
-windowrulev2 = move 67% 5% ,class:^(mpv)$, title:^(family_guy.mp4 - mpv)$
-windowrulev2 = pin,class:^(mpv)$, title:^(family_guy.mp4 - mpv)$
-
-exec-once = ~/.config/hypr/autostart.sh
-
-misc {
- disable_hyprland_logo = true
- force_default_wallpaper = 0
-}
diff --git a/home-config/hypr/kanshi.conf b/home-config/hypr/kanshi.conf
deleted file mode 100644
index 92eed88..0000000
--- a/home-config/hypr/kanshi.conf
+++ /dev/null
@@ -1,21 +0,0 @@
-profile {
- output "AU Optronics 0x103D Unknown" enable
-}
-
-profile tylerdesk {
- output "AU Optronics 0x103D Unknown" disable
- output "Dell Inc. DELL U3421WE 6WK8753" enable
-}
-
-profile emilydesk {
- output "AU Optronics 0x103D Unknown" disable
- output "Dell Inc. DELL U2422H JN4SF83" position 0,0 mode 1920x1080
- output "Dell Inc. DELL U2414H R9F1P5C59WDL" position 1920,0 mode 1920x1080
- output "Dell Inc. DELL U2422H 5S9SF83" position 3840,0 mode 1920x1080
-}
-
-profile justindesk {
- output "AU Optronics 0x103D Unknown" position 0,0 mode 1920x1080
- output "Dell Inc. DELL U2417H XVNNT7CDC80L" position 1920,0 mode 1920x1080
- output "Dell Inc. DELL U2417H XVNNT82M978L" position 3840,0 mode 1920x1080
-}
diff --git a/home-config/hypr/monitors.conf b/home-config/hypr/monitors.conf
deleted file mode 100644
index 7b3b503..0000000
--- a/home-config/hypr/monitors.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-monitor=eDP-1,1920x1080, 0x0, 1
-monitor=HDMI-A-1,1920x1080, 1920x0, 1
diff --git a/home-config/hypr/subwaysurfer.webm b/home-config/hypr/subwaysurfer.webm
deleted file mode 100644
index 594e1c0..0000000
Binary files a/home-config/hypr/subwaysurfer.webm and /dev/null differ
diff --git a/home-config/hypr/wallpaper-daemon-animated-old.sh b/home-config/hypr/wallpaper-daemon-animated-old.sh
deleted file mode 100755
index 39b2aae..0000000
--- a/home-config/hypr/wallpaper-daemon-animated-old.sh
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/env bash
-
-# Script initialization
-# Check if animated wallpapers exist, set env var if so
-# Sleep for swww init to finish
-sleep 3
-script_init() {
- if [ `find ~/.config/hypr/Wallpapers/animated/ -name '*.gif' | wc -l` -gt 0 ]; then
- echo "true" > /tmp/$USER-desktop-anim
- ANIM_READY=true
- else
- # Download or bail here?
- echo "no animations found, static only!"
- fi
-}
-# check if on ac or battery
-check_if_ac() {
- ON_AC=`cat /sys/class/power_supply/AC/online`
- if [ $ON_AC -eq 1 ] && [ "$ANIM_READY" = true ]; then
- echo "Anim"
- init_anim
- else
- echo "Static"
- init_static
- fi
-}
-
-init_static() {
- # On battery or missing wallpapers, just load a random image
- IMG=`find ~/.config/hypr/Wallpapers/static/ -type f | sort -R | tail -n1`
- echo $IMG >> /tmp/$USER-desktop-anim
- swww img $IMG
- # This is hacky but sometimes we get into a race condition where the
- # animated background will load anyways, so this will ensure we stay static
- # until we definitely control swww and its state is known
- sleep 60
- swww img $IMG
-}
-
-init_anim() {
- # Preload a static image until the animated one is ready
- swww img --transition-step 255 `find ~/.config/hypr/Wallpapers/static/ -type f | sort -R | tail -n1`
- sleep 2
- IMG=`find ~/.config/hypr/Wallpapers/animated/ -name '*.gif' | sort -R | tail -n1`
- echo $IMG >> /tmp/$USER-desktop-anim
- swww img $IMG
-}
-
-begin_randomizer() {
- while :; do
- echo "Invoke selector"
- sleep 3600
- if [ `cat /sys/class/power_supply/AC/online` -eq 1 ] && [ `cat /tmp/$USER-desktop-anim | head -n1` == "true" ]; then
- switch_check `find ~/.config/hypr/Wallpapers/animated/ -name '*.gif' | sort -R | tail -n1`
- else
- switch_check `find ~/.config/hypr/Wallpapers/static/ -type f | sort -R | tail -n1`
- fi
- done
-}
-
-switch_check() {
- # Simply query what image is displayed and make sure we do not overwrite
- # it. This is more for animated wallpapers since it causes corruption
- CURRENT_FILE=`swww query | awk -F'/' '{print $NF}'`
- SELECTION=`echo $1 | awk -F'/' '{print $NF}'`
-
- if ! [ "$CURRENT_FILE" == "$SELECTION" ]; then
- # Update the file
- sed -i '2c'"$1" /tmp/$USER-desktop-anim
- # Set the background!
- swww img $1
- fi
-}
-
-check_load() {
- # If system is under stress, disable animated wallpaper. If not, allow them
- while :; do
- sleep 60
- ANIM_ENABLE=`cat /tmp/$USER-desktop-anim`
- LOAD=`cat /proc/loadavg | cut -d' ' -f1`
-
- if [ "$ANIM_ENABLE" == "true" ] && [ $LOAD -gt 8.00 ] && [ $ANIM_READY = true ]; then
- sed -i '1c\false' /tmp/$USER-desktop-anim
- switch_check `find ~/.config/hypr/Wallpapers/static/ -type f | sort -R | tail -n1`
- elif [ "$ANIM_ENABLE" == "false" ] && [ $LOAD -lt 8.00 ] && [ $ANIM_READY = true ]; then
- sed -i '1c\true' /tmp/$USER-desktop-anim
- switch_check `find ~/.config/hypr/Wallpapers/animated/ -name '*.gif' | sort -R | tail -n1`
- fi
- done
-}
-
-script_init
-check_if_ac
-begin_randomizer &
-check_load &
-
-dbus-monitor --system "interface='org.freedesktop.DBus.Properties',member='PropertiesChanged',sender=':1.2',path='/org/freedesktop/UPower/devices/line_power_AC'" 2>/dev/null | stdbuf -o0 awk -F' ' '/variant boolean/ {print $(NF)}' |
-while read -r line; do
- if [ "$line" == "true" ]; then
- echo "switching to ac"
- switch_check `find ~/.config/hypr/Wallpapers/animated/ -name '*.gif' | sort -R | tail -n1`
- elif [ "$line" == "false" ]; then
- echo "switching to bat"
- switch_check `find ~/.config/hypr/Wallpapers/static/ -type f | sort -R | tail -n1`
- fi
-done
diff --git a/home-config/hypr/wallpaper-daemon.sh b/home-config/hypr/wallpaper-daemon.sh
deleted file mode 100755
index b793c5a..0000000
--- a/home-config/hypr/wallpaper-daemon.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env bash
-
-# Script initialization
-# Check if animated wallpapers exist, set env var if so
-# Sleep for swww init to finish
-init_static() {
- # On battery or missing wallpapers, just load a random image
- IMG=`find ~/.config/hypr/Wallpapers/static/ -type f | sort -R | tail -n1`
- echo $IMG >> /tmp/$USER-desktop-anim
- swww img $IMG
-}
-
-begin_randomizer() {
- while :; do
- sleep 3600
- switch_check `find ~/.config/hypr/Wallpapers/static/ -type f | sort -R | tail -n1`
- done
-}
-
-switch_check() {
- # Simply query what image is displayed and make sure we do not overwrite
- # it. This is more for animated wallpapers since it causes corruption
- CURRENT_FILE=`swww query | awk -F'/' '{print $NF}'`
- SELECTION=`echo $1 | awk -F'/' '{print $NF}'`
-
- if ! [ "$CURRENT_FILE" == "$SELECTION" ]; then
- # Update the file
- sed -i '2c'"$1" /tmp/$USER-desktop-anim
- # Set the background!
- swww img $1
- fi
-}
-
-init_static
-begin_randomizer &
diff --git a/home-config/hypr/wallpaper.sh b/home-config/hypr/wallpaper.sh
deleted file mode 100755
index c6266fc..0000000
--- a/home-config/hypr/wallpaper.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-sleep 2
-
-# Get currently loaded image
-IMG=`cat /tmp/$USER-desktop-anim | tail -n1`
-
-# Load it for the monitors
-swww img $IMG -o $1
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/X_cursor.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/X_cursor.hlc
new file mode 100644
index 0000000..dbf1252
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/X_cursor.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bd_double_arrow.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bd_double_arrow.hlc
new file mode 100644
index 0000000..94782da
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bd_double_arrow.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_left_corner.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_left_corner.hlc
new file mode 100644
index 0000000..6192211
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_left_corner.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_right_corner.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_right_corner.hlc
new file mode 100644
index 0000000..f5b4962
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_right_corner.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_side.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_side.hlc
new file mode 100644
index 0000000..e410c8f
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_side.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_tee.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_tee.hlc
new file mode 100644
index 0000000..38798c0
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/bottom_tee.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/center_ptr.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/center_ptr.hlc
new file mode 100644
index 0000000..f2b246c
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/center_ptr.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/circle.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/circle.hlc
new file mode 100644
index 0000000..b1ed3ad
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/circle.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/context-menu.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/context-menu.hlc
new file mode 100644
index 0000000..b521021
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/context-menu.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/copy.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/copy.hlc
new file mode 100644
index 0000000..822dd3e
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/copy.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/cross.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/cross.hlc
new file mode 100644
index 0000000..625c3fb
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/cross.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/crossed_circle.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/crossed_circle.hlc
new file mode 100644
index 0000000..15710d4
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/crossed_circle.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/crosshair.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/crosshair.hlc
new file mode 100644
index 0000000..467650d
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/crosshair.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd-ask.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd-ask.hlc
new file mode 100644
index 0000000..3a87400
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd-ask.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd-copy.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd-copy.hlc
new file mode 100644
index 0000000..65d729f
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd-copy.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd-link.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd-link.hlc
new file mode 100644
index 0000000..1c9c6b3
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd-link.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd_no_drop.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd_no_drop.hlc
new file mode 100644
index 0000000..bb211eb
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dnd_no_drop.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dotbox.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dotbox.hlc
new file mode 100644
index 0000000..8c3811d
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/dotbox.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/fd_double_arrow.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/fd_double_arrow.hlc
new file mode 100644
index 0000000..b8abfea
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/fd_double_arrow.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/grabbing.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/grabbing.hlc
new file mode 100644
index 0000000..798fe88
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/grabbing.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/hand1.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/hand1.hlc
new file mode 100644
index 0000000..5468c4d
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/hand1.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/hand2.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/hand2.hlc
new file mode 100644
index 0000000..fa04568
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/hand2.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_ptr.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_ptr.hlc
new file mode 100644
index 0000000..91797ee
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_ptr.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_ptr_watch.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_ptr_watch.hlc
new file mode 100644
index 0000000..70573ed
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_ptr_watch.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_side.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_side.hlc
new file mode 100644
index 0000000..ec50ae5
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_side.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_tee.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_tee.hlc
new file mode 100644
index 0000000..98e240c
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/left_tee.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/link.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/link.hlc
new file mode 100644
index 0000000..0ae7c58
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/link.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/ll_angle.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/ll_angle.hlc
new file mode 100644
index 0000000..af6daea
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/ll_angle.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/lr_angle.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/lr_angle.hlc
new file mode 100644
index 0000000..7662b57
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/lr_angle.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/move.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/move.hlc
new file mode 100644
index 0000000..9ef7f8d
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/move.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/pencil.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/pencil.hlc
new file mode 100644
index 0000000..14a799a
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/pencil.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/plus.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/plus.hlc
new file mode 100644
index 0000000..7e4d670
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/plus.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/pointer-move.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/pointer-move.hlc
new file mode 100644
index 0000000..204e355
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/pointer-move.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/question_arrow.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/question_arrow.hlc
new file mode 100644
index 0000000..540b671
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/question_arrow.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/right_ptr.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/right_ptr.hlc
new file mode 100644
index 0000000..528027e
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/right_ptr.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/right_side.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/right_side.hlc
new file mode 100644
index 0000000..18bb2fc
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/right_side.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/right_tee.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/right_tee.hlc
new file mode 100644
index 0000000..5535f0c
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/right_tee.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_down_arrow.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_down_arrow.hlc
new file mode 100644
index 0000000..c6aed37
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_down_arrow.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_h_double_arrow.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_h_double_arrow.hlc
new file mode 100644
index 0000000..af06dab
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_h_double_arrow.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_left_arrow.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_left_arrow.hlc
new file mode 100644
index 0000000..e3155ef
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_left_arrow.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_right_arrow.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_right_arrow.hlc
new file mode 100644
index 0000000..1ee75d8
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_right_arrow.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_up_arrow.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_up_arrow.hlc
new file mode 100644
index 0000000..45fb16f
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_up_arrow.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_v_double_arrow.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_v_double_arrow.hlc
new file mode 100644
index 0000000..75df049
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/sb_v_double_arrow.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/tcross.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/tcross.hlc
new file mode 100644
index 0000000..f395cd8
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/tcross.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_left_corner.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_left_corner.hlc
new file mode 100644
index 0000000..8857f76
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_left_corner.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_right_corner.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_right_corner.hlc
new file mode 100644
index 0000000..e6addec
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_right_corner.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_side.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_side.hlc
new file mode 100644
index 0000000..5c79490
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_side.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_tee.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_tee.hlc
new file mode 100644
index 0000000..1225128
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/top_tee.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/ul_angle.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/ul_angle.hlc
new file mode 100644
index 0000000..3eb485c
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/ul_angle.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/ur_angle.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/ur_angle.hlc
new file mode 100644
index 0000000..c923400
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/ur_angle.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/vertical-text.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/vertical-text.hlc
new file mode 100644
index 0000000..4ab02f1
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/vertical-text.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/wait.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/wait.hlc
new file mode 100644
index 0000000..d9978b0
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/wait.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/wayland-cursor.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/wayland-cursor.hlc
new file mode 100644
index 0000000..95052f0
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/wayland-cursor.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/xterm.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/xterm.hlc
new file mode 100644
index 0000000..aa53c5a
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/xterm.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/zoom-in.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/zoom-in.hlc
new file mode 100644
index 0000000..62df09c
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/zoom-in.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/zoom-out.hlc b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/zoom-out.hlc
new file mode 100644
index 0000000..22cf467
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic-Hyprland/hyprcursors/zoom-out.hlc differ
diff --git a/home-config/icons/Bibata-Modern-Classic-Hyprland/manifest.hl b/home-config/icons/Bibata-Modern-Classic-Hyprland/manifest.hl
new file mode 100644
index 0000000..8b3285a
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic-Hyprland/manifest.hl
@@ -0,0 +1,4 @@
+name = Bibata-Modern-Classic-Hyprland
+description = Generated Bibata repository
+version = 0.1
+cursors_directory = hyprcursors
diff --git a/home-config/icons/Bibata-Modern-Classic/LICENSE b/home-config/icons/Bibata-Modern-Classic/LICENSE
new file mode 100644
index 0000000..6b01281
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023-2024 Abdulkaiz Khatri
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/home-config/icons/Bibata-Modern-Classic/README.txt b/home-config/icons/Bibata-Modern-Classic/README.txt
new file mode 100644
index 0000000..f567209
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/README.txt
@@ -0,0 +1,35 @@
+[::] Bibata Cursor
+TLDR; This cursor set is a masterpiece of cursors available on the internet,
+hand-designed by Abdulkaiz Khatri(https://twitter.com/ful1e5).
+
+Bibata is an open source, compact, and material designed cursor set that aims
+to improve the cursor experience for users. It is one of the most popular cursor sets
+in the Linux community and is now available for free on Windows as well, with multiple color
+and size options. Its goal is to offer personalized cursors to users.
+
+[::] What does "Bibata" mean?
+The sweetest word I ever spoke was "BI-Buh," which, coincidentally, is also the word for peanuts.
+To make it more pronounceable and not sound like a baby's words, I added the suffix "Ta."
+And with that, my journey in the world of open source began.
+
+[::] Become Sponsor
+https://github.com/sponsors/ful1e5
+
+[::] LICENSE
+MIT License
+
+[::] Bug Reports & Contact
+https://github.com/ful1e5/bibata/issues
+
+[::] Installation
+```bash
+tar -xvf Bibata.tar.gz # extract `Bibata.tar.gz`
+mv Bibata-* ~/.icons/ # Install to local users
+sudo mv Bibata-* /usr/share/icons/ # Install to all users
+```
+
+[::] Uninstallation
+```bash
+rm ~/.icons/Bibata-* # Remove from local users
+sudo rm /usr/share/icons/Bibata-* # Remove from all users
+```
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/VERSION b/home-config/icons/Bibata-Modern-Classic/VERSION
new file mode 100644
index 0000000..32a80fe
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/VERSION
@@ -0,0 +1,4 @@
+ID=daed906f-99d6-4fb8-ae03-623d988962e3
+Author=Abdualkaiz Khatri <kaizmandhu@gmail.com>
+Type=Bibata-Modern
+Version=1.0.2
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursor.theme b/home-config/icons/Bibata-Modern-Classic/cursor.theme
new file mode 100644
index 0000000..6514956
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursor.theme
@@ -0,0 +1,3 @@
+[Icon Theme]
+Name=Bibata-Modern-daed9-v1.0.2-x11
+Inherits="Bibata-Modern-daed9-v1.0.2-x11"
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/00000000000000020006000e7e9ffc3f b/home-config/icons/Bibata-Modern-Classic/cursors/00000000000000020006000e7e9ffc3f
new file mode 120000
index 0000000..b0e6589
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/00000000000000020006000e7e9ffc3f
@@ -0,0 +1 @@
+left_ptr_watch
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/00008160000006810000408080010102 b/home-config/icons/Bibata-Modern-Classic/cursors/00008160000006810000408080010102
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/00008160000006810000408080010102
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/028006030e0e7ebffc7f7070c0600140 b/home-config/icons/Bibata-Modern-Classic/cursors/028006030e0e7ebffc7f7070c0600140
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/028006030e0e7ebffc7f7070c0600140
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/03b6e0fcb3499374a867c041f52298f0 b/home-config/icons/Bibata-Modern-Classic/cursors/03b6e0fcb3499374a867c041f52298f0
new file mode 120000
index 0000000..01c907d
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/03b6e0fcb3499374a867c041f52298f0
@@ -0,0 +1 @@
+crossed_circle
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/08e8e1c95fe2fc01f976f1e063a24ccd b/home-config/icons/Bibata-Modern-Classic/cursors/08e8e1c95fe2fc01f976f1e063a24ccd
new file mode 120000
index 0000000..b0e6589
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/08e8e1c95fe2fc01f976f1e063a24ccd
@@ -0,0 +1 @@
+left_ptr_watch
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/1081e37283d90000800003c07f3ef6bf b/home-config/icons/Bibata-Modern-Classic/cursors/1081e37283d90000800003c07f3ef6bf
new file mode 120000
index 0000000..88740b2
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/1081e37283d90000800003c07f3ef6bf
@@ -0,0 +1 @@
+copy
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/14fef782d02440884392942c1120523 b/home-config/icons/Bibata-Modern-Classic/cursors/14fef782d02440884392942c1120523
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/14fef782d02440884392942c1120523
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/2870a09082c103050810ffdffffe0204 b/home-config/icons/Bibata-Modern-Classic/cursors/2870a09082c103050810ffdffffe0204
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/2870a09082c103050810ffdffffe0204
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/3085a0e285430894940527032f8b26df b/home-config/icons/Bibata-Modern-Classic/cursors/3085a0e285430894940527032f8b26df
new file mode 120000
index 0000000..c150ede
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/3085a0e285430894940527032f8b26df
@@ -0,0 +1 @@
+link
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/3ecb610c1bf2410f44200f48c40d3599 b/home-config/icons/Bibata-Modern-Classic/cursors/3ecb610c1bf2410f44200f48c40d3599
new file mode 120000
index 0000000..b0e6589
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/3ecb610c1bf2410f44200f48c40d3599
@@ -0,0 +1 @@
+left_ptr_watch
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/4498f0e0c1937ffe01fd06f973665830 b/home-config/icons/Bibata-Modern-Classic/cursors/4498f0e0c1937ffe01fd06f973665830
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/4498f0e0c1937ffe01fd06f973665830
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/5c6cd98b3f3ebcb1f9c7f1c204630408 b/home-config/icons/Bibata-Modern-Classic/cursors/5c6cd98b3f3ebcb1f9c7f1c204630408
new file mode 120000
index 0000000..cc9a7ed
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/5c6cd98b3f3ebcb1f9c7f1c204630408
@@ -0,0 +1 @@
+question_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/6407b0e94181790501fd1e167b474872 b/home-config/icons/Bibata-Modern-Classic/cursors/6407b0e94181790501fd1e167b474872
new file mode 120000
index 0000000..88740b2
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/6407b0e94181790501fd1e167b474872
@@ -0,0 +1 @@
+copy
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/640fb0e74195791501fd1ed57b41487f b/home-config/icons/Bibata-Modern-Classic/cursors/640fb0e74195791501fd1ed57b41487f
new file mode 120000
index 0000000..c150ede
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/640fb0e74195791501fd1ed57b41487f
@@ -0,0 +1 @@
+link
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/9081237383d90e509aa00f00170e968f b/home-config/icons/Bibata-Modern-Classic/cursors/9081237383d90e509aa00f00170e968f
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/9081237383d90e509aa00f00170e968f
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/9d800788f1b08800ae810202380a0822 b/home-config/icons/Bibata-Modern-Classic/cursors/9d800788f1b08800ae810202380a0822
new file mode 120000
index 0000000..0b08654
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/9d800788f1b08800ae810202380a0822
@@ -0,0 +1 @@
+hand2
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/X_cursor b/home-config/icons/Bibata-Modern-Classic/cursors/X_cursor
new file mode 100644
index 0000000..11028bb
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/X_cursor differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/a2a266d0498c3104214a47bd64ab0fc8 b/home-config/icons/Bibata-Modern-Classic/cursors/a2a266d0498c3104214a47bd64ab0fc8
new file mode 120000
index 0000000..c150ede
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/a2a266d0498c3104214a47bd64ab0fc8
@@ -0,0 +1 @@
+link
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/alias b/home-config/icons/Bibata-Modern-Classic/cursors/alias
new file mode 120000
index 0000000..35beaab
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/alias
@@ -0,0 +1 @@
+dnd-link
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/all-scroll b/home-config/icons/Bibata-Modern-Classic/cursors/all-scroll
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/all-scroll
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/arrow b/home-config/icons/Bibata-Modern-Classic/cursors/arrow
new file mode 120000
index 0000000..0de4e80
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/arrow
@@ -0,0 +1 @@
+left_ptr
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/b66166c04f8c3109214a4fbd64a50fc8 b/home-config/icons/Bibata-Modern-Classic/cursors/b66166c04f8c3109214a4fbd64a50fc8
new file mode 120000
index 0000000..88740b2
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/b66166c04f8c3109214a4fbd64a50fc8
@@ -0,0 +1 @@
+copy
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/bd_double_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/bd_double_arrow
new file mode 100644
index 0000000..48c2be6
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/bd_double_arrow differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/bottom_left_corner b/home-config/icons/Bibata-Modern-Classic/cursors/bottom_left_corner
new file mode 100644
index 0000000..6c8d3ca
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/bottom_left_corner differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/bottom_right_corner b/home-config/icons/Bibata-Modern-Classic/cursors/bottom_right_corner
new file mode 100644
index 0000000..61ce574
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/bottom_right_corner differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/bottom_side b/home-config/icons/Bibata-Modern-Classic/cursors/bottom_side
new file mode 100644
index 0000000..d23e62f
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/bottom_side differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/bottom_tee b/home-config/icons/Bibata-Modern-Classic/cursors/bottom_tee
new file mode 100644
index 0000000..e6ce2fa
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/bottom_tee differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/c7088f0f3e6c8088236ef8e1e3e70000 b/home-config/icons/Bibata-Modern-Classic/cursors/c7088f0f3e6c8088236ef8e1e3e70000
new file mode 120000
index 0000000..a8afe37
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/c7088f0f3e6c8088236ef8e1e3e70000
@@ -0,0 +1 @@
+bd_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/cell b/home-config/icons/Bibata-Modern-Classic/cursors/cell
new file mode 120000
index 0000000..b070a6a
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/cell
@@ -0,0 +1 @@
+plus
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/center_ptr b/home-config/icons/Bibata-Modern-Classic/cursors/center_ptr
new file mode 100644
index 0000000..8c76544
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/center_ptr differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/circle b/home-config/icons/Bibata-Modern-Classic/cursors/circle
new file mode 100644
index 0000000..3afbe0e
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/circle differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/closedhand b/home-config/icons/Bibata-Modern-Classic/cursors/closedhand
new file mode 120000
index 0000000..bc5dcc0
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/closedhand
@@ -0,0 +1 @@
+grabbing
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/col-resize b/home-config/icons/Bibata-Modern-Classic/cursors/col-resize
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/col-resize
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/color-picker b/home-config/icons/Bibata-Modern-Classic/cursors/color-picker
new file mode 120000
index 0000000..c2d6c2a
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/color-picker
@@ -0,0 +1 @@
+tcross
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/context-menu b/home-config/icons/Bibata-Modern-Classic/cursors/context-menu
new file mode 100644
index 0000000..e17d951
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/context-menu differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/copy b/home-config/icons/Bibata-Modern-Classic/cursors/copy
new file mode 100644
index 0000000..dbb9741
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/copy differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/cross b/home-config/icons/Bibata-Modern-Classic/cursors/cross
new file mode 100644
index 0000000..ab959fa
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/cross differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/cross_reverse b/home-config/icons/Bibata-Modern-Classic/cursors/cross_reverse
new file mode 120000
index 0000000..982ae30
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/cross_reverse
@@ -0,0 +1 @@
+cross
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/crossed_circle b/home-config/icons/Bibata-Modern-Classic/cursors/crossed_circle
new file mode 100644
index 0000000..75f6a2f
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/crossed_circle differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/crosshair b/home-config/icons/Bibata-Modern-Classic/cursors/crosshair
new file mode 100644
index 0000000..56a2211
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/crosshair differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/d9ce0ab605698f320427677b458ad60b b/home-config/icons/Bibata-Modern-Classic/cursors/d9ce0ab605698f320427677b458ad60b
new file mode 120000
index 0000000..cc9a7ed
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/d9ce0ab605698f320427677b458ad60b
@@ -0,0 +1 @@
+question_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/default b/home-config/icons/Bibata-Modern-Classic/cursors/default
new file mode 120000
index 0000000..0de4e80
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/default
@@ -0,0 +1 @@
+left_ptr
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/diamond_cross b/home-config/icons/Bibata-Modern-Classic/cursors/diamond_cross
new file mode 120000
index 0000000..982ae30
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/diamond_cross
@@ -0,0 +1 @@
+cross
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/dnd-ask b/home-config/icons/Bibata-Modern-Classic/cursors/dnd-ask
new file mode 100644
index 0000000..c2a6ff4
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/dnd-ask differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/dnd-copy b/home-config/icons/Bibata-Modern-Classic/cursors/dnd-copy
new file mode 100644
index 0000000..557a8b8
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/dnd-copy differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/dnd-link b/home-config/icons/Bibata-Modern-Classic/cursors/dnd-link
new file mode 100644
index 0000000..a6279eb
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/dnd-link differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/dnd-move b/home-config/icons/Bibata-Modern-Classic/cursors/dnd-move
new file mode 120000
index 0000000..bc5dcc0
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/dnd-move
@@ -0,0 +1 @@
+grabbing
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/dnd-none b/home-config/icons/Bibata-Modern-Classic/cursors/dnd-none
new file mode 120000
index 0000000..bc5dcc0
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/dnd-none
@@ -0,0 +1 @@
+grabbing
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/dnd_no_drop b/home-config/icons/Bibata-Modern-Classic/cursors/dnd_no_drop
new file mode 100644
index 0000000..a4b28d9
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/dnd_no_drop differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/dot_box_mask b/home-config/icons/Bibata-Modern-Classic/cursors/dot_box_mask
new file mode 120000
index 0000000..def8590
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/dot_box_mask
@@ -0,0 +1 @@
+dotbox
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/dotbox b/home-config/icons/Bibata-Modern-Classic/cursors/dotbox
new file mode 100644
index 0000000..1a8dbff
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/dotbox differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/double_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/double_arrow
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/double_arrow
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/down-arrow b/home-config/icons/Bibata-Modern-Classic/cursors/down-arrow
new file mode 120000
index 0000000..022a111
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/down-arrow
@@ -0,0 +1 @@
+sb_down_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/draft b/home-config/icons/Bibata-Modern-Classic/cursors/draft
new file mode 120000
index 0000000..644fb7b
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/draft
@@ -0,0 +1 @@
+pencil
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/draft_large b/home-config/icons/Bibata-Modern-Classic/cursors/draft_large
new file mode 120000
index 0000000..cb9c1b4
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/draft_large
@@ -0,0 +1 @@
+right_ptr
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/draft_small b/home-config/icons/Bibata-Modern-Classic/cursors/draft_small
new file mode 120000
index 0000000..cb9c1b4
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/draft_small
@@ -0,0 +1 @@
+right_ptr
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/draped_box b/home-config/icons/Bibata-Modern-Classic/cursors/draped_box
new file mode 120000
index 0000000..def8590
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/draped_box
@@ -0,0 +1 @@
+dotbox
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/e-resize b/home-config/icons/Bibata-Modern-Classic/cursors/e-resize
new file mode 120000
index 0000000..acbf1f9
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/e-resize
@@ -0,0 +1 @@
+right_side
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/e29285e634086352946a0e7090d73106 b/home-config/icons/Bibata-Modern-Classic/cursors/e29285e634086352946a0e7090d73106
new file mode 120000
index 0000000..0b08654
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/e29285e634086352946a0e7090d73106
@@ -0,0 +1 @@
+hand2
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/ew-resize b/home-config/icons/Bibata-Modern-Classic/cursors/ew-resize
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/ew-resize
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/fcf1c3c7cd4491d801f1e1c78f100000 b/home-config/icons/Bibata-Modern-Classic/cursors/fcf1c3c7cd4491d801f1e1c78f100000
new file mode 120000
index 0000000..3d249d7
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/fcf1c3c7cd4491d801f1e1c78f100000
@@ -0,0 +1 @@
+fd_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/fcf21c00b30f7e3f83fe0dfd12e71cff b/home-config/icons/Bibata-Modern-Classic/cursors/fcf21c00b30f7e3f83fe0dfd12e71cff
new file mode 120000
index 0000000..bc5dcc0
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/fcf21c00b30f7e3f83fe0dfd12e71cff
@@ -0,0 +1 @@
+grabbing
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/fd_double_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/fd_double_arrow
new file mode 100644
index 0000000..d396e0d
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/fd_double_arrow differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/fleur b/home-config/icons/Bibata-Modern-Classic/cursors/fleur
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/fleur
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/forbidden b/home-config/icons/Bibata-Modern-Classic/cursors/forbidden
new file mode 120000
index 0000000..031757c
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/forbidden
@@ -0,0 +1 @@
+circle
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/grab b/home-config/icons/Bibata-Modern-Classic/cursors/grab
new file mode 120000
index 0000000..1a38f92
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/grab
@@ -0,0 +1 @@
+hand1
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/grabbing b/home-config/icons/Bibata-Modern-Classic/cursors/grabbing
new file mode 100644
index 0000000..1bb1d83
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/grabbing differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/h_double_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/h_double_arrow
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/h_double_arrow
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/hand1 b/home-config/icons/Bibata-Modern-Classic/cursors/hand1
new file mode 100644
index 0000000..5150af4
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/hand1 differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/hand2 b/home-config/icons/Bibata-Modern-Classic/cursors/hand2
new file mode 100644
index 0000000..9b9f76c
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/hand2 differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/help b/home-config/icons/Bibata-Modern-Classic/cursors/help
new file mode 120000
index 0000000..cc9a7ed
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/help
@@ -0,0 +1 @@
+question_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/ibeam b/home-config/icons/Bibata-Modern-Classic/cursors/ibeam
new file mode 120000
index 0000000..18632c4
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/ibeam
@@ -0,0 +1 @@
+xterm
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/icon b/home-config/icons/Bibata-Modern-Classic/cursors/icon
new file mode 120000
index 0000000..def8590
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/icon
@@ -0,0 +1 @@
+dotbox
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/left-arrow b/home-config/icons/Bibata-Modern-Classic/cursors/left-arrow
new file mode 120000
index 0000000..f473dff
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/left-arrow
@@ -0,0 +1 @@
+sb_left_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/left_ptr b/home-config/icons/Bibata-Modern-Classic/cursors/left_ptr
new file mode 100644
index 0000000..b07377f
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/left_ptr differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/left_ptr_help b/home-config/icons/Bibata-Modern-Classic/cursors/left_ptr_help
new file mode 120000
index 0000000..cc9a7ed
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/left_ptr_help
@@ -0,0 +1 @@
+question_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/left_ptr_watch b/home-config/icons/Bibata-Modern-Classic/cursors/left_ptr_watch
new file mode 100644
index 0000000..b667e0a
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/left_ptr_watch differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/left_side b/home-config/icons/Bibata-Modern-Classic/cursors/left_side
new file mode 100644
index 0000000..5931303
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/left_side differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/left_tee b/home-config/icons/Bibata-Modern-Classic/cursors/left_tee
new file mode 100644
index 0000000..af1448f
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/left_tee differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/link b/home-config/icons/Bibata-Modern-Classic/cursors/link
new file mode 100644
index 0000000..6d0f971
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/link differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/ll_angle b/home-config/icons/Bibata-Modern-Classic/cursors/ll_angle
new file mode 100644
index 0000000..8e00ab1
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/ll_angle differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/lr_angle b/home-config/icons/Bibata-Modern-Classic/cursors/lr_angle
new file mode 100644
index 0000000..043e721
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/lr_angle differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/move b/home-config/icons/Bibata-Modern-Classic/cursors/move
new file mode 100644
index 0000000..b821f28
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/move differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/n-resize b/home-config/icons/Bibata-Modern-Classic/cursors/n-resize
new file mode 120000
index 0000000..83cc946
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/n-resize
@@ -0,0 +1 @@
+top_side
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/ne-resize b/home-config/icons/Bibata-Modern-Classic/cursors/ne-resize
new file mode 120000
index 0000000..19274a2
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/ne-resize
@@ -0,0 +1 @@
+top_right_corner
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/nesw-resize b/home-config/icons/Bibata-Modern-Classic/cursors/nesw-resize
new file mode 120000
index 0000000..3d249d7
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/nesw-resize
@@ -0,0 +1 @@
+fd_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/no-drop b/home-config/icons/Bibata-Modern-Classic/cursors/no-drop
new file mode 120000
index 0000000..1f6c0fd
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/no-drop
@@ -0,0 +1 @@
+dnd_no_drop
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/not-allowed b/home-config/icons/Bibata-Modern-Classic/cursors/not-allowed
new file mode 120000
index 0000000..01c907d
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/not-allowed
@@ -0,0 +1 @@
+crossed_circle
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/ns-resize b/home-config/icons/Bibata-Modern-Classic/cursors/ns-resize
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/ns-resize
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/nw-resize b/home-config/icons/Bibata-Modern-Classic/cursors/nw-resize
new file mode 120000
index 0000000..be1ee95
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/nw-resize
@@ -0,0 +1 @@
+top_left_corner
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/nwse-resize b/home-config/icons/Bibata-Modern-Classic/cursors/nwse-resize
new file mode 120000
index 0000000..a8afe37
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/nwse-resize
@@ -0,0 +1 @@
+bd_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/openhand b/home-config/icons/Bibata-Modern-Classic/cursors/openhand
new file mode 120000
index 0000000..1a38f92
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/openhand
@@ -0,0 +1 @@
+hand1
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/pencil b/home-config/icons/Bibata-Modern-Classic/cursors/pencil
new file mode 100644
index 0000000..d4711b6
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/pencil differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/pirate b/home-config/icons/Bibata-Modern-Classic/cursors/pirate
new file mode 120000
index 0000000..7b84daf
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/pirate
@@ -0,0 +1 @@
+X_cursor
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/plus b/home-config/icons/Bibata-Modern-Classic/cursors/plus
new file mode 100644
index 0000000..d592c51
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/plus differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/pointer b/home-config/icons/Bibata-Modern-Classic/cursors/pointer
new file mode 120000
index 0000000..0b08654
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/pointer
@@ -0,0 +1 @@
+hand2
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/pointer-move b/home-config/icons/Bibata-Modern-Classic/cursors/pointer-move
new file mode 100644
index 0000000..4a5a409
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/pointer-move differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/pointing_hand b/home-config/icons/Bibata-Modern-Classic/cursors/pointing_hand
new file mode 120000
index 0000000..0b08654
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/pointing_hand
@@ -0,0 +1 @@
+hand2
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/progress b/home-config/icons/Bibata-Modern-Classic/cursors/progress
new file mode 120000
index 0000000..b0e6589
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/progress
@@ -0,0 +1 @@
+left_ptr_watch
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/question_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/question_arrow
new file mode 100644
index 0000000..cde5f05
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/question_arrow differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/right-arrow b/home-config/icons/Bibata-Modern-Classic/cursors/right-arrow
new file mode 120000
index 0000000..feb3132
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/right-arrow
@@ -0,0 +1 @@
+sb_right_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/right_ptr b/home-config/icons/Bibata-Modern-Classic/cursors/right_ptr
new file mode 100644
index 0000000..1b735d7
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/right_ptr differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/right_side b/home-config/icons/Bibata-Modern-Classic/cursors/right_side
new file mode 100644
index 0000000..2fed849
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/right_side differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/right_tee b/home-config/icons/Bibata-Modern-Classic/cursors/right_tee
new file mode 100644
index 0000000..aef2cf3
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/right_tee differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/row-resize b/home-config/icons/Bibata-Modern-Classic/cursors/row-resize
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/row-resize
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/s-resize b/home-config/icons/Bibata-Modern-Classic/cursors/s-resize
new file mode 120000
index 0000000..b9cca67
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/s-resize
@@ -0,0 +1 @@
+bottom_side
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/sb_down_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/sb_down_arrow
new file mode 100644
index 0000000..1aa94a0
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/sb_down_arrow differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/sb_h_double_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/sb_h_double_arrow
new file mode 100644
index 0000000..5b223f0
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/sb_h_double_arrow differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/sb_left_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/sb_left_arrow
new file mode 100644
index 0000000..940edea
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/sb_left_arrow differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/sb_right_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/sb_right_arrow
new file mode 100644
index 0000000..2869309
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/sb_right_arrow differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/sb_up_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/sb_up_arrow
new file mode 100644
index 0000000..4d0d763
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/sb_up_arrow differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/sb_v_double_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/sb_v_double_arrow
new file mode 100644
index 0000000..6b93db3
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/sb_v_double_arrow differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/se-resize b/home-config/icons/Bibata-Modern-Classic/cursors/se-resize
new file mode 120000
index 0000000..9a02514
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/se-resize
@@ -0,0 +1 @@
+bottom_right_corner
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/size-hor b/home-config/icons/Bibata-Modern-Classic/cursors/size-hor
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/size-hor
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/size-ver b/home-config/icons/Bibata-Modern-Classic/cursors/size-ver
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/size-ver
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/size_all b/home-config/icons/Bibata-Modern-Classic/cursors/size_all
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/size_all
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/size_bdiag b/home-config/icons/Bibata-Modern-Classic/cursors/size_bdiag
new file mode 120000
index 0000000..3d249d7
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/size_bdiag
@@ -0,0 +1 @@
+fd_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/size_fdiag b/home-config/icons/Bibata-Modern-Classic/cursors/size_fdiag
new file mode 120000
index 0000000..a8afe37
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/size_fdiag
@@ -0,0 +1 @@
+bd_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/size_hor b/home-config/icons/Bibata-Modern-Classic/cursors/size_hor
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/size_hor
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/size_ver b/home-config/icons/Bibata-Modern-Classic/cursors/size_ver
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/size_ver
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/split_h b/home-config/icons/Bibata-Modern-Classic/cursors/split_h
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/split_h
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/split_v b/home-config/icons/Bibata-Modern-Classic/cursors/split_v
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/split_v
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/sw-resize b/home-config/icons/Bibata-Modern-Classic/cursors/sw-resize
new file mode 120000
index 0000000..aab13ad
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/sw-resize
@@ -0,0 +1 @@
+bottom_left_corner
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/target b/home-config/icons/Bibata-Modern-Classic/cursors/target
new file mode 120000
index 0000000..def8590
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/target
@@ -0,0 +1 @@
+dotbox
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/tcross b/home-config/icons/Bibata-Modern-Classic/cursors/tcross
new file mode 100644
index 0000000..f6fc278
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/tcross differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/text b/home-config/icons/Bibata-Modern-Classic/cursors/text
new file mode 120000
index 0000000..18632c4
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/text
@@ -0,0 +1 @@
+xterm
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/top_left_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/top_left_arrow
new file mode 120000
index 0000000..0de4e80
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/top_left_arrow
@@ -0,0 +1 @@
+left_ptr
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/top_left_corner b/home-config/icons/Bibata-Modern-Classic/cursors/top_left_corner
new file mode 100644
index 0000000..5d36127
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/top_left_corner differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/top_right_corner b/home-config/icons/Bibata-Modern-Classic/cursors/top_right_corner
new file mode 100644
index 0000000..8f3b4e6
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/top_right_corner differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/top_side b/home-config/icons/Bibata-Modern-Classic/cursors/top_side
new file mode 100644
index 0000000..fe22ccc
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/top_side differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/top_tee b/home-config/icons/Bibata-Modern-Classic/cursors/top_tee
new file mode 100644
index 0000000..aa8bf37
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/top_tee differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/ul_angle b/home-config/icons/Bibata-Modern-Classic/cursors/ul_angle
new file mode 100644
index 0000000..a9d8202
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/ul_angle differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/up-arrow b/home-config/icons/Bibata-Modern-Classic/cursors/up-arrow
new file mode 120000
index 0000000..258ca58
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/up-arrow
@@ -0,0 +1 @@
+sb_up_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/ur_angle b/home-config/icons/Bibata-Modern-Classic/cursors/ur_angle
new file mode 100644
index 0000000..66a6cd9
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/ur_angle differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/v_double_arrow b/home-config/icons/Bibata-Modern-Classic/cursors/v_double_arrow
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/v_double_arrow
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/vertical-text b/home-config/icons/Bibata-Modern-Classic/cursors/vertical-text
new file mode 100644
index 0000000..92e7504
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/vertical-text differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/w-resize b/home-config/icons/Bibata-Modern-Classic/cursors/w-resize
new file mode 120000
index 0000000..1d46245
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/w-resize
@@ -0,0 +1 @@
+left_side
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/wait b/home-config/icons/Bibata-Modern-Classic/cursors/wait
new file mode 100644
index 0000000..02de192
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/wait differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/watch b/home-config/icons/Bibata-Modern-Classic/cursors/watch
new file mode 120000
index 0000000..fd80437
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/watch
@@ -0,0 +1 @@
+wait
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/wayland-cursor b/home-config/icons/Bibata-Modern-Classic/cursors/wayland-cursor
new file mode 100644
index 0000000..300ae31
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/wayland-cursor differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/whats_this b/home-config/icons/Bibata-Modern-Classic/cursors/whats_this
new file mode 120000
index 0000000..cc9a7ed
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/whats_this
@@ -0,0 +1 @@
+question_arrow
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/x-cursor b/home-config/icons/Bibata-Modern-Classic/cursors/x-cursor
new file mode 120000
index 0000000..7b84daf
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/cursors/x-cursor
@@ -0,0 +1 @@
+X_cursor
\ No newline at end of file
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/xterm b/home-config/icons/Bibata-Modern-Classic/cursors/xterm
new file mode 100644
index 0000000..e3a8294
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/xterm differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/zoom-in b/home-config/icons/Bibata-Modern-Classic/cursors/zoom-in
new file mode 100644
index 0000000..0b6e690
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/zoom-in differ
diff --git a/home-config/icons/Bibata-Modern-Classic/cursors/zoom-out b/home-config/icons/Bibata-Modern-Classic/cursors/zoom-out
new file mode 100644
index 0000000..2a70c26
Binary files /dev/null and b/home-config/icons/Bibata-Modern-Classic/cursors/zoom-out differ
diff --git a/home-config/icons/Bibata-Modern-Classic/index.theme b/home-config/icons/Bibata-Modern-Classic/index.theme
new file mode 100644
index 0000000..273de80
--- /dev/null
+++ b/home-config/icons/Bibata-Modern-Classic/index.theme
@@ -0,0 +1,4 @@
+[Icon Theme]
+Name=Bibata-Modern-daed9-v1.0.2-x11
+Comment=Bibata XCursors
+Inherits="hicolor"
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/X_cursor.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/X_cursor.hlc
new file mode 100644
index 0000000..3355c90
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/X_cursor.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/all-scroll.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/all-scroll.hlc
new file mode 100644
index 0000000..3bb70ee
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/all-scroll.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/bottom_left_corner.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/bottom_left_corner.hlc
new file mode 100644
index 0000000..c8b13fe
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/bottom_left_corner.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/bottom_right_corner.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/bottom_right_corner.hlc
new file mode 100644
index 0000000..3b8bc23
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/bottom_right_corner.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/bottom_tee.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/bottom_tee.hlc
new file mode 100644
index 0000000..b307b6e
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/bottom_tee.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/center_ptr.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/center_ptr.hlc
new file mode 100644
index 0000000..73de8c3
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/center_ptr.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/context-menu.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/context-menu.hlc
new file mode 100644
index 0000000..923a6db
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/context-menu.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/copy.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/copy.hlc
new file mode 100644
index 0000000..5731bc4
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/copy.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/cross.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/cross.hlc
new file mode 100644
index 0000000..5cc34ec
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/cross.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/crossed_circle.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/crossed_circle.hlc
new file mode 100644
index 0000000..f1738f8
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/crossed_circle.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/crosshair.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/crosshair.hlc
new file mode 100644
index 0000000..10cadf4
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/crosshair.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/dnd_no_drop.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/dnd_no_drop.hlc
new file mode 100644
index 0000000..64ccb52
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/dnd_no_drop.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/dotbox.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/dotbox.hlc
new file mode 100644
index 0000000..851f973
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/dotbox.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/hand1.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/hand1.hlc
new file mode 100644
index 0000000..3e91144
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/hand1.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/hand2.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/hand2.hlc
new file mode 100644
index 0000000..0fdad7e
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/hand2.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_ptr.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_ptr.hlc
new file mode 100644
index 0000000..40df20e
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_ptr.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_ptr_watch.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_ptr_watch.hlc
new file mode 100644
index 0000000..5c8e84c
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_ptr_watch.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_side.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_side.hlc
new file mode 100644
index 0000000..ae6b90f
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_side.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_tee.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_tee.hlc
new file mode 100644
index 0000000..71183d9
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/left_tee.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/link.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/link.hlc
new file mode 100644
index 0000000..f437d62
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/link.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/ll_angle.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/ll_angle.hlc
new file mode 100644
index 0000000..b474add
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/ll_angle.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/lr_angle.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/lr_angle.hlc
new file mode 100644
index 0000000..b46dc37
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/lr_angle.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/move.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/move.hlc
new file mode 100644
index 0000000..1d3b079
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/move.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/pencil.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/pencil.hlc
new file mode 100644
index 0000000..0de9d7e
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/pencil.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/person.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/person.hlc
new file mode 100644
index 0000000..549bcc0
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/person.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/pin.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/pin.hlc
new file mode 100644
index 0000000..c8c5d4e
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/pin.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/plus.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/plus.hlc
new file mode 100644
index 0000000..53a07d0
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/plus.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/question_arrow.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/question_arrow.hlc
new file mode 100644
index 0000000..bce15b2
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/question_arrow.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/right_ptr.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/right_ptr.hlc
new file mode 100644
index 0000000..9612e51
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/right_ptr.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/right_tee.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/right_tee.hlc
new file mode 100644
index 0000000..d755d23
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/right_tee.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_down_arrow.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_down_arrow.hlc
new file mode 100644
index 0000000..3bd3211
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_down_arrow.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_h_double_arrow.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_h_double_arrow.hlc
new file mode 100644
index 0000000..7c71315
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_h_double_arrow.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_left_arrow.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_left_arrow.hlc
new file mode 100644
index 0000000..f45d1fe
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_left_arrow.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_right_arrow.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_right_arrow.hlc
new file mode 100644
index 0000000..00c2e68
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_right_arrow.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_up_arrow.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_up_arrow.hlc
new file mode 100644
index 0000000..2887b18
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_up_arrow.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_v_double_arrow.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_v_double_arrow.hlc
new file mode 100644
index 0000000..8996c7f
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/sb_v_double_arrow.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/top_side.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/top_side.hlc
new file mode 100644
index 0000000..d28736b
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/top_side.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/top_tee.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/top_tee.hlc
new file mode 100644
index 0000000..33b3550
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/top_tee.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/ul_angle.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/ul_angle.hlc
new file mode 100644
index 0000000..ae3671c
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/ul_angle.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/ur_angle.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/ur_angle.hlc
new file mode 100644
index 0000000..cd2d482
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/ur_angle.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/vertical-text.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/vertical-text.hlc
new file mode 100644
index 0000000..0112d4d
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/vertical-text.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/wait.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/wait.hlc
new file mode 100644
index 0000000..9755835
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/wait.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/wayland-cursor.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/wayland-cursor.hlc
new file mode 100644
index 0000000..ffaf760
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/wayland-cursor.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/xterm.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/xterm.hlc
new file mode 100644
index 0000000..b622531
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/xterm.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/zoom-in.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/zoom-in.hlc
new file mode 100644
index 0000000..9f21bea
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/zoom-in.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/zoom-out.hlc b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/zoom-out.hlc
new file mode 100644
index 0000000..e46df2c
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/hyprcursors/zoom-out.hlc differ
diff --git a/home-config/icons/XCursor-Pro-Dark-Hyprcursor/manifest.hl b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/manifest.hl
new file mode 100644
index 0000000..c93e285
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark-Hyprcursor/manifest.hl
@@ -0,0 +1,4 @@
+name = XCursor-Pro-Dark-Hyprcursor
+description = XCursor-Pro-Dark Hyprcursor version
+version = 1.0
+cursors_directory = hyprcursors
diff --git a/home-config/icons/XCursor-Pro-Dark/cursor.theme b/home-config/icons/XCursor-Pro-Dark/cursor.theme
new file mode 100644
index 0000000..58f1232
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursor.theme
@@ -0,0 +1,3 @@
+[Icon Theme]
+Name=XCursor-Pro-Dark
+Inherits="XCursor-Pro-Dark"
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/00000000000000020006000e7e9ffc3f b/home-config/icons/XCursor-Pro-Dark/cursors/00000000000000020006000e7e9ffc3f
new file mode 120000
index 0000000..b0e6589
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/00000000000000020006000e7e9ffc3f
@@ -0,0 +1 @@
+left_ptr_watch
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/00008160000006810000408080010102 b/home-config/icons/XCursor-Pro-Dark/cursors/00008160000006810000408080010102
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/00008160000006810000408080010102
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/028006030e0e7ebffc7f7070c0600140 b/home-config/icons/XCursor-Pro-Dark/cursors/028006030e0e7ebffc7f7070c0600140
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/028006030e0e7ebffc7f7070c0600140
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/03b6e0fcb3499374a867c041f52298f0 b/home-config/icons/XCursor-Pro-Dark/cursors/03b6e0fcb3499374a867c041f52298f0
new file mode 120000
index 0000000..01c907d
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/03b6e0fcb3499374a867c041f52298f0
@@ -0,0 +1 @@
+crossed_circle
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/08e8e1c95fe2fc01f976f1e063a24ccd b/home-config/icons/XCursor-Pro-Dark/cursors/08e8e1c95fe2fc01f976f1e063a24ccd
new file mode 120000
index 0000000..b0e6589
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/08e8e1c95fe2fc01f976f1e063a24ccd
@@ -0,0 +1 @@
+left_ptr_watch
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/1081e37283d90000800003c07f3ef6bf b/home-config/icons/XCursor-Pro-Dark/cursors/1081e37283d90000800003c07f3ef6bf
new file mode 120000
index 0000000..88740b2
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/1081e37283d90000800003c07f3ef6bf
@@ -0,0 +1 @@
+copy
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/14fef782d02440884392942c1120523 b/home-config/icons/XCursor-Pro-Dark/cursors/14fef782d02440884392942c1120523
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/14fef782d02440884392942c1120523
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/2870a09082c103050810ffdffffe0204 b/home-config/icons/XCursor-Pro-Dark/cursors/2870a09082c103050810ffdffffe0204
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/2870a09082c103050810ffdffffe0204
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/3085a0e285430894940527032f8b26df b/home-config/icons/XCursor-Pro-Dark/cursors/3085a0e285430894940527032f8b26df
new file mode 120000
index 0000000..c150ede
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/3085a0e285430894940527032f8b26df
@@ -0,0 +1 @@
+link
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/3ecb610c1bf2410f44200f48c40d3599 b/home-config/icons/XCursor-Pro-Dark/cursors/3ecb610c1bf2410f44200f48c40d3599
new file mode 120000
index 0000000..b0e6589
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/3ecb610c1bf2410f44200f48c40d3599
@@ -0,0 +1 @@
+left_ptr_watch
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/4498f0e0c1937ffe01fd06f973665830 b/home-config/icons/XCursor-Pro-Dark/cursors/4498f0e0c1937ffe01fd06f973665830
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/4498f0e0c1937ffe01fd06f973665830
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/5c6cd98b3f3ebcb1f9c7f1c204630408 b/home-config/icons/XCursor-Pro-Dark/cursors/5c6cd98b3f3ebcb1f9c7f1c204630408
new file mode 120000
index 0000000..cc9a7ed
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/5c6cd98b3f3ebcb1f9c7f1c204630408
@@ -0,0 +1 @@
+question_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/6407b0e94181790501fd1e167b474872 b/home-config/icons/XCursor-Pro-Dark/cursors/6407b0e94181790501fd1e167b474872
new file mode 120000
index 0000000..88740b2
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/6407b0e94181790501fd1e167b474872
@@ -0,0 +1 @@
+copy
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/640fb0e74195791501fd1ed57b41487f b/home-config/icons/XCursor-Pro-Dark/cursors/640fb0e74195791501fd1ed57b41487f
new file mode 120000
index 0000000..c150ede
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/640fb0e74195791501fd1ed57b41487f
@@ -0,0 +1 @@
+link
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/9081237383d90e509aa00f00170e968f b/home-config/icons/XCursor-Pro-Dark/cursors/9081237383d90e509aa00f00170e968f
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/9081237383d90e509aa00f00170e968f
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/9d800788f1b08800ae810202380a0822 b/home-config/icons/XCursor-Pro-Dark/cursors/9d800788f1b08800ae810202380a0822
new file mode 120000
index 0000000..0b08654
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/9d800788f1b08800ae810202380a0822
@@ -0,0 +1 @@
+hand2
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/X_cursor b/home-config/icons/XCursor-Pro-Dark/cursors/X_cursor
new file mode 100644
index 0000000..d03da67
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/X_cursor differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/a2a266d0498c3104214a47bd64ab0fc8 b/home-config/icons/XCursor-Pro-Dark/cursors/a2a266d0498c3104214a47bd64ab0fc8
new file mode 120000
index 0000000..c150ede
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/a2a266d0498c3104214a47bd64ab0fc8
@@ -0,0 +1 @@
+link
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/alias b/home-config/icons/XCursor-Pro-Dark/cursors/alias
new file mode 120000
index 0000000..c150ede
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/alias
@@ -0,0 +1 @@
+link
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/all-scroll b/home-config/icons/XCursor-Pro-Dark/cursors/all-scroll
new file mode 100644
index 0000000..06ca407
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/all-scroll differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/arrow b/home-config/icons/XCursor-Pro-Dark/cursors/arrow
new file mode 120000
index 0000000..0de4e80
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/arrow
@@ -0,0 +1 @@
+left_ptr
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/b66166c04f8c3109214a4fbd64a50fc8 b/home-config/icons/XCursor-Pro-Dark/cursors/b66166c04f8c3109214a4fbd64a50fc8
new file mode 120000
index 0000000..88740b2
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/b66166c04f8c3109214a4fbd64a50fc8
@@ -0,0 +1 @@
+copy
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/bd_double_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/bd_double_arrow
new file mode 120000
index 0000000..9a02514
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/bd_double_arrow
@@ -0,0 +1 @@
+bottom_right_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/bottom_left_corner b/home-config/icons/XCursor-Pro-Dark/cursors/bottom_left_corner
new file mode 100644
index 0000000..4648a97
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/bottom_left_corner differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/bottom_right_corner b/home-config/icons/XCursor-Pro-Dark/cursors/bottom_right_corner
new file mode 100644
index 0000000..e9943df
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/bottom_right_corner differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/bottom_side b/home-config/icons/XCursor-Pro-Dark/cursors/bottom_side
new file mode 120000
index 0000000..83cc946
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/bottom_side
@@ -0,0 +1 @@
+top_side
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/bottom_tee b/home-config/icons/XCursor-Pro-Dark/cursors/bottom_tee
new file mode 100644
index 0000000..7961422
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/bottom_tee differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/c7088f0f3e6c8088236ef8e1e3e70000 b/home-config/icons/XCursor-Pro-Dark/cursors/c7088f0f3e6c8088236ef8e1e3e70000
new file mode 120000
index 0000000..9a02514
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/c7088f0f3e6c8088236ef8e1e3e70000
@@ -0,0 +1 @@
+bottom_right_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/cell b/home-config/icons/XCursor-Pro-Dark/cursors/cell
new file mode 120000
index 0000000..b070a6a
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/cell
@@ -0,0 +1 @@
+plus
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/center_ptr b/home-config/icons/XCursor-Pro-Dark/cursors/center_ptr
new file mode 100644
index 0000000..508fd98
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/center_ptr differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/circle b/home-config/icons/XCursor-Pro-Dark/cursors/circle
new file mode 120000
index 0000000..01c907d
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/circle
@@ -0,0 +1 @@
+crossed_circle
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/closedhand b/home-config/icons/XCursor-Pro-Dark/cursors/closedhand
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/closedhand
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/col-resize b/home-config/icons/XCursor-Pro-Dark/cursors/col-resize
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/col-resize
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/color-picker b/home-config/icons/XCursor-Pro-Dark/cursors/color-picker
new file mode 120000
index 0000000..982ae30
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/color-picker
@@ -0,0 +1 @@
+cross
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/context-menu b/home-config/icons/XCursor-Pro-Dark/cursors/context-menu
new file mode 100644
index 0000000..6847f6a
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/context-menu differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/copy b/home-config/icons/XCursor-Pro-Dark/cursors/copy
new file mode 100644
index 0000000..bb96b92
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/copy differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/cross b/home-config/icons/XCursor-Pro-Dark/cursors/cross
new file mode 100644
index 0000000..480957b
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/cross differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/cross_reverse b/home-config/icons/XCursor-Pro-Dark/cursors/cross_reverse
new file mode 120000
index 0000000..982ae30
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/cross_reverse
@@ -0,0 +1 @@
+cross
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/crossed_circle b/home-config/icons/XCursor-Pro-Dark/cursors/crossed_circle
new file mode 100644
index 0000000..672c57d
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/crossed_circle differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/crosshair b/home-config/icons/XCursor-Pro-Dark/cursors/crosshair
new file mode 100644
index 0000000..1047ae2
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/crosshair differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/d9ce0ab605698f320427677b458ad60b b/home-config/icons/XCursor-Pro-Dark/cursors/d9ce0ab605698f320427677b458ad60b
new file mode 120000
index 0000000..cc9a7ed
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/d9ce0ab605698f320427677b458ad60b
@@ -0,0 +1 @@
+question_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/default b/home-config/icons/XCursor-Pro-Dark/cursors/default
new file mode 120000
index 0000000..0de4e80
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/default
@@ -0,0 +1 @@
+left_ptr
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/diamond_cross b/home-config/icons/XCursor-Pro-Dark/cursors/diamond_cross
new file mode 120000
index 0000000..982ae30
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/diamond_cross
@@ -0,0 +1 @@
+cross
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/dnd-ask b/home-config/icons/XCursor-Pro-Dark/cursors/dnd-ask
new file mode 120000
index 0000000..cc9a7ed
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/dnd-ask
@@ -0,0 +1 @@
+question_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/dnd-copy b/home-config/icons/XCursor-Pro-Dark/cursors/dnd-copy
new file mode 120000
index 0000000..88740b2
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/dnd-copy
@@ -0,0 +1 @@
+copy
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/dnd-link b/home-config/icons/XCursor-Pro-Dark/cursors/dnd-link
new file mode 120000
index 0000000..c150ede
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/dnd-link
@@ -0,0 +1 @@
+link
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/dnd-move b/home-config/icons/XCursor-Pro-Dark/cursors/dnd-move
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/dnd-move
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/dnd-none b/home-config/icons/XCursor-Pro-Dark/cursors/dnd-none
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/dnd-none
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/dnd_no_drop b/home-config/icons/XCursor-Pro-Dark/cursors/dnd_no_drop
new file mode 100644
index 0000000..89c250e
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/dnd_no_drop differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/dot_box_mask b/home-config/icons/XCursor-Pro-Dark/cursors/dot_box_mask
new file mode 120000
index 0000000..def8590
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/dot_box_mask
@@ -0,0 +1 @@
+dotbox
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/dotbox b/home-config/icons/XCursor-Pro-Dark/cursors/dotbox
new file mode 100644
index 0000000..c319ed7
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/dotbox differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/double_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/double_arrow
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/double_arrow
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/down-arrow b/home-config/icons/XCursor-Pro-Dark/cursors/down-arrow
new file mode 120000
index 0000000..022a111
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/down-arrow
@@ -0,0 +1 @@
+sb_down_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/draft b/home-config/icons/XCursor-Pro-Dark/cursors/draft
new file mode 120000
index 0000000..644fb7b
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/draft
@@ -0,0 +1 @@
+pencil
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/draft_large b/home-config/icons/XCursor-Pro-Dark/cursors/draft_large
new file mode 120000
index 0000000..cb9c1b4
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/draft_large
@@ -0,0 +1 @@
+right_ptr
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/draft_small b/home-config/icons/XCursor-Pro-Dark/cursors/draft_small
new file mode 120000
index 0000000..cb9c1b4
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/draft_small
@@ -0,0 +1 @@
+right_ptr
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/draped_box b/home-config/icons/XCursor-Pro-Dark/cursors/draped_box
new file mode 120000
index 0000000..def8590
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/draped_box
@@ -0,0 +1 @@
+dotbox
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/e-resize b/home-config/icons/XCursor-Pro-Dark/cursors/e-resize
new file mode 120000
index 0000000..1d46245
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/e-resize
@@ -0,0 +1 @@
+left_side
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/e29285e634086352946a0e7090d73106 b/home-config/icons/XCursor-Pro-Dark/cursors/e29285e634086352946a0e7090d73106
new file mode 120000
index 0000000..0b08654
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/e29285e634086352946a0e7090d73106
@@ -0,0 +1 @@
+hand2
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/ew-resize b/home-config/icons/XCursor-Pro-Dark/cursors/ew-resize
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/ew-resize
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/fcf1c3c7cd4491d801f1e1c78f100000 b/home-config/icons/XCursor-Pro-Dark/cursors/fcf1c3c7cd4491d801f1e1c78f100000
new file mode 120000
index 0000000..aab13ad
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/fcf1c3c7cd4491d801f1e1c78f100000
@@ -0,0 +1 @@
+bottom_left_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/fcf21c00b30f7e3f83fe0dfd12e71cff b/home-config/icons/XCursor-Pro-Dark/cursors/fcf21c00b30f7e3f83fe0dfd12e71cff
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/fcf21c00b30f7e3f83fe0dfd12e71cff
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/fd_double_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/fd_double_arrow
new file mode 120000
index 0000000..aab13ad
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/fd_double_arrow
@@ -0,0 +1 @@
+bottom_left_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/fleur b/home-config/icons/XCursor-Pro-Dark/cursors/fleur
new file mode 120000
index 0000000..1bb4610
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/fleur
@@ -0,0 +1 @@
+all-scroll
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/forbidden b/home-config/icons/XCursor-Pro-Dark/cursors/forbidden
new file mode 120000
index 0000000..01c907d
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/forbidden
@@ -0,0 +1 @@
+crossed_circle
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/grab b/home-config/icons/XCursor-Pro-Dark/cursors/grab
new file mode 120000
index 0000000..1a38f92
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/grab
@@ -0,0 +1 @@
+hand1
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/grabbing b/home-config/icons/XCursor-Pro-Dark/cursors/grabbing
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/grabbing
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/h_double_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/h_double_arrow
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/h_double_arrow
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/hand1 b/home-config/icons/XCursor-Pro-Dark/cursors/hand1
new file mode 100644
index 0000000..66ce6bb
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/hand1 differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/hand2 b/home-config/icons/XCursor-Pro-Dark/cursors/hand2
new file mode 100644
index 0000000..35b1098
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/hand2 differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/help b/home-config/icons/XCursor-Pro-Dark/cursors/help
new file mode 120000
index 0000000..cc9a7ed
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/help
@@ -0,0 +1 @@
+question_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/ibeam b/home-config/icons/XCursor-Pro-Dark/cursors/ibeam
new file mode 120000
index 0000000..18632c4
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/ibeam
@@ -0,0 +1 @@
+xterm
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/icon b/home-config/icons/XCursor-Pro-Dark/cursors/icon
new file mode 120000
index 0000000..def8590
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/icon
@@ -0,0 +1 @@
+dotbox
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/left-arrow b/home-config/icons/XCursor-Pro-Dark/cursors/left-arrow
new file mode 120000
index 0000000..f473dff
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/left-arrow
@@ -0,0 +1 @@
+sb_left_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/left_ptr b/home-config/icons/XCursor-Pro-Dark/cursors/left_ptr
new file mode 100644
index 0000000..b5ab7e4
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/left_ptr differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/left_ptr_help b/home-config/icons/XCursor-Pro-Dark/cursors/left_ptr_help
new file mode 120000
index 0000000..cc9a7ed
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/left_ptr_help
@@ -0,0 +1 @@
+question_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/left_ptr_watch b/home-config/icons/XCursor-Pro-Dark/cursors/left_ptr_watch
new file mode 100644
index 0000000..cf6c2c4
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/left_ptr_watch differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/left_side b/home-config/icons/XCursor-Pro-Dark/cursors/left_side
new file mode 100644
index 0000000..dd4c7c8
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/left_side differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/left_tee b/home-config/icons/XCursor-Pro-Dark/cursors/left_tee
new file mode 100644
index 0000000..e0dc39d
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/left_tee differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/link b/home-config/icons/XCursor-Pro-Dark/cursors/link
new file mode 100644
index 0000000..eb46ba6
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/link differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/ll_angle b/home-config/icons/XCursor-Pro-Dark/cursors/ll_angle
new file mode 100644
index 0000000..5519737
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/ll_angle differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/lr_angle b/home-config/icons/XCursor-Pro-Dark/cursors/lr_angle
new file mode 100644
index 0000000..9aaf612
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/lr_angle differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/move b/home-config/icons/XCursor-Pro-Dark/cursors/move
new file mode 100644
index 0000000..1b61c72
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/move differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/n-resize b/home-config/icons/XCursor-Pro-Dark/cursors/n-resize
new file mode 120000
index 0000000..83cc946
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/n-resize
@@ -0,0 +1 @@
+top_side
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/ne-resize b/home-config/icons/XCursor-Pro-Dark/cursors/ne-resize
new file mode 120000
index 0000000..aab13ad
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/ne-resize
@@ -0,0 +1 @@
+bottom_left_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/nesw-resize b/home-config/icons/XCursor-Pro-Dark/cursors/nesw-resize
new file mode 120000
index 0000000..aab13ad
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/nesw-resize
@@ -0,0 +1 @@
+bottom_left_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/no-drop b/home-config/icons/XCursor-Pro-Dark/cursors/no-drop
new file mode 120000
index 0000000..1f6c0fd
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/no-drop
@@ -0,0 +1 @@
+dnd_no_drop
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/not-allowed b/home-config/icons/XCursor-Pro-Dark/cursors/not-allowed
new file mode 120000
index 0000000..01c907d
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/not-allowed
@@ -0,0 +1 @@
+crossed_circle
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/ns-resize b/home-config/icons/XCursor-Pro-Dark/cursors/ns-resize
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/ns-resize
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/nw-resize b/home-config/icons/XCursor-Pro-Dark/cursors/nw-resize
new file mode 120000
index 0000000..9a02514
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/nw-resize
@@ -0,0 +1 @@
+bottom_right_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/nwse-resize b/home-config/icons/XCursor-Pro-Dark/cursors/nwse-resize
new file mode 120000
index 0000000..9a02514
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/nwse-resize
@@ -0,0 +1 @@
+bottom_right_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/openhand b/home-config/icons/XCursor-Pro-Dark/cursors/openhand
new file mode 120000
index 0000000..1a38f92
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/openhand
@@ -0,0 +1 @@
+hand1
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/pencil b/home-config/icons/XCursor-Pro-Dark/cursors/pencil
new file mode 100644
index 0000000..156bf9b
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/pencil differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/pirate b/home-config/icons/XCursor-Pro-Dark/cursors/pirate
new file mode 120000
index 0000000..7b84daf
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/pirate
@@ -0,0 +1 @@
+X_cursor
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/plus b/home-config/icons/XCursor-Pro-Dark/cursors/plus
new file mode 100644
index 0000000..37e10dd
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/plus differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/pointer b/home-config/icons/XCursor-Pro-Dark/cursors/pointer
new file mode 120000
index 0000000..0b08654
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/pointer
@@ -0,0 +1 @@
+hand2
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/pointer_move b/home-config/icons/XCursor-Pro-Dark/cursors/pointer_move
new file mode 120000
index 0000000..d6a0af6
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/pointer_move
@@ -0,0 +1 @@
+move
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/pointing_hand b/home-config/icons/XCursor-Pro-Dark/cursors/pointing_hand
new file mode 120000
index 0000000..0b08654
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/pointing_hand
@@ -0,0 +1 @@
+hand2
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/progress b/home-config/icons/XCursor-Pro-Dark/cursors/progress
new file mode 120000
index 0000000..b0e6589
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/progress
@@ -0,0 +1 @@
+left_ptr_watch
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/question_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/question_arrow
new file mode 100644
index 0000000..90b8695
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/question_arrow differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/right-arrow b/home-config/icons/XCursor-Pro-Dark/cursors/right-arrow
new file mode 120000
index 0000000..feb3132
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/right-arrow
@@ -0,0 +1 @@
+sb_right_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/right_ptr b/home-config/icons/XCursor-Pro-Dark/cursors/right_ptr
new file mode 100644
index 0000000..5472b2a
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/right_ptr differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/right_side b/home-config/icons/XCursor-Pro-Dark/cursors/right_side
new file mode 120000
index 0000000..1d46245
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/right_side
@@ -0,0 +1 @@
+left_side
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/right_tee b/home-config/icons/XCursor-Pro-Dark/cursors/right_tee
new file mode 100644
index 0000000..44210e8
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/right_tee differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/row-resize b/home-config/icons/XCursor-Pro-Dark/cursors/row-resize
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/row-resize
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/s-resize b/home-config/icons/XCursor-Pro-Dark/cursors/s-resize
new file mode 120000
index 0000000..83cc946
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/s-resize
@@ -0,0 +1 @@
+top_side
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/sb_down_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/sb_down_arrow
new file mode 100644
index 0000000..e6c0d70
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/sb_down_arrow differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/sb_h_double_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/sb_h_double_arrow
new file mode 100644
index 0000000..a6b4c9b
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/sb_h_double_arrow differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/sb_left_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/sb_left_arrow
new file mode 100644
index 0000000..9797dee
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/sb_left_arrow differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/sb_right_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/sb_right_arrow
new file mode 100644
index 0000000..b7e1db3
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/sb_right_arrow differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/sb_up_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/sb_up_arrow
new file mode 100644
index 0000000..6df8cfb
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/sb_up_arrow differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/sb_v_double_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/sb_v_double_arrow
new file mode 100644
index 0000000..79f4d63
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/sb_v_double_arrow differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/se-resize b/home-config/icons/XCursor-Pro-Dark/cursors/se-resize
new file mode 120000
index 0000000..9a02514
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/se-resize
@@ -0,0 +1 @@
+bottom_right_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/size-hor b/home-config/icons/XCursor-Pro-Dark/cursors/size-hor
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/size-hor
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/size-ver b/home-config/icons/XCursor-Pro-Dark/cursors/size-ver
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/size-ver
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/size_all b/home-config/icons/XCursor-Pro-Dark/cursors/size_all
new file mode 120000
index 0000000..1bb4610
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/size_all
@@ -0,0 +1 @@
+all-scroll
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/size_bdiag b/home-config/icons/XCursor-Pro-Dark/cursors/size_bdiag
new file mode 120000
index 0000000..aab13ad
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/size_bdiag
@@ -0,0 +1 @@
+bottom_left_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/size_fdiag b/home-config/icons/XCursor-Pro-Dark/cursors/size_fdiag
new file mode 120000
index 0000000..9a02514
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/size_fdiag
@@ -0,0 +1 @@
+bottom_right_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/size_hor b/home-config/icons/XCursor-Pro-Dark/cursors/size_hor
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/size_hor
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/size_ver b/home-config/icons/XCursor-Pro-Dark/cursors/size_ver
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/size_ver
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/split_h b/home-config/icons/XCursor-Pro-Dark/cursors/split_h
new file mode 120000
index 0000000..baba492
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/split_h
@@ -0,0 +1 @@
+sb_h_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/split_v b/home-config/icons/XCursor-Pro-Dark/cursors/split_v
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/split_v
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/sw-resize b/home-config/icons/XCursor-Pro-Dark/cursors/sw-resize
new file mode 120000
index 0000000..aab13ad
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/sw-resize
@@ -0,0 +1 @@
+bottom_left_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/target b/home-config/icons/XCursor-Pro-Dark/cursors/target
new file mode 120000
index 0000000..def8590
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/target
@@ -0,0 +1 @@
+dotbox
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/tcross b/home-config/icons/XCursor-Pro-Dark/cursors/tcross
new file mode 120000
index 0000000..982ae30
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/tcross
@@ -0,0 +1 @@
+cross
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/text b/home-config/icons/XCursor-Pro-Dark/cursors/text
new file mode 120000
index 0000000..18632c4
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/text
@@ -0,0 +1 @@
+xterm
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/top_left_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/top_left_arrow
new file mode 120000
index 0000000..0de4e80
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/top_left_arrow
@@ -0,0 +1 @@
+left_ptr
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/top_left_corner b/home-config/icons/XCursor-Pro-Dark/cursors/top_left_corner
new file mode 120000
index 0000000..9a02514
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/top_left_corner
@@ -0,0 +1 @@
+bottom_right_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/top_right_corner b/home-config/icons/XCursor-Pro-Dark/cursors/top_right_corner
new file mode 120000
index 0000000..aab13ad
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/top_right_corner
@@ -0,0 +1 @@
+bottom_left_corner
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/top_side b/home-config/icons/XCursor-Pro-Dark/cursors/top_side
new file mode 100644
index 0000000..982714a
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/top_side differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/top_tee b/home-config/icons/XCursor-Pro-Dark/cursors/top_tee
new file mode 100644
index 0000000..0d7994d
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/top_tee differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/ul_angle b/home-config/icons/XCursor-Pro-Dark/cursors/ul_angle
new file mode 100644
index 0000000..966f84d
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/ul_angle differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/up-arrow b/home-config/icons/XCursor-Pro-Dark/cursors/up-arrow
new file mode 120000
index 0000000..258ca58
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/up-arrow
@@ -0,0 +1 @@
+sb_up_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/ur_angle b/home-config/icons/XCursor-Pro-Dark/cursors/ur_angle
new file mode 100644
index 0000000..e91e3be
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/ur_angle differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/v_double_arrow b/home-config/icons/XCursor-Pro-Dark/cursors/v_double_arrow
new file mode 120000
index 0000000..a3693c3
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/v_double_arrow
@@ -0,0 +1 @@
+sb_v_double_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/vertical-text b/home-config/icons/XCursor-Pro-Dark/cursors/vertical-text
new file mode 100644
index 0000000..f1f7e29
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/vertical-text differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/w-resize b/home-config/icons/XCursor-Pro-Dark/cursors/w-resize
new file mode 120000
index 0000000..1d46245
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/w-resize
@@ -0,0 +1 @@
+left_side
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/wait b/home-config/icons/XCursor-Pro-Dark/cursors/wait
new file mode 100644
index 0000000..906d0db
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/wait differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/watch b/home-config/icons/XCursor-Pro-Dark/cursors/watch
new file mode 120000
index 0000000..fd80437
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/watch
@@ -0,0 +1 @@
+wait
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/wayland-cursor b/home-config/icons/XCursor-Pro-Dark/cursors/wayland-cursor
new file mode 100644
index 0000000..1bfca2b
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/wayland-cursor differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/whats_this b/home-config/icons/XCursor-Pro-Dark/cursors/whats_this
new file mode 120000
index 0000000..cc9a7ed
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/whats_this
@@ -0,0 +1 @@
+question_arrow
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/x-cursor b/home-config/icons/XCursor-Pro-Dark/cursors/x-cursor
new file mode 120000
index 0000000..7b84daf
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/cursors/x-cursor
@@ -0,0 +1 @@
+X_cursor
\ No newline at end of file
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/xterm b/home-config/icons/XCursor-Pro-Dark/cursors/xterm
new file mode 100644
index 0000000..3dae5ad
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/xterm differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/zoom-in b/home-config/icons/XCursor-Pro-Dark/cursors/zoom-in
new file mode 100644
index 0000000..4d8fe5c
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/zoom-in differ
diff --git a/home-config/icons/XCursor-Pro-Dark/cursors/zoom-out b/home-config/icons/XCursor-Pro-Dark/cursors/zoom-out
new file mode 100644
index 0000000..bd41a87
Binary files /dev/null and b/home-config/icons/XCursor-Pro-Dark/cursors/zoom-out differ
diff --git a/home-config/icons/XCursor-Pro-Dark/index.theme b/home-config/icons/XCursor-Pro-Dark/index.theme
new file mode 100644
index 0000000..1313c19
--- /dev/null
+++ b/home-config/icons/XCursor-Pro-Dark/index.theme
@@ -0,0 +1,4 @@
+[Icon Theme]
+Name=XCursor-Pro-Dark
+Comment=Modern, Proffesional Dark (v2.0.2) XCursors
+Inherits="hicolor"
\ No newline at end of file
diff --git a/home-config/nix-channels b/home-config/nix-channels
deleted file mode 100644
index 0df3852..0000000
--- a/home-config/nix-channels
+++ /dev/null
@@ -1,2 +0,0 @@
-https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
-https://nixos.org/channels/nixpkgs-unstable nixpkgs
diff --git a/home-config/nix-config/nix.conf b/home-config/nix-config/nix.conf
deleted file mode 100644
index c7d7291..0000000
--- a/home-config/nix-config/nix.conf
+++ /dev/null
@@ -1 +0,0 @@
-experimental-features = nix-command flakes
diff --git a/home-config/nix-files b/home-config/nix-files
new file mode 160000
index 0000000..2e30121
--- /dev/null
+++ b/home-config/nix-files
@@ -0,0 +1 @@
+Subproject commit 2e30121671a730a2b4bc2f82d2e30ed5c9ff70e5
diff --git a/home-config/nix-home-manager/flake.lock b/home-config/nix-home-manager/flake.lock
deleted file mode 100644
index 0356e26..0000000
--- a/home-config/nix-home-manager/flake.lock
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "nodes": {
- "home-manager": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1708031129,
- "narHash": "sha256-EH20hJfNnc1/ODdDVat9B7aKm0B95L3YtkIRwKLvQG8=",
- "owner": "nix-community",
- "repo": "home-manager",
- "rev": "3d6791b3897b526c82920a2ab5f61d71985b3cf8",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "home-manager",
- "type": "github"
- }
- },
- "hyprpicker-git": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1703987863,
- "narHash": "sha256-MHhAk74uk0qHVwSkLCcXLXMe4478M2oZEFPXwjSoo2E=",
- "owner": "hyprwm",
- "repo": "hyprpicker",
- "rev": "2ef703474fb96e97e03e66e8820f213359f29382",
- "type": "github"
- },
- "original": {
- "owner": "hyprwm",
- "repo": "hyprpicker",
- "type": "github"
- }
- },
- "nixpkgs": {
- "locked": {
- "lastModified": 1707956935,
- "narHash": "sha256-ZL2TrjVsiFNKOYwYQozpbvQSwvtV/3Me7Zwhmdsfyu4=",
- "owner": "nixos",
- "repo": "nixpkgs",
- "rev": "a4d4fe8c5002202493e87ec8dbc91335ff55552c",
- "type": "github"
- },
- "original": {
- "owner": "nixos",
- "ref": "nixos-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "root": {
- "inputs": {
- "home-manager": "home-manager",
- "hyprpicker-git": "hyprpicker-git",
- "nixpkgs": "nixpkgs"
- }
- }
- },
- "root": "root",
- "version": 7
-}
diff --git a/home-config/nix-home-manager/flake.nix b/home-config/nix-home-manager/flake.nix
deleted file mode 100644
index 8e1b937..0000000
--- a/home-config/nix-home-manager/flake.nix
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- description = "Home Manager configuration of ryan";
-
- inputs = {
- # Specify the source of Home Manager and Nixpkgs.
- nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
- home-manager = {
- url = "github:nix-community/home-manager";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- hyprpicker-git = {
- url = "github:hyprwm/hyprpicker";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- };
-
- outputs = { nixpkgs, home-manager, hyprpicker-git, ... }:
- let
- system = "x86_64-linux";
- pkgs = nixpkgs.legacyPackages.${system};
- overlays = [
- hyprpicker-git.overlays.default
- ];
- in {
- homeConfigurations."ryan" = home-manager.lib.homeManagerConfiguration {
- inherit pkgs;
-
- # Specify your home configuration modules here, for example,
- # the path to your home.nix.
- modules = [
- ./home.nix
- {nixpkgs.overlays = overlays;}
- ];
-
- # Optionally use extraSpecialArgs
- # to pass through arguments to home.nix
- };
- };
-}
diff --git a/home-config/nix-home-manager/home.nix b/home-config/nix-home-manager/home.nix
deleted file mode 100644
index 9dcdc28..0000000
--- a/home-config/nix-home-manager/home.nix
+++ /dev/null
@@ -1,91 +0,0 @@
-{ config, pkgs, ... }:
-
-{
- # Home Manager needs a bit of information about you and the paths it should
- # manage.
- home.username = "ryan";
- home.homeDirectory = "/home/ryan";
-
- # This value determines the Home Manager release that your configuration is
- # compatible with. This helps avoid breakage when a new Home Manager release
- # introduces backwards incompatible changes.
- #
- # You should not change this value, even if you update Home Manager. If you do
- # want to update the value, then make sure to first check the Home Manager
- # release notes.
- home.stateVersion = "23.11"; # Please read the comment before changing.
-
- # This value will set some environment variables to allow home-manager to
- # function better outside of NixOS
- nixpkgs.config.allowUnfree = true;
- #targets.genericLinux.enable = true;
- fonts.fontconfig.enable = true;
-
- # The home.packages option allows you to install Nix packages into your
- # environment.
- home.packages = with pkgs; [
- # # Adds the 'hello' command to your environment. It prints a friendly
- # # "Hello, world!" when run.
- # pkgs.hello
- yt-dlp
- #pass
- rustup
- zoxide
- nodePackages.pnpm
- gcc
- pkg-config
- wttrbar
- swww
- wl-clip-persist
- gifski
- waypaper
- gdu
- spotify-player
- hyprpicker
-
- # # It is sometimes useful to fine-tune packages, for example, by applying
- # # overrides. You can do that directly here, just don't forget the
- # # parentheses. Maybe you want to install Nerd Fonts with a limited number of
- # # fonts?
- # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
-
- # # You can also create simple shell scripts directly inside your
- # # configuration. For example, this adds a command 'my-hello' to your
- # # environment:
- # (pkgs.writeShellScriptBin "my-hello" ''
- # echo "Hello, ${config.home.username}!"
- # '')
- ];
-
- # Home Manager is pretty good at managing dotfiles. The primary way to manage
- # plain files is through 'home.file'.
- home.file = {
- # # Building this configuration will create a copy of 'dotfiles/screenrc' in
- # # the Nix store. Activating the configuration will then make '~/.screenrc' a
- # # symlink to the Nix store copy.
- # ".screenrc".source = dotfiles/screenrc;
-
- # # You can also set the file content immediately.
- # ".gradle/gradle.properties".text = ''
- # org.gradle.console=verbose
- # org.gradle.daemon.idletimeout=3600000
- # '';
- };
-
- # You can also manage environment variables but you will have to manually
- # source
- #
- # ~/.nix-profile/etc/profile.d/hm-session-vars.sh
- #
- # or
- #
- # /etc/profiles/per-user/ryan/etc/profile.d/hm-session-vars.sh
- #
- # if you don't want to manage your shell through Home Manager.
- home.sessionVariables = {
- # EDITOR = "emacs";
- };
-
- # Let Home Manager install and manage itself.
- programs.home-manager.enable = true;
-}
diff --git a/home-config/nvim/config/after/ftplugin/mail/custom.vim b/home-config/nvim/config/after/ftplugin/mail/custom.vim
deleted file mode 100644
index 75078e5..0000000
--- a/home-config/nvim/config/after/ftplugin/mail/custom.vim
+++ /dev/null
@@ -1,2 +0,0 @@
-setlocal tw=0 wm=0
-setlocal wrap linebreak
diff --git a/home-config/nvim/config/after/ftplugin/markdown/custom.vim b/home-config/nvim/config/after/ftplugin/markdown/custom.vim
deleted file mode 100644
index 96aac6e..0000000
--- a/home-config/nvim/config/after/ftplugin/markdown/custom.vim
+++ /dev/null
@@ -1,2 +0,0 @@
-"Used to overwrite table behavior in markdown files
-let b:table_mode_corner='+'
diff --git a/home-config/nvim/config/init.vim b/home-config/nvim/config/init.vim
deleted file mode 100644
index 6d6fa15..0000000
--- a/home-config/nvim/config/init.vim
+++ /dev/null
@@ -1,101 +0,0 @@
-set nu rnu
-imap kj <Esc>
-set ts=4
-set sw=4
-set sts=4
-set et
-set mouse=
-set cursorline
-set cc=79
-
-call plug#begin(stdpath('data') . '/plugged')
-"Plug 'prabirshrestha/vim-lsp'
-"Plug 'mattn/vim-lsp-settings'
-"Plug 'prabirshrestha/asyncomplete.vim'
-"Plug 'prabirshrestha/asyncomplete-lsp.vim'
-"Plug 'Yggdroot/indentLine'
-Plug 'nvim-treesitter/nvim-treesitter', {'do':':TSUpdate'}
-Plug 'vim-pandoc/vim-pandoc'
-Plug 'vim-pandoc/vim-pandoc-syntax'
-Plug 'dhruvasagar/vim-table-mode'
-Plug 'skywind3000/asyncrun.vim'
-Plug 'folke/tokyonight.nvim', {'branch':'main'}
-Plug 'nvim-lualine/lualine.nvim'
-Plug 'nvim-tree/nvim-web-devicons'
-Plug 'ms-jpq/coq_nvim', {'branch':'coq'}
-Plug 'ms-jpq/coq.artifacts', {'branch':'artifacts'}
-Plug 'williamboman/mason.nvim'
-Plug 'williamboman/mason-lspconfig.nvim'
-Plug 'neovim/nvim-lspconfig'
-Plug 'nvim-orgmode/orgmode'
-Plug 'ggandor/leap.nvim'
-Plug 'xiyaowong/transparent.nvim'
-call plug#end()
-
-"Load Theme
-colorscheme tokyonight-night
-
-"Load COQ Autocomplete
-let g:coq_settings = {'auto_start':'shut-up'}
-
-"Load LuaLine, COQ, and nvim-orgmode
-lua << END
-require('lualine').setup()
-require('coq')
-require("transparent")
-require('orgmode').setup_ts_grammar()
-require("mason").setup()
-require("mason-lspconfig").setup {
- ensure_installed = { "pyright" },
-}
-
-require('leap').add_default_mappings()
-
-require("mason-lspconfig").setup_handlers {
- function (server_name)
- require("lspconfig")[server_name].setup {}
- end,
-}
-
-require('nvim-treesitter.configs').setup {
- highlight = {
- enable = true,
- additional_vim_regex_highlighting = {'org'},
- },
- ensure_installed = {'org', 'vim', 'python'},
-}
-
-require('orgmode').setup({
- org_agenda_files = {'~/Sync/org/**/*'},
- org_default_notes_file = '~/Sync/org/refile.org',
- org_blank_before_new_entry = {
- heading = false,
- plain_list_item = false,
- },
-})
-
-vim.opt.conceallevel = 2
-vim.opt.concealcursor = nc
-
---local lspconfig = require('lspconfig')
-END
-
-"asynccomplete Auto Complete Config
-"inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
-"inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
-"inoremap <expr> <cr> pumvisible() ? asyncomplete#close_popup() : "\<cr>"
-
-"vim-pandoc config
-let g:pandoc#modules#disabled = ['spell', 'folding']
-
-"vim-table-mode config
-let g:table_mode_corner_corner='+'
-let g:table_mode_header_fillchar='='
-
-"pandoc render and open preview
-command Pv AsyncRun zathura '%:r.pdf'
-command Rd silent exec "!pandoc -t pdf -o %:r.pdf --from=markdown+escaped_line_breaks -V geometry:margin=1in %"
-command Rr exec "!pandoc -t pdf -o %:r.pdf --from=markdown+escaped_line_breaks -V geometry:margin=1in %"
-
-"Auto-rerender markdown files to pdf
-autocmd BufWritePost *.mkd :Rd
diff --git a/home-config/nvim/plugin-manager/plug.vim b/home-config/nvim/plugin-manager/plug.vim
deleted file mode 100644
index 9c3011f..0000000
--- a/home-config/nvim/plugin-manager/plug.vim
+++ /dev/null
@@ -1,2812 +0,0 @@
-" vim-plug: Vim plugin manager
-" ============================
-"
-" Download plug.vim and put it in ~/.vim/autoload
-"
-" curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
-" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
-"
-" Edit your .vimrc
-"
-" call plug#begin('~/.vim/plugged')
-"
-" " Make sure you use single quotes
-"
-" " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
-" Plug 'junegunn/vim-easy-align'
-"
-" " Any valid git URL is allowed
-" Plug 'https://github.com/junegunn/vim-github-dashboard.git'
-"
-" " Multiple Plug commands can be written in a single line using | separators
-" Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
-"
-" " On-demand loading
-" Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' }
-" Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
-"
-" " Using a non-default branch
-" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
-"
-" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
-" Plug 'fatih/vim-go', { 'tag': '*' }
-"
-" " Plugin options
-" Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }
-"
-" " Plugin outside ~/.vim/plugged with post-update hook
-" Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
-"
-" " Unmanaged plugin (manually installed and updated)
-" Plug '~/my-prototype-plugin'
-"
-" " Initialize plugin system
-" call plug#end()
-"
-" Then reload .vimrc and :PlugInstall to install plugins.
-"
-" Plug options:
-"
-"| Option | Description |
-"| ----------------------- | ------------------------------------------------ |
-"| `branch`/`tag`/`commit` | Branch/tag/commit of the repository to use |
-"| `rtp` | Subdirectory that contains Vim plugin |
-"| `dir` | Custom directory for the plugin |
-"| `as` | Use different name for the plugin |
-"| `do` | Post-update hook (string or funcref) |
-"| `on` | On-demand loading: Commands or `<Plug>`-mappings |
-"| `for` | On-demand loading: File types |
-"| `frozen` | Do not update unless explicitly specified |
-"
-" More information: https://github.com/junegunn/vim-plug
-"
-"
-" Copyright (c) 2017 Junegunn Choi
-"
-" MIT License
-"
-" Permission is hereby granted, free of charge, to any person obtaining
-" a copy of this software and associated documentation files (the
-" "Software"), to deal in the Software without restriction, including
-" without limitation the rights to use, copy, modify, merge, publish,
-" distribute, sublicense, and/or sell copies of the Software, and to
-" permit persons to whom the Software is furnished to do so, subject to
-" the following conditions:
-"
-" The above copyright notice and this permission notice shall be
-" included in all copies or substantial portions of the Software.
-"
-" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-if exists('g:loaded_plug')
- finish
-endif
-let g:loaded_plug = 1
-
-let s:cpo_save = &cpo
-set cpo&vim
-
-let s:plug_src = 'https://github.com/junegunn/vim-plug.git'
-let s:plug_tab = get(s:, 'plug_tab', -1)
-let s:plug_buf = get(s:, 'plug_buf', -1)
-let s:mac_gui = has('gui_macvim') && has('gui_running')
-let s:is_win = has('win32')
-let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win)
-let s:vim8 = has('patch-8.0.0039') && exists('*job_start')
-if s:is_win && &shellslash
- set noshellslash
- let s:me = resolve(expand('<sfile>:p'))
- set shellslash
-else
- let s:me = resolve(expand('<sfile>:p'))
-endif
-let s:base_spec = { 'branch': '', 'frozen': 0 }
-let s:TYPE = {
-\ 'string': type(''),
-\ 'list': type([]),
-\ 'dict': type({}),
-\ 'funcref': type(function('call'))
-\ }
-let s:loaded = get(s:, 'loaded', {})
-let s:triggers = get(s:, 'triggers', {})
-
-function! s:is_powershell(shell)
- return a:shell =~# 'powershell\(\.exe\)\?$' || a:shell =~# 'pwsh\(\.exe\)\?$'
-endfunction
-
-function! s:isabsolute(dir) abort
- return a:dir =~# '^/' || (has('win32') && a:dir =~? '^\%(\\\|[A-Z]:\)')
-endfunction
-
-function! s:git_dir(dir) abort
- let gitdir = s:trim(a:dir) . '/.git'
- if isdirectory(gitdir)
- return gitdir
- endif
- if !filereadable(gitdir)
- return ''
- endif
- let gitdir = matchstr(get(readfile(gitdir), 0, ''), '^gitdir: \zs.*')
- if len(gitdir) && !s:isabsolute(gitdir)
- let gitdir = a:dir . '/' . gitdir
- endif
- return isdirectory(gitdir) ? gitdir : ''
-endfunction
-
-function! s:git_origin_url(dir) abort
- let gitdir = s:git_dir(a:dir)
- let config = gitdir . '/config'
- if empty(gitdir) || !filereadable(config)
- return ''
- endif
- return matchstr(join(readfile(config)), '\[remote "origin"\].\{-}url\s*=\s*\zs\S*\ze')
-endfunction
-
-function! s:git_revision(dir) abort
- let gitdir = s:git_dir(a:dir)
- let head = gitdir . '/HEAD'
- if empty(gitdir) || !filereadable(head)
- return ''
- endif
-
- let line = get(readfile(head), 0, '')
- let ref = matchstr(line, '^ref: \zs.*')
- if empty(ref)
- return line
- endif
-
- if filereadable(gitdir . '/' . ref)
- return get(readfile(gitdir . '/' . ref), 0, '')
- endif
-
- if filereadable(gitdir . '/packed-refs')
- for line in readfile(gitdir . '/packed-refs')
- if line =~# ' ' . ref
- return matchstr(line, '^[0-9a-f]*')
- endif
- endfor
- endif
-
- return ''
-endfunction
-
-function! s:git_local_branch(dir) abort
- let gitdir = s:git_dir(a:dir)
- let head = gitdir . '/HEAD'
- if empty(gitdir) || !filereadable(head)
- return ''
- endif
- let branch = matchstr(get(readfile(head), 0, ''), '^ref: refs/heads/\zs.*')
- return len(branch) ? branch : 'HEAD'
-endfunction
-
-function! s:git_origin_branch(spec)
- if len(a:spec.branch)
- return a:spec.branch
- endif
-
- " The file may not be present if this is a local repository
- let gitdir = s:git_dir(a:spec.dir)
- let origin_head = gitdir.'/refs/remotes/origin/HEAD'
- if len(gitdir) && filereadable(origin_head)
- return matchstr(get(readfile(origin_head), 0, ''),
- \ '^ref: refs/remotes/origin/\zs.*')
- endif
-
- " The command may not return the name of a branch in detached HEAD state
- let result = s:lines(s:system('git symbolic-ref --short HEAD', a:spec.dir))
- return v:shell_error ? '' : result[-1]
-endfunction
-
-if s:is_win
- function! s:plug_call(fn, ...)
- let shellslash = &shellslash
- try
- set noshellslash
- return call(a:fn, a:000)
- finally
- let &shellslash = shellslash
- endtry
- endfunction
-else
- function! s:plug_call(fn, ...)
- return call(a:fn, a:000)
- endfunction
-endif
-
-function! s:plug_getcwd()
- return s:plug_call('getcwd')
-endfunction
-
-function! s:plug_fnamemodify(fname, mods)
- return s:plug_call('fnamemodify', a:fname, a:mods)
-endfunction
-
-function! s:plug_expand(fmt)
- return s:plug_call('expand', a:fmt, 1)
-endfunction
-
-function! s:plug_tempname()
- return s:plug_call('tempname')
-endfunction
-
-function! plug#begin(...)
- if a:0 > 0
- let s:plug_home_org = a:1
- let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p'))
- elseif exists('g:plug_home')
- let home = s:path(g:plug_home)
- elseif has('nvim')
- let home = stdpath('data') . '/plugged'
- elseif !empty(&rtp)
- let home = s:path(split(&rtp, ',')[0]) . '/plugged'
- else
- return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.')
- endif
- if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp
- return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.')
- endif
-
- let g:plug_home = home
- let g:plugs = {}
- let g:plugs_order = []
- let s:triggers = {}
-
- call s:define_commands()
- return 1
-endfunction
-
-function! s:define_commands()
- command! -nargs=+ -bar Plug call plug#(<args>)
- if !executable('git')
- return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.')
- endif
- if has('win32')
- \ && &shellslash
- \ && (&shell =~# 'cmd\(\.exe\)\?$' || s:is_powershell(&shell))
- return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
- endif
- if !has('nvim')
- \ && (has('win32') || has('win32unix'))
- \ && !has('multi_byte')
- return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.')
- endif
- command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>])
- command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>])
- command! -nargs=0 -bar -bang PlugClean call s:clean(<bang>0)
- command! -nargs=0 -bar PlugUpgrade if s:upgrade() | execute 'source' s:esc(s:me) | endif
- command! -nargs=0 -bar PlugStatus call s:status()
- command! -nargs=0 -bar PlugDiff call s:diff()
- command! -nargs=? -bar -bang -complete=file PlugSnapshot call s:snapshot(<bang>0, <f-args>)
-endfunction
-
-function! s:to_a(v)
- return type(a:v) == s:TYPE.list ? a:v : [a:v]
-endfunction
-
-function! s:to_s(v)
- return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n"
-endfunction
-
-function! s:glob(from, pattern)
- return s:lines(globpath(a:from, a:pattern))
-endfunction
-
-function! s:source(from, ...)
- let found = 0
- for pattern in a:000
- for vim in s:glob(a:from, pattern)
- execute 'source' s:esc(vim)
- let found = 1
- endfor
- endfor
- return found
-endfunction
-
-function! s:assoc(dict, key, val)
- let a:dict[a:key] = add(get(a:dict, a:key, []), a:val)
-endfunction
-
-function! s:ask(message, ...)
- call inputsave()
- echohl WarningMsg
- let answer = input(a:message.(a:0 ? ' (y/N/a) ' : ' (y/N) '))
- echohl None
- call inputrestore()
- echo "\r"
- return (a:0 && answer =~? '^a') ? 2 : (answer =~? '^y') ? 1 : 0
-endfunction
-
-function! s:ask_no_interrupt(...)
- try
- return call('s:ask', a:000)
- catch
- return 0
- endtry
-endfunction
-
-function! s:lazy(plug, opt)
- return has_key(a:plug, a:opt) &&
- \ (empty(s:to_a(a:plug[a:opt])) ||
- \ !isdirectory(a:plug.dir) ||
- \ len(s:glob(s:rtp(a:plug), 'plugin')) ||
- \ len(s:glob(s:rtp(a:plug), 'after/plugin')))
-endfunction
-
-function! plug#end()
- if !exists('g:plugs')
- return s:err('plug#end() called without calling plug#begin() first')
- endif
-
- if exists('#PlugLOD')
- augroup PlugLOD
- autocmd!
- augroup END
- augroup! PlugLOD
- endif
- let lod = { 'ft': {}, 'map': {}, 'cmd': {} }
-
- if get(g:, 'did_load_filetypes', 0)
- filetype off
- endif
- for name in g:plugs_order
- if !has_key(g:plugs, name)
- continue
- endif
- let plug = g:plugs[name]
- if get(s:loaded, name, 0) || !s:lazy(plug, 'on') && !s:lazy(plug, 'for')
- let s:loaded[name] = 1
- continue
- endif
-
- if has_key(plug, 'on')
- let s:triggers[name] = { 'map': [], 'cmd': [] }
- for cmd in s:to_a(plug.on)
- if cmd =~? '^<Plug>.\+'
- if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i'))
- call s:assoc(lod.map, cmd, name)
- endif
- call add(s:triggers[name].map, cmd)
- elseif cmd =~# '^[A-Z]'
- let cmd = substitute(cmd, '!*$', '', '')
- if exists(':'.cmd) != 2
- call s:assoc(lod.cmd, cmd, name)
- endif
- call add(s:triggers[name].cmd, cmd)
- else
- call s:err('Invalid `on` option: '.cmd.
- \ '. Should start with an uppercase letter or `<Plug>`.')
- endif
- endfor
- endif
-
- if has_key(plug, 'for')
- let types = s:to_a(plug.for)
- if !empty(types)
- augroup filetypedetect
- call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim')
- augroup END
- endif
- for type in types
- call s:assoc(lod.ft, type, name)
- endfor
- endif
- endfor
-
- for [cmd, names] in items(lod.cmd)
- execute printf(
- \ 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)',
- \ cmd, string(cmd), string(names))
- endfor
-
- for [map, names] in items(lod.map)
- for [mode, map_prefix, key_prefix] in
- \ [['i', '<C-\><C-O>', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']]
- execute printf(
- \ '%snoremap <silent> %s %s:<C-U>call <SID>lod_map(%s, %s, %s, "%s")<CR>',
- \ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix)
- endfor
- endfor
-
- for [ft, names] in items(lod.ft)
- augroup PlugLOD
- execute printf('autocmd FileType %s call <SID>lod_ft(%s, %s)',
- \ ft, string(ft), string(names))
- augroup END
- endfor
-
- call s:reorg_rtp()
- filetype plugin indent on
- if has('vim_starting')
- if has('syntax') && !exists('g:syntax_on')
- syntax enable
- end
- else
- call s:reload_plugins()
- endif
-endfunction
-
-function! s:loaded_names()
- return filter(copy(g:plugs_order), 'get(s:loaded, v:val, 0)')
-endfunction
-
-function! s:load_plugin(spec)
- call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim')
-endfunction
-
-function! s:reload_plugins()
- for name in s:loaded_names()
- call s:load_plugin(g:plugs[name])
- endfor
-endfunction
-
-function! s:trim(str)
- return substitute(a:str, '[\/]\+$', '', '')
-endfunction
-
-function! s:version_requirement(val, min)
- for idx in range(0, len(a:min) - 1)
- let v = get(a:val, idx, 0)
- if v < a:min[idx] | return 0
- elseif v > a:min[idx] | return 1
- endif
- endfor
- return 1
-endfunction
-
-function! s:git_version_requirement(...)
- if !exists('s:git_version')
- let s:git_version = map(split(split(s:system(['git', '--version']))[2], '\.'), 'str2nr(v:val)')
- endif
- return s:version_requirement(s:git_version, a:000)
-endfunction
-
-function! s:progress_opt(base)
- return a:base && !s:is_win &&
- \ s:git_version_requirement(1, 7, 1) ? '--progress' : ''
-endfunction
-
-function! s:rtp(spec)
- return s:path(a:spec.dir . get(a:spec, 'rtp', ''))
-endfunction
-
-if s:is_win
- function! s:path(path)
- return s:trim(substitute(a:path, '/', '\', 'g'))
- endfunction
-
- function! s:dirpath(path)
- return s:path(a:path) . '\'
- endfunction
-
- function! s:is_local_plug(repo)
- return a:repo =~? '^[a-z]:\|^[%~]'
- endfunction
-
- " Copied from fzf
- function! s:wrap_cmds(cmds)
- let cmds = [
- \ '@echo off',
- \ 'setlocal enabledelayedexpansion']
- \ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds])
- \ + ['endlocal']
- if has('iconv')
- if !exists('s:codepage')
- let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0)
- endif
- return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage))
- endif
- return map(cmds, 'v:val."\r"')
- endfunction
-
- function! s:batchfile(cmd)
- let batchfile = s:plug_tempname().'.bat'
- call writefile(s:wrap_cmds(a:cmd), batchfile)
- let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
- if s:is_powershell(&shell)
- let cmd = '& ' . cmd
- endif
- return [batchfile, cmd]
- endfunction
-else
- function! s:path(path)
- return s:trim(a:path)
- endfunction
-
- function! s:dirpath(path)
- return substitute(a:path, '[/\\]*$', '/', '')
- endfunction
-
- function! s:is_local_plug(repo)
- return a:repo[0] =~ '[/$~]'
- endfunction
-endif
-
-function! s:err(msg)
- echohl ErrorMsg
- echom '[vim-plug] '.a:msg
- echohl None
-endfunction
-
-function! s:warn(cmd, msg)
- echohl WarningMsg
- execute a:cmd 'a:msg'
- echohl None
-endfunction
-
-function! s:esc(path)
- return escape(a:path, ' ')
-endfunction
-
-function! s:escrtp(path)
- return escape(a:path, ' ,')
-endfunction
-
-function! s:remove_rtp()
- for name in s:loaded_names()
- let rtp = s:rtp(g:plugs[name])
- execute 'set rtp-='.s:escrtp(rtp)
- let after = globpath(rtp, 'after')
- if isdirectory(after)
- execute 'set rtp-='.s:escrtp(after)
- endif
- endfor
-endfunction
-
-function! s:reorg_rtp()
- if !empty(s:first_rtp)
- execute 'set rtp-='.s:first_rtp
- execute 'set rtp-='.s:last_rtp
- endif
-
- " &rtp is modified from outside
- if exists('s:prtp') && s:prtp !=# &rtp
- call s:remove_rtp()
- unlet! s:middle
- endif
-
- let s:middle = get(s:, 'middle', &rtp)
- let rtps = map(s:loaded_names(), 's:rtp(g:plugs[v:val])')
- let afters = filter(map(copy(rtps), 'globpath(v:val, "after")'), '!empty(v:val)')
- let rtp = join(map(rtps, 'escape(v:val, ",")'), ',')
- \ . ','.s:middle.','
- \ . join(map(afters, 'escape(v:val, ",")'), ',')
- let &rtp = substitute(substitute(rtp, ',,*', ',', 'g'), '^,\|,$', '', 'g')
- let s:prtp = &rtp
-
- if !empty(s:first_rtp)
- execute 'set rtp^='.s:first_rtp
- execute 'set rtp+='.s:last_rtp
- endif
-endfunction
-
-function! s:doautocmd(...)
- if exists('#'.join(a:000, '#'))
- execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '<nomodeline>' : '') join(a:000)
- endif
-endfunction
-
-function! s:dobufread(names)
- for name in a:names
- let path = s:rtp(g:plugs[name])
- for dir in ['ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin']
- if len(finddir(dir, path))
- if exists('#BufRead')
- doautocmd BufRead
- endif
- return
- endif
- endfor
- endfor
-endfunction
-
-function! plug#load(...)
- if a:0 == 0
- return s:err('Argument missing: plugin name(s) required')
- endif
- if !exists('g:plugs')
- return s:err('plug#begin was not called')
- endif
- let names = a:0 == 1 && type(a:1) == s:TYPE.list ? a:1 : a:000
- let unknowns = filter(copy(names), '!has_key(g:plugs, v:val)')
- if !empty(unknowns)
- let s = len(unknowns) > 1 ? 's' : ''
- return s:err(printf('Unknown plugin%s: %s', s, join(unknowns, ', ')))
- end
- let unloaded = filter(copy(names), '!get(s:loaded, v:val, 0)')
- if !empty(unloaded)
- for name in unloaded
- call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
- endfor
- call s:dobufread(unloaded)
- return 1
- end
- return 0
-endfunction
-
-function! s:remove_triggers(name)
- if !has_key(s:triggers, a:name)
- return
- endif
- for cmd in s:triggers[a:name].cmd
- execute 'silent! delc' cmd
- endfor
- for map in s:triggers[a:name].map
- execute 'silent! unmap' map
- execute 'silent! iunmap' map
- endfor
- call remove(s:triggers, a:name)
-endfunction
-
-function! s:lod(names, types, ...)
- for name in a:names
- call s:remove_triggers(name)
- let s:loaded[name] = 1
- endfor
- call s:reorg_rtp()
-
- for name in a:names
- let rtp = s:rtp(g:plugs[name])
- for dir in a:types
- call s:source(rtp, dir.'/**/*.vim')
- endfor
- if a:0
- if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2))
- execute 'runtime' a:1
- endif
- call s:source(rtp, a:2)
- endif
- call s:doautocmd('User', name)
- endfor
-endfunction
-
-function! s:lod_ft(pat, names)
- let syn = 'syntax/'.a:pat.'.vim'
- call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn)
- execute 'autocmd! PlugLOD FileType' a:pat
- call s:doautocmd('filetypeplugin', 'FileType')
- call s:doautocmd('filetypeindent', 'FileType')
-endfunction
-
-function! s:lod_cmd(cmd, bang, l1, l2, args, names)
- call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
- call s:dobufread(a:names)
- execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args)
-endfunction
-
-function! s:lod_map(map, names, with_prefix, prefix)
- call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
- call s:dobufread(a:names)
- let extra = ''
- while 1
- let c = getchar(0)
- if c == 0
- break
- endif
- let extra .= nr2char(c)
- endwhile
-
- if a:with_prefix
- let prefix = v:count ? v:count : ''
- let prefix .= '"'.v:register.a:prefix
- if mode(1) == 'no'
- if v:operator == 'c'
- let prefix = "\<esc>" . prefix
- endif
- let prefix .= v:operator
- endif
- call feedkeys(prefix, 'n')
- endif
- call feedkeys(substitute(a:map, '^<Plug>', "\<Plug>", '') . extra)
-endfunction
-
-function! plug#(repo, ...)
- if a:0 > 1
- return s:err('Invalid number of arguments (1..2)')
- endif
-
- try
- let repo = s:trim(a:repo)
- let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec
- let name = get(opts, 'as', s:plug_fnamemodify(repo, ':t:s?\.git$??'))
- let spec = extend(s:infer_properties(name, repo), opts)
- if !has_key(g:plugs, name)
- call add(g:plugs_order, name)
- endif
- let g:plugs[name] = spec
- let s:loaded[name] = get(s:loaded, name, 0)
- catch
- return s:err(repo . ' ' . v:exception)
- endtry
-endfunction
-
-function! s:parse_options(arg)
- let opts = copy(s:base_spec)
- let type = type(a:arg)
- let opt_errfmt = 'Invalid argument for "%s" option of :Plug (expected: %s)'
- if type == s:TYPE.string
- if empty(a:arg)
- throw printf(opt_errfmt, 'tag', 'string')
- endif
- let opts.tag = a:arg
- elseif type == s:TYPE.dict
- for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as']
- if has_key(a:arg, opt)
- \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
- throw printf(opt_errfmt, opt, 'string')
- endif
- endfor
- for opt in ['on', 'for']
- if has_key(a:arg, opt)
- \ && type(a:arg[opt]) != s:TYPE.list
- \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
- throw printf(opt_errfmt, opt, 'string or list')
- endif
- endfor
- if has_key(a:arg, 'do')
- \ && type(a:arg.do) != s:TYPE.funcref
- \ && (type(a:arg.do) != s:TYPE.string || empty(a:arg.do))
- throw printf(opt_errfmt, 'do', 'string or funcref')
- endif
- call extend(opts, a:arg)
- if has_key(opts, 'dir')
- let opts.dir = s:dirpath(s:plug_expand(opts.dir))
- endif
- else
- throw 'Invalid argument type (expected: string or dictionary)'
- endif
- return opts
-endfunction
-
-function! s:infer_properties(name, repo)
- let repo = a:repo
- if s:is_local_plug(repo)
- return { 'dir': s:dirpath(s:plug_expand(repo)) }
- else
- if repo =~ ':'
- let uri = repo
- else
- if repo !~ '/'
- throw printf('Invalid argument: %s (implicit `vim-scripts'' expansion is deprecated)', repo)
- endif
- let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git')
- let uri = printf(fmt, repo)
- endif
- return { 'dir': s:dirpath(g:plug_home.'/'.a:name), 'uri': uri }
- endif
-endfunction
-
-function! s:install(force, names)
- call s:update_impl(0, a:force, a:names)
-endfunction
-
-function! s:update(force, names)
- call s:update_impl(1, a:force, a:names)
-endfunction
-
-function! plug#helptags()
- if !exists('g:plugs')
- return s:err('plug#begin was not called')
- endif
- for spec in values(g:plugs)
- let docd = join([s:rtp(spec), 'doc'], '/')
- if isdirectory(docd)
- silent! execute 'helptags' s:esc(docd)
- endif
- endfor
- return 1
-endfunction
-
-function! s:syntax()
- syntax clear
- syntax region plug1 start=/\%1l/ end=/\%2l/ contains=plugNumber
- syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX
- syn match plugNumber /[0-9]\+[0-9.]*/ contained
- syn match plugBracket /[[\]]/ contained
- syn match plugX /x/ contained
- syn match plugDash /^-\{1}\ /
- syn match plugPlus /^+/
- syn match plugStar /^*/
- syn match plugMessage /\(^- \)\@<=.*/
- syn match plugName /\(^- \)\@<=[^ ]*:/
- syn match plugSha /\%(: \)\@<=[0-9a-f]\{4,}$/
- syn match plugTag /(tag: [^)]\+)/
- syn match plugInstall /\(^+ \)\@<=[^:]*/
- syn match plugUpdate /\(^* \)\@<=[^:]*/
- syn match plugCommit /^ \X*[0-9a-f]\{7,9} .*/ contains=plugRelDate,plugEdge,plugTag
- syn match plugEdge /^ \X\+$/
- syn match plugEdge /^ \X*/ contained nextgroup=plugSha
- syn match plugSha /[0-9a-f]\{7,9}/ contained
- syn match plugRelDate /([^)]*)$/ contained
- syn match plugNotLoaded /(not loaded)$/
- syn match plugError /^x.*/
- syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/
- syn match plugH2 /^.*:\n-\+$/
- syn match plugH2 /^-\{2,}/
- syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean
- hi def link plug1 Title
- hi def link plug2 Repeat
- hi def link plugH2 Type
- hi def link plugX Exception
- hi def link plugBracket Structure
- hi def link plugNumber Number
-
- hi def link plugDash Special
- hi def link plugPlus Constant
- hi def link plugStar Boolean
-
- hi def link plugMessage Function
- hi def link plugName Label
- hi def link plugInstall Function
- hi def link plugUpdate Type
-
- hi def link plugError Error
- hi def link plugDeleted Ignore
- hi def link plugRelDate Comment
- hi def link plugEdge PreProc
- hi def link plugSha Identifier
- hi def link plugTag Constant
-
- hi def link plugNotLoaded Comment
-endfunction
-
-function! s:lpad(str, len)
- return a:str . repeat(' ', a:len - len(a:str))
-endfunction
-
-function! s:lines(msg)
- return split(a:msg, "[\r\n]")
-endfunction
-
-function! s:lastline(msg)
- return get(s:lines(a:msg), -1, '')
-endfunction
-
-function! s:new_window()
- execute get(g:, 'plug_window', 'vertical topleft new')
-endfunction
-
-function! s:plug_window_exists()
- let buflist = tabpagebuflist(s:plug_tab)
- return !empty(buflist) && index(buflist, s:plug_buf) >= 0
-endfunction
-
-function! s:switch_in()
- if !s:plug_window_exists()
- return 0
- endif
-
- if winbufnr(0) != s:plug_buf
- let s:pos = [tabpagenr(), winnr(), winsaveview()]
- execute 'normal!' s:plug_tab.'gt'
- let winnr = bufwinnr(s:plug_buf)
- execute winnr.'wincmd w'
- call add(s:pos, winsaveview())
- else
- let s:pos = [winsaveview()]
- endif
-
- setlocal modifiable
- return 1
-endfunction
-
-function! s:switch_out(...)
- call winrestview(s:pos[-1])
- setlocal nomodifiable
- if a:0 > 0
- execute a:1
- endif
-
- if len(s:pos) > 1
- execute 'normal!' s:pos[0].'gt'
- execute s:pos[1] 'wincmd w'
- call winrestview(s:pos[2])
- endif
-endfunction
-
-function! s:finish_bindings()
- nnoremap <silent> <buffer> R :call <SID>retry()<cr>
- nnoremap <silent> <buffer> D :PlugDiff<cr>
- nnoremap <silent> <buffer> S :PlugStatus<cr>
- nnoremap <silent> <buffer> U :call <SID>status_update()<cr>
- xnoremap <silent> <buffer> U :call <SID>status_update()<cr>
- nnoremap <silent> <buffer> ]] :silent! call <SID>section('')<cr>
- nnoremap <silent> <buffer> [[ :silent! call <SID>section('b')<cr>
-endfunction
-
-function! s:prepare(...)
- if empty(s:plug_getcwd())
- throw 'Invalid current working directory. Cannot proceed.'
- endif
-
- for evar in ['$GIT_DIR', '$GIT_WORK_TREE']
- if exists(evar)
- throw evar.' detected. Cannot proceed.'
- endif
- endfor
-
- call s:job_abort()
- if s:switch_in()
- if b:plug_preview == 1
- pc
- endif
- enew
- else
- call s:new_window()
- endif
-
- nnoremap <silent> <buffer> q :call <SID>close_pane()<cr>
- if a:0 == 0
- call s:finish_bindings()
- endif
- let b:plug_preview = -1
- let s:plug_tab = tabpagenr()
- let s:plug_buf = winbufnr(0)
- call s:assign_name()
-
- for k in ['<cr>', 'L', 'o', 'X', 'd', 'dd']
- execute 'silent! unmap <buffer>' k
- endfor
- setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell
- if exists('+colorcolumn')
- setlocal colorcolumn=
- endif
- setf vim-plug
- if exists('g:syntax_on')
- call s:syntax()
- endif
-endfunction
-
-function! s:close_pane()
- if b:plug_preview == 1
- pc
- let b:plug_preview = -1
- else
- bd
- endif
-endfunction
-
-function! s:assign_name()
- " Assign buffer name
- let prefix = '[Plugins]'
- let name = prefix
- let idx = 2
- while bufexists(name)
- let name = printf('%s (%s)', prefix, idx)
- let idx = idx + 1
- endwhile
- silent! execute 'f' fnameescape(name)
-endfunction
-
-function! s:chsh(swap)
- let prev = [&shell, &shellcmdflag, &shellredir]
- if !s:is_win
- set shell=sh
- endif
- if a:swap
- if s:is_powershell(&shell)
- let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s'
- elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$'
- set shellredir=>%s\ 2>&1
- endif
- endif
- return prev
-endfunction
-
-function! s:bang(cmd, ...)
- let batchfile = ''
- try
- let [sh, shellcmdflag, shrd] = s:chsh(a:0)
- " FIXME: Escaping is incomplete. We could use shellescape with eval,
- " but it won't work on Windows.
- let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd
- if s:is_win
- let [batchfile, cmd] = s:batchfile(cmd)
- endif
- let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%')
- execute "normal! :execute g:_plug_bang\<cr>\<cr>"
- finally
- unlet g:_plug_bang
- let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
- if s:is_win && filereadable(batchfile)
- call delete(batchfile)
- endif
- endtry
- return v:shell_error ? 'Exit status: ' . v:shell_error : ''
-endfunction
-
-function! s:regress_bar()
- let bar = substitute(getline(2)[1:-2], '.*\zs=', 'x', '')
- call s:progress_bar(2, bar, len(bar))
-endfunction
-
-function! s:is_updated(dir)
- return !empty(s:system_chomp(['git', 'log', '--pretty=format:%h', 'HEAD...HEAD@{1}'], a:dir))
-endfunction
-
-function! s:do(pull, force, todo)
- for [name, spec] in items(a:todo)
- if !isdirectory(spec.dir)
- continue
- endif
- let installed = has_key(s:update.new, name)
- let updated = installed ? 0 :
- \ (a:pull && index(s:update.errors, name) < 0 && s:is_updated(spec.dir))
- if a:force || installed || updated
- execute 'cd' s:esc(spec.dir)
- call append(3, '- Post-update hook for '. name .' ... ')
- let error = ''
- let type = type(spec.do)
- if type == s:TYPE.string
- if spec.do[0] == ':'
- if !get(s:loaded, name, 0)
- let s:loaded[name] = 1
- call s:reorg_rtp()
- endif
- call s:load_plugin(spec)
- try
- execute spec.do[1:]
- catch
- let error = v:exception
- endtry
- if !s:plug_window_exists()
- cd -
- throw 'Warning: vim-plug was terminated by the post-update hook of '.name
- endif
- else
- let error = s:bang(spec.do)
- endif
- elseif type == s:TYPE.funcref
- try
- call s:load_plugin(spec)
- let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged')
- call spec.do({ 'name': name, 'status': status, 'force': a:force })
- catch
- let error = v:exception
- endtry
- else
- let error = 'Invalid hook type'
- endif
- call s:switch_in()
- call setline(4, empty(error) ? (getline(4) . 'OK')
- \ : ('x' . getline(4)[1:] . error))
- if !empty(error)
- call add(s:update.errors, name)
- call s:regress_bar()
- endif
- cd -
- endif
- endfor
-endfunction
-
-function! s:hash_match(a, b)
- return stridx(a:a, a:b) == 0 || stridx(a:b, a:a) == 0
-endfunction
-
-function! s:checkout(spec)
- let sha = a:spec.commit
- let output = s:git_revision(a:spec.dir)
- if !empty(output) && !s:hash_match(sha, s:lines(output)[0])
- let credential_helper = s:git_version_requirement(2) ? '-c credential.helper= ' : ''
- let output = s:system(
- \ 'git '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
- endif
- return output
-endfunction
-
-function! s:finish(pull)
- let new_frozen = len(filter(keys(s:update.new), 'g:plugs[v:val].frozen'))
- if new_frozen
- let s = new_frozen > 1 ? 's' : ''
- call append(3, printf('- Installed %d frozen plugin%s', new_frozen, s))
- endif
- call append(3, '- Finishing ... ') | 4
- redraw
- call plug#helptags()
- call plug#end()
- call setline(4, getline(4) . 'Done!')
- redraw
- let msgs = []
- if !empty(s:update.errors)
- call add(msgs, "Press 'R' to retry.")
- endif
- if a:pull && len(s:update.new) < len(filter(getline(5, '$'),
- \ "v:val =~ '^- ' && v:val !~# 'Already up.to.date'"))
- call add(msgs, "Press 'D' to see the updated changes.")
- endif
- echo join(msgs, ' ')
- call s:finish_bindings()
-endfunction
-
-function! s:retry()
- if empty(s:update.errors)
- return
- endif
- echo
- call s:update_impl(s:update.pull, s:update.force,
- \ extend(copy(s:update.errors), [s:update.threads]))
-endfunction
-
-function! s:is_managed(name)
- return has_key(g:plugs[a:name], 'uri')
-endfunction
-
-function! s:names(...)
- return sort(filter(keys(g:plugs), 'stridx(v:val, a:1) == 0 && s:is_managed(v:val)'))
-endfunction
-
-function! s:check_ruby()
- silent! ruby require 'thread'; VIM::command("let g:plug_ruby = '#{RUBY_VERSION}'")
- if !exists('g:plug_ruby')
- redraw!
- return s:warn('echom', 'Warning: Ruby interface is broken')
- endif
- let ruby_version = split(g:plug_ruby, '\.')
- unlet g:plug_ruby
- return s:version_requirement(ruby_version, [1, 8, 7])
-endfunction
-
-function! s:update_impl(pull, force, args) abort
- let sync = index(a:args, '--sync') >= 0 || has('vim_starting')
- let args = filter(copy(a:args), 'v:val != "--sync"')
- let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ?
- \ remove(args, -1) : get(g:, 'plug_threads', 16)
-
- let managed = filter(copy(g:plugs), 's:is_managed(v:key)')
- let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') :
- \ filter(managed, 'index(args, v:key) >= 0')
-
- if empty(todo)
- return s:warn('echo', 'No plugin to '. (a:pull ? 'update' : 'install'))
- endif
-
- if !s:is_win && s:git_version_requirement(2, 3)
- let s:git_terminal_prompt = exists('$GIT_TERMINAL_PROMPT') ? $GIT_TERMINAL_PROMPT : ''
- let $GIT_TERMINAL_PROMPT = 0
- for plug in values(todo)
- let plug.uri = substitute(plug.uri,
- \ '^https://git::@github\.com', 'https://github.com', '')
- endfor
- endif
-
- if !isdirectory(g:plug_home)
- try
- call mkdir(g:plug_home, 'p')
- catch
- return s:err(printf('Invalid plug directory: %s. '.
- \ 'Try to call plug#begin with a valid directory', g:plug_home))
- endtry
- endif
-
- if has('nvim') && !exists('*jobwait') && threads > 1
- call s:warn('echom', '[vim-plug] Update Neovim for parallel installer')
- endif
-
- let use_job = s:nvim || s:vim8
- let python = (has('python') || has('python3')) && !use_job
- let ruby = has('ruby') && !use_job && (v:version >= 703 || v:version == 702 && has('patch374')) && !(s:is_win && has('gui_running')) && threads > 1 && s:check_ruby()
-
- let s:update = {
- \ 'start': reltime(),
- \ 'all': todo,
- \ 'todo': copy(todo),
- \ 'errors': [],
- \ 'pull': a:pull,
- \ 'force': a:force,
- \ 'new': {},
- \ 'threads': (python || ruby || use_job) ? min([len(todo), threads]) : 1,
- \ 'bar': '',
- \ 'fin': 0
- \ }
-
- call s:prepare(1)
- call append(0, ['', ''])
- normal! 2G
- silent! redraw
-
- " Set remote name, overriding a possible user git config's clone.defaultRemoteName
- let s:clone_opt = ['--origin', 'origin']
- if get(g:, 'plug_shallow', 1)
- call extend(s:clone_opt, ['--depth', '1'])
- if s:git_version_requirement(1, 7, 10)
- call add(s:clone_opt, '--no-single-branch')
- endif
- endif
-
- if has('win32unix') || has('wsl')
- call extend(s:clone_opt, ['-c', 'core.eol=lf', '-c', 'core.autocrlf=input'])
- endif
-
- let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : ''
-
- " Python version requirement (>= 2.7)
- if python && !has('python3') && !ruby && !use_job && s:update.threads > 1
- redir => pyv
- silent python import platform; print platform.python_version()
- redir END
- let python = s:version_requirement(
- \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6])
- endif
-
- if (python || ruby) && s:update.threads > 1
- try
- let imd = &imd
- if s:mac_gui
- set noimd
- endif
- if ruby
- call s:update_ruby()
- else
- call s:update_python()
- endif
- catch
- let lines = getline(4, '$')
- let printed = {}
- silent! 4,$d _
- for line in lines
- let name = s:extract_name(line, '.', '')
- if empty(name) || !has_key(printed, name)
- call append('$', line)
- if !empty(name)
- let printed[name] = 1
- if line[0] == 'x' && index(s:update.errors, name) < 0
- call add(s:update.errors, name)
- end
- endif
- endif
- endfor
- finally
- let &imd = imd
- call s:update_finish()
- endtry
- else
- call s:update_vim()
- while use_job && sync
- sleep 100m
- if s:update.fin
- break
- endif
- endwhile
- endif
-endfunction
-
-function! s:log4(name, msg)
- call setline(4, printf('- %s (%s)', a:msg, a:name))
- redraw
-endfunction
-
-function! s:update_finish()
- if exists('s:git_terminal_prompt')
- let $GIT_TERMINAL_PROMPT = s:git_terminal_prompt
- endif
- if s:switch_in()
- call append(3, '- Updating ...') | 4
- for [name, spec] in items(filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && (s:update.force || s:update.pull || has_key(s:update.new, v:key))'))
- let [pos, _] = s:logpos(name)
- if !pos
- continue
- endif
- if has_key(spec, 'commit')
- call s:log4(name, 'Checking out '.spec.commit)
- let out = s:checkout(spec)
- elseif has_key(spec, 'tag')
- let tag = spec.tag
- if tag =~ '\*'
- let tags = s:lines(s:system('git tag --list '.plug#shellescape(tag).' --sort -version:refname 2>&1', spec.dir))
- if !v:shell_error && !empty(tags)
- let tag = tags[0]
- call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag))
- call append(3, '')
- endif
- endif
- call s:log4(name, 'Checking out '.tag)
- let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
- else
- let branch = s:git_origin_branch(spec)
- call s:log4(name, 'Merging origin/'.s:esc(branch))
- let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1'
- \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir)
- endif
- if !v:shell_error && filereadable(spec.dir.'/.gitmodules') &&
- \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir))
- call s:log4(name, 'Updating submodules. This may take a while.')
- let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir)
- endif
- let msg = s:format_message(v:shell_error ? 'x': '-', name, out)
- if v:shell_error
- call add(s:update.errors, name)
- call s:regress_bar()
- silent execute pos 'd _'
- call append(4, msg) | 4
- elseif !empty(out)
- call setline(pos, msg[0])
- endif
- redraw
- endfor
- silent 4 d _
- try
- call s:do(s:update.pull, s:update.force, filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && has_key(v:val, "do")'))
- catch
- call s:warn('echom', v:exception)
- call s:warn('echo', '')
- return
- endtry
- call s:finish(s:update.pull)
- call setline(1, 'Updated. Elapsed time: ' . split(reltimestr(reltime(s:update.start)))[0] . ' sec.')
- call s:switch_out('normal! gg')
- endif
-endfunction
-
-function! s:job_abort()
- if (!s:nvim && !s:vim8) || !exists('s:jobs')
- return
- endif
-
- for [name, j] in items(s:jobs)
- if s:nvim
- silent! call jobstop(j.jobid)
- elseif s:vim8
- silent! call job_stop(j.jobid)
- endif
- if j.new
- call s:rm_rf(g:plugs[name].dir)
- endif
- endfor
- let s:jobs = {}
-endfunction
-
-function! s:last_non_empty_line(lines)
- let len = len(a:lines)
- for idx in range(len)
- let line = a:lines[len-idx-1]
- if !empty(line)
- return line
- endif
- endfor
- return ''
-endfunction
-
-function! s:job_out_cb(self, data) abort
- let self = a:self
- let data = remove(self.lines, -1) . a:data
- let lines = map(split(data, "\n", 1), 'split(v:val, "\r", 1)[-1]')
- call extend(self.lines, lines)
- " To reduce the number of buffer updates
- let self.tick = get(self, 'tick', -1) + 1
- if !self.running || self.tick % len(s:jobs) == 0
- let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-')
- let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines)
- call s:log(bullet, self.name, result)
- endif
-endfunction
-
-function! s:job_exit_cb(self, data) abort
- let a:self.running = 0
- let a:self.error = a:data != 0
- call s:reap(a:self.name)
- call s:tick()
-endfunction
-
-function! s:job_cb(fn, job, ch, data)
- if !s:plug_window_exists() " plug window closed
- return s:job_abort()
- endif
- call call(a:fn, [a:job, a:data])
-endfunction
-
-function! s:nvim_cb(job_id, data, event) dict abort
- return (a:event == 'stdout' || a:event == 'stderr') ?
- \ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) :
- \ s:job_cb('s:job_exit_cb', self, 0, a:data)
-endfunction
-
-function! s:spawn(name, cmd, opts)
- let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''],
- \ 'new': get(a:opts, 'new', 0) }
- let s:jobs[a:name] = job
-
- if s:nvim
- if has_key(a:opts, 'dir')
- let job.cwd = a:opts.dir
- endif
- let argv = a:cmd
- call extend(job, {
- \ 'on_stdout': function('s:nvim_cb'),
- \ 'on_stderr': function('s:nvim_cb'),
- \ 'on_exit': function('s:nvim_cb'),
- \ })
- let jid = s:plug_call('jobstart', argv, job)
- if jid > 0
- let job.jobid = jid
- else
- let job.running = 0
- let job.error = 1
- let job.lines = [jid < 0 ? argv[0].' is not executable' :
- \ 'Invalid arguments (or job table is full)']
- endif
- elseif s:vim8
- let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"script": 0})'))
- if has_key(a:opts, 'dir')
- let cmd = s:with_cd(cmd, a:opts.dir, 0)
- endif
- let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd]
- let jid = job_start(s:is_win ? join(argv, ' ') : argv, {
- \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]),
- \ 'err_cb': function('s:job_cb', ['s:job_out_cb', job]),
- \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]),
- \ 'err_mode': 'raw',
- \ 'out_mode': 'raw'
- \})
- if job_status(jid) == 'run'
- let job.jobid = jid
- else
- let job.running = 0
- let job.error = 1
- let job.lines = ['Failed to start job']
- endif
- else
- let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [a:cmd, a:opts.dir] : [a:cmd]))
- let job.error = v:shell_error != 0
- let job.running = 0
- endif
-endfunction
-
-function! s:reap(name)
- let job = s:jobs[a:name]
- if job.error
- call add(s:update.errors, a:name)
- elseif get(job, 'new', 0)
- let s:update.new[a:name] = 1
- endif
- let s:update.bar .= job.error ? 'x' : '='
-
- let bullet = job.error ? 'x' : '-'
- let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines)
- call s:log(bullet, a:name, empty(result) ? 'OK' : result)
- call s:bar()
-
- call remove(s:jobs, a:name)
-endfunction
-
-function! s:bar()
- if s:switch_in()
- let total = len(s:update.all)
- call setline(1, (s:update.pull ? 'Updating' : 'Installing').
- \ ' plugins ('.len(s:update.bar).'/'.total.')')
- call s:progress_bar(2, s:update.bar, total)
- call s:switch_out()
- endif
-endfunction
-
-function! s:logpos(name)
- let max = line('$')
- for i in range(4, max > 4 ? max : 4)
- if getline(i) =~# '^[-+x*] '.a:name.':'
- for j in range(i + 1, max > 5 ? max : 5)
- if getline(j) !~ '^ '
- return [i, j - 1]
- endif
- endfor
- return [i, i]
- endif
- endfor
- return [0, 0]
-endfunction
-
-function! s:log(bullet, name, lines)
- if s:switch_in()
- let [b, e] = s:logpos(a:name)
- if b > 0
- silent execute printf('%d,%d d _', b, e)
- if b > winheight('.')
- let b = 4
- endif
- else
- let b = 4
- endif
- " FIXME For some reason, nomodifiable is set after :d in vim8
- setlocal modifiable
- call append(b - 1, s:format_message(a:bullet, a:name, a:lines))
- call s:switch_out()
- endif
-endfunction
-
-function! s:update_vim()
- let s:jobs = {}
-
- call s:bar()
- call s:tick()
-endfunction
-
-function! s:tick()
- let pull = s:update.pull
- let prog = s:progress_opt(s:nvim || s:vim8)
-while 1 " Without TCO, Vim stack is bound to explode
- if empty(s:update.todo)
- if empty(s:jobs) && !s:update.fin
- call s:update_finish()
- let s:update.fin = 1
- endif
- return
- endif
-
- let name = keys(s:update.todo)[0]
- let spec = remove(s:update.todo, name)
- let new = empty(globpath(spec.dir, '.git', 1))
-
- call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...')
- redraw
-
- let has_tag = has_key(spec, 'tag')
- if !new
- let [error, _] = s:git_validate(spec, 0)
- if empty(error)
- if pull
- let cmd = s:git_version_requirement(2) ? ['git', '-c', 'credential.helper=', 'fetch'] : ['git', 'fetch']
- if has_tag && !empty(globpath(spec.dir, '.git/shallow'))
- call extend(cmd, ['--depth', '99999999'])
- endif
- if !empty(prog)
- call add(cmd, prog)
- endif
- call s:spawn(name, cmd, { 'dir': spec.dir })
- else
- let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 }
- endif
- else
- let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 }
- endif
- else
- let cmd = ['git', 'clone']
- if !has_tag
- call extend(cmd, s:clone_opt)
- endif
- if !empty(prog)
- call add(cmd, prog)
- endif
- call s:spawn(name, extend(cmd, [spec.uri, s:trim(spec.dir)]), { 'new': 1 })
- endif
-
- if !s:jobs[name].running
- call s:reap(name)
- endif
- if len(s:jobs) >= s:update.threads
- break
- endif
-endwhile
-endfunction
-
-function! s:update_python()
-let py_exe = has('python') ? 'python' : 'python3'
-execute py_exe "<< EOF"
-import datetime
-import functools
-import os
-try:
- import queue
-except ImportError:
- import Queue as queue
-import random
-import re
-import shutil
-import signal
-import subprocess
-import tempfile
-import threading as thr
-import time
-import traceback
-import vim
-
-G_NVIM = vim.eval("has('nvim')") == '1'
-G_PULL = vim.eval('s:update.pull') == '1'
-G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1
-G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)'))
-G_CLONE_OPT = ' '.join(vim.eval('s:clone_opt'))
-G_PROGRESS = vim.eval('s:progress_opt(1)')
-G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads'))
-G_STOP = thr.Event()
-G_IS_WIN = vim.eval('s:is_win') == '1'
-
-class PlugError(Exception):
- def __init__(self, msg):
- self.msg = msg
-class CmdTimedOut(PlugError):
- pass
-class CmdFailed(PlugError):
- pass
-class InvalidURI(PlugError):
- pass
-class Action(object):
- INSTALL, UPDATE, ERROR, DONE = ['+', '*', 'x', '-']
-
-class Buffer(object):
- def __init__(self, lock, num_plugs, is_pull):
- self.bar = ''
- self.event = 'Updating' if is_pull else 'Installing'
- self.lock = lock
- self.maxy = int(vim.eval('winheight(".")'))
- self.num_plugs = num_plugs
-
- def __where(self, name):
- """ Find first line with name in current buffer. Return line num. """
- found, lnum = False, 0
- matcher = re.compile('^[-+x*] {0}:'.format(name))
- for line in vim.current.buffer:
- if matcher.search(line) is not None:
- found = True
- break
- lnum += 1
-
- if not found:
- lnum = -1
- return lnum
-
- def header(self):
- curbuf = vim.current.buffer
- curbuf[0] = self.event + ' plugins ({0}/{1})'.format(len(self.bar), self.num_plugs)
-
- num_spaces = self.num_plugs - len(self.bar)
- curbuf[1] = '[{0}{1}]'.format(self.bar, num_spaces * ' ')
-
- with self.lock:
- vim.command('normal! 2G')
- vim.command('redraw')
-
- def write(self, action, name, lines):
- first, rest = lines[0], lines[1:]
- msg = ['{0} {1}{2}{3}'.format(action, name, ': ' if first else '', first)]
- msg.extend([' ' + line for line in rest])
-
- try:
- if action == Action.ERROR:
- self.bar += 'x'
- vim.command("call add(s:update.errors, '{0}')".format(name))
- elif action == Action.DONE:
- self.bar += '='
-
- curbuf = vim.current.buffer
- lnum = self.__where(name)
- if lnum != -1: # Found matching line num
- del curbuf[lnum]
- if lnum > self.maxy and action in set([Action.INSTALL, Action.UPDATE]):
- lnum = 3
- else:
- lnum = 3
- curbuf.append(msg, lnum)
-
- self.header()
- except vim.error:
- pass
-
-class Command(object):
- CD = 'cd /d' if G_IS_WIN else 'cd'
-
- def __init__(self, cmd, cmd_dir=None, timeout=60, cb=None, clean=None):
- self.cmd = cmd
- if cmd_dir:
- self.cmd = '{0} {1} && {2}'.format(Command.CD, cmd_dir, self.cmd)
- self.timeout = timeout
- self.callback = cb if cb else (lambda msg: None)
- self.clean = clean if clean else (lambda: None)
- self.proc = None
-
- @property
- def alive(self):
- """ Returns true only if command still running. """
- return self.proc and self.proc.poll() is None
-
- def execute(self, ntries=3):
- """ Execute the command with ntries if CmdTimedOut.
- Returns the output of the command if no Exception.
- """
- attempt, finished, limit = 0, False, self.timeout
-
- while not finished:
- try:
- attempt += 1
- result = self.try_command()
- finished = True
- return result
- except CmdTimedOut:
- if attempt != ntries:
- self.notify_retry()
- self.timeout += limit
- else:
- raise
-
- def notify_retry(self):
- """ Retry required for command, notify user. """
- for count in range(3, 0, -1):
- if G_STOP.is_set():
- raise KeyboardInterrupt
- msg = 'Timeout. Will retry in {0} second{1} ...'.format(
- count, 's' if count != 1 else '')
- self.callback([msg])
- time.sleep(1)
- self.callback(['Retrying ...'])
-
- def try_command(self):
- """ Execute a cmd & poll for callback. Returns list of output.
- Raises CmdFailed -> return code for Popen isn't 0
- Raises CmdTimedOut -> command exceeded timeout without new output
- """
- first_line = True
-
- try:
- tfile = tempfile.NamedTemporaryFile(mode='w+b')
- preexec_fn = not G_IS_WIN and os.setsid or None
- self.proc = subprocess.Popen(self.cmd, stdout=tfile,
- stderr=subprocess.STDOUT,
- stdin=subprocess.PIPE, shell=True,
- preexec_fn=preexec_fn)
- thrd = thr.Thread(target=(lambda proc: proc.wait()), args=(self.proc,))
- thrd.start()
-
- thread_not_started = True
- while thread_not_started:
- try:
- thrd.join(0.1)
- thread_not_started = False
- except RuntimeError:
- pass
-
- while self.alive:
- if G_STOP.is_set():
- raise KeyboardInterrupt
-
- if first_line or random.random() < G_LOG_PROB:
- first_line = False
- line = '' if G_IS_WIN else nonblock_read(tfile.name)
- if line:
- self.callback([line])
-
- time_diff = time.time() - os.path.getmtime(tfile.name)
- if time_diff > self.timeout:
- raise CmdTimedOut(['Timeout!'])
-
- thrd.join(0.5)
-
- tfile.seek(0)
- result = [line.decode('utf-8', 'replace').rstrip() for line in tfile]
-
- if self.proc.returncode != 0:
- raise CmdFailed([''] + result)
-
- return result
- except:
- self.terminate()
- raise
-
- def terminate(self):
- """ Terminate process and cleanup. """
- if self.alive:
- if G_IS_WIN:
- os.kill(self.proc.pid, signal.SIGINT)
- else:
- os.killpg(self.proc.pid, signal.SIGTERM)
- self.clean()
-
-class Plugin(object):
- def __init__(self, name, args, buf_q, lock):
- self.name = name
- self.args = args
- self.buf_q = buf_q
- self.lock = lock
- self.tag = args.get('tag', 0)
-
- def manage(self):
- try:
- if os.path.exists(self.args['dir']):
- self.update()
- else:
- self.install()
- with self.lock:
- thread_vim_command("let s:update.new['{0}'] = 1".format(self.name))
- except PlugError as exc:
- self.write(Action.ERROR, self.name, exc.msg)
- except KeyboardInterrupt:
- G_STOP.set()
- self.write(Action.ERROR, self.name, ['Interrupted!'])
- except:
- # Any exception except those above print stack trace
- msg = 'Trace:\n{0}'.format(traceback.format_exc().rstrip())
- self.write(Action.ERROR, self.name, msg.split('\n'))
- raise
-
- def install(self):
- target = self.args['dir']
- if target[-1] == '\\':
- target = target[0:-1]
-
- def clean(target):
- def _clean():
- try:
- shutil.rmtree(target)
- except OSError:
- pass
- return _clean
-
- self.write(Action.INSTALL, self.name, ['Installing ...'])
- callback = functools.partial(self.write, Action.INSTALL, self.name)
- cmd = 'git clone {0} {1} {2} {3} 2>&1'.format(
- '' if self.tag else G_CLONE_OPT, G_PROGRESS, self.args['uri'],
- esc(target))
- com = Command(cmd, None, G_TIMEOUT, callback, clean(target))
- result = com.execute(G_RETRIES)
- self.write(Action.DONE, self.name, result[-1:])
-
- def repo_uri(self):
- cmd = 'git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url'
- command = Command(cmd, self.args['dir'], G_TIMEOUT,)
- result = command.execute(G_RETRIES)
- return result[-1]
-
- def update(self):
- actual_uri = self.repo_uri()
- expect_uri = self.args['uri']
- regex = re.compile(r'^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$')
- ma = regex.match(actual_uri)
- mb = regex.match(expect_uri)
- if ma is None or mb is None or ma.groups() != mb.groups():
- msg = ['',
- 'Invalid URI: {0}'.format(actual_uri),
- 'Expected {0}'.format(expect_uri),
- 'PlugClean required.']
- raise InvalidURI(msg)
-
- if G_PULL:
- self.write(Action.UPDATE, self.name, ['Updating ...'])
- callback = functools.partial(self.write, Action.UPDATE, self.name)
- fetch_opt = '--depth 99999999' if self.tag and os.path.isfile(os.path.join(self.args['dir'], '.git/shallow')) else ''
- cmd = 'git fetch {0} {1} 2>&1'.format(fetch_opt, G_PROGRESS)
- com = Command(cmd, self.args['dir'], G_TIMEOUT, callback)
- result = com.execute(G_RETRIES)
- self.write(Action.DONE, self.name, result[-1:])
- else:
- self.write(Action.DONE, self.name, ['Already installed'])
-
- def write(self, action, name, msg):
- self.buf_q.put((action, name, msg))
-
-class PlugThread(thr.Thread):
- def __init__(self, tname, args):
- super(PlugThread, self).__init__()
- self.tname = tname
- self.args = args
-
- def run(self):
- thr.current_thread().name = self.tname
- buf_q, work_q, lock = self.args
-
- try:
- while not G_STOP.is_set():
- name, args = work_q.get_nowait()
- plug = Plugin(name, args, buf_q, lock)
- plug.manage()
- work_q.task_done()
- except queue.Empty:
- pass
-
-class RefreshThread(thr.Thread):
- def __init__(self, lock):
- super(RefreshThread, self).__init__()
- self.lock = lock
- self.running = True
-
- def run(self):
- while self.running:
- with self.lock:
- thread_vim_command('noautocmd normal! a')
- time.sleep(0.33)
-
- def stop(self):
- self.running = False
-
-if G_NVIM:
- def thread_vim_command(cmd):
- vim.session.threadsafe_call(lambda: vim.command(cmd))
-else:
- def thread_vim_command(cmd):
- vim.command(cmd)
-
-def esc(name):
- return '"' + name.replace('"', '\"') + '"'
-
-def nonblock_read(fname):
- """ Read a file with nonblock flag. Return the last line. """
- fread = os.open(fname, os.O_RDONLY | os.O_NONBLOCK)
- buf = os.read(fread, 100000).decode('utf-8', 'replace')
- os.close(fread)
-
- line = buf.rstrip('\r\n')
- left = max(line.rfind('\r'), line.rfind('\n'))
- if left != -1:
- left += 1
- line = line[left:]
-
- return line
-
-def main():
- thr.current_thread().name = 'main'
- nthreads = int(vim.eval('s:update.threads'))
- plugs = vim.eval('s:update.todo')
- mac_gui = vim.eval('s:mac_gui') == '1'
-
- lock = thr.Lock()
- buf = Buffer(lock, len(plugs), G_PULL)
- buf_q, work_q = queue.Queue(), queue.Queue()
- for work in plugs.items():
- work_q.put(work)
-
- start_cnt = thr.active_count()
- for num in range(nthreads):
- tname = 'PlugT-{0:02}'.format(num)
- thread = PlugThread(tname, (buf_q, work_q, lock))
- thread.start()
- if mac_gui:
- rthread = RefreshThread(lock)
- rthread.start()
-
- while not buf_q.empty() or thr.active_count() != start_cnt:
- try:
- action, name, msg = buf_q.get(True, 0.25)
- buf.write(action, name, ['OK'] if not msg else msg)
- buf_q.task_done()
- except queue.Empty:
- pass
- except KeyboardInterrupt:
- G_STOP.set()
-
- if mac_gui:
- rthread.stop()
- rthread.join()
-
-main()
-EOF
-endfunction
-
-function! s:update_ruby()
- ruby << EOF
- module PlugStream
- SEP = ["\r", "\n", nil]
- def get_line
- buffer = ''
- loop do
- char = readchar rescue return
- if SEP.include? char.chr
- buffer << $/
- break
- else
- buffer << char
- end
- end
- buffer
- end
- end unless defined?(PlugStream)
-
- def esc arg
- %["#{arg.gsub('"', '\"')}"]
- end
-
- def killall pid
- pids = [pid]
- if /mswin|mingw|bccwin/ =~ RUBY_PLATFORM
- pids.each { |pid| Process.kill 'INT', pid.to_i rescue nil }
- else
- unless `which pgrep 2> /dev/null`.empty?
- children = pids
- until children.empty?
- children = children.map { |pid|
- `pgrep -P #{pid}`.lines.map { |l| l.chomp }
- }.flatten
- pids += children
- end
- end
- pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil }
- end
- end
-
- def compare_git_uri a, b
- regex = %r{^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$}
- regex.match(a).to_a.drop(1) == regex.match(b).to_a.drop(1)
- end
-
- require 'thread'
- require 'fileutils'
- require 'timeout'
- running = true
- iswin = VIM::evaluate('s:is_win').to_i == 1
- pull = VIM::evaluate('s:update.pull').to_i == 1
- base = VIM::evaluate('g:plug_home')
- all = VIM::evaluate('s:update.todo')
- limit = VIM::evaluate('get(g:, "plug_timeout", 60)')
- tries = VIM::evaluate('get(g:, "plug_retries", 2)') + 1
- nthr = VIM::evaluate('s:update.threads').to_i
- maxy = VIM::evaluate('winheight(".")').to_i
- vim7 = VIM::evaluate('v:version').to_i <= 703 && RUBY_PLATFORM =~ /darwin/
- cd = iswin ? 'cd /d' : 'cd'
- tot = VIM::evaluate('len(s:update.todo)') || 0
- bar = ''
- skip = 'Already installed'
- mtx = Mutex.new
- take1 = proc { mtx.synchronize { running && all.shift } }
- logh = proc {
- cnt = bar.length
- $curbuf[1] = "#{pull ? 'Updating' : 'Installing'} plugins (#{cnt}/#{tot})"
- $curbuf[2] = '[' + bar.ljust(tot) + ']'
- VIM::command('normal! 2G')
- VIM::command('redraw')
- }
- where = proc { |name| (1..($curbuf.length)).find { |l| $curbuf[l] =~ /^[-+x*] #{name}:/ } }
- log = proc { |name, result, type|
- mtx.synchronize do
- ing = ![true, false].include?(type)
- bar += type ? '=' : 'x' unless ing
- b = case type
- when :install then '+' when :update then '*'
- when true, nil then '-' else
- VIM::command("call add(s:update.errors, '#{name}')")
- 'x'
- end
- result =
- if type || type.nil?
- ["#{b} #{name}: #{result.lines.to_a.last || 'OK'}"]
- elsif result =~ /^Interrupted|^Timeout/
- ["#{b} #{name}: #{result}"]
- else
- ["#{b} #{name}"] + result.lines.map { |l| " " << l }
- end
- if lnum = where.call(name)
- $curbuf.delete lnum
- lnum = 4 if ing && lnum > maxy
- end
- result.each_with_index do |line, offset|
- $curbuf.append((lnum || 4) - 1 + offset, line.gsub(/\e\[./, '').chomp)
- end
- logh.call
- end
- }
- bt = proc { |cmd, name, type, cleanup|
- tried = timeout = 0
- begin
- tried += 1
- timeout += limit
- fd = nil
- data = ''
- if iswin
- Timeout::timeout(timeout) do
- tmp = VIM::evaluate('tempname()')
- system("(#{cmd}) > #{tmp}")
- data = File.read(tmp).chomp
- File.unlink tmp rescue nil
- end
- else
- fd = IO.popen(cmd).extend(PlugStream)
- first_line = true
- log_prob = 1.0 / nthr
- while line = Timeout::timeout(timeout) { fd.get_line }
- data << line
- log.call name, line.chomp, type if name && (first_line || rand < log_prob)
- first_line = false
- end
- fd.close
- end
- [$? == 0, data.chomp]
- rescue Timeout::Error, Interrupt => e
- if fd && !fd.closed?
- killall fd.pid
- fd.close
- end
- cleanup.call if cleanup
- if e.is_a?(Timeout::Error) && tried < tries
- 3.downto(1) do |countdown|
- s = countdown > 1 ? 's' : ''
- log.call name, "Timeout. Will retry in #{countdown} second#{s} ...", type
- sleep 1
- end
- log.call name, 'Retrying ...', type
- retry
- end
- [false, e.is_a?(Interrupt) ? "Interrupted!" : "Timeout!"]
- end
- }
- main = Thread.current
- threads = []
- watcher = Thread.new {
- if vim7
- while VIM::evaluate('getchar(1)')
- sleep 0.1
- end
- else
- require 'io/console' # >= Ruby 1.9
- nil until IO.console.getch == 3.chr
- end
- mtx.synchronize do
- running = false
- threads.each { |t| t.raise Interrupt } unless vim7
- end
- threads.each { |t| t.join rescue nil }
- main.kill
- }
- refresh = Thread.new {
- while true
- mtx.synchronize do
- break unless running
- VIM::command('noautocmd normal! a')
- end
- sleep 0.2
- end
- } if VIM::evaluate('s:mac_gui') == 1
-
- clone_opt = VIM::evaluate('s:clone_opt').join(' ')
- progress = VIM::evaluate('s:progress_opt(1)')
- nthr.times do
- mtx.synchronize do
- threads << Thread.new {
- while pair = take1.call
- name = pair.first
- dir, uri, tag = pair.last.values_at *%w[dir uri tag]
- exists = File.directory? dir
- ok, result =
- if exists
- chdir = "#{cd} #{iswin ? dir : esc(dir)}"
- ret, data = bt.call "#{chdir} && git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url", nil, nil, nil
- current_uri = data.lines.to_a.last
- if !ret
- if data =~ /^Interrupted|^Timeout/
- [false, data]
- else
- [false, [data.chomp, "PlugClean required."].join($/)]
- end
- elsif !compare_git_uri(current_uri, uri)
- [false, ["Invalid URI: #{current_uri}",
- "Expected: #{uri}",
- "PlugClean required."].join($/)]
- else
- if pull
- log.call name, 'Updating ...', :update
- fetch_opt = (tag && File.exist?(File.join(dir, '.git/shallow'))) ? '--depth 99999999' : ''
- bt.call "#{chdir} && git fetch #{fetch_opt} #{progress} 2>&1", name, :update, nil
- else
- [true, skip]
- end
- end
- else
- d = esc dir.sub(%r{[\\/]+$}, '')
- log.call name, 'Installing ...', :install
- bt.call "git clone #{clone_opt unless tag} #{progress} #{uri} #{d} 2>&1", name, :install, proc {
- FileUtils.rm_rf dir
- }
- end
- mtx.synchronize { VIM::command("let s:update.new['#{name}'] = 1") } if !exists && ok
- log.call name, result, ok
- end
- } if running
- end
- end
- threads.each { |t| t.join rescue nil }
- logh.call
- refresh.kill if refresh
- watcher.kill
-EOF
-endfunction
-
-function! s:shellesc_cmd(arg, script)
- let escaped = substitute('"'.a:arg.'"', '[&|<>()@^!"]', '^&', 'g')
- return substitute(escaped, '%', (a:script ? '%' : '^') . '&', 'g')
-endfunction
-
-function! s:shellesc_ps1(arg)
- return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'"
-endfunction
-
-function! s:shellesc_sh(arg)
- return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'"
-endfunction
-
-" Escape the shell argument based on the shell.
-" Vim and Neovim's shellescape() are insufficient.
-" 1. shellslash determines whether to use single/double quotes.
-" Double-quote escaping is fragile for cmd.exe.
-" 2. It does not work for powershell.
-" 3. It does not work for *sh shells if the command is executed
-" via cmd.exe (ie. cmd.exe /c sh -c command command_args)
-" 4. It does not support batchfile syntax.
-"
-" Accepts an optional dictionary with the following keys:
-" - shell: same as Vim/Neovim 'shell' option.
-" If unset, fallback to 'cmd.exe' on Windows or 'sh'.
-" - script: If truthy and shell is cmd.exe, escape for batchfile syntax.
-function! plug#shellescape(arg, ...)
- if a:arg =~# '^[A-Za-z0-9_/:.-]\+$'
- return a:arg
- endif
- let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
- let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
- let script = get(opts, 'script', 1)
- if shell =~# 'cmd\(\.exe\)\?$'
- return s:shellesc_cmd(a:arg, script)
- elseif s:is_powershell(shell)
- return s:shellesc_ps1(a:arg)
- endif
- return s:shellesc_sh(a:arg)
-endfunction
-
-function! s:glob_dir(path)
- return map(filter(s:glob(a:path, '**'), 'isdirectory(v:val)'), 's:dirpath(v:val)')
-endfunction
-
-function! s:progress_bar(line, bar, total)
- call setline(a:line, '[' . s:lpad(a:bar, a:total) . ']')
-endfunction
-
-function! s:compare_git_uri(a, b)
- " See `git help clone'
- " https:// [user@] github.com[:port] / junegunn/vim-plug [.git]
- " [git@] github.com[:port] : junegunn/vim-plug [.git]
- " file:// / junegunn/vim-plug [/]
- " / junegunn/vim-plug [/]
- let pat = '^\%(\w\+://\)\='.'\%([^@/]*@\)\='.'\([^:/]*\%(:[0-9]*\)\=\)'.'[:/]'.'\(.\{-}\)'.'\%(\.git\)\=/\?$'
- let ma = matchlist(a:a, pat)
- let mb = matchlist(a:b, pat)
- return ma[1:2] ==# mb[1:2]
-endfunction
-
-function! s:format_message(bullet, name, message)
- if a:bullet != 'x'
- return [printf('%s %s: %s', a:bullet, a:name, s:lastline(a:message))]
- else
- let lines = map(s:lines(a:message), '" ".v:val')
- return extend([printf('x %s:', a:name)], lines)
- endif
-endfunction
-
-function! s:with_cd(cmd, dir, ...)
- let script = a:0 > 0 ? a:1 : 1
- return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd)
-endfunction
-
-function! s:system(cmd, ...)
- let batchfile = ''
- try
- let [sh, shellcmdflag, shrd] = s:chsh(1)
- if type(a:cmd) == s:TYPE.list
- " Neovim's system() supports list argument to bypass the shell
- " but it cannot set the working directory for the command.
- " Assume that the command does not rely on the shell.
- if has('nvim') && a:0 == 0
- return system(a:cmd)
- endif
- let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})'))
- if s:is_powershell(&shell)
- let cmd = '& ' . cmd
- endif
- else
- let cmd = a:cmd
- endif
- if a:0 > 0
- let cmd = s:with_cd(cmd, a:1, type(a:cmd) != s:TYPE.list)
- endif
- if s:is_win && type(a:cmd) != s:TYPE.list
- let [batchfile, cmd] = s:batchfile(cmd)
- endif
- return system(cmd)
- finally
- let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
- if s:is_win && filereadable(batchfile)
- call delete(batchfile)
- endif
- endtry
-endfunction
-
-function! s:system_chomp(...)
- let ret = call('s:system', a:000)
- return v:shell_error ? '' : substitute(ret, '\n$', '', '')
-endfunction
-
-function! s:git_validate(spec, check_branch)
- let err = ''
- if isdirectory(a:spec.dir)
- let result = [s:git_local_branch(a:spec.dir), s:git_origin_url(a:spec.dir)]
- let remote = result[-1]
- if empty(remote)
- let err = join([remote, 'PlugClean required.'], "\n")
- elseif !s:compare_git_uri(remote, a:spec.uri)
- let err = join(['Invalid URI: '.remote,
- \ 'Expected: '.a:spec.uri,
- \ 'PlugClean required.'], "\n")
- elseif a:check_branch && has_key(a:spec, 'commit')
- let sha = s:git_revision(a:spec.dir)
- if empty(sha)
- let err = join(add(result, 'PlugClean required.'), "\n")
- elseif !s:hash_match(sha, a:spec.commit)
- let err = join([printf('Invalid HEAD (expected: %s, actual: %s)',
- \ a:spec.commit[:6], sha[:6]),
- \ 'PlugUpdate required.'], "\n")
- endif
- elseif a:check_branch
- let current_branch = result[0]
- " Check tag
- let origin_branch = s:git_origin_branch(a:spec)
- if has_key(a:spec, 'tag')
- let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir)
- if a:spec.tag !=# tag && a:spec.tag !~ '\*'
- let err = printf('Invalid tag: %s (expected: %s). Try PlugUpdate.',
- \ (empty(tag) ? 'N/A' : tag), a:spec.tag)
- endif
- " Check branch
- elseif origin_branch !=# current_branch
- let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.',
- \ current_branch, origin_branch)
- endif
- if empty(err)
- let [ahead, behind] = split(s:lastline(s:system([
- \ 'git', 'rev-list', '--count', '--left-right',
- \ printf('HEAD...origin/%s', origin_branch)
- \ ], a:spec.dir)), '\t')
- if !v:shell_error && ahead
- if behind
- " Only mention PlugClean if diverged, otherwise it's likely to be
- " pushable (and probably not that messed up).
- let err = printf(
- \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n"
- \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind)
- else
- let err = printf("Ahead of origin/%s by %d commit(s).\n"
- \ .'Cannot update until local changes are pushed.',
- \ origin_branch, ahead)
- endif
- endif
- endif
- endif
- else
- let err = 'Not found'
- endif
- return [err, err =~# 'PlugClean']
-endfunction
-
-function! s:rm_rf(dir)
- if isdirectory(a:dir)
- return s:system(s:is_win
- \ ? 'rmdir /S /Q '.plug#shellescape(a:dir)
- \ : ['rm', '-rf', a:dir])
- endif
-endfunction
-
-function! s:clean(force)
- call s:prepare()
- call append(0, 'Searching for invalid plugins in '.g:plug_home)
- call append(1, '')
-
- " List of valid directories
- let dirs = []
- let errs = {}
- let [cnt, total] = [0, len(g:plugs)]
- for [name, spec] in items(g:plugs)
- if !s:is_managed(name)
- call add(dirs, spec.dir)
- else
- let [err, clean] = s:git_validate(spec, 1)
- if clean
- let errs[spec.dir] = s:lines(err)[0]
- else
- call add(dirs, spec.dir)
- endif
- endif
- let cnt += 1
- call s:progress_bar(2, repeat('=', cnt), total)
- normal! 2G
- redraw
- endfor
-
- let allowed = {}
- for dir in dirs
- let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1
- let allowed[dir] = 1
- for child in s:glob_dir(dir)
- let allowed[child] = 1
- endfor
- endfor
-
- let todo = []
- let found = sort(s:glob_dir(g:plug_home))
- while !empty(found)
- let f = remove(found, 0)
- if !has_key(allowed, f) && isdirectory(f)
- call add(todo, f)
- call append(line('$'), '- ' . f)
- if has_key(errs, f)
- call append(line('$'), ' ' . errs[f])
- endif
- let found = filter(found, 'stridx(v:val, f) != 0')
- end
- endwhile
-
- 4
- redraw
- if empty(todo)
- call append(line('$'), 'Already clean.')
- else
- let s:clean_count = 0
- call append(3, ['Directories to delete:', ''])
- redraw!
- if a:force || s:ask_no_interrupt('Delete all directories?')
- call s:delete([6, line('$')], 1)
- else
- call setline(4, 'Cancelled.')
- nnoremap <silent> <buffer> d :set opfunc=<sid>delete_op<cr>g@
- nmap <silent> <buffer> dd d_
- xnoremap <silent> <buffer> d :<c-u>call <sid>delete_op(visualmode(), 1)<cr>
- echo 'Delete the lines (d{motion}) to delete the corresponding directories'
- endif
- endif
- 4
- setlocal nomodifiable
-endfunction
-
-function! s:delete_op(type, ...)
- call s:delete(a:0 ? [line("'<"), line("'>")] : [line("'["), line("']")], 0)
-endfunction
-
-function! s:delete(range, force)
- let [l1, l2] = a:range
- let force = a:force
- let err_count = 0
- while l1 <= l2
- let line = getline(l1)
- if line =~ '^- ' && isdirectory(line[2:])
- execute l1
- redraw!
- let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1)
- let force = force || answer > 1
- if answer
- let err = s:rm_rf(line[2:])
- setlocal modifiable
- if empty(err)
- call setline(l1, '~'.line[1:])
- let s:clean_count += 1
- else
- delete _
- call append(l1 - 1, s:format_message('x', line[1:], err))
- let l2 += len(s:lines(err))
- let err_count += 1
- endif
- let msg = printf('Removed %d directories.', s:clean_count)
- if err_count > 0
- let msg .= printf(' Failed to remove %d directories.', err_count)
- endif
- call setline(4, msg)
- setlocal nomodifiable
- endif
- endif
- let l1 += 1
- endwhile
-endfunction
-
-function! s:upgrade()
- echo 'Downloading the latest version of vim-plug'
- redraw
- let tmp = s:plug_tempname()
- let new = tmp . '/plug.vim'
-
- try
- let out = s:system(['git', 'clone', '--depth', '1', s:plug_src, tmp])
- if v:shell_error
- return s:err('Error upgrading vim-plug: '. out)
- endif
-
- if readfile(s:me) ==# readfile(new)
- echo 'vim-plug is already up-to-date'
- return 0
- else
- call rename(s:me, s:me . '.old')
- call rename(new, s:me)
- unlet g:loaded_plug
- echo 'vim-plug has been upgraded'
- return 1
- endif
- finally
- silent! call s:rm_rf(tmp)
- endtry
-endfunction
-
-function! s:upgrade_specs()
- for spec in values(g:plugs)
- let spec.frozen = get(spec, 'frozen', 0)
- endfor
-endfunction
-
-function! s:status()
- call s:prepare()
- call append(0, 'Checking plugins')
- call append(1, '')
-
- let ecnt = 0
- let unloaded = 0
- let [cnt, total] = [0, len(g:plugs)]
- for [name, spec] in items(g:plugs)
- let is_dir = isdirectory(spec.dir)
- if has_key(spec, 'uri')
- if is_dir
- let [err, _] = s:git_validate(spec, 1)
- let [valid, msg] = [empty(err), empty(err) ? 'OK' : err]
- else
- let [valid, msg] = [0, 'Not found. Try PlugInstall.']
- endif
- else
- if is_dir
- let [valid, msg] = [1, 'OK']
- else
- let [valid, msg] = [0, 'Not found.']
- endif
- endif
- let cnt += 1
- let ecnt += !valid
- " `s:loaded` entry can be missing if PlugUpgraded
- if is_dir && get(s:loaded, name, -1) == 0
- let unloaded = 1
- let msg .= ' (not loaded)'
- endif
- call s:progress_bar(2, repeat('=', cnt), total)
- call append(3, s:format_message(valid ? '-' : 'x', name, msg))
- normal! 2G
- redraw
- endfor
- call setline(1, 'Finished. '.ecnt.' error(s).')
- normal! gg
- setlocal nomodifiable
- if unloaded
- echo "Press 'L' on each line to load plugin, or 'U' to update"
- nnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr>
- xnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr>
- end
-endfunction
-
-function! s:extract_name(str, prefix, suffix)
- return matchstr(a:str, '^'.a:prefix.' \zs[^:]\+\ze:.*'.a:suffix.'$')
-endfunction
-
-function! s:status_load(lnum)
- let line = getline(a:lnum)
- let name = s:extract_name(line, '-', '(not loaded)')
- if !empty(name)
- call plug#load(name)
- setlocal modifiable
- call setline(a:lnum, substitute(line, ' (not loaded)$', '', ''))
- setlocal nomodifiable
- endif
-endfunction
-
-function! s:status_update() range
- let lines = getline(a:firstline, a:lastline)
- let names = filter(map(lines, 's:extract_name(v:val, "[x-]", "")'), '!empty(v:val)')
- if !empty(names)
- echo
- execute 'PlugUpdate' join(names)
- endif
-endfunction
-
-function! s:is_preview_window_open()
- silent! wincmd P
- if &previewwindow
- wincmd p
- return 1
- endif
-endfunction
-
-function! s:find_name(lnum)
- for lnum in reverse(range(1, a:lnum))
- let line = getline(lnum)
- if empty(line)
- return ''
- endif
- let name = s:extract_name(line, '-', '')
- if !empty(name)
- return name
- endif
- endfor
- return ''
-endfunction
-
-function! s:preview_commit()
- if b:plug_preview < 0
- let b:plug_preview = !s:is_preview_window_open()
- endif
-
- let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}')
- if empty(sha)
- let name = matchstr(getline('.'), '^- \zs[^:]*\ze:$')
- if empty(name)
- return
- endif
- let title = 'HEAD@{1}..'
- let command = 'git diff --no-color HEAD@{1}'
- else
- let title = sha
- let command = 'git show --no-color --pretty=medium '.sha
- let name = s:find_name(line('.'))
- endif
-
- if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir)
- return
- endif
-
- if exists('g:plug_pwindow') && !s:is_preview_window_open()
- execute g:plug_pwindow
- execute 'e' title
- else
- execute 'pedit' title
- wincmd P
- endif
- setlocal previewwindow filetype=git buftype=nofile bufhidden=wipe nobuflisted modifiable
- let batchfile = ''
- try
- let [sh, shellcmdflag, shrd] = s:chsh(1)
- let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && '.command
- if s:is_win
- let [batchfile, cmd] = s:batchfile(cmd)
- endif
- execute 'silent %!' cmd
- finally
- let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
- if s:is_win && filereadable(batchfile)
- call delete(batchfile)
- endif
- endtry
- setlocal nomodifiable
- nnoremap <silent> <buffer> q :q<cr>
- wincmd p
-endfunction
-
-function! s:section(flags)
- call search('\(^[x-] \)\@<=[^:]\+:', a:flags)
-endfunction
-
-function! s:format_git_log(line)
- let indent = ' '
- let tokens = split(a:line, nr2char(1))
- if len(tokens) != 5
- return indent.substitute(a:line, '\s*$', '', '')
- endif
- let [graph, sha, refs, subject, date] = tokens
- let tag = matchstr(refs, 'tag: [^,)]\+')
- let tag = empty(tag) ? ' ' : ' ('.tag.') '
- return printf('%s%s%s%s%s (%s)', indent, graph, sha, tag, subject, date)
-endfunction
-
-function! s:append_ul(lnum, text)
- call append(a:lnum, ['', a:text, repeat('-', len(a:text))])
-endfunction
-
-function! s:diff()
- call s:prepare()
- call append(0, ['Collecting changes ...', ''])
- let cnts = [0, 0]
- let bar = ''
- let total = filter(copy(g:plugs), 's:is_managed(v:key) && isdirectory(v:val.dir)')
- call s:progress_bar(2, bar, len(total))
- for origin in [1, 0]
- let plugs = reverse(sort(items(filter(copy(total), (origin ? '' : '!').'(has_key(v:val, "commit") || has_key(v:val, "tag"))'))))
- if empty(plugs)
- continue
- endif
- call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
- for [k, v] in plugs
- let branch = s:git_origin_branch(v)
- if len(branch)
- let range = origin ? '..origin/'.branch : 'HEAD@{1}..'
- let cmd = ['git', 'log', '--graph', '--color=never']
- if s:git_version_requirement(2, 10, 0)
- call add(cmd, '--no-show-signature')
- endif
- call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range])
- if has_key(v, 'rtp')
- call extend(cmd, ['--', v.rtp])
- endif
- let diff = s:system_chomp(cmd, v.dir)
- if !empty(diff)
- let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
- call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
- let cnts[origin] += 1
- endif
- endif
- let bar .= '='
- call s:progress_bar(2, bar, len(total))
- normal! 2G
- redraw
- endfor
- if !cnts[origin]
- call append(5, ['', 'N/A'])
- endif
- endfor
- call setline(1, printf('%d plugin(s) updated.', cnts[0])
- \ . (cnts[1] ? printf(' %d plugin(s) have pending updates.', cnts[1]) : ''))
-
- if cnts[0] || cnts[1]
- nnoremap <silent> <buffer> <plug>(plug-preview) :silent! call <SID>preview_commit()<cr>
- if empty(maparg("\<cr>", 'n'))
- nmap <buffer> <cr> <plug>(plug-preview)
- endif
- if empty(maparg('o', 'n'))
- nmap <buffer> o <plug>(plug-preview)
- endif
- endif
- if cnts[0]
- nnoremap <silent> <buffer> X :call <SID>revert()<cr>
- echo "Press 'X' on each block to revert the update"
- endif
- normal! gg
- setlocal nomodifiable
-endfunction
-
-function! s:revert()
- if search('^Pending updates', 'bnW')
- return
- endif
-
- let name = s:find_name(line('.'))
- if empty(name) || !has_key(g:plugs, name) ||
- \ input(printf('Revert the update of %s? (y/N) ', name)) !~? '^y'
- return
- endif
-
- call s:system('git reset --hard HEAD@{1} && git checkout '.plug#shellescape(g:plugs[name].branch).' --', g:plugs[name].dir)
- setlocal modifiable
- normal! "_dap
- setlocal nomodifiable
- echo 'Reverted'
-endfunction
-
-function! s:snapshot(force, ...) abort
- call s:prepare()
- setf vim
- call append(0, ['" Generated by vim-plug',
- \ '" '.strftime("%c"),
- \ '" :source this file in vim to restore the snapshot',
- \ '" or execute: vim -S snapshot.vim',
- \ '', '', 'PlugUpdate!'])
- 1
- let anchor = line('$') - 3
- let names = sort(keys(filter(copy(g:plugs),
- \'has_key(v:val, "uri") && isdirectory(v:val.dir)')))
- for name in reverse(names)
- let sha = has_key(g:plugs[name], 'commit') ? g:plugs[name].commit : s:git_revision(g:plugs[name].dir)
- if !empty(sha)
- call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha))
- redraw
- endif
- endfor
-
- if a:0 > 0
- let fn = s:plug_expand(a:1)
- if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?'))
- return
- endif
- call writefile(getline(1, '$'), fn)
- echo 'Saved as '.a:1
- silent execute 'e' s:esc(fn)
- setf vim
- endif
-endfunction
-
-function! s:split_rtp()
- return split(&rtp, '\\\@<!,')
-endfunction
-
-let s:first_rtp = s:escrtp(get(s:split_rtp(), 0, ''))
-let s:last_rtp = s:escrtp(get(s:split_rtp(), -1, ''))
-
-if exists('g:plugs')
- let g:plugs_order = get(g:, 'plugs_order', keys(g:plugs))
- call s:upgrade_specs()
- call s:define_commands()
-endif
-
-let &cpo = s:cpo_save
-unlet s:cpo_save
diff --git a/home-config/spotify-player/app.toml b/home-config/spotify-player/app.toml
deleted file mode 100644
index 4eac5e4..0000000
--- a/home-config/spotify-player/app.toml
+++ /dev/null
@@ -1,34 +0,0 @@
-theme = "dracula"
-client_id = "4b1219bdc29945bc8ca914f80a8a6a47"
-client_port = 8888
-playback_format = """
-{track} • {artists}
-{album}
-{metadata}"""
-tracks_playback_limit = 50
-app_refresh_duration_in_ms = 32
-playback_refresh_duration_in_ms = 0
-cover_image_refresh_duration_in_ms = 2000
-page_size_in_rows = 20
-play_icon = "▶"
-pause_icon = "▌▌"
-liked_icon = "♥"
-border_type = "Plain"
-progress_bar_type = "Rectangle"
-playback_window_position = "Top"
-cover_img_length = 9
-cover_img_width = 5
-cover_img_scale = 1.0
-playback_window_width = 6
-enable_media_control = true
-enable_streaming = "DaemonOnly"
-enable_cover_image_cache = true
-default_device = "RyanThinkpad"
-
-[copy_command]
-command = "wlcopy"
-args = []
-
-[notify_format]
-summary = "{track} • {artists}"
-body = "{album}"
diff --git a/home-config/ssh/config b/home-config/ssh/config
deleted file mode 100644
index 1b8e4bf..0000000
--- a/home-config/ssh/config
+++ /dev/null
@@ -1,16 +0,0 @@
-Match host * exec "gpg-connect-agent UPDATESTARTUPTTY /bye"
-
-Host rocApex
- HostName 129.158.232.104
- User root
-
-Host linode
- HostName 97.107.142.58
- User root
-
-Host hetzner
- HostName 5.161.207.21
- User root
-
-Host *
- KexAlgorithms -sntrup761x25519-sha512@openssh.com
diff --git a/home-config/waybar/config b/home-config/waybar/config
deleted file mode 100644
index 99a7bef..0000000
--- a/home-config/waybar/config
+++ /dev/null
@@ -1,154 +0,0 @@
-{
- "layer": "top",
- "position": "top",
- "height": 30,
-
- "modules-left": ["hyprland/workspaces", "hyprland/submap"],
- "modules-center": ["hyprland/window"],
- "modules-right": ["tray", "custom/spotify", "privacy", "custom/weather", "custom/mail", "custom/storage", "backlight", "bluetooth", "pulseaudio", "network", "idle_inhibitor", "battery", "clock"],
- "hyprland/submap": {
- "format": " {}"
- },
- "hyprland/workspaces": {
- "format": "{id}",
- "all-outputs": false,
- "disable-scroll": true
- },
- "hyprland/window": {
- "max-length": 80,
- "tooltip": false,
- "separate-outputs": true
- },
- "clock": {
- "format": "{:%a %d %b %H:%M}",
- "tooltip": false
- },
- "battery": {
- "format": "{capacity}% {icon}",
- "format-alt": "{time} {icon}",
- "format-icons": ["", "", "", "", ""],
- "format-charging": "{capacity}% ",
- "interval": 30,
- "states": {
- "warning": 25,
- "critical": 10
- },
- "tooltip": false,
- "bat":"BAT1"
- },
- "bluetooth": {
- "format": "󰂯",
- "format-disabled": "󰂲",
- "format-connected": "󰂯",
- "format-connected-battery": "󰂱 {device_battery_percentage}%",
- "on-click": "blueman-manager",
- "tooltip-format": "{controller_alias}\t{controller_address}\n\n{num_connections} connected",
- "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}",
- "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
- "tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%"
- },
- "network": {
- "format-alt": "{ipaddr}/{cidr} {icon} {bandwidthTotalBytes}󰹹",
- "format": "{ipaddr}/{cidr} {icon}",
- "format-alt-click": "click-right",
- "format-icons": {
- "wifi": ["󰤟", "󰤢" ,"󰤥", "󰤨"],
- "ethernet": [""],
- "disconnected": ["󰤭"]
- },
- "on-click": "foot -t alacritty doas nmtui",
- "tooltip": false
- },
- "privacy": {
- "icon-spacing":4,
- "icon-size":18,
- "transition-duration":250,
- "modules": [
- {
- "type":"screenshare",
- "tooltip":true,
- "tooltip-icon-size":24
- },
- {
- "type":"audio-in",
- "tooltip":true,
- "tooltip-icon-size":24
- }
- ]
- },
- "pulseaudio": {
- "format-alt": "{icon}",
- "format": "{volume} {icon}",
- "format-alt-click": "click-right",
- "format-muted": "",
- "format-icons": {
- "phone": [" ", " ", " ", " "],
- "default": ["", "", "", ""]
- },
- "scroll-step": 1,
- "on-click": "pavucontrol",
- "tooltip": false
- },
- "custom/spotify": {
- "interval": 2,
- "return-type": "json",
- "exec": "~/.config/waybar/modules/spotify.sh",
- "exec-if": "~/.config/waybar/modules/check-for-music.sh",
- "escape": true,
- "on-click": "playerctl play-pause"
- },
- "custom/storage": {
- "format-alt": "{} ",
- "format": "{percentage}% ",
- "format-alt-click": "click-right",
- "return-type": "json",
- "interval": 60,
- "exec": "~/.config/waybar/modules/storage.sh"
- },
- "backlight": {
- "format-alt": "{icon}",
- "format": "{percent}% {icon}",
- "format-alt-click": "click-right",
- "format-icons": ["", ""],
- "on-scroll-down": "light -A 1",
- "on-scroll-up": "light -U 1"
- },
- "custom/weather_OLD": {
- "format-alt": "{}",
- "format": "{alt}: {}",
- "format-alt-click": "click-right",
- "interval": 1800,
- "return-type": "json",
- "on-click": "foot -a ala-wttr -H curl https://v2.wttr.in",
- "exec": "~/.config/waybar/modules/weather.sh",
- "exec-if": "ping wttr.in -c1"
- },
- "custom/weather": {
- "format": "{} °F",
- "tooltip": true,
- "interval": 3600,
- "exec": "exit=101; while [ $exit = 101 ]; do wttrbar --main-indicator temp_F --fahrenheit; exit=$(echo $?); sleep 1; done",
- "on-click": "foot -a ala-wttr -H curl https://v2.wttr.in",
- "return-type": "json"
- },
- "idle_inhibitor": {
- "format": "{icon}",
- "format-icons": {
- "activated": "",
- "deactivated": ""
- },
- "tooltip": false
- },
- "custom/mail": {
- "format": "",
- "format-alt": "{alt} ",
- "format-alt-click": "click-right",
- "interval": 60,
- "return-type": "json",
- "exec": "~/.config/waybar/modules/mail.py",
- "tooltip": false
- },
- "tray": {
- "icon-size": 18
- }
-}
diff --git a/home-config/waybar/modules/check-for-music.sh b/home-config/waybar/modules/check-for-music.sh
deleted file mode 100755
index 3b735a2..0000000
--- a/home-config/waybar/modules/check-for-music.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-if [[ $(playerctl metadata --format '{{lc(status)}}' | grep playing) -eq 0 ]]; then
- exit 0
-else
- exit 1
-fi
diff --git a/home-config/waybar/modules/spotify.sh b/home-config/waybar/modules/spotify.sh
deleted file mode 100755
index fc732a1..0000000
--- a/home-config/waybar/modules/spotify.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-
-class=$(playerctl metadata --format '{{lc(status)}}')
-icon="󰎆"
-
-if [[ $class == "playing" ]]; then
- info=$(playerctl metadata --format '{{artist}} - {{title}}')
- if [[ ${#info} > 40 ]]; then
- info=$(playerctl metadata --format '{{title}}' | cut -c1-40)"..."
- fi
- text=$info" "$icon
-elif [[ $class == "paused" ]]; then
- text=$icon
-elif [[ $class == "stopped" ]]; then
- text=""
-fi
-
-echo -e "{\"text\":\""$text"\", \"class\":\""$class"\"}"
-
diff --git a/home-config/waybar/modules/storage.sh b/home-config/waybar/modules/storage.sh
deleted file mode 100755
index 90cc3dc..0000000
--- a/home-config/waybar/modules/storage.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-
-mount="/"
-warning=20
-critical=10
-
-df -h -P -l "$mount" | awk -v warning=$warning -v critical=$critical '
-/\/.*/ {
- text=$4
- tooltip="Filesystem: "$1"\rSize: "$2"\rUsed: "$3"\rAvail: "$4"\rUse%: "$5"\rMounted on: "$6
- use=$5
- exit 0
-}
-END {
- class=""
- gsub(/%$/,"",use)
- if ((100 - use) < critical) {
- class="critical"
- } else if ((100 - use) < warning) {
- class="warning"
- }
- print "{\"text\":\""text"\", \"percentage\":"use",\"tooltip\":\""tooltip"\", \"class\":\""class"\"}"
-}
-'
-
diff --git a/home-config/waybar/modules/weather.sh b/home-config/waybar/modules/weather.sh
deleted file mode 100755
index 01faffc..0000000
--- a/home-config/waybar/modules/weather.sh
+++ /dev/null
@@ -1,77 +0,0 @@
-cachedir=~/.cache/rbn
-cachefile=${0##*/}-$1
-
-if [ ! -d $cachedir ]; then
- mkdir -p $cachedir
-fi
-
-if [ ! -f $cachedir/$cachefile ]; then
- touch $cachedir/$cachefile
-fi
-
-# Save current IFS
-SAVEIFS=$IFS
-# Change IFS to new line.
-IFS=$'\n'
-
-cacheage=$(($(date +%s) - $(stat -c '%Y' "$cachedir/$cachefile")))
-if [ $cacheage -gt 1740 ] || [ ! -s $cachedir/$cachefile ]; then
- data=($(curl -s https://en.wttr.in/$1\?0qnT 2>&1))
- echo ${data[0]} | cut -f1 -d, > $cachedir/$cachefile
- echo ${data[1]} | sed -E 's/^.{15}//' >> $cachedir/$cachefile
- echo ${data[2]} | sed -E 's/^.{15}//' >> $cachedir/$cachefile
-fi
-
-weather=($(cat $cachedir/$cachefile))
-
-# Restore IFSClear
-IFS=$SAVEIFS
-
-temperature=$(echo ${weather[2]} | sed -E 's/([[:digit:]]+)\.\./\1 to /g')
-
-#echo ${weather[1]##*,}
-
-# https://fontawesome.com/icons?s=solid&c=weather
-case $(echo ${weather[1]##*,} | tr '[:upper:]' '[:lower:]') in
-"clear" | "sunny")
- condition=""
- ;;
-"partly cloudy")
- condition=""
- ;;
-"cloudy")
- condition=""
- ;;
-"overcast")
- condition=""
- ;;
-"mist" | "fog" | "freezing fog")
- condition="敖"
- ;;
-"patchy rain possible" | "patchy light drizzle" | "light drizzle" | "patchy light rain" | "light rain" | "light rain shower" | "rain")
- condition="殺"
- ;;
-"moderate rain at times" | "moderate rain" | "heavy rain at times" | "heavy rain" | "moderate or heavy rain shower" | "torrential rain shower" | "rain shower")
- condition=""
- ;;
-"patchy snow possible" | "patchy sleet possible" | "patchy freezing drizzle possible" | "freezing drizzle" | "heavy freezing drizzle" | "light freezing rain" | "moderate or heavy freezing rain" | "light sleet" | "ice pellets" | "light sleet showers" | "moderate or heavy sleet showers")
- condition="流"
- ;;
-"blowing snow" | "moderate or heavy sleet" | "patchy light snow" | "light snow" | "light snow showers")
- condition="ﰕ"
- ;;
-"blizzard" | "patchy moderate snow" | "moderate snow" | "patchy heavy snow" | "heavy snow" | "moderate or heavy snow with thunder" | "moderate or heavy snow showers")
- condition=""
- ;;
-"thundery outbreaks possible" | "patchy light rain with thunder" | "moderate or heavy rain with thunder" | "patchy light snow with thunder")
- condition=""
- ;;
-*)
- condition=""
- echo -e "{\"text\":\""$condition"\", \"alt\":\""${weather[0]}"\", \"tooltip\":\""${weather[0]}: $temperature ${weather[1]}"\"}"
- ;;
-esac
-
-#echo $temp $condition
-
-echo -e "{\"text\":\""$temperature $condition"\", \"alt\":\""${weather[0]}"\", \"tooltip\":\""${weather[0]}: $temperature ${weather[1]}"\"}"
diff --git a/home-config/waybar/style.css b/home-config/waybar/style.css
deleted file mode 100644
index 548056f..0000000
--- a/home-config/waybar/style.css
+++ /dev/null
@@ -1,77 +0,0 @@
-* {
- border: none;
- border-radius: 0;
- font-family: AnonymicePro Nerd Font;
- font-size: 15px;
- box-shadow: none;
- text-shadow: none;
- transition-duration: 0s;
- color: white;
-}
-
-#waybar {
- background-color:rgba(0,0,0,0.25);
- color: white;
-}
-
-window {
- color: rgba(217, 216, 216, 1);
- background: rgba(35, 31, 32, 0.00);
-}
-
-window#waybar.solo {
- color: rgba(217, 216, 216, 1);
- background: rgba(35, 31, 32, 0.85);
-}
-
-#workspaces {
- margin: 0 5px;
-}
-
-#workspaces button {
- padding: 0 5px;
- color: rgba(217, 216, 216, 0.4);
-}
-
-#workspaces button.visible {
- color: rgba(217, 216, 216, 1);
-}
-
-#workspaces button.active {
- border-top: 3px solid rgba(217, 216, 216, 1);
- border-bottom: 3px solid rgba(217, 216, 216, 0);
-}
-
-#workspaces button.urgent {
- color: rgba(238, 46, 36, 1);
-}
-
-#mode, #battery, #cpu, #memory, #network, #bluetooth, #pulseaudio, #idle_inhibitor, #backlight, #custom-storage, #custom-spotify, #custom-weather, #custom-mail {
- margin: 0px 6px 0px 10px;
- min-width: 25px;
-}
-
-#clock {
- margin: 0px 16px 0px 10px;
- min-width: 140px;
-}
-
-#battery.warning {
- color: rgba(255, 210, 4, 1);
-}
-
-#battery.critical {
- color: rgba(238, 46, 36, 1);
-}
-
-#battery.charging {
- color: rgba(217, 216, 216, 1);
-}
-
-#custom-storage.warning {
- color: rgba(255, 210, 4, 1);
-}
-
-#custom-storage.critical {
- color: rgba(238, 46, 36, 1);
-}
diff --git a/modules/ryan-bootloader/uki.scm b/modules/ryan-bootloader/uki.scm
new file mode 100644
index 0000000..dce3917
--- /dev/null
+++ b/modules/ryan-bootloader/uki.scm
@@ -0,0 +1,115 @@
+(define-module (ryan-bootloader uki)
+ #:use-module (gnu bootloader)
+ #:use-module (ryan-packages bootloaders)
+ #:use-module (gnu packages bootloaders)
+ #:use-module (gnu packages efi)
+ #:use-module (gnu packages linux)
+ #:use-module (guix gexp)
+ #:use-module (guix modules)
+ #:use-module (srfi srfi-1)
+ #:export (uefi-uki-bootloader uefi-uki-signed-bootloader))
+
+;; config generator makes script creating uki images
+;; install runs script
+;; install device is path to uefi dir
+(define vendor "Guix")
+(define script-loc "/boot/install-uki.scm")
+
+(define* (uefi-uki-configuration-file #:optional cert privkey)
+ (lambda* (config entries #:key (old-entries '()) #:allow-other-keys)
+
+ (define (menu-entry->args e)
+ (let* ((boot (bootloader-configuration-bootloader config))
+ (stub (bootloader-package boot)))
+ #~(list "--os-release" #$(menu-entry-label e)
+ "--linux" #$(menu-entry-linux e) "--initrd" #$(menu-entry-initrd e)
+ "--cmdline" (string-join (list #$@(menu-entry-linux-arguments e)))
+ "--stub" #$(file-append stub "/libexec/" (systemd-stub-name))
+ #$@(if cert #~("--secureboot-certificate" #$cert) #~())
+ #$@(if privkey #~("--secureboot-private-key" #$privkey) #~()))))
+
+ (define (enum-filenames . args) ; same args as iota
+ (map (lambda (n) (string-append (number->string n) ".efi"))
+ (apply iota (map length args))))
+
+ (program-file "install-uki"
+ (with-imported-modules (source-module-closure '((guix build syscalls)
+ (guix build utils)))
+ #~(let* ((target (cadr (command-line)))
+ (vendir (string-append target "/EFI/" #$vendor))
+ (schema (string-append vendir "/boot.mgr"))
+ (findmnt #$(file-append util-linux "/bin/findmnt"))
+ (efibootmgr #$(file-append efibootmgr "/sbin/efibootmgr")))
+ (use-modules (guix build syscalls) (guix build utils)
+ (ice-9 popen) (ice-9 textual-ports))
+
+ (define (out name) (string-append vendir "/" name))
+ (define disk
+ (call-with-port
+ (open-pipe* OPEN_READ findmnt "-fnro" "SOURCE" "-T" target)
+ (lambda (port) (get-line port)))) ; only 1 line: the device
+ (define part
+ (substring disk (- (string-length disk) 1)))
+
+ ;; delete all boot entries and files we control
+ (when (file-exists? schema)
+ (call-with-input-file schema
+ (lambda (port)
+ (for-each (lambda (l)
+ (unless (string-null? l)
+ (system* efibootmgr "-B" "-L" l "-q")))
+ (string-split (get-string-all port) #\lf)))))
+ (when (directory-exists? vendir) (delete-file-recursively vendir))
+ (mkdir-p vendir)
+
+ (define (install port boot? oos)
+ (lambda (args label name)
+ (let ((minbytes (* 2 (stat:size (stat #$script-loc)))))
+ (put-string port label)
+ (put-char port #\lf)
+ (force-output port) ; make sure space is alloc'd
+ (apply invoke #$(file-append ukify "/bin/ukify")
+ "build" "-o" (out name) args)
+ ;; make sure we have enough space for next install-uki.scm
+ (when (and oos (< (free-disk-space vendir) minbytes)) (oos))
+ (invoke efibootmgr (if boot? "-c" "-C") "-L" label "--disk" disk "--part" part
+ "--loader" (string-append "\\EFI\\" #$vendor "\\" name) "-q"))))
+
+ (call-with-output-file schema
+ (lambda (port) ; prioritize latest UKIs in limited ESP space
+ (for-each (install port #t #f)
+ (list #$@(map-in-order menu-entry->args entries))
+ (list #$@(map-in-order menu-entry-label entries))
+ (list #$@(enum-filenames entries)))
+ (for-each ; old-entries can fail (out of space) we don't care
+ (lambda (args label name)
+ (define (cleanup . _) ; do exit early if out of space tho
+ (when (file-exists? (out name)) (delete-file (out name)))
+ (exit))
+ (with-exception-handler cleanup
+ (lambda _ ((install port #f cleanup) args label name))))
+ (list #$@(map-in-order menu-entry->args old-entries))
+ (list #$@(map-in-order menu-entry-label old-entries))
+ (list #$@(enum-filenames old-entries entries))))))))))
+
+(define install-uefi-uki
+ #~(lambda (bootloader target mount-point)
+ (invoke (string-append mount-point #$script-loc)
+ (string-append mount-point target))))
+
+(define* (make-uefi-uki-bootloader #:optional cert privkey)
+ (bootloader
+ (name 'uefi-uki)
+ (package systemd-stub)
+ (installer install-uefi-uki)
+ (disk-image-installer #f)
+ (configuration-file script-loc)
+ (configuration-file-generator (uefi-uki-configuration-file cert privkey))))
+
+;; IMPORTANT NOTE: if bootloader install fails, do not turn off your computer! until
+;; install succeeds, your system is unbootable.
+(define uefi-uki-bootloader (make-uefi-uki-bootloader))
+;; use ukify genkey to generate cert and privkey. DO NOT include in store.
+(define (uefi-uki-signed-bootloader cert privkey)
+ (make-uefi-uki-bootloader cert privkey))
+
diff --git a/modules/ryan-config/base-system.scm b/modules/ryan-config/base-system.scm
index fe41181..d84744b 100644
--- a/modules/ryan-config/base-system.scm
+++ b/modules/ryan-config/base-system.scm
@@ -4,6 +4,8 @@
#:use-module (gnu system setuid)
#:use-module (gnu packages admin)
#:use-module (gnu packages avahi)
+ #:use-module (gnu packages gnome)
+ #:use-module (gnu packages wm)
#:use-module (guix packages)
#:use-module (gnu packages shells)
#:use-module (guix build-system trivial)
@@ -12,11 +14,14 @@
#:use-module (gnu packages spice)
#:use-module (srfi srfi-1)
#:use-module (ryan-packages freedesktop)
+ ;#:use-module (ryan-packages hyprland)
#:use-module (ryan-packages wm)
#:use-module (ryan-packages virtualization)
#:use-module (ryan-packages linux)
+ #:use-module (ryan-packages login)
#:use-module (ryan-packages networking)
- #:use-module (rosenthal packages wm)
+ #:use-module (ryan-packages package-management)
+ #:use-module (rosenthal services networking)
#:use-module (gnu packages security-token)
#:use-module (gnu services security-token)
#:use-module (gnu services cups)
@@ -24,7 +29,8 @@
#:use-module (gnu services networking)
#:use-module (gnu services xorg)
#:use-module (gnu services ssh)
- #:use-module (gnu services nix)
+ #:use-module (ryan-services nix)
+ #:use-module (ryan-services networking)
#:use-module (gnu services sound)
#:use-module (gnu services docker)
#:use-module (gnu services avahi)
@@ -100,7 +106,7 @@
(define-public base-operating-system
(operating-system
- (kernel linux-6.8)
+ (kernel linux)
(firmware (list linux-firmware))
(locale "en_US.utf8")
(timezone "America/New_York")
@@ -112,7 +118,7 @@
(name "ryan")
(comment "Ryan")
(group "users")
- ;(shell (file-append zsh "/bin/zsh"))
+ (shell (file-append zsh "/bin/zsh"))
(home-directory "/home/ryan")
(supplementary-groups '("wheel" "netdev" "audio" "video" "lp" "plugdev" "docker" "libvirt" "kvm" "dialout")))
%base-user-accounts))
@@ -120,47 +126,50 @@
;; Packages installed system-wide. Users can also install packages
;; under their own account: use 'guix search KEYWORD' to search
;; for packages and 'guix install PACKAGE' to install a package.
- (packages (append (map specification->package (list "sway"
- ;"hyprland"
- "swaybg"
- ;"swayidle"
- ;"swaylock-effects"
- "fuzzel"
- "foot"
- "pinentry-qt"
- "adwaita-icon-theme"
- "hicolor-icon-theme"
- "git"
- "nss-certs"
- ;"waybar"
- "gnupg"
- "light"
- "avahi"
- "mako"
- "grim"
- "grimblast"
- "slurp"
- "wl-clipboard"
- ;"bluez"
- ;"blueman"
- "ldacbt"
- "libfreeaptx"
- "libfdk"
- "opendoas"
- ;"xdg-desktop-portal-wlr"
- "xdg-desktop-portal"
- "xdg-desktop-portal-gtk"
- "v4l2loopback-linux-module"
- "pipewire"
- "docker"
- ;"libvirt" ;New version inherited from service
- ;"virt-manager"
- "dconf"
- "wireplumber"
- "wireshark"
- "zsh"))
- (list my-ca-certs swaylock-effects-new waybar-new xdg-desktop-portal-hyprland-ryan hyprland-temp virt-manager-ovmf bluez-ryan blueman-ryan swayidle-new)
- %my-base-packages ))
+ (packages (append (map specification->package (list ;"sway"
+ ;"hyprland"
+ ;"swaybg"
+ ;"swayidle"
+ ;"swaylock-effects"
+ ;"fuzzel"
+ ;"foot"
+ "linux-pam" ; installed directly to get libs in profile directly
+ ;"pinentry-qt"
+ "adwaita-icon-theme"
+ "hicolor-icon-theme"
+ ;"git"
+ ;"waybar-experimental"
+ ;"gnupg"
+ "light"
+ "avahi"
+ ;"mako"
+ ;"grim"
+ ;"grimblast"
+ ;"slurp"
+ ;"wl-clipboard"
+ ;"bluez"
+ ;"blueman"
+ "ldacbt"
+ "libfreeaptx"
+ "libfdk"
+ "opendoas"
+ ;"xdg-desktop-portal-wlr"
+ ;"xdg-desktop-portal"
+ ;"xdg-desktop-portal-gtk"
+ "v4l2loopback-linux-module"
+ "pipewire"
+ "docker"
+ ;"libvirt" ;New version inherited from service
+ ;"virt-manager"
+ "dconf"
+ "wireplumber"
+ "wireshark"
+ ;"openconnect"
+ ;"openconnect-sso"
+ ;"webkitgtk-with-libsoup2" ; Needed for Go wails development
+ "zsh"))
+ (list my-ca-certs virt-manager-ovmf bluez-ryan netbird-bin) ;neovim-ryan)
+ %my-base-packages ))
;; Below is the list of system services. To search for available
;; services, run 'guix system search KEYWORD' in a terminal.
@@ -180,14 +189,66 @@
(publish? #f) ;; do not advertise this machine
(publish-workstation? #f))) ;; do not advertise, I want this to be as silent as possible
(service docker-service-type)
- (service nix-service-type)
+ ; Tailscale daemon from rosenthal
+ ; (service tailscale-service-type
+ ; (tailscale-configuration
+ ; (socket "/var/run/tailscale/tailscaled.sock")))
+ (service netbird-service-type)
+ (service containerd-service-type)
+ (service nix-service-type
+ (nix-configuration
+ (package nix-ryan)))
+ (simple-service 'hyprlock-pam pam-root-service-type
+ (list
+ (pam-service
+ (name "hyprlock")
+ (auth
+ (list
+ (pam-entry (control "include")
+ (module "login")))))))
+ ; (simple-service 'ly-pam pam-root-service-type
+ ; (list
+ ; (pam-service
+ ; (name "ly")
+ ; (account
+ ; (list
+ ; (pam-entry (control "required")
+ ; (module "pam_unix.so"))))
+ ; (auth
+ ; (list
+ ; (pam-entry (control "required")
+ ; (module "pam_unix.so"))))
+ ; (password
+ ; (list
+ ; (pam-entry (control "required")
+ ; (module "pam_unix.so")
+ ; (arguments (list "sha512" "shadow")))))
+ ; (session
+ ; (list
+ ; (pam-entry (control "required")
+ ; (module "/gnu/store/4lhhf88iz9pdr624z5hnq2avlk1ny4ga-elogind-255.17/lib/security/pam_elogind.so")
+ ; (arguments (list "debug=yes")))
+ ; (pam-entry (control "required")
+ ; (module "pam_env.so"))
+ ; (pam-entry (control "required")
+ ; (module "pam_unix.so")))))))
+ (service kmscon-service-type
+ (kmscon-configuration
+ (virtual-terminal "tty7")
+ (login-program #~(string-append #$ly "/bin/ly"))))
(service libvirt-service-type
(libvirt-configuration
(libvirt libvirt-ovmf)
(unix-sock-group "libvirt")))
(service virtlog-service-type)
+ ;(service screen-locker-service-type
+ ; (screen-locker-configuration
+ ; (name "hyprlock")
+ ; (program (file-append swaylock "/bin/swaylock"))
+ ; (using-pam? #t)))
(simple-service 'spice-polkit polkit-service-type (list spice-gtk))
(simple-service 'hwdb-creation etc-service-type (list `("udev-here-oneoneone" ,(plain-file "issue" "test\n"))))
+ (simple-service 'ly-config etc-service-type (list `("ly/config.ini" , (local-file "./lyconfig.ini"))))
(service bluetooth-service-type
(bluetooth-configuration
(bluez bluez-ryan)
@@ -223,8 +284,16 @@
(inherit config)
(handle-power-key `ignore)
(handle-suspend-key `ignore)
+ (handle-hibernate-key 'ignore)
(handle-lid-switch `ignore)
+ (handle-lid-switch-docked 'ignore)
+ (handle-lid-switch-external-power 'ignore)
(kill-user-processes? #t)))
+ (network-manager-service-type config =>
+ (network-manager-configuration
+ (inherit config)
+ (vpn-plugins
+ (list network-manager-openconnect))))
(delete pulseaudio-service-type)
(delete gdm-service-type)
(delete avahi-service-type)
@@ -232,11 +301,11 @@
(delete alsa-service-type) )))
(name-service-switch %mdns-host-lookup-nss) ;; Enable .local lookup
(setuid-programs
- (append (list (file-like->setuid-program
- (file-append
+ (append (list ;(file-like->setuid-program
+ ;(file-append
;(specification->package "swaylock-effects")
- swaylock-effects-new
- "/bin/swaylock"))
+ ; swaylock-effects-new
+ ; "/bin/swaylock"))
(file-like->setuid-program
(file-append
(specification->package "wireshark")
diff --git a/modules/ryan-config/lyconfig.ini b/modules/ryan-config/lyconfig.ini
new file mode 100755
index 0000000..684a973
--- /dev/null
+++ b/modules/ryan-config/lyconfig.ini
@@ -0,0 +1,10 @@
+animation = colormix
+colormix_col1 = 0x00631E61
+colormix_col2 = 0x0060631E
+colormix_col3 = 0x001E6063
+bigclock = en
+bigclock_12hr = false
+clock = %c
+waylandsessions=/run/current-system/profile/share/wayland-sessions
+custom_sessions=/home/ryan/sessions
+setup_cmd=/home/ryan/rysway-launch
diff --git a/modules/ryan-packages/binaries.bak b/modules/ryan-packages/binaries.bak
new file mode 100644
index 0000000..fcda5de
--- /dev/null
+++ b/modules/ryan-packages/binaries.bak
@@ -0,0 +1,68 @@
+(define-module (ryan-packages binaries)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix gexp)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix build-system copy)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages bootstrap)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages elf)
+ #:use-module (gnu packages gcc)
+ #:use-module (gnu packages glib))
+
+(define-public superfile-bin
+ (package
+ (name "superfile-bin")
+ (version "1.1.2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://github.com/yorukot/superfile" "/releases/download/v"
+ version "/superfile-linux-v" version "-amd64.tar.gz"))
+ (sha256
+ (base32
+ "1hnhkd6ihp0wcrn54ipyki500xmz1kapaj8sykg7ykh1vv8y6hmm"))))
+ (build-system copy-build-system)
+ (arguments
+ (list #:install-plan #~'((#$(string-append
+ "superfile-linux-v" (package-version this-package) "-amd64/spf")
+ "bin/spf"))
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'strip)
+ (add-after 'install 'patch-elf
+ (lambda _
+ (let ((spf (string-append #$output "/bin/spf")))
+ (invoke "patchelf" "--set-interpreter"
+ (string-append #$(this-package-input "glibc")
+ #$(glibc-dynamic-linker))
+ spf)
+ (invoke "patchelf" "--set-rpath"
+ (string-append (ungexp (this-package-input "gcc")
+ "lib")
+ "/lib")
+ spf)))))))
+ (supported-systems '("x86_64-linux"))
+ (native-inputs (list patchelf))
+ (inputs (list `(,gcc "lib") glibc))
+ (home-page "https://github.com/yorukot/superfile")
+ (synopsis "Pretty fancy and modern terminal file manager")
+ (description
+ "Terminal file-manager written in Go that is modern and extensible.")
+ (license license:expat)))
+
+(define-public brave-bin
+ (package
+ (name "brave-bin")
+ (version "nightly_1.72.12")
+ (source (origin
+ (method url-fetch)
+ (url (string-append "https://github.com/brave/brave-browser/releases/download/v1.72.12/brave-browser-" version "_amd64.deb"))
+ (sha256
+ (base32
+ "1ry62ck61gn4bxnkih3775pdlndp2ldxwifbjkxbj3wfd4f67xiv"))))
+ (build-system copy-build-system)
+ (arguments
+ (list #:install-plan
+ #~'(("bin" "bin" #:include ("wrap
diff --git a/modules/ryan-packages/bootloaders.scm b/modules/ryan-packages/bootloaders.scm
new file mode 100644
index 0000000..dad3743
--- /dev/null
+++ b/modules/ryan-packages/bootloaders.scm
@@ -0,0 +1,148 @@
+(define-module (ryan-packages bootloaders)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (gnu packages efi)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages gperf)
+ #:use-module (gnu packages crypto)
+ #:use-module (gnu packages python)
+ #:use-module (gnu packages python-xyz)
+ #:use-module (gnu packages python-crypto)
+ #:use-module (gnu packages pkg-config)
+ ;below for cryptsetup
+ #:use-module (gnu packages password-utils)
+ #:use-module (gnu packages cryptsetup)
+ #:use-module (gnu packages security-token)
+ #:use-module (gnu packages web)
+ #:use-module (gnu packages gnupg)
+ #:use-module (gnu packages tls)
+ #:use-module (guix gexp)
+ #:use-module (guix utils)
+ #:use-module (guix modules)
+ #:use-module (guix packages)
+ #:use-module (guix git-download)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix build-system meson)
+ #:use-module (guix build-system python))
+
+(define systemd-version "258")
+(define systemd-source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/systemd/systemd")
+ (commit (string-append "v" systemd-version))))
+ (file-name (git-file-name "systemd" systemd-version))
+ (sha256
+ (base32
+ "18gnp45gl1154jra6qv95k8y7ny6phdm87yqi5jdq13cadlrklf6"))))
+
+(define-public (systemd-stub-name)
+ (let ((arch (cond ((target-x86-32?) "ia32")
+ ((target-x86-64?) "x64")
+ ((target-arm32?) "arm")
+ ((target-aarch64?) "aa64")
+ ((target-riscv64?) "riscv64"))))
+ (string-append "linux" arch ".efi.stub")))
+
+(define-public systemd-stub
+ (package
+ (name "systemd-stub")
+ (version systemd-version)
+ (source systemd-source)
+ (build-system meson-build-system)
+ (arguments
+ (list
+ #:configure-flags
+ `(list "-Defi=true" "-Dsbat-distro=guix"
+ "-Dsbat-distro-generation=1" ; package revision!
+ "-Dsbat-distro-summary=Guix System"
+ "-Dsbat-distro-url=https://guix.gnu.org"
+ ,(string-append "-Dsbat-distro-pkgname=" name)
+ ,(string-append "-Dsbat-distro-version=" version))
+ #:phases
+ #~(let ((stub #$(string-append "src/boot/" (systemd-stub-name))))
+ (modify-phases %standard-phases
+ (replace 'build
+ (lambda* (#:key parallel-build? #:allow-other-keys)
+ (invoke "ninja" stub
+ "-j" (if parallel-build?
+ (number->string (parallel-job-count)) "1"))))
+ (replace 'install
+ (lambda _
+ (install-file stub (string-append #$output "/libexec"))))
+ (delete 'check)))))
+ (inputs (list libcap python-pyelftools `(,util-linux "lib")))
+ (native-inputs (list libxcrypt gperf pkg-config python-3 python-jinja2))
+ (home-page "https://systemd.io")
+ (synopsis "Unified kernel image UEFI stub")
+ (description "Simple UEFi boot stub that loads a conjoined kernel image and
+supporting data to their proper locations, before chainloading to the kernel.
+Supports measured and/or verified boot environments.")
+ (license license:lgpl2.1+)))
+
+(define-public ukify
+ (package
+ (name "ukify")
+ (version systemd-version)
+ (source systemd-source)
+ (build-system python-build-system)
+ (arguments
+ (list #:phases
+ #~(modify-phases %standard-phases
+ (replace 'build
+ (lambda _
+ (substitute* "src/ukify/ukify.py" ; added in python 3.11
+ (("datetime\\.UTC") "datetime.timezone.utc"))))
+ (delete 'check)
+ (replace 'install
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((bin (string-append #$output "/bin"))
+ (file (string-append bin "/ukify"))
+ (binutils (assoc-ref inputs "binutils"))
+ (sbsign (assoc-ref inputs "sbsigntools")))
+ (mkdir-p bin)
+ (copy-file "src/ukify/ukify.py" file)
+ (wrap-program file
+ `("PATH" ":" prefix
+ (,(string-append binutils "/bin")
+ ,(string-append sbsign "/bin"))))))))))
+ (inputs (list binutils python-cryptography python-pefile sbsigntools))
+ (home-page "https://systemd.io")
+ (synopsis "Unified kernel image UEFI tool")
+ (description "@command{ukify} joins together a UKI stub, linux kernel, initrd,
+kernel arguments, and optional secure boot signatures into a single, UEFI-bootable
+image.")
+ (license license:lgpl2.1+)))
+
+(define-public systemd-cryptsetup
+ (package
+ (name "systemd-cryptsetup")
+ (version systemd-version)
+ (source systemd-source)
+ (build-system meson-build-system)
+ (arguments
+ (list
+ #:build-type "release"
+ #:configure-flags
+ `(list "-Dlibcryptsetup=true" "-Dlibfido2=true"
+ "-Dopenssl=true")
+ #:phases
+ #~(modify-phases %standard-phases
+ (replace 'build
+ (lambda* (#:key parallel-build? #:allow-other-keys)
+ (invoke "ninja" "systemd-cryptsetup"
+ "-j" (if parallel-build?
+ (number->string (parallel-job-count)) "1"))))
+ (replace 'install
+ (lambda _
+ (install-file "systemd-cryptsetup" (string-append #$output "/libexec"))
+ (install-file "src/shared/libsystemd-shared-258.so" (string-append #$output "/lib"))))
+ (delete 'check))))
+ (native-inputs (list `(,util-linux "lib") eudev lvm2 cryptsetup libfido2 libxcrypt gperf pkg-config python-3 python-jinja2 libcap argon2 json-c libgcrypt openssl))
+ (home-page "test")
+ (synopsis "test")
+ (description "test")
+ (license license:lgpl2.1+)))
+
+systemd-cryptsetup
diff --git a/modules/ryan-packages/calcurse.scm b/modules/ryan-packages/calcurse.scm
index fa7fe63..241bb53 100644
--- a/modules/ryan-packages/calcurse.scm
+++ b/modules/ryan-packages/calcurse.scm
@@ -1,10 +1,16 @@
(define-module (ryan-packages calcurse)
#:use-module (guix download)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix build-system cmake)
#:use-module (guix packages)
#:use-module (guix gexp)
#:use-module (gnu packages)
#:use-module (gnu packages calcurse)
#:use-module (gnu packages python-web)
+ #:use-module (gnu packages rust)
+ #:use-module (gnu packages rust-apps)
+ #:use-module (gnu packages tls)
+ #:use-module (gnu packages linux)
#:use-module (guix git-download)
#:use-module (guix utils))
@@ -21,4 +27,3 @@
(base32 "02l3spj2ai97b87winz3kvsxvf66g74lm46b7kcbhsgx2iqb6syq"))))
(propagated-inputs (list python-httplib2))))
-calcurse-fixed
diff --git a/modules/ryan-packages/freedesktop.scm b/modules/ryan-packages/freedesktop.scm
index 56b5633..49da397 100644
--- a/modules/ryan-packages/freedesktop.scm
+++ b/modules/ryan-packages/freedesktop.scm
@@ -22,7 +22,7 @@
#:use-module (gnu packages xorg)
#:use-module (gnu packages glib)
#:use-module (gnu packages man)
- #:use-module (rosenthal packages wm)
+ ;#:use-module (rosenthal packages wm)
#:use-module (gnu packages wm))
(define-public xdg-desktop-portal-wlr-new
diff --git a/modules/ryan-packages/gl.scm b/modules/ryan-packages/gl.scm
new file mode 100644
index 0000000..dd1588a
--- /dev/null
+++ b/modules/ryan-packages/gl.scm
@@ -0,0 +1,224 @@
+(define-module (ryan-packages gl)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix packages)
+ #:use-module (guix gexp)
+ #:use-module (guix utils)
+ #:use-module (ice-9 match)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages gl))
+
+(define-public mesa-libglvnd
+ (package
+ (inherit mesa)
+ (inputs (modify-inputs (package-inputs mesa) (prepend libglvnd)))
+ (arguments
+ (list
+ #:configure-flags
+ #~(list
+ #$@(cond
+ ((or (target-aarch64?) (target-arm32?))
+ '("-Dgallium-drivers=etnaviv,freedreno,kmsro,lima,nouveau,\
+panfrost,r300,r600,svga,swrast,tegra,v3d,vc4,virgl,zink"))
+ ((or (target-ppc64le?) (target-ppc32?) (target-riscv64?))
+ '("-Dgallium-drivers=nouveau,r300,r600,radeonsi,svga,swrast,virgl,zink"))
+ (else
+ '("-Dgallium-drivers=crocus,iris,nouveau,r300,r600,radeonsi,\
+svga,swrast,virgl,zink")))
+ ;; Enable various optional features. TODO: opencl requires libclc,
+ ;; omx requires libomxil-bellagio
+ "-Dplatforms=x11,wayland"
+ "-Dglx=dri" ;Thread Local Storage, improves performance
+ ;; "-Dopencl=true"
+ ;; "-Domx=true"
+ "-Dosmesa=true"
+ "-Dgallium-xa=enabled"
+
+ ;; features required by wayland
+ "-Dgles2=enabled"
+ "-Dgbm=enabled"
+ "-Dshared-glapi=enabled"
+ "-Dglvnd=true"
+
+ ;; Explicitly enable Vulkan on some architectures.
+ #$@(cond
+ ((or (target-x86-32?) (target-x86-64?))
+ '("-Dvulkan-drivers=intel,intel_hasvk,amd,swrast"))
+ ((or (target-ppc64le?) (target-ppc32?))
+ '("-Dvulkan-drivers=amd,swrast"))
+ ((target-aarch64?)
+ '("-Dvulkan-drivers=freedreno,amd,broadcom,swrast"))
+ ((target-riscv64?)
+ '("-Dvulkan-drivers=amd,swrast"))
+ (else
+ '("-Dvulkan-drivers=auto")))
+
+ ;; Enable the Vulkan overlay layer on all architectures.
+ "-Dvulkan-layers=device-select,overlay"
+
+ ;; Enable all the codecs that were built by default as part of the
+ ;; 21.3.x releases to avoid functionality regressions.
+ "-Dvideo-codecs=all"
+
+ ;; Enable ZSTD compression for shader cache.
+ "-Dzstd=enabled"
+
+ ;; Also enable the tests.
+ "-Dbuild-tests=true"
+
+ "-Dllvm=enabled") ; default is x86/x86_64 only
+
+ ;; XXX: 'debugoptimized' causes LTO link failures on some drivers. The
+ ;; documentation recommends using 'release' for performance anyway.
+ #:build-type "release"
+
+ #:modules '((ice-9 match)
+ (srfi srfi-1)
+ (guix build utils)
+ (guix build meson-build-system))
+ #:phases
+ #~(modify-phases %standard-phases
+ #$@(if (%current-target-system)
+ #~((add-after 'unpack 'fix-cross-compiling
+ (lambda* (#:key native-inputs #:allow-other-keys)
+ ;; When cross compiling, we use cmake to find llvm, not
+ ;; llvm-config, because llvm-config cannot be executed
+ ;; see https://github.com/llvm/llvm-project/issues/58984
+ (substitute* "meson.build"
+ (("method : host_machine\\.system.*")
+ "method : 'cmake',\n"))
+ (setenv "CMAKE"
+ (search-input-file
+ native-inputs "/bin/cmake")))))
+ #~())
+ (add-after 'unpack 'disable-failing-test
+ (lambda _
+ ;; Disable the intel vulkan (anv_state_pool) tests, as they may
+ ;; fail in a nondeterministic fashion (see:
+ ;; https://gitlab.freedesktop.org/mesa/mesa/-/issues/5446).
+ (substitute* "src/intel/vulkan/meson.build"
+ (("if with_tests")
+ "if false"))
+ #$@(match (%current-system)
+ ("riscv64-linux"
+ ;; According to the test logs the llvm JIT is not designed
+ ;; for this architecture and the llvmpipe tests all segfault.
+ ;; The same is true for mesa:gallium / osmesa-render.
+ `((substitute* '("src/gallium/drivers/llvmpipe/meson.build"
+ "src/gallium/targets/osmesa/meson.build")
+ (("if with_tests") "if false"))))
+ ("powerpc64le-linux"
+ ;; Disable some of the llvmpipe tests.
+ `((substitute* "src/gallium/drivers/llvmpipe/lp_test_arit.c"
+ (("0\\.5, ") ""))))
+ ("powerpc-linux"
+ ;; There are some tests which fail specifically on powerpc.
+ `((substitute* '(;; LLVM ERROR: Relocation type not implemented yet!
+ "src/gallium/drivers/llvmpipe/meson.build"
+ "src/gallium/targets/osmesa/meson.build")
+ (("if with_tests") "if not with_tests"))
+ ;; This is probably a big-endian test failure.
+ (substitute* "src/amd/common/meson.build"
+ (("and not with_platform_windows")
+ "and with_platform_windows"))))
+ ("i686-linux"
+ ;; This test is known to fail on i686 (see:
+ ;; https://gitlab.freedesktop.org/mesa/mesa/-/issues/4091).
+ `((substitute* "src/util/meson.build"
+ ((".*'tests/u_debug_stack_test.cpp',.*") ""))))
+ ("armhf-linux"
+ ;; Disable some of the llvmpipe tests.
+ `((substitute* "src/gallium/drivers/llvmpipe/meson.build"
+ (("'lp_test_arit', ") ""))))
+ (_
+ '((display "No tests to disable on this architecture.\n"))))))
+ (add-before 'configure 'fix-dlopen-libnames
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((out #$output))
+ ;; Remain agnostic to .so.X.Y.Z versions while doing
+ ;; the substitutions so we're future-safe.
+ (substitute* "src/glx/meson.build"
+ (("-DGL_LIB_NAME=\"lib@0@\\.so\\.@1@\"")
+ (string-append "-DGL_LIB_NAME=\"" out
+ "/lib/lib@0@.so.@1@\"")))
+ (substitute* "src/gbm/backends/dri/gbm_dri.c"
+ (("\"libglapi\\.so")
+ (string-append "\"" out "/lib/libglapi.so")))
+ (substitute* "src/gbm/main/backend.c"
+ ;; No need to patch the gbm_gallium_drm.so reference;
+ ;; it's never installed since Mesa removed its
+ ;; egl_gallium support.
+ (("\"gbm_dri\\.so")
+ (string-append "\"" out "/lib/dri/gbm_dri.so")))
+ (substitute* "src/gallium/drivers/zink/zink_screen.c"
+ (("util_dl_open\\(VK_LIBNAME\\)")
+ (format #f "util_dl_open(\"~a\")"
+ (search-input-file inputs
+ "lib/libvulkan.so.1")))))))
+ (add-after 'install 'split-outputs
+ (lambda _
+ (let ((out #$output)
+ (bin #$output:bin))
+ ;; Not all architectures have the Vulkan overlay control script.
+ (mkdir-p (string-append out "/bin"))
+ (call-with-output-file (string-append out "/bin/.empty")
+ (const #t))
+ (copy-recursively (string-append out "/bin")
+ (string-append bin "/bin"))
+ (delete-file-recursively (string-append out "/bin")))))
+ (add-after 'install 'symlinks-instead-of-hard-links
+ (lambda _
+ ;; All the drivers and gallium targets create hard links upon
+ ;; installation (search for "hardlink each megadriver instance"
+ ;; in the makefiles). This is no good for us since we'd produce
+ ;; nars that contain several copies of these files. Thus, turn
+ ;; them into symlinks, which saves ~124 MiB.
+ (let* ((out #$output)
+ (lib (string-append out "/lib"))
+ (files (find-files lib
+ (lambda (file stat)
+ (and (string-contains file ".so")
+ (eq? 'regular
+ (stat:type stat))))))
+ (inodes (map (compose stat:ino stat) files)))
+ (for-each (lambda (inode)
+ (match (filter-map (match-lambda
+ ((file ino)
+ (and (= ino inode) file)))
+ (zip files inodes))
+ ((_)
+ #f)
+ ((reference others ..1)
+ (format #t "creating ~a symlinks to '~a'~%"
+ (length others) reference)
+ (for-each delete-file others)
+ (for-each (lambda (file)
+ (if (string=? (dirname file)
+ (dirname reference))
+ (symlink (basename reference)
+ file)
+ (symlink reference file)))
+ others))))
+ (delete-duplicates inodes)))))
+ (add-after 'install 'set-layer-path-in-manifests
+ (lambda _
+ (let* ((out #$output)
+ (implicit-path (string-append
+ out
+ "/share/vulkan/implicit_layer.d/"))
+ (explicit-path (string-append
+ out
+ "/share/vulkan/explicit_layer.d/"))
+ (fix-layer-path
+ (lambda (layer-name)
+ (let* ((explicit (string-append explicit-path layer-name ".json"))
+ (implicit (string-append implicit-path layer-name ".json"))
+ (manifest (if (file-exists? explicit)
+ explicit
+ implicit)))
+ (substitute* manifest
+ (((string-append "\"lib" layer-name ".so\""))
+ (string-append "\"" out "/lib/lib" layer-name ".so\"")))))))
+ (for-each fix-layer-path '("VkLayer_MESA_device_select"
+ "VkLayer_MESA_overlay"))))))))))
+
+mesa-libglvnd
diff --git a/modules/ryan-packages/hyprland.-ryan.bak b/modules/ryan-packages/hyprland.-ryan.bak
new file mode 100644
index 0000000..aec8286
--- /dev/null
+++ b/modules/ryan-packages/hyprland.-ryan.bak
@@ -0,0 +1,46 @@
+(define-module (ryan-packages hyprland)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix build-system meson)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix gexp)
+ #:use-module (guix git-download)
+ #:use-module (guix packages)
+ #:use-module (guix download))
+
+(define aquamarine
+ (package
+ (name "aquamarine")
+ (version "0.4.3")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/aquamarine")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "114fspibmrwvzdmzv4xdy000vg7mn9r5vas3pr1ndb9xyl15ja1s"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:tests? #f))
+ (native-inputs
+ (list
+ gcc-14
+ pkg-config
+ mesa-headers
+ hyprwayland-scanner
+ hwdata))
+ (inputs
+ (list
+ libglvnd
+ mesa-libglvnd
+ libseat
+ libinput
+ libxkbcommon
+ libdisplay-info
+ libxcb
+ libxinerama
+ libxcursor
+ wayland
+ wayland-protocols
diff --git a/modules/ryan-packages/hyprland.bak b/modules/ryan-packages/hyprland.bak
new file mode 100644
index 0000000..b96aa4e
--- /dev/null
+++ b/modules/ryan-packages/hyprland.bak
@@ -0,0 +1,495 @@
+(define-module (ryan-packages hyprland)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix build-system cmake)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix build-system meson)
+ #:use-module (guix download)
+ #:use-module (guix gexp)
+ #:use-module (guix git-download)
+ #:use-module (guix packages)
+ #:use-module (gnu packages autotools)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages cpp)
+ #:use-module (gnu packages cmake)
+ #:use-module (gnu packages check)
+ #:use-module (gnu packages gcc)
+ #:use-module (gnu packages gtk)
+ #:use-module (gnu packages gnome)
+ #:use-module (gnu packages freedesktop)
+ #:use-module (gnu packages pciutils)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages python)
+ #:use-module (gnu packages xdisorg)
+ #:use-module (gnu packages xml)
+ #:use-module (gnu packages xorg)
+ #:use-module (gnu packages web)
+ #:use-module (gnu packages wm)
+ #:use-module (gnu packages gl)
+ #:use-module (ryan-packages gl)
+ #:use-module (guix utils))
+
+; hyprland deps
+(define-public libseat-0.8.0
+ (package
+ (inherit libseat)
+ (name "libseat")
+ (version "0.8.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.sr.ht/~kennylevinsen/seatd")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "02wzrgp8di6hqmicnm2fim6jnvbn62wy248ikvdvrhiywrb7i931"))))))
+
+(define-public libinput-minimal-1.26.1
+ (package
+ (inherit libinput-minimal)
+ (name "libinput-minimal")
+ (version "1.26.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://gitlab.freedesktop.org/libinput/libinput.git")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "094k23i10jjmgdzhv5lj7xpc3fgkwi9afcihf0l2fjj71ym8l9fy"))))
+ (native-inputs
+ (modify-inputs (package-native-inputs libinput)
+ (append python-minimal-wrapper python-pytest)))))
+
+(define-public cmake-minimal-3.27.0
+ (package
+ (inherit cmake-minimal)
+ (name "cmake-minimal")
+ (version "3.27.0")
+ (source (origin
+ (inherit (package-source cmake-minimal))
+ (method url-fetch)
+ (uri (string-append "https://cmake.org/files/v"
+ (version-major+minor version)
+ "/cmake-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1f1w9mb868q38nzy145b6q9mc5waf8yi521cwfkd14xr51mxpvda"))))
+ (arguments
+ (substitute-keyword-arguments (package-arguments cmake-minimal)
+ ((#:configure-flags flags ''())
+ #~(append (list "-DCMake_ENABLE_DEBUGGER=false") #$flags))
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (delete 'delete-help-documentation)
+ (delete 'check)))))))
+
+; hypr suite
+
+(define hyprutils
+ (package
+ (name "hyprutils")
+ (version "0.2.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/hyprutils")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0nxx5yb5k9726x95n8gi27xyxyzwb0ma0nj3czpb51sda1k0hz0g"))))
+ (build-system cmake-build-system)
+ ;(arguments (list #:tests? #f))
+ (native-inputs (list pkg-config gcc-13))
+ (inputs (list pixman))
+ (home-page "https://hyprland.org/")
+ (synopsis "Small C++ library for utilities used across the Hypr* ecosystem")
+ (description "C++ library for utilities in the Hypr ecosystem")
+ (license license:bsd-3)))
+
+(define-public libliftoff
+ (package
+ (name "libliftoff")
+ (version "0.1.0")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/emersion/libliftoff"
+ "/archive/refs/tags/v" version ".tar.gz"))
+ (sha256
+ (base32
+ "17ssbjbv8njgvfha8zsx4nixpi5xxl1rwvk0lcacgqk0nmjyb23s"))))
+ (build-system meson-build-system)
+ (native-inputs (list gcc-13
+ pkg-config
+ cmake-minimal
+ libdrm))
+ (home-page "https://github.com/emersion/libliftoff")
+ (synopsis "Lightweight KMS plane library")
+ (description "")
+ (license license:expat)))
+
+(define udis86
+ (let ((revision "186")
+ (commit "5336633af70f3917760a6d441ff02d93477b0c86"))
+ (package
+ (name "udis86")
+ (version (git-version "1.7.2" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/canihavesomecoffee/udis86")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0y5z1169wff578jylpafsww4px4y6gickhcs885a9c660d8xs9qy"))))
+ (build-system gnu-build-system)
+ (native-inputs (list autoconf automake libtool python-minimal-wrapper))
+ (home-page "https://github.com/canihavesomecoffee/udis86")
+ (synopsis "Disassembler Library for x86 and x86-64")
+ (description
+ "Udis86 is a disassembler for the x86 and x86-64 class of instruction
+set architectures. It consists of a C library called @code{libudis86} and a
+command line tool called @code{udcli} that incorporates the library.")
+ (license license:bsd-2))))
+
+(define hyprlang
+ (package
+ (name "hyprlang")
+ (version "0.5.2")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/hyprlang")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "17i0372yv0fcwnyki36crz7afw8c5f3j985m083p7rjbh4fn3br6"))))
+ (build-system cmake-build-system)
+ (native-inputs (list gcc-13))
+ (home-page "https://hyprland.org/hyprlang/")
+ (synopsis "Official implementation library for hypr config language")
+ (description
+ "This package provides the official implementation for hypr configuration
+language used in @code{hyprland}.")
+ (license license:gpl3+)))
+
+(define-public hyprcursor
+ (package
+ (name "hyprcursor")
+ (version "0.1.9")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/hyprcursor")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0z3ar580n630145nq80qw0p8v0kai6knvhi6nr9z0y1jrb07b0ql"))))
+ (build-system cmake-build-system)
+ (arguments (list #:tests? #f)) ;FIXME
+ (inputs (list cairo hyprlang librsvg libzip tomlplusplus))
+ (native-inputs (list gcc-13 pkg-config))
+ (home-page "https://hyprland.org/")
+ (synopsis "Hyprland cursor format, library and utilities")
+ (description
+ "This package provides Hyprland cursor format, library and utilities.")
+ (license license:bsd-3)))
+
+(define-public hyprland-protocols
+ (package
+ (name "hyprland-protocols")
+ (version "0.2")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/hyprland-protocols")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1drjznj7fn6m5m6skhzh0p031cb5x0bb4i56jxnxwpwaa71g1z20"))))
+ (build-system meson-build-system)
+ (home-page "https://hyprland.org")
+ (synopsis "Wayland protocol extensions for Hyprland")
+ (description
+ "This package provides Wayland protocol extensions for Hyprland and it
+exists in an effort to bridge the gap between Hyprland and KDE/Gnome's
+functionality. Since @code{wlr-protocols} is closed for new submissions, and
+@code{wayland-protocols} is very slow with changes, this package will hold
+protocols used by Hyprland to bridge the aforementioned gap.")
+ (license license:bsd-3)))
+
+(define-public hyprwayland-scanner
+ (package
+ (name "hyprwayland-scanner")
+ (version "0.4.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/hyprwayland-scanner")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1xc2xcxpq61lg964ihk0wbfzqqvibw20iz09g0p33ym51gwlpxr4"))))
+ (build-system cmake-build-system)
+ (arguments (list #:tests? #f)) ;No tests.
+ (inputs (list pugixml))
+ (native-inputs (list gcc-13 pkg-config))
+ (home-page "https://github.com/hyprwm/hyprwayland-scanner")
+ (synopsis "Hyprland implementation of wayland-scanner, in and for C++")
+ (description
+ "This package provides a Hyprland implementation of wayland-scanner, in and
+for C++.")
+ (license license:bsd-3)))
+
+(define hwdata-for-hyprland
+ (package
+ (inherit hwdata)
+ (arguments
+ (substitute-keyword-arguments (package-arguments hwdata)
+ ((#:phases _) #~%standard-phases)))
+ (outputs '("out"))))
+
+(define-public wayland-protocols-1.36
+ (package
+ (inherit wayland-protocols)
+ (name "wayland-protocols")
+ (version "1.36")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://gitlab.freedesktop.org/wayland/wayland-protocols"
+ "/-/releases/" version "/downloads/"
+ "wayland-protocols-" version ".tar.xz"))
+ (sha256
+ (base32
+ "14kyxywpfkgpjpkrybs28q1s2prnz30k1b4zap5a3ybrbvh4vzbi"))))))
+
+
+(define-public aquamarine
+ (package
+ (name "aquamarine")
+ (version "0.3.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/aquamarine")
+ (commit (string-append "v" version))))
+ (patches (list
+ (local-file "patches/aquamarine-fix-cmake.patch")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "114fspibmrwvzdmzv4xdy000vg7mn9r5vas3pr1ndb9xyl15ja1s"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list #:tests? #f))
+ (native-inputs
+ (list gcc-13
+ pkg-config
+ mesa-headers
+ hyprwayland-scanner
+ hwdata-for-hyprland))
+ (propagated-inputs
+ (list mesa-libglvnd
+ libglvnd
+ libseat-0.8.0
+ libinput-minimal-1.26.1
+ libxkbcommon
+ libdisplay-info
+ libxcb
+ libxinerama
+ libxcursor
+ xcb-util
+ xcb-util-errors
+ xcb-util-keysyms
+ xcb-util-wm
+ wayland
+ wayland-protocols-1.36))
+ (inputs
+ (list hyprutils pixman))
+ (home-page "https://hyprland.org")
+ (synopsis "Aquamarine is a very light linux rendering backend library ")
+ (description "") ;; TODO: this
+ (license license:bsd-3)))
+
+
+(define xorg-server-xwayland-for-hyprland
+ (package
+ (inherit xorg-server-xwayland)
+ (arguments
+ (substitute-keyword-arguments (package-arguments xorg-server-xwayland)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'install 'install-headers
+ (lambda _
+ (let ((fmw (string-append #$output "/include")))
+ (mkdir-p fmw)
+ (copy-recursively "include" fmw))
+ ))
+ ))))))
+
+
+(define-public hyprland-ryan
+ (package
+ (name "hyprland")
+ (version "0.42.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/Hyprland")
+ (commit (string-append "v" version))))
+ (patches (list
+ (local-file "patches/hyprland-fix-cmake.patch")))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ (for-each delete-file-recursively
+ '("hyprpm"
+ "subprojects"))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1hp2xafvlymikxsi6pr8iik35g46683bg376n9hkjxgh9y6njzqv"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list #:tests? #f
+ #:build-type "release"
+ #:cmake cmake-minimal-3.27.0
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'fix-path
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* (find-files "src" "\\.cpp$")
+ (("/usr/local(/bin/Hyprland)" _ path)
+ (string-append #$output path))
+ (("/usr") #$output)
+ (("(execAndGet\\(\")\\<(cat|fc-list|lspci)\\>"
+ _ pre cmd)
+ (string-append
+ pre (search-input-file
+ inputs (string-append "bin/" cmd))))
+ (("\\<cc\\>") (search-input-file inputs "bin/gcc"))
+ ;; NOTE: Add binutils to inputs will override ld-wrapper.
+ (("(execAndGet\\(\\(\")\\<nm\\>" _ pre)
+ (string-append pre #$binutils "/bin/nm"))
+ (("\\<(addr2line|objcopy)\\>" _ cmd)
+ (string-append #$binutils "/bin/" cmd)))
+ (substitute* "CMakeLists.txt"
+ (("libudis86") "udis86"))
+ ))
+ (add-after 'fix-path 'fix-protocols
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((protocols (string-append
+ (getcwd)
+ "/subprojects/hyprland-protocols/protocols")))
+ (mkdir-p protocols)
+ (copy-recursively
+ (search-input-directory inputs "share/hyprland-protocols/protocols")
+ protocols))))
+ (add-after 'install 'wrap-program
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out"))
+ (mesa (assoc-ref inputs "mesa")))
+ (wrap-program (string-append out "/bin/Hyprland")
+ `("__EGL_VENDOR_LIBRARY_DIRS" prefix ,(list (string-append mesa "/share/glvnd/egl_vendor.d")))))))
+ )))
+ (native-inputs
+ (list gcc-13
+ jq
+ pkg-config
+ hyprwayland-scanner
+ hwdata-for-hyprland))
+ (inputs
+ (list gcc-13
+
+ cairo
+ pango
+ pciutils
+ libliftoff
+ udis86
+
+ aquamarine
+ hyprcursor
+ hyprland-protocols
+ hyprlang
+ hyprutils
+
+ xorg-server-xwayland-for-hyprland))
+ (home-page "https://hyprland.org")
+ (synopsis "Dynamic tiling Wayland compositor based on wlroots")
+ (description
+ "Hyprland is a dynamic tiling Wayland compositor based on @code{wlroots}
+that doesn't sacrifice on its looks. It supports multiple layouts, fancy
+effects, has a very flexible IPC model allowing for a lot of customization, and
+more.")
+ (license license:bsd-3)))
+
+
+(define-public hyprpaper
+ (package
+ (name "hyprpaper")
+ (version "0.7.0")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/hyprwm/hyprpaper"
+ "/archive/refs/tags/v" version ".tar.gz"))
+ (sha256
+ (base32
+ "1d23nsj5hzyxwvhkg9a7x1b8jgyqwzad91zb1894jnxr2d844h28"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f))
+ (native-inputs
+ (list gcc-13
+ pkg-config))
+ (inputs
+ (list hyprlang
+ wayland-protocols-1.36
+ wayland
+ cairo
+ libjpeg-turbo
+ libwebp
+ mesa
+ pango
+ libglvnd))
+ (home-page "https://github.com/hyprwm/hyprpaper")
+ (license license:bsd-3)
+ (synopsis "Hyprpaper is a blazing fast wayland wallpaper utility with IPC controls.")
+ (description "Hyprpaper is a blazing fast wayland wallpaper utility with IPC controls.")))
+
+
+(define-public hypridle
+ (package
+ (name "hypridle")
+ (version "0.1.2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/hyprwm/hypridle"
+ "/archive/refs/tags/v" version ".tar.gz"))
+ (sha256
+ (base32
+ "0ybwip7yq9q569naz5bnrvcdz99648c4pln2zi30z21y333hpas0"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f))
+ (native-inputs
+ (list gcc-13
+ pkg-config))
+ (inputs
+ (list hyprlang
+ wayland-protocols-1.36
+ wayland
+ sdbus-c++))
+ (home-page "https://github.com/hyprwm/hypridle")
+ (license license:bsd-3)
+ (synopsis "Hyprland's idle daemon ")
+ (description "Hyprland's idle daemon ")))
diff --git a/modules/ryan-packages/linux.scm b/modules/ryan-packages/linux.scm
index 600117c..272280c 100644
--- a/modules/ryan-packages/linux.scm
+++ b/modules/ryan-packages/linux.scm
@@ -2,8 +2,14 @@
#:use-module (guix download)
#:use-module (guix packages)
#:use-module (guix gexp)
+ #:use-module (guix build utils)
#:use-module (gnu packages)
#:use-module (gnu packages linux)
+ #:use-module (gnu packages vim)
+ #:use-module (gnu packages gcc)
+ #:use-module (gnu packages textutils)
+ #:use-module (gnu packages tree-sitter)
+ #:use-module (gnu packages julia)
#:use-module (gnu packages python-xyz)
#:use-module (guix git-download)
#:use-module (guix utils))
@@ -11,7 +17,7 @@
(define-public bluez-ryan
(package
(inherit bluez)
- (version "5.72")
+ (version "5.79")
(source
(origin
(method url-fetch)
@@ -20,16 +26,51 @@
version ".tar.xz"))
(sha256
(base32
- "0vjk4ihywzv8k07bxq7clqgi2afrw54nfp0gcnxw35m98nipz7a9"))))
- (arguments (list
- #:configure-flags
- #~(list "--sysconfdir=/etc"
- "--localstatedir=/var"
- "--enable-library"
- "--disable-manpages"
- "--disable-systemd"
- "--enable-hid2hci"
- (string-append "--with-dbusconfdir=" #$output "/etc")
- (string-append "--with-udevdir=" #$output "/lib/udev"))))))
+ "12pal1m4xlr8k7kxb6isv5lbaca2wc5zcgy0907wfwcz78qaar21"))))
+ (arguments (substitute-keyword-arguments (package-arguments bluez)
+ ((#:configure-flags ''())
+ #~(append (list "--disable-manpages") #$flags))
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'configure 'fix-make
+ (lambda _
+ (substitute* "Makefile"
+ (("install-confDATA:") "install-IGNORED:")
+ (("install-confDATA") "")
+ (("bluetoothd-fix-permissions:") "install-IGNORED2:")
+ (("bluetoothd-fix-permissions") ""))))))))))
-bluez-ryan
+(define-public neovim-ryan
+ (package
+ (inherit neovim)
+ (version "0.11.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/neovim/neovim")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name "neovim" version))
+ (sha256
+ (base32
+ "0arypdiycmss5g9wav21hfdc384v1ly82jnsc32zincl2y3f628q"))))
+ (native-inputs (modify-inputs (package-native-inputs neovim) (prepend gcc-14)))
+ (inputs (modify-inputs (package-inputs neovim) (append utf8proc) (replace "tree-sitter" treesitter-ryan)))))
+
+(define-public treesitter-ryan
+ (package
+ (inherit tree-sitter)
+ (version "0.25.4")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/tree-sitter/tree-sitter")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name "tree-sitter" version))
+ (sha256
+ (base32
+ "0d4ca0ikpmkqg9xlbx45c7mafr5yz0g99y3s3jy5xk86f0nkz8ga"))
+ (modules '((guix build utils)))
+ (snippet #~(begin
+ (delete-file-recursively "lib/src/unicode")))))))
+
+neovim-ryan
diff --git a/modules/ryan-packages/login.scm b/modules/ryan-packages/login.scm
new file mode 100644
index 0000000..6efae9b
--- /dev/null
+++ b/modules/ryan-packages/login.scm
@@ -0,0 +1,102 @@
+(define-module (ryan-packages login)
+ #:use-module (guix gexp)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix git-download)
+ #:use-module (guix build-system zig)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages curl)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages nss)
+ #:use-module (gnu packages version-control)
+ #:use-module (gnu packages zig)
+ #:use-module (gnu packages zig-xyz)
+ #:use-module (guix utils))
+
+(define ly-source
+ (let ((commit "cdba55657976ad289da090b7d4fd1e5e16c156f9")
+ (revision "11")
+ (name "ly")
+ (version "ly-rev11"))
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ryan77627/ly-fork")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1czv95pwmsv8zi92pjrra3swr7m82l3spks8mdkryxk9k62yd2k6")))))
+
+(define ly-zig-cache
+ (computed-file
+ "ly-zig-cache"
+ (with-imported-modules '((guix build utils))
+ #~(begin
+ (use-modules (guix build utils))
+ (let ((cert-dir (string-append #$nss-certs "/etc/ssl/certs"))
+ (certs "/tmp/ca-certificates.crt")
+ (zig-bin (string-append #$zig-0.15 "/bin"))
+ (git-bin (string-append #$git-minimal "/bin"))
+ (curl-bin (string-append #$curl "/bin"))
+ (proot-bin (string-append #$proot "/bin"))
+ (coreutils-bin (string-append #$(@ (gnu packages base) coreutils) "/bin")))
+ (call-with-output-file certs
+ (lambda (out)
+ (for-each (lambda (file)
+ (call-with-input-file file
+ (lambda (p)
+ (dump-port p out)
+ (display "\n" out))))
+ (find-files cert-dir "\\.pem$"))))
+ (setenv "HOME" "/tmp")
+ (setenv "PATH" (string-append zig-bin ":" curl-bin ":" proot-bin ":" git-bin ":" coreutils-bin))
+ (setenv "ZIG_GLOBAL_CACHE_DIR" "/tmp/zcache")
+ (setenv "SSL_CERT_FILE" certs)
+ (setenv "GIT_SSL_CAINFO" certs)
+ (setenv "CURL_CA_BUNDLE" certs)
+ (mkdir-p "/tmp/zcache")
+ (mkdir-p "/tmp/src")
+ (copy-recursively #$ly-source "/tmp/src")
+ (chmod "/tmp/src" #o755)
+ (with-directory-excursion "/tmp/src"
+ (invoke "proot" "-b" (string-append certs ":/etc/ssl/certs/ca-certificates.crt")
+ "zig" "build" "--fetch=all"))
+ (copy-recursively "/tmp/zcache/p" #$output))))
+ #:options (list
+ #:hash-algo 'sha256
+ #:hash (base32 "1qmj0ysynvyfvwc68apy3lxqccrv3rxak5a21ij6y0c2dw3yzl64")
+ #:recursive? #t)))
+
+(define-public ly
+ (package
+ (name "ly")
+ (version "1.3.2")
+ (source ly-source)
+ (build-system zig-build-system)
+ (arguments
+ (list
+ #:zig-release-type "small"
+ #:zig-build-flags #~(list "-Denable_x11_support=false"
+ "--search-prefix"
+ #$(this-package-input "linux-pam"))
+ #:zig zig-0.15
+ #:tests? #f
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'configure 'seed-zig-cache
+ (lambda _
+ (let ((cache-dir "/tmp/zig-cache"))
+ (mkdir-p cache-dir)
+ (symlink #$ly-zig-cache (string-append cache-dir "/p"))
+ (setenv "ZIG_GLOBAL_CACHE_DIR" cache-dir)))))))
+ (native-inputs (list
+ ly-zig-cache))
+ (inputs (list linux-pam))
+ (home-page "https://codeberg.org/fairyglade/ly")
+ (synopsis "TTY-based login manager written in Zig.")
+ (description "Zig-based login manager that can launch X Server and Wayland based compositors.")
+ (license license:expat)))
+
+ly
diff --git a/modules/ryan-packages/networking.scm b/modules/ryan-packages/networking.scm
index 6d660a3..98ef31f 100644
--- a/modules/ryan-packages/networking.scm
+++ b/modules/ryan-packages/networking.scm
@@ -1,6 +1,9 @@
(define-module (ryan-packages networking)
#:use-module (guix gexp)
#:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix build-system copy)
+ #:use-module ((guix licenses) #:prefix license:)
#:use-module (gnu packages)
#:use-module (gnu packages networking)
#:use-module (ryan-packages linux)
@@ -11,4 +14,24 @@
(inherit blueman)
(inputs (modify-inputs (package-inputs blueman) (delete "bluez") (prepend bluez-ryan)))))
-blueman-ryan
+(define-public netbird-bin
+ (package
+ (name "netbird")
+ (version "0.68.1")
+ (source (origin
+ (method url-fetch/tarbomb)
+ (uri (string-append "https://github.com/netbirdio/netbird/releases/download/v" version "/netbird_" version "_linux_amd64.tar.gz"))
+ (sha256
+ (base32
+ "08xn4mnr0h4hyqx6447g3p2jaq6yknvllq18k21ac3936dxz4d9a"))))
+ (build-system copy-build-system)
+ (arguments
+ (list #:install-plan
+ #~'(("." "bin/" #:include("netbird")))))
+ (supported-systems '("x86_64-linux"))
+ (home-page "https://netbird.io")
+ (synopsis "Private Wireguard-based networks")
+ (description "This package provides @command{netbird}, which is an alternative to Tailscale.")
+ (license license:bsd-3)))
+
+netbird-bin
diff --git a/modules/ryan-packages/package-management.scm b/modules/ryan-packages/package-management.scm
new file mode 100644
index 0000000..18c7be4
--- /dev/null
+++ b/modules/ryan-packages/package-management.scm
@@ -0,0 +1,237 @@
+(define-module (ryan-packages package-management)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix build-system meson)
+ #:use-module (guix build-system cmake)
+ #:use-module (guix packages)
+ #:use-module (guix git-download)
+ #:use-module (guix gexp)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages autotools)
+ #:use-module (gnu packages backup)
+ #:use-module (gnu packages bdw-gc)
+ #:use-module (gnu packages bison)
+ #:use-module (gnu packages boost)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages check)
+ #:use-module (gnu packages cmake)
+ #:use-module (gnu packages cpp)
+ #:use-module (gnu packages crypto)
+ #:use-module (gnu packages curl)
+ #:use-module (gnu packages databases)
+ #:use-module (gnu packages flex)
+ #:use-module (gnu packages gcc)
+ #:use-module (gnu packages libedit)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages llvm)
+ #:use-module (gnu packages markup)
+ #:use-module (gnu packages package-management)
+ #:use-module (gnu packages perl)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages sqlite)
+ #:use-module (gnu packages tls)
+ #:use-module (gnu packages version-control)
+ #:use-module (gnu packages web)
+ #:use-module (guix utils))
+
+(define-public nix-ryan
+ (package
+ (name "nix")
+ (version "2.29.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/NixOS/nix")
+ (commit version)))
+ (file-name (git-file-name "nix" version))
+ (sha256
+ (base32 "19cd94xpjzwmclscpw9x3gfic0vf160llfnh9diz2l4823fw8iky"))))
+ (build-system meson-build-system)
+ (arguments
+ (list
+ #:configure-flags #~(list "--sysconfdir=/etc")
+ #:tests? #f))
+ (native-inputs
+ (list autoconf
+ autoconf-archive
+ automake
+ bison
+ gcc-14
+ cmake
+ flex
+ perl
+ perl-dbi
+ perl-dbd-sqlite
+ googletest
+ jq
+ libtool
+ pkg-config
+ rapidcheck))
+ (inputs
+ (list boost-ryan
+ brotli
+ bzip2
+ curl
+ editline
+ libarchive
+ libgc-ryan
+ libseccomp-ryan
+ libsodium
+ libbl3
+ libgit2-1.9
+ lowdown
+ nlohmann-json
+ openssl
+ sqlite
+ toml11
+ xz
+ zlib))
+ (home-page "https://nixos.org/")
+ (synopsis "The Nix package manager")
+ (description "todo")
+ (license license:lgpl2.1+)))
+
+(define libbl3
+ (package
+ (name "blake3")
+ (version "1.8.2")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/BLAKE3-team/BLAKE3")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1pm7285insrmpfwwal8rnp3yhvc6s2ki8b6ccmbh2qfnnl95a010"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:configure-flags #~(list "-DCMAKE_POSITION_INDEPENDENT_CODE=on")
+ #:tests? #f
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'enter-build-directory
+ (lambda _ (chdir "c") #t))
+ (add-before 'build 'set-env
+ (lambda _
+ (setenv "CFLAGS" "-fPIC")
+ (setenv "CXXFLAGS" "-fPIC")
+ #t)))))
+ (home-page "https://github.com/BLAKE3-team/BLAKE3")
+ (synopsis "Official C implementation of BLAKE3")
+ (description "todo")
+ (license license:expat)))
+
+(define toml11
+ (package
+ (name "toml11")
+ (version "v4.4.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ToruNiina/toml11")
+ (commit version)))
+ (sha256
+ (base32 "0d15b50cf9jgvh3w99xh6crh03bn2dmv9bdyvzq6knsk2diql1dj"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:tests? #f))
+ (home-page "https://github.com/ToruNiina/toml11")
+ (synopsis "TODO")
+ (description "TODO")
+ (license license:expat)))
+
+(define libgit2-1.9
+ (package
+ (inherit libgit2-1.8)
+ (version "1.9.0")
+ (source (origin
+ (inherit (package-source libgit2-1.8))
+ (uri (git-reference
+ (url "https://github.com/libgit2/libgit2")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name "libgit2" version))
+ (sha256
+ (base32
+ "06ajn5i5l1209z7x7jxcpw68ph0a6g3q67bmx0jm381rr8cb4zdz"))
+ (snippet
+ #~(begin
+ (for-each delete-file-recursively
+ '("deps/llhttp"
+ "deps/ntlmclient"
+ "deps/pcre"
+ "deps/winhttp"
+ "deps/zlib"))))))))
+
+(define libgc-ryan
+ (package
+ (inherit libgc)
+ (version "8.2.8")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ivmai/bdwgc")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name "libgc" version))
+ (sha256
+ (base32 "1xzvr5wb36flkbjqjyk5ilhda1a3yk61rgprxfjzdf1rzlmqn12i"))))
+ (native-inputs (modify-inputs (package-native-inputs libgc) (prepend autoconf autoconf-archive automake libtool)))))
+
+(define boost-ryan
+ (package
+ (inherit boost)
+ (version "1.87.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/boostorg/boost")
+ (commit (string-append "boost-" version))
+ (recursive? #t)))
+ (file-name (git-file-name "boost" version))
+ (sha256
+ (base32 "1xirczrh2rgk2x70crw33w6566d2by9q675wlyv0zj69f49z8prn"))))
+ (native-inputs (modify-inputs (package-native-inputs boost) (prepend clang-18)))
+ (arguments
+ (append
+ (substitute-keyword-arguments (package-arguments boost))
+ (list
+ #:tests? #f
+ #:configure-flags
+ #~(let ((icu (dirname (dirname (search-input-file
+ %build-inputs "bin/uconv")))))
+ (list
+ ;; Auto-detection looks for ICU only in traditional
+ ;; install locations.
+ (string-append "--with-icu=" icu)
+ ;; Ditto for Python.
+ #$@(if (%current-target-system)
+ #~()
+ #~((let ((python (dirname (dirname (search-input-file
+ %build-inputs
+ "bin/python")))))
+ (string-append "--with-python-root=" python)
+ (string-append "--with-python=" python
+ "/bin/python")
+ (string-append "--with-python-version="
+ (python-version python)))))
+ "--with-toolset=clang")))))))
+
+(define libseccomp-ryan
+ (package
+ (inherit libseccomp)
+ (version "2.6.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/seccomp/libseccomp")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name "libseccomp" version))
+ (sha256
+ (base32 "189yh66aj3z3jvns739qbj504f3mcl3w44pxxizw877pbj3kal11"))))
+ (native-inputs (modify-inputs (package-native-inputs libseccomp) (prepend autoconf autoconf-archive automake libtool)))))
+
+
+nix-ryan
diff --git a/modules/ryan-packages/patches/aquamarine-fix-cmake.patch b/modules/ryan-packages/patches/aquamarine-fix-cmake.patch
new file mode 100644
index 0000000..bd29649
--- /dev/null
+++ b/modules/ryan-packages/patches/aquamarine-fix-cmake.patch
@@ -0,0 +1,25 @@
+From 7b6f11ed0708d8775f42107e19d9099835e2498e Mon Sep 17 00:00:00 2001
+From: Freya Murphy <freya@freyacat.org>
+Date: Mon, 5 Aug 2024 17:52:48 -0400
+Subject: [PATCH] fix cmake
+
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index bb7a4d6..7f7e7ff 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -19,7 +19,7 @@ set(INCLUDE ${CMAKE_INSTALL_FULL_INCLUDEDIR})
+ set(LIBDIR ${CMAKE_INSTALL_FULL_LIBDIR})
+
+ find_package(PkgConfig REQUIRED)
+-find_package(OpenGL REQUIRED COMPONENTS "GLES2")
++find_package(OpenGL REQUIRED)
+ find_package(hyprwayland-scanner 0.4.0 REQUIRED)
+ pkg_check_modules(
+ deps
+--
+2.45.1
+
diff --git a/modules/ryan-packages/patches/hyprland-fix-cmake.patch b/modules/ryan-packages/patches/hyprland-fix-cmake.patch
new file mode 100644
index 0000000..d294905
--- /dev/null
+++ b/modules/ryan-packages/patches/hyprland-fix-cmake.patch
@@ -0,0 +1,41 @@
+From 33fac66982422104cc1c2664f9a841fc96295c13 Mon Sep 17 00:00:00 2001
+From: Freya Murphy <freya@freyacat.org>
+Date: Mon, 5 Aug 2024 20:35:50 -0400
+Subject: [PATCH] fix cmake
+
+---
+ CMakeLists.txt | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index fa58b63d..51ea6cfa 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -26,7 +26,6 @@ execute_process(COMMAND ./scripts/generateVersion.sh
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
+
+ # udis
+-add_subdirectory("subprojects/udis86")
+
+ if(CMAKE_BUILD_TYPE)
+ string(TOLOWER ${CMAKE_BUILD_TYPE} BUILDTYPE_LOWER)
+@@ -85,7 +84,7 @@ if(LEGACY_RENDERER)
+ else()
+ set(GLES_VERSION "GLES3")
+ endif()
+-find_package(OpenGL REQUIRED COMPONENTS ${GLES_VERSION})
++find_package(OpenGL REQUIRED)
+
+ pkg_check_modules(
+ deps
+@@ -314,7 +313,6 @@ protocolwayland()
+
+ # tools
+ add_subdirectory(hyprctl)
+-add_subdirectory(hyprpm)
+
+ # binary and symlink
+ install(TARGETS Hyprland)
+--
+2.45.1
+
diff --git a/modules/ryan-packages/wm.scm b/modules/ryan-packages/wm.scm
index 1f1a5e2..edb1b32 100644
--- a/modules/ryan-packages/wm.scm
+++ b/modules/ryan-packages/wm.scm
@@ -5,19 +5,26 @@
#:use-module (guix gexp)
#:use-module (gnu packages)
#:use-module (guix build-system cmake)
+ #:use-module (guix build-system meson)
#:use-module (gnu packages python)
#:use-module (gnu packages audio)
#:use-module (gnu packages glib)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages gtk)
+ #:use-module (gnu packages xdisorg)
+ #:use-module (gnu packages xorg)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages gl)
+ #:use-module (gnu packages image)
#:use-module (gnu packages llvm)
#:use-module (gnu packages gcc)
#:use-module (gnu packages check)
#:use-module (guix git-download)
#:use-module (guix utils)
- #:use-module (rosenthal packages wm)
- #:use-module (ryan-packages gtk)
+ ;#:use-module (rosenthal packages wm)
+ ;#:use-module (ryan-packages gtk)
+ #:use-module (ryan-packages gl)
#:use-module (gnu packages wm))
(define-public swaylock-effects-new
@@ -52,7 +59,7 @@
(package
(inherit waybar)
(name "waybar-new")
- (version "0.9.22")
+ (version "0.10.3")
(source
(origin
(method git-fetch)
@@ -61,44 +68,77 @@
(commit version)))
(file-name (git-file-name name version))
(sha256
- (base32 "0flwxg9rd7a2ygjvyksxxhxyyhp760jzd5ngkx65y77bxh1l7cpl"))))
+ (base32 "04xd61ycn1nisq1s5ch14zkbsjcfcy6n29nkjn68s2ribmws0iid"))))
(arguments
(list
- #:configure-flags #~(list "--wrap-mode=nodownload" "-Dexperimental=true")))
- (inputs (modify-inputs (package-inputs waybar) (delete "gtkmm") (prepend gtkmm-ryan))))) ;(prepend python cava catch2 gtkmm)))))
+ #:configure-flags #~(list "--wrap-mode=nodownload" "-Dexperimental=true")))))
+ ;(inputs (modify-inputs (package-inputs waybar) (delete "gtkmm") (prepend gtkmm-ryan))))) ;(prepend python cava catch2 gtkmm)))))
;(native-inputs (modify-inputs (package-native-inputs waybar) (prepend gcc-13)))))
-(define hyprland-unbundle-wlroots-patch
- (origin
- (method url-fetch)
- (uri (string-append "https://github.com/hyprwm/Hyprland" "/raw/"
- "13f6f0b923ff3ec94a3bec886c28b90402ceef91"
- "/nix/patches/meson-build.patch"))
- (sha256
- (base32 "02sq5ymxxrxp93mccafc4ilpsvs4m8bxc3whp7bcc5v9dx41va8k"))))
-
-(define-public hyprland-temp
+(define cairo-hypr ;;; stolen from rosenthal since it is not exported
(package
- (inherit hyprland)
- (version "12985fa0d8e43b1e33326dfb49be681970dfaea5")
+ (inherit cairo)
+ (name "cairo")
+ (version "1.18.0")
(source (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://github.com/hyprwm/Hyprland")
- (commit version)))
- (file-name (git-file-name "hyprland" version))
- (modules '((guix build utils)))
- (snippet
- '(begin
- (substitute* "meson.build"
- ((".*hyprpm/src.*") ""))
- (for-each delete-file-recursively
- '("hyprpm"
- "subprojects"))
- (copy-file "src/version.h.in" "src/version.h")))
+ (method url-fetch)
+ (uri (string-append "https://cairographics.org/releases/cairo-"
+ version ".tar.xz"))
(sha256
- (base32
- "13l95h5krmv7syidw9c4gn62ac5qcqg9pmfh6x8ydjws97h05jvz"))
- (patches (list hyprland-unbundle-wlroots-patch))))))
+ (base32
+ "0r0by563s75xyzz0d0j1nmjqmdrk2x9agk7r57p3v8vqp4v0ffi4"))))
+ (build-system meson-build-system)
+ (arguments
+ (list #:tests? #f
+ #:glib-or-gtk? #t
+ #:configure-flags
+ #~(list "-Dspectre=disabled")))
+ (outputs '("out"))))
+
+(define-public hyprlock
+ (let ((commit "dba9d8b5175a6f23463035aafc6b0c741f9b73a5")
+ (revision "1"))
+ (package
+ (name "hyprlock")
+ (version (git-version "0.4.1" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/hyprlock")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1zzv7w7hn8k71w75a9mz548cbl4f8zcsd8i92abgnrx5x9i35q63"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:tests? #f
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'install 'wrap-program
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out"))
+ (mesa (assoc-ref inputs "mesa")))
+ (wrap-program (string-append out "/bin/hyprlock")
+ `("__EGL_VENDOR_LIBRARY_DIRS" prefix ,(list (string-append mesa "/share/glvnd/egl_vendor.d"))))))))))
+ (native-inputs
+ (list gcc-13
+ pkg-config
+ mesa-headers
+ wayland))
+ (inputs
+ (list cairo
+ pango
+ libxkbcommon
+ hyprlang
+ mesa-libglvnd
+ libdrm
+ libglvnd
+ wayland-protocols
+ linux-pam))
+ (home-page "https://github.com/hyprwm/hyprlock")
+ (license license:bsd-3)
+ (synopsis "Screen locker for Hyprland")
+ (description "Screen locker for hyprland."))))
-swayidle-new
diff --git a/modules/ryan-packages/wmrosenthal.bak b/modules/ryan-packages/wmrosenthal.bak
new file mode 100644
index 0000000..5495378
--- /dev/null
+++ b/modules/ryan-packages/wmrosenthal.bak
@@ -0,0 +1,371 @@
+(define-module (ryan-packages wmrosenthal)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix build-system cmake)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix build-system meson)
+ #:use-module (guix build-system qt)
+ #:use-module (guix download)
+ #:use-module (guix gexp)
+ #:use-module (guix git-download)
+ #:use-module (guix packages)
+ #:use-module (guix utils)
+ #:use-module (gnu packages autotools)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages bash)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages freedesktop)
+ #:use-module (gnu packages gcc)
+ #:use-module (gnu packages cmake)
+ #:use-module (gnu packages gl)
+ #:use-module (gnu packages glib)
+ #:use-module (gnu packages gnome)
+ #:use-module (gnu packages gtk)
+ #:use-module (gnu packages guile)
+ #:use-module (gnu packages image)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages man)
+ #:use-module (gnu packages pciutils)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages python)
+ #:use-module (gnu packages qt)
+ #:use-module (gnu packages web)
+ #:use-module (gnu packages wm)
+ #:use-module (gnu packages xdisorg)
+ #:use-module (rosenthal packages freedesktop))
+
+(define cairo-for-hyprland
+ (package
+ (inherit cairo)
+ (name "cairo")
+ (version "1.18.0")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://cairographics.org/releases/cairo-"
+ version ".tar.xz"))
+ (sha256
+ (base32
+ "0r0by563s75xyzz0d0j1nmjqmdrk2x9agk7r57p3v8vqp4v0ffi4"))))
+ (build-system meson-build-system)
+ (arguments
+ (list #:tests? #f
+ #:glib-or-gtk? #t
+ #:configure-flags
+ #~(list "-Dspectre=disabled")))
+ (outputs '("out"))))
+
+(define hwdata-for-hyprland
+ (package
+ (inherit hwdata)
+ (arguments
+ (substitute-keyword-arguments (package-arguments hwdata)
+ ((#:phases _) #~%standard-phases)))
+ (outputs '("out"))))
+
+(define libdrm-for-hyprland
+ (package
+ (inherit libdrm)
+ (name "libdrm")
+ (version "2.4.120")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://dri.freedesktop.org/libdrm/libdrm-"
+ version ".tar.xz"))
+ (sha256
+ (base32
+ "0yijzgg6rdsa68bz03sw0lcfa2nclv9m3as1cja50wkcyxim7x9v"))))))
+
+(define udis86-for-hyprland
+ (let ((revision "186")
+ (commit "5336633af70f3917760a6d441ff02d93477b0c86"))
+ (package
+ (name "udis86")
+ (version (git-version "1.7.2" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/canihavesomecoffee/udis86")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0y5z1169wff578jylpafsww4px4y6gickhcs885a9c660d8xs9qy"))))
+ (build-system gnu-build-system)
+ (native-inputs (list autoconf automake libtool python-minimal-wrapper))
+ (home-page "https://github.com/canihavesomecoffee/udis86")
+ (synopsis "Disassembler Library for x86 and x86-64")
+ (description
+ "Udis86 is a disassembler for the x86 and x86-64 class of instruction
+set architectures. It consists of a C library called @code{libudis86} and a
+command line tool called @code{udcli} that incorporates the library.")
+ (license license:bsd-2))))
+
+(define wayland-protocols-for-hyprland
+ (package
+ (inherit wayland-protocols)
+ (name "wayland-protocols")
+ (version "1.34")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://gitlab.freedesktop.org/wayland/wayland-protocols"
+ "/-/releases/" version "/downloads/"
+ "wayland-protocols-" version ".tar.xz"))
+ (sha256
+ (base32
+ "1sxgvis0abkymc02nhx2svm60myiq3shvy759sphpxl5rp52g6y5"))))))
+
+(define wlroots-hyprland
+ (package
+ (inherit wlroots)
+ (name "wlroots")
+ (version "611a4f24cd2384378f6e500253983107c6656c64")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/wlroots-hyprland")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0wpqa241656rcnpszkq14ikz4dxsal2xrrc7ryn22xmciw4rkxxw"))))
+ (propagated-inputs
+ (modify-inputs (package-propagated-inputs wlroots)
+ (prepend libdrm-for-hyprland)
+ (replace "libinput-minimal" libinput-minimal-1.24.0)
+ (replace "wayland-protocols" wayland-protocols-for-hyprland)))
+ (native-inputs
+ (modify-inputs (package-native-inputs wlroots)
+ (replace "hwdata" `(,hwdata-for-hyprland "out"))))))
+
+(define-public hyprcursor
+ (package
+ (name "hyprcursor")
+ (version "0.1.5")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/hyprcursor")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0252abb9yjskclhxjc2ar6r2x9pfllpbas7rfp4597i2gnxrzbvv"))))
+ (build-system cmake-build-system)
+ (arguments (list #:tests? #f)) ;FIXME
+ (inputs (list cairo-for-hyprland hyprlang librsvg libzip))
+ (native-inputs (list gcc-13 pkg-config))
+ (home-page "https://hyprland.org/")
+ (synopsis "Hyprland cursor format, library and utilities")
+ (description
+ "This package provides Hyprland cursor format, library and utilities.")
+ (license license:bsd-3)))
+
+(define-public hyprland-protocols
+ (package
+ (name "hyprland-protocols")
+ (version "0.2")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/hyprland-protocols")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1drjznj7fn6m5m6skhzh0p031cb5x0bb4i56jxnxwpwaa71g1z20"))))
+ (build-system meson-build-system)
+ (home-page "https://hyprland.org")
+ (synopsis "Wayland protocol extensions for Hyprland")
+ (description
+ "This package provides Wayland protocol extensions for Hyprland and it
+exists in an effort to bridge the gap between Hyprland and KDE/Gnome's
+functionality. Since @code{wlr-protocols} is closed for new submissions, and
+@code{wayland-protocols} is very slow with changes, this package will hold
+protocols used by Hyprland to bridge the aforementioned gap.")
+ (license license:bsd-3)))
+
+(define-public hyprland
+ (package
+ (name "hyprland")
+ (version "fe7b748eb668136dd0558b7c8279bfcd7ab4d759")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/Hyprland")
+ (commit version)
+ (recursive? #t)))
+ (file-name (git-file-name name "0.39.1"))
+ ; (modules '((guix build utils)))
+ ; (snippet
+ ; '(begin
+ ; ;; Remove bundled sources and hyprpm utility.
+ ; (substitute* "meson.build"
+ ; ((".*hyprpm/src.*") ""))
+ ; (for-each delete-file-recursively
+ ; '("hyprpm"
+ ; "subprojects"))))
+ (sha256
+ (base32
+ "1b2l1j7i7fgy66c1nai7z16l0a95ay3xqq7yr2r6h7sq0jlnpgpc"))))
+ (build-system meson-build-system)
+ (arguments
+ (list #:build-type "release"
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'fix-path
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* (find-files "src" "\\.cpp$")
+ (("/usr/local(/bin/Hyprland)" _ path)
+ (string-append #$output path))
+ (("/usr") #$output)
+ (("(execAndGet\\(\")\\<(cat|fc-list|lspci)\\>"
+ _ pre cmd)
+ (string-append
+ pre (search-input-file
+ inputs (string-append "bin/" cmd))))
+ (("\\<cc\\>") (search-input-file inputs "bin/gcc"))
+ ;; NOTE: Add binutils to inputs will override ld-wrapper.
+ (("(execAndGet\\(\\(\")\\<nm\\>" _ pre)
+ (string-append pre #$binutils "/bin/nm"))
+ (("\\<(addr2line|objcopy)\\>" _ cmd)
+ (string-append #$binutils "/bin/" cmd))))))))
+ (native-inputs (cons* (list "gcc-13" gcc-13) (list "jq" jq) (list "pkg-config" pkg-config) (list "cmake" cmake) (list "hwdata" hwdata-for-hyprland) (package-native-inputs wlroots)))
+ (propagated-inputs
+ (cons*
+ (list "libdrm-for-hyprland" libdrm-for-hyprland)
+ (list "libinput-minimal" libinput-minimal-1.24.0)
+ (list "wayland-protocols" wayland-protocols-for-hyprland)
+ (package-propagated-inputs wlroots)))
+
+ (inputs
+ (list cairo-for-hyprland
+ gcc-13
+ hyprcursor
+ hyprland-protocols
+ hyprlang
+ pango
+ pciutils))
+ (home-page "https://hyprland.org")
+ (synopsis "Dynamic tiling Wayland compositor based on wlroots")
+ (description
+ "Hyprland is a dynamic tiling Wayland compositor based on @code{wlroots}
+that doesn't sacrifice on its looks. It supports multiple layouts, fancy
+effects, has a very flexible IPC model allowing for a lot of customization, and
+more.")
+ (license license:bsd-3)))
+
+(define-public hyprlang
+ (package
+ (name "hyprlang")
+ (version "0.5.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/hyprlang")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0f8mahg6d6wylybvh6hgayls57miwwv4w69fbaskd8d7dkg2h7kd"))))
+ (build-system cmake-build-system)
+ (native-inputs (list gcc-13))
+ (home-page "https://hyprland.org/hyprlang/")
+ (synopsis "Official implementation library for hypr config language")
+ (description
+ "This package provides the official implementation for hypr configuration
+language used in @code{hyprland}.")
+ (license license:gpl3+)))
+
+(define-public grimblast
+ (package
+ (name "grimblast")
+ (version "0.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/contrib")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0ld0sj7ahf9jf8cqzbqkhj3m2w60027ixic24ih26nwy90b5qjwx"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list #:tests? #f ;no tests
+ #:make-flags
+ #~(list (string-append "PREFIX=" #$output))
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'configure)
+ (add-after 'unpack 'chdir
+ (lambda _
+ (chdir "grimblast")))
+ (add-after 'install 'wrap
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((grimblast (string-append #$output "/bin/grimblast")))
+ (wrap-script grimblast
+ `("PATH" suffix
+ ,(map (lambda (program)
+ (dirname (search-input-file
+ inputs (string-append "/bin/" program))))
+ '("grim" "slurp" "hyprctl" "wl-copy" "jq"
+ "notify-send" "date"))))))))))
+ (native-inputs (list scdoc))
+ (inputs (list grim guile-3.0 jq libnotify slurp hyprland wl-clipboard))
+ (home-page "https://github.com/hyprwm/contrib")
+ (synopsis "Hyprland version of Grimshot")
+ (description "A Hyprland version of Grimshot.")
+ (license license:expat)))
+
+(define-public xdg-desktop-portal-hyprland
+ (package
+ (name "xdg-desktop-portal-hyprland")
+ (version "1.3.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyprwm/xdg-desktop-portal-hyprland")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0fdbzxanmmzrvb9wfzg1pdsnlg7dl6v5k8bl44w10n48s7bbbzn0"))))
+ (build-system qt-build-system)
+ (arguments
+ (list #:tests? #f ;No tests
+ #:qtbase qtbase
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'fix-path
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* (find-files "." "\\.cp?*$")
+ (("/bin/sh") "sh")
+ (("\\<(sh|grim|hyprctl|slurp)\\>" _ cmd)
+ (search-input-file inputs (string-append "/bin/" cmd)))
+ (("\\<(hyprland-share-picker)\\>" _ cmd)
+ (string-append #$output "/bin/" cmd))))))))
+ (native-inputs
+ (list gcc-13 pkg-config wayland))
+ (inputs
+ (list bash-minimal
+ grim
+ hyprland
+ hyprland-protocols
+ hyprlang
+ mesa
+ pipewire
+ qtwayland
+ sdbus-c++
+ slurp
+ wayland-protocols))
+ (home-page "https://github.com/hyprwm/xdg-desktop-portal-hyprland")
+ (synopsis "XDG Desktop Portal backend for Hyprland")
+ (description
+ "This package provides @code{xdg-desktop-portal-hyprland}, which extends
+@code{xdg-desktop-portal-wlr} for Hyprland with support for
+@code{xdg-desktop-portal} screenshot and casting interfaces, while adding a few
+extra portals specific to Hyprland, mostly for window sharing.")
+ (license license:bsd-3)))
+
+hyprland
diff --git a/modules/ryan-services/file-manager.scm b/modules/ryan-services/file-manager.scm
new file mode 100644
index 0000000..780ac57
--- /dev/null
+++ b/modules/ryan-services/file-manager.scm
@@ -0,0 +1,66 @@
+(define-module (ryan-services file-manager)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages base)
+ #:use-module (gnu services)
+ #:use-module (gnu services configuration)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu home services)
+ #:use-module (gnu home services shepherd)
+ #:use-module (srfi srfi-1)
+ #:use-module (guix gexp)
+ #:use-module (guix records)
+ #:export (downloads-garbage-collector-service-type
+ downloads-garbage-collector-configuration
+ downloads-garbage-collector-configuration?))
+
+(define-configuration downloads-garbage-collector-configuration
+ (user
+ (string "")
+ "User to run under")
+ (no-serialization))
+
+(define-public (home-symlinks files)
+ ;; Simple service to symlink two paths. Treats all paths with HOME prepended
+ (for-each (lambda (pair)
+ (let ((path1 (car pair))
+ (path2 (cadr pair)))
+ (let ((full-path1 (string-append (getenv "HOME") "/" path1))
+ (full-path2 (string-append (getenv "HOME") "/" path2)))
+ (if (file-exists? full-path2)
+ (if (eq? (stat:type (lstat full-path2)) 'regular)
+ ((display (format #f "WARNING: Deleting regular file ~a.\n" full-path2))
+ (delete-file full-path2)
+ (symlink full-path1 full-path2))
+ #f)
+ (symlink full-path1 full-path2)))))
+ files))
+
+(define downloads-garbage-collector-service
+ (match-record-lambda <downloads-garbage-collector-configuration>
+ (user)
+ (let ((cleanup-command #~(list "find" (string-append "/home/" #$user "/Downloads") "-mtime" "+7" "-delete")))
+ (shepherd-service
+ (documentation "Garbage collect downloaded files more than 1 week old for USER.")
+ (provision '(downloads-garbage-collector))
+ ;(requirement '(root))
+ (modules '((shepherd service timer)))
+ (start #~(make-timer-constructor
+ (calendar-event #:hours '(08) #:minutes '(30)
+ #:days-of-week '(tuesday))
+ (command #$cleanup-command)))
+ (stop #~(make-timer-destructor))
+ (actions (list (shepherd-action
+ (name 'trigger)
+ (documentation "Trigger GC in Downloads folder for USER")
+ (procedure #~(lambda _
+ (apply system* #$cleanup-command))))))))))
+
+(define-public downloads-garbage-collector-service-type
+ (service-type
+ (name 'downloads-garbage-collector)
+ (description "Given a USER, clear files older than 1 week from Downloads folder")
+ (extensions
+ (list
+ (service-extension home-shepherd-service-type
+ (compose list downloads-garbage-collector-service))))
+ (default-value (downloads-garbage-collector-configuration))))
diff --git a/modules/ryan-services/networking.scm b/modules/ryan-services/networking.scm
new file mode 100644
index 0000000..9fd15bd
--- /dev/null
+++ b/modules/ryan-services/networking.scm
@@ -0,0 +1,84 @@
+(define-module (ryan-services networking)
+ #:use-module (guix gexp)
+ #:use-module (guix records)
+ #:use-module (ryan-packages networking)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages dns)
+ #:use-module (gnu packages base)
+ #:use-module (gnu services)
+ #:use-module (gnu services admin)
+ #:use-module (gnu services configuration)
+ #:use-module (gnu services shepherd)
+ #:export (netbird-configuration
+ netbird-service-type))
+
+(define-configuration netbird-configuration
+ (netbird
+ (file-like netbird-bin)
+ "The netbird package to use")
+
+ (iptables
+ (file-like iptables-nft)
+ "The iptables implementation to use")
+
+ (dns-manager
+ (file-like openresolv)
+ "Resolv.conf manager")
+
+ (log-file
+ (string "/var/log/netbird.log")
+ "Path to logs")
+
+ (socket
+ (string "/var/run/netbird.sock")
+ "Path of UNIX socket")
+
+ (verbosity
+ (string "warning")
+ "Log verbosity. Default is 'warning'")
+
+ (extra-options
+ (list-of-strings '())
+ "List of extra options")
+ (no-serialization))
+
+(define netbird-shepherd-service
+ (match-record-lambda <netbird-configuration>
+ (netbird iptables dns-manager log-file socket verbosity extra-options)
+ (let ((environment
+ #~(list (string-append "PATH="
+ (string-join
+ '(#$(file-append iptables "/sbin")
+ #$(file-append iproute "/sbin")
+ #$(file-append dns-manager "/sbin")
+ #$(file-append coreutils "/bin"))
+ ":")))))
+ (list (shepherd-service
+ (documentation "Run netbird")
+ (provision '(netbird))
+ (requirement '(user-processes))
+ (start
+ #~(make-forkexec-constructor
+ (list
+ #$(file-append netbird "/bin/netbird")
+ "service" "run"
+ "--log-level" #$verbosity
+ "--daemon-addr" (string-append "unix://" #$socket)
+ "--log-file" "console"
+ #$@extra-options)
+ #:environment-variables #$environment
+ #:log-file #$log-file))
+ (stop #~(make-kill-destructor)))))))
+
+(define netbird-service-type
+ (service-type
+ (name 'netbird)
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ netbird-shepherd-service)
+ (service-extension profile-service-type
+ (compose list netbird-configuration-netbird))
+ (service-extension log-rotation-service-type
+ (compose list netbird-configuration-log-file))))
+ (default-value (netbird-configuration))
+ (description "Run netbird.")))
diff --git a/modules/ryan-services/nix.scm b/modules/ryan-services/nix.scm
new file mode 100644
index 0000000..75c9082
--- /dev/null
+++ b/modules/ryan-services/nix.scm
@@ -0,0 +1,182 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019, 2020, 2021, 2024 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2020 Peng Mei Yu <i@pengmeiyu.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (ryan-services nix)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages bash)
+ #:use-module (gnu packages package-management)
+ #:use-module (gnu services base)
+ #:use-module (gnu services configuration)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu services web)
+ #:use-module (gnu services)
+ #:use-module (gnu system file-systems)
+ #:use-module (gnu system shadow)
+ #:use-module (guix gexp)
+ #:use-module (guix packages)
+ #:use-module (guix records)
+ #:use-module (guix store)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-26)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 format)
+ #:use-module (guix modules)
+ #:export (nix-service-type
+
+ nix-configuration
+ nix-configuration?))
+
+;;; Commentary:
+;;;
+;;; This module provides a service definition for the Nix daemon.
+;;;
+;;; Code:
+
+(define-record-type* <nix-configuration>
+ nix-configuration make-nix-configuration
+ nix-configuration?
+ (package nix-configuration-package ;file-like
+ (default nix))
+ (sandbox nix-configuration-sandbox ;boolean
+ (default #t))
+ (build-directory nix-configuration-build-directory ;string
+ (default "/tmp"))
+ (build-sandbox-items nix-configuration-build-sandbox-items ;list of strings
+ (default '()))
+ (extra-config nix-configuration-extra-config ;list of strings
+ (default '()))
+ (extra-options nix-configuration-extra-options ;list of strings
+ (default '())))
+
+;; Copied from gnu/services/base.scm
+(define* (nix-build-accounts count #:key
+ (group "nixbld")
+ (shadow shadow))
+ "Return a list of COUNT user accounts for Nix build users with the given
+GID."
+ (unfold (cut > <> count)
+ (lambda (n)
+ (user-account
+ (name (format #f "nixbld~2,'0d" n))
+ (system? #t)
+ (group group)
+ (supplementary-groups (list group "kvm"))
+ (comment (format #f "Nix Build User ~2d" n))
+ (home-directory "/var/empty")
+ (shell (file-append shadow "/sbin/nologin"))))
+ 1+
+ 1))
+(define (nix-accounts _)
+ "Return the user accounts and user groups."
+ (cons (user-group
+ (name "nixbld")
+ (system? #t)
+
+ ;; Use a fixed GID so that we can create the store with the right
+ ;; owner.
+ (id 40000))
+ (nix-build-accounts 10 #:group "nixbld")))
+
+(define (nix-activation _)
+ ;; Return the activation gexp.
+ #~(begin
+ (use-modules (guix build utils)
+ (srfi srfi-26))
+ (for-each (cut mkdir-p <>) '("/nix/var/log"
+ "/nix/var/nix/gcroots/per-user"
+ "/nix/var/nix/profiles/per-user"))
+ (unless (file-exists? #$%nix-store-directory)
+ (mkdir-p #$%nix-store-directory)
+ (chown #$%nix-store-directory
+ (passwd:uid (getpw "root")) (group:gid (getpw "nixbld01")))
+ (chmod #$%nix-store-directory #o775))
+ (for-each (cut chmod <> #o777) '("/nix/var/nix/profiles"
+ "/nix/var/nix/profiles/per-user"))))
+
+(define nix-service-etc
+ (match-lambda
+ (($ <nix-configuration> package sandbox build-directory build-sandbox-items extra-config)
+ (let ((ref-file (references-file package)))
+ `(("nix/nix.conf"
+ ,(computed-file
+ "nix.conf"
+ #~(begin
+ (use-modules (srfi srfi-26)
+ (ice-9 format))
+ (with-output-to-file #$output
+ (lambda _
+ (define internal-sandbox-paths
+ (call-with-input-file #$ref-file read))
+
+ (format #t "sandbox = ~a~%" (if #$sandbox "true" "false"))
+ ;; config.nix captures store file names.
+ (format #t "sandbox-paths = ~{~a ~}~%"
+ (append (list (string-append "/bin/sh=" #$bash-minimal "/bin/bash"))
+ internal-sandbox-paths
+ '#$build-sandbox-items))
+ (for-each (cut display <>) '#$extra-config)))))))))))
+
+(define %nix-store-directory
+ "/nix/store")
+
+(define %immutable-nix-store
+ ;; Read-only store to avoid users or daemons accidentally modifying it.
+ ;; 'nix-daemon' has provisions to remount it read-write in its own name
+ ;; space.
+ (list (file-system
+ (device %nix-store-directory)
+ (mount-point %nix-store-directory)
+ (type "none")
+ (check? #f)
+ (flags '(read-only bind-mount)))))
+
+(define nix-shepherd-service
+ ;; Return a <shepherd-service> for Nix.
+ (match-lambda
+ (($ <nix-configuration> package _ build-directory _ _ extra-options)
+ (list
+ (shepherd-service
+ (provision '(nix-daemon))
+ (documentation "Run nix-daemon.")
+ (requirement '(user-processes file-system-/nix/store))
+ (start #~(make-forkexec-constructor
+ (list (string-append #$package "/bin/nix-daemon")
+ #$@extra-options)
+ #:environment-variables
+ (list (string-append "TMPDIR=" #$build-directory)
+ "PATH=/run/current-system/profile/bin")))
+ (respawn? #f)
+ (stop #~(make-kill-destructor)))))))
+
+(define nix-service-type
+ (service-type
+ (name 'nix)
+ (extensions
+ (list (service-extension shepherd-root-service-type nix-shepherd-service)
+ (service-extension account-service-type nix-accounts)
+ (service-extension activation-service-type nix-activation)
+ (service-extension etc-service-type nix-service-etc)
+ (service-extension profile-service-type
+ (compose list nix-configuration-package))
+ (service-extension file-system-service-type
+ (const %immutable-nix-store))))
+ (description "Run the Nix daemon.")
+ (default-value (nix-configuration))))
+
+;;; nix.scm ends here
diff --git a/modules/ryan-services/udev.bak b/modules/ryan-services/udev.bak
new file mode 100644
index 0000000..5a304d3
--- /dev/null
+++ b/modules/ryan-services/udev.bak
@@ -0,0 +1,17 @@
+(define-module (ryan-services udev)
+ #:use-module (gnu packages)
+ #:use-module (gnu services)
+ #:use-module (gnu services base)
+ #:use-module (guix gexp)
+ #:export (udev-hwdb-configuration
+ udev-hwdb-configuration?
+ udev-hwdb-configuration-rule))
+
+(define-record-type* <udev-hwdb-configuration>
+ udev-hwdb-configuration make-udev-hwdb-configuration
+ udev-hwdb-configuration? this-udev-hwdb-configuration
+ (hwdb-rules udev-hwdb-configuration-hwdb-rules ;list of file-like
+ (default '())))
+
+; TODO: define hwdb rules like udev rules, add compiler step, splice this config
+; into udev service proper, hopefully etc-config handles this gracefully