Compare

7a36da3e1d81add371cdc8653c2f3ac4d6ccfb0dnew-bootloader-next · 180 commits

merge base 7a36da3e1d81…

Changed files

FileChanges
.gitignore +2 −0 raw
README.md +29 −0 raw
mainlaptop.scm => RyanLaptop.scm +0 −0 raw
thinkpad.scm => RyanThinkpad.scm +4 −0 raw
channels.scm +4 −4 raw
deploy.sh +113 −0 raw
home-config/aerc/accounts.conf +26 −2 raw
home-config/aerc/aerc.conf +13 −11 raw
home-config/aerc/binds.conf +18 −4 raw
home-config/aerc/signature_personal +3 −0 raw
home-config/aerc/signature_rit_personal +5 −0 raw
home-config/aerc/templates/quoted_reply +6 −0 raw
home-config/aerc/templates/thanks +7 −0 raw
home-config/alacritty/alacritty.yml +5 −3 raw
home-config/bash_profile +6 −1 raw
home-config/bashrc +8 −0 raw
home-config/deploy-flag +0 −0 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/fish_plugins +5 −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/{Lilex/LICENSE.txt => AnonymicePro/OFL.txt} +94 −93 raw
home-config/fonts/{Lilex => AnonymicePro}/readme.md +0 −0 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/LilexNerdFont-Bold.ttf binary raw
home-config/fonts/Lilex/LilexNerdFont-ExtraLight.ttf binary raw
home-config/fonts/Lilex/LilexNerdFont-ExtraThick.ttf binary raw
home-config/fonts/Lilex/LilexNerdFont-Medium.ttf binary raw
home-config/fonts/Lilex/LilexNerdFont-Regular.ttf binary raw
home-config/fonts/Lilex/LilexNerdFont-Thin.ttf binary raw
home-config/fonts/Lilex/LilexNerdFontMono-Bold.ttf binary raw
home-config/fonts/Lilex/LilexNerdFontMono-ExtraLight.ttf binary raw
home-config/fonts/Lilex/LilexNerdFontMono-ExtraThick.ttf binary raw
home-config/fonts/Lilex/LilexNerdFontMono-Medium.ttf binary raw
home-config/fonts/Lilex/LilexNerdFontMono-Regular.ttf binary raw
home-config/fonts/Lilex/LilexNerdFontMono-Thin.ttf binary raw
home-config/fonts/Lilex/LilexNerdFontPropo-Bold.ttf binary raw
home-config/fonts/Lilex/LilexNerdFontPropo-ExtraLight.ttf binary raw
home-config/fonts/Lilex/LilexNerdFontPropo-ExtraThick.ttf binary raw
home-config/fonts/Lilex/LilexNerdFontPropo-Medium.ttf binary raw
home-config/fonts/Lilex/LilexNerdFontPropo-Regular.ttf binary raw
home-config/fonts/Lilex/LilexNerdFontPropo-Thin.ttf binary raw
home-config/fonts/MonofurNerdFont/LICENSE.txt +20 −0 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 +8 −0 raw
home-config/foot/foot.ini +7 −0 raw
home-config/gitconfig +19 −0 raw
home-config/home-configuration.scm +86 −21 raw
home-config/hypr/Wallpapers/static/1685362396481634.jpg binary raw
home-config/hypr/Wallpapers/static/1693169418078790.jpg binary raw
home-config/hypr/Wallpapers/static/1694792956043641.jpg binary raw
home-config/hypr/Wallpapers/static/1708470532817406.jpg binary raw
home-config/hypr/Wallpapers/static/1720750738377603.jpg binary raw
home-config/hypr/Wallpapers/static/1720751011150282.png binary raw
home-config/hypr/Wallpapers/static/1723625710776950.jpg binary raw
home-config/hypr/Wallpapers/static/1723626275390685.jpg binary raw
home-config/hypr/Wallpapers/static/1728661127589872.jpg binary raw
home-config/hypr/Wallpapers/static/4yglzy4rkh4d1.jpeg binary raw
home-config/hypr/Wallpapers/static/7xosa7um3ohd1.jpg binary raw
home-config/hypr/Wallpapers/static/83juiltm3ohd1.jpg binary raw
home-config/hypr/Wallpapers/static/CN62QXJ.jpg binary raw
home-config/hypr/Wallpapers/static/above-clouds.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-bluehour-1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-budapest.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-close-to-the-sun-1920.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-cold-1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-dreamy-1k.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-lights-1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-lines1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-mountains1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-new-year1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-portal-1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-reflect1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-serenity-1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-sky1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-solar-1k.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-wait.jpg binary raw
home-config/hypr/Wallpapers/static/alena-aenami-wings-hd.jpg binary raw
home-config/hypr/Wallpapers/static/autumn1.jpg binary raw
home-config/hypr/Wallpapers/static/autumn1.png 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/sah1k8tm3ohd1.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/Wallpapers/static/vfcfyfyehhi31.png binary raw
home-config/hypr/Wallpapers/static/w7ufw5eb3cuz.jpg binary raw
home-config/hypr/autostart.sh +23 −4 raw
home-config/hypr/family_guy.mp4 binary raw
home-config/hypr/hyprland.conf +58 −9 raw
home-config/hypr/hyprlock.conf +55 −0 raw
home-config/hypr/kanshi.conf +21 −0 raw
home-config/hypr/subwaysurfer.webm binary raw
home-config/hypr/wallpaper-daemon-animated-old.sh +106 −0 raw
home-config/hypr/wallpaper-daemon.sh +35 −0 raw
home-config/hypr/wallpaper.sh +9 −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/mpv/scripts/easycrop.lua +254 −0 raw
home-config/nix-config/nix.conf +1 −0 raw
home-config/nix-home-manager/flake.lock +453 −0 raw
home-config/nix-home-manager/flake.nix +55 −0 raw
home-config/nix-home-manager/home.nix +40 −4 raw
home-config/nvim/config/after/ftplugin/mail/custom.vim +2 −0 raw
home-config/nvim/config/init.vim +25 −11 raw
home-config/pulseaudio/client.conf +1 −0 raw
home-config/spotify-player/app.toml +34 −0 raw
home-config/ssh/config +8 −0 raw
home-config/tridactyl/native_main binary raw
home-config/tridactyl/tridactyl.json +7 −0 raw
home-config/waybar/config +54 −16 raw
home-config/waybar/modules/check-for-music.sh +7 −0 raw
home-config/waybar/modules/spotify.sh +4 −4 raw
home-config/waybar/style.css +2 −2 raw
modules/ryan-config/CACerts/AGFRIntermediate.crt +12 −0 raw
modules/ryan-config/CACerts/AGFRRoot.crt +11 −0 raw
modules/ryan-config/base-system.scm +70 −20 raw
modules/ryan-config/deploy-templates/HostTemplate +19 −0 raw
modules/ryan-config/deploy-templates/HostTemplateEncrypted +24 −0 raw
modules/ryan-config/user_first_run.sh +20 −0 raw
modules/ryan-config/utils.scm +33 −0 raw
modules/ryan-packages/audio.scm +81 −0 raw
modules/ryan-packages/binaries.bak +68 −0 raw
modules/ryan-packages/calcurse.scm +29 −0 raw
modules/ryan-packages/freedesktop.scm +80 −6 raw
modules/ryan-packages/gl.scm +224 −0 raw
modules/ryan-packages/gtk.scm +45 −0 raw
modules/ryan-packages/hyprland.-ryan.bak +46 −0 raw
modules/ryan-packages/hyprland.bak +495 −0 raw
modules/ryan-packages/linux.scm +35 −0 raw
modules/ryan-packages/mozilla.scm +58 −0 raw
modules/ryan-packages/networking.scm +14 −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/virtualization.scm +45 −0 raw
modules/ryan-packages/web-server.scm +63 −0 raw
modules/ryan-packages/wm.scm +119 −4 raw
modules/ryan-packages/wmrosenthal.bak +371 −0 raw
modules/ryan-services/file-manager.scm +25 −0 raw
modules/ryan-services/spotify.scm +43 −0 raw
modules/ryan-services/udev.bak +17 −0 raw

Commits

HashSubjectAuthorDate
7f27d13d Merge branch 'main' into new-bootloader-next Ryan Schanzenbacher
f8a56388 Have you tried the wallpaper drug? Ryan Schanzenbacher
3aaeb60f change guix remote to follow my mirror 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
75b0bef3 fixed firefox? also updated channels and kernel Ryan Schanzenbacher
752de9a6 updated apps, messed with firefox some (need to rewrite), added headphone "aut… Ryan Schanzenbacher
5778ed35 cleaned up firefox defnition? maybe? Ryan Schanzenbacher
adf9cb01 bumped swayidle to make work again Ryan Schanzenbacher
eb44470e Added MOZ_USE_XINPUT2 option to firefox to prep for smooth scrolling Ryan Schanzenbacher
2d87a289 Added user to dialout group Ryan Schanzenbacher
199ea5b4 added flipper zero udev rules Ryan Schanzenbacher
3967227c added local bin to path and fixed shepherd issue Ryan Schanzenbacher
8d9871bd fixed aerc Ryan Schanzenbacher
63bae678 put hyprland on commit until next release due to bugs, added kanshi configs fo… Ryan Schanzenbacher
014c9051 updated channels, added kanshi, fixed xdph, fixed firefox to not rebuild Ryan Schanzenbacher
e4166354 added gitconfig to guix environment Ryan Schanzenbacher
dc223823 added agfr ca Ryan Schanzenbacher
9396554c flakes work! Ryan Schanzenbacher
9672616f Added zoxide for cd, updated bashrc, trying to get latest hyprland portal work… Ryan Schanzenbacher
3f9ae573 fixed usb redirection issue Ryan Schanzenbacher
842b4033 updated wl-mirror Ryan Schanzenbacher
82d97d2c re-added cmake bc dumb Ryan Schanzenbacher
008ad48d forgot to update hash Ryan Schanzenbacher
fa95cb0d rotated channel commit pins and updated hyprland xdg-portal Ryan Schanzenbacher
fa5aee53 aerc inital template trial Ryan Schanzenbacher
72a67b03 bumped bluez version and fixed all dependency chains for new package Ryan Schanzenbacher
ed79e473 supressed suspend on laptop lid close or button push, added keybind for sleep … Ryan Schanzenbacher
b16b1b9d new wallpapers and hyprland shortcut for linkedin Ryan Schanzenbacher
35907a84 calcurse Ryan Schanzenbacher
7957aa8d actually commented out code Ryan Schanzenbacher
c8a2ce50 temp changes Ryan Schanzenbacher
c45e1fcd added taskwarrior and tasksh Ryan Schanzenbacher
6aeca396 Merge branch 'main' of git.in.rschanz.org:ryan77627/guix-config Ryan Schanzenbacher
8dbf39bc got rid of animated wallpapers for the time being. Too buggy and too much stor… Ryan Schanzenbacher
67c8a6f5 fixed neovim wrapping in aerc Ryan Schanzenbacher
83778242 reset monitor config for rochester Ryan Schanzenbacher
bc562fcc added alias for spotify_player Ryan Schanzenbacher
12e3af57 Added spotify-player and spotifyd service Ryan Schanzenbacher
67bd380a pulseaudio utils and file to stop pulse from starting Ryan Schanzenbacher
ca1dda2c monitor stuffs + bombadillo Ryan Schanzenbacher
fe084704 updated channels Ryan Schanzenbacher
bb6abc0c change in monitor layout Ryan Schanzenbacher
4f3a7875 added setspace tex package for double spaced essays Ryan Schanzenbacher
fb8a58d0 bumped swaylock Ryan Schanzenbacher
212056b9 fix docker compose Ryan Schanzenbacher
229951a5 added docker compose binary bc lazy Ryan Schanzenbacher
d1d8451f family guy funny moments Ryan Schanzenbacher
ba2175e1 family guy funny moments Ryan Schanzenbacher
7d887a17 wallpaper selector Ryan Schanzenbacher
a60aa5d9 wallpaper daemon fix Ryan Schanzenbacher
184f41ba wallpapers Ryan Schanzenbacher
121b0c3b wallpaper daemon Ryan Schanzenbacher
3b3b1f7f no git lfs Ryan Schanzenbacher
651a3b88 Delete home-config/hypr/Wallpapers/skyline-view.gif ryan77627
739f1c9d testing gif lfs Ryan Schanzenbacher
6299e878 using lfs maybe Ryan Schanzenbacher
5f61a096 added tools for wallpaper gif conversions Ryan Schanzenbacher
bf8ccc69 updated hyprland, new wallpaper app, color picker, etc Ryan Schanzenbacher
4628331b added neovim transparency Ryan Schanzenbacher
b40540c3 new wallpaper Ryan Schanzenbacher
99399daf switched go to guix Ryan Schanzenbacher
6816354b added new neovim plugin and added go plus pnpm Ryan Schanzenbacher
78ffbd8e added notifications so i remember to redeploy on other computers Ryan Schanzenbacher
b178dfbf added cheat sheet generation command Ryan Schanzenbacher
ae349ed9 emergency bump to xdg-desktop-portal for cpu usage Ryan Schanzenbacher
0ef52d00 less delay in lock on demand Ryan Schanzenbacher
28f686d6 added emojis, switched to wttrbar and foot completely Ryan Schanzenbacher
5e2a81b5 fix font issue Ryan Schanzenbacher
0bfe77ab fixed screen sharing Ryan Schanzenbacher
f3bf586e foot! Ryan Schanzenbacher
d9401080 foot Ryan Schanzenbacher
ada2a99f WAYBAR FIXED. LETS FUCKING GOOOOO Ryan Schanzenbacher
cc8f9e2f fuck it we ball Ryan Schanzenbacher
8452174a ugh Ryan Schanzenbacher
faa264f1 trying to build new version of waybar. Does not work yet Ryan Schanzenbacher
146140e0 updated packages Ryan Schanzenbacher
b93fadc4 changed pass to guix version Ryan Schanzenbacher
526850ff added pin shortcut and border color to signify Ryan Schanzenbacher
10c71dfa added cloc Ryan Schanzenbacher
72d02c50 fixed aerc wrapping issue Ryan Schanzenbacher
1b531a38 removed temp file Ryan Schanzenbacher
7dfd35ba FINALLY added netcat to my profile Ryan Schanzenbacher
fe9be57c gnunet and rust Ryan Schanzenbacher
52fc10ce transparency Ryan Schanzenbacher
5d9d6bcd added iommu Ryan Schanzenbacher
6089f971 fixed waybar? Ryan Schanzenbacher
04dbaab8 updated ryan77627
e2cc3f5f test 1 for auto deploy Ryan Schanzenbacher
a3a44f90 some deploy.sh changes Ryan Schanzenbacher
297ef48f added firefox native Ryan Schanzenbacher
9f69bb20 fixed shebang Ryan Schanzenbacher
24aab6a9 updated deploy script Ryan Schanzenbacher
33a7e152 preparing deploy script Ryan Schanzenbacher
b53809f9 nvim settings update Ryan Schanzenbacher
1ab06937 more fonts Ryan Schanzenbacher
606e3b8e waybar stuffs Ryan Schanzenbacher
9c784f79 added fonts and wl-mirror Ryan Schanzenbacher
33ab4884 fast connect Ryan Schanzenbacher
84776eae added experimental for headphone battery :3 Ryan Schanzenbacher
f9f087f0 added music info to waybar Ryan Schanzenbacher
e8351e69 SSH fix Ryan Schanzenbacher
409c1576 added quit keybind for terminal Ryan Schanzenbacher
4fce6bee added waypipe Ryan Schanzenbacher
cab45387 added rsync and pipeview Ryan Schanzenbacher
c8b287a7 libvirt works libvirt works libvirt works Ryan Schanzenbacher
43ea80ea libvirt pain Ryan Schanzenbacher
438237db added dconf for virt-manager settings to persist Ryan Schanzenbacher
76c68a9a added more aliases, this time for pulling Ryan Schanzenbacher
8eccf674 added python lsp by default Ryan Schanzenbacher
7c01f4cd added automatic language server stuff in neovim Ryan Schanzenbacher
eafe6ee0 Added mason to vim Ryan Schanzenbacher
2ad028eb added new deploy alias Ryan Schanzenbacher
1e3c6cd9 Changed setting for org_mode Ryan Schanzenbacher
600c4b82 added aliases and renamed files to match hostname Ryan Schanzenbacher
af94b1b4 added formatting Ryan Schanzenbacher
ec33bcc1 added readme for deploy instructions Ryan Schanzenbacher
7811a305 added native bluetooth to waybar Ryan Schanzenbacher
379a2e1c removed icedove Ryan Schanzenbacher
73f679c8 added pass and moved email creds to it Ryan Schanzenbacher
d81001a4 added cups and changed avahi config. added .local name res as well Ryan Schanzenbacher
7cbc4ab3 Revert "example" Ryan Schanzenbacher
8ba6e379 Revert "Revert "added imv"" Ryan Schanzenbacher
7b86e2e3 Revert "added imv" Ryan Schanzenbacher
5c79a182 example Ryan Schanzenbacher
a7083ebf added imv Ryan Schanzenbacher
28dada8b Added restic for backups this year Ryan Schanzenbacher
f78adc5a fixed neovim notes with pandoc Ryan Schanzenbacher
d41fb575 Got rid of log Ryan Schanzenbacher
f7c43d42 fixed deprecated package names and added notification for new emails Ryan Schanzenbacher
08fe249c changed abort keybind Ryan Schanzenbacher
9fd36bdd added compose abort shortcut Ryan Schanzenbacher
96ac2719 added flowed parameter to my emails Ryan Schanzenbacher
863601f6 aerc delete bindings and fixed quoted replies for emails. Ryan Schanzenbacher
f6ffc5b3 added git lfs Ryan Schanzenbacher
3bcd60a4 fixed signature and forward bind Ryan Schanzenbacher
0681e67e changed forward bindings, added shortcut for CC and BCC Ryan Schanzenbacher
95d1c36d forgot to expand creds to smtp section Ryan Schanzenbacher
34601831 Added school gmail to aerc Ryan Schanzenbacher
a960b899 signature file, other aerc changes, hyprland numlock Ryan Schanzenbacher
diff --git a/.gitignore b/.gitignore
index 68ee706..c93597c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
current
home-config/sway/monitors
+*.gif
+home-config/fish/fish_variables
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e224cc1
--- /dev/null
+++ b/README.md
@@ -0,0 +1,29 @@
+# Guix Installation
+
+## Installing Guix
+
+### Instructions
+
+- Create USB with Guix installation image
+- Boot and create partitions using graphical installer
+- Bail out right before installation begins, go to terminal
+ - Mount cow-store using herd start cow-store /mnt
+ - Download latest version of configuration using `curl -o main.tar.gz --insecure --follow https://git.ryanserver.home.arpa/ryan77627/guix-config/archive/main.tar.gz` and unpack using tar
+ - Authorize nonguix channel using `curl -o signkey.pub https://substitutes.nonguix.org/signing-key.pub and guix archive --authorize < signkey.pub`
+ - Modify/add system config for system and initialize using `guix time-machine -C channels.scm -- system -L modules/ --substitute-urls='https://bordeaux.guix.gnu.org https://ci.guix.gnu.org https://substitutes.nonguix.org' init system.scm /mnt`
+ - When installed, proceed
+- Reboot into system, assign root and ryan user a password
+- Setup system completely
+ - Clone guix-config to proper location
+ - Reconfigure system
+ - `sudo -E guix time-machine -C channels.scm -- system -L modules reconfigure system.scm` <---- may not be needed
+ - `guix pull`
+ - `hash guix`
+ - `sudo guix system -L modules reconfigure system.scm`
+ - Configure GUIX Home
+ - Install Nix Home Manager
+ - May need to sudo herd restart nix-daemon or reconfigure system to get nix working???
+ - `nix-channel --update`
+ - `nix-shell '<home-manager>' -A install`
+ - `home-manager switch`
+- Everything should now be set up and ready to use :)
diff --git a/mainlaptop.scm b/RyanLaptop.scm
similarity index 100%
rename from mainlaptop.scm
rename to RyanLaptop.scm
diff --git a/thinkpad.scm b/RyanThinkpad.scm
similarity index 81%
rename from thinkpad.scm
rename to RyanThinkpad.scm
index bfacd6b..1066bac 100644
--- a/thinkpad.scm
+++ b/RyanThinkpad.scm
@@ -3,6 +3,10 @@
(operating-system
(inherit base-operating-system)
+ (kernel-arguments (append (list "intel_iommu=on")
+ %default-kernel-arguments))
+ (initrd-modules (cons* "vfio_pci" "vfio" "vfio_iommu_type1"
+ %base-initrd-modules))
(host-name "RyanThinkpad")
(mapped-devices (list (mapped-device
(source (uuid
diff --git a/channels.scm b/channels.scm
index fbdff0a..38ab180 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://git.rschanz.org/ryan77627/guix.git")
(branch "master")
(commit
- "d43b53c476b4e9322b31274b788e851d37e72302")
+ "308877be17b2c2c92d972e105e8cc6a782ab4c82")
(introduction
(make-channel-introduction
"9edb3f66fd807b096b48283debdcddccfea34bad"
@@ -14,7 +14,7 @@
(url "https://gitlab.com/nonguix/nonguix")
(branch "master")
(commit
- "1a3082c574077aaf6771ff927e725fc390a2d531")
+ "ea84538b887df3aa3bdd61d5e4c284f1548e5520")
(introduction
(make-channel-introduction
"897c1a470da759236cc11798f4e0a5f7d4d59fbc"
@@ -25,7 +25,7 @@
(url "https://codeberg.org/hako/rosenthal.git")
(branch "trunk")
(commit
- "129ca6fe164bf8b5a37357bab8c5229b611f1df2")
+ "1deb97ada4d7d8c2d501738fcc1532a605de51a7")
(introduction
(make-channel-introduction
"7677db76330121a901604dfbad19077893865f35"
diff --git a/deploy.sh b/deploy.sh
new file mode 100755
index 0000000..5971681
--- /dev/null
+++ b/deploy.sh
@@ -0,0 +1,113 @@
+#!/run/current-system/profile/bin/bash
+
+gather_env() {
+ # Gather needed information
+ echo -n "Type 'eb' for encrypted w/ boot, 'en' for encrypted w/o boot, or 'd' for decrypted install: "
+ read install_type
+
+ echo -n "Type system hostname: "
+ read install_hostname
+
+ echo -n "Type device file for ROOT data: "
+ read root_dev
+
+ echo -n "Type device file for BOOT data: "
+ read boot_dev
+
+ echo -n "Type device file for SWAP: "
+ read swap_dev
+
+ echo -n "Add local device on network as substitute server? (y/n): "
+ read add_local_sub
+ if [ "$add_local_sub" == "y" ]
+ then
+ echo -n "Enter IP address of server: "
+ read substitute_ip
+ fi
+}
+
+copy_and_prepare() {
+ # Associate devs with uuids
+ root_uuid=`blkid $root_dev | awk -F\" '{print $2}'`
+ boot_uuid=`blkid $boot_dev | awk -F\" '{print $2}'`
+ swap_uuid=`blkid $swap_dev | awk -F\" '{print $2}'`
+ # Let's a go!
+ echo "Information gathered. Deploying Guix on $root_dev ($root_uuid) with boot on $boot_dev ($boot_uuid) and swap on $swap_dev ($swap_uuid)"
+ echo -n "Proceed? (y/n): "
+ read install_choice
+
+ if [ "$install_choice" != "y" ]
+ then
+ echo "Bailing!"
+ exit 1
+ fi
+
+ # We are installing!
+ # Copy template to root of repo
+ if [ "$install_type" == "eb" ]
+ then
+ cp ./modules/ryan-config/deploy-templates/HostTemplateEncrypted ./$install_hostname.scm
+ elif [ "$install_type" == "d" ]
+ then
+ cp ./modules/ryan-config/deploy-templates/HostTemplate ./$install_hostname.scm
+ else
+ echo "Invalid install type (not eb, en, or d), bailing!"
+ exit 1
+ fi
+
+ # Correct the information
+ sed -i "s/ChangeMe_ROOT/$root_uuid/" ./$install_hostname.scm
+ sed -i "s/ChangeMe_BOOTEFI/$boot_uuid/" ./$install_hostname.scm
+ sed -i "s/ChangeMe_SWAP/$swap_uuid/" ./$install_hostname.scm
+ sed -i "s/ChangeMe_HOST/$install_hostname/" ./$install_hostname.scm
+
+ # Install!
+ echo "Mounting /gnu/store to destination disk..."
+ herd start cow-store /mnt
+
+ # Install the non-guix signing keys
+ echo "Installing non-guix signing keys for substitutes..."
+ curl -o sign-key.pub https://substitutes.nonguix.org/signing-key.pub
+ guix archive --authorize < sign-key.pub
+
+ if [ "$add_local_sub" == "y" ]
+ then
+ echo "Installing local substitute server's signing keys"
+ curl -o local-sign.pub http://$substitute_ip/signing-key.pub
+ guix archive --authorize < local-sign.pub
+ fi
+}
+
+install_system() {
+ echo "Beginning install!"
+ if [ "$add_local_sub" == "y"]
+ then
+ guix time-machine -C ./channels.scm -- system -L ./modules --substitute-urls="http://$substitute_ip https://substitutes.nonguix.org https://bordeaux.guix.gnu.org https://ci.guix.gnu.org" init $install_hostname.scm /mnt
+ else
+ guix time-machine -C ./channels.scm -- system -L ./modules --substitute-urls="https://substitutes.nonguix.org https://bordeaux.guix.gnu.org https://ci.guix.gnu.org" init $install_hostname.scm /mnt
+ fi
+
+}
+
+install_user_env() {
+ # System should be installed now, we can chroot in and configure the user profile now
+ # NOTE: This assumes the user "ryan" for things, so change the USER var if you change your username
+
+ # 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
+
+ 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
+
+ chown 1000:1000 -R /mnt/home/ryan
+
+}
+
+gather_env
+copy_and_prepare
+install_system
+install_user_env
+
+# Reboot the machine at this point!
+reboot
diff --git a/home-config/aerc/accounts.conf b/home-config/aerc/accounts.conf
index 0d5d340..91a75c3 100644
--- a/home-config/aerc/accounts.conf
+++ b/home-config/aerc/accounts.conf
@@ -1,8 +1,32 @@
[Personal]
source = imaps://ryan%40rschanz.org@mail.rschanz.org:993
-source-cred-cmd = sh -c "cat ~/Documents/eml.pw"
+source-cred-cmd = pass emails/personal 2>/dev/null | tr -d '\n'
outgoing = smtps://ryan%40rschanz.org@mail.rschanz.org:465
-outgoing-cred-cmd = sh -c "cat ~/Documents/eml.pw"
+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
+aliases = Ryan S <ryan+ritlugdemo@rschanz.org>, Ryan Schanzenbacher <ryan+guixdevel@rschanz.org>
+
+[Development]
+source = imaps://ryan_devel%40rschanz.org@mail.rschanz.org:993
+source-cred-cmd = pass emails/development 2>/dev/null | tr -d '\n'
+outgoing = smtps://ryan_devel%40rschanz.org@mail.rschanz.org:465
+outgoing-cred-cmd = pass emails/development 2>/dev/null | tr -d '\n'
+default = INBOX
+from = Ryan <ryan_devel@rschanz.org>
+copy-to = Sent
+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
index 9d537db..04ac815 100644
--- a/home-config/aerc/aerc.conf
+++ b/home-config/aerc/aerc.conf
@@ -6,7 +6,7 @@
# 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=
+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.
@@ -28,7 +28,7 @@ unsafe-accounts-conf=true # I don't store my creds in this
# 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
+#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
@@ -64,6 +64,8 @@ log-level=trace
# 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
@@ -412,7 +414,7 @@ address-book-cmd = sh -c 'abook --mutt-query "%s" | tail -n +2'
#
# The command must output the selected files to standard output, one file per
# line.
-#file-picker-cmd=
+file-picker-cmd=fzf --multi --query=%s
#
# Allow to address yourself when replying
@@ -439,7 +441,7 @@ address-book-cmd = sh -c 'abook --mutt-query "%s" | tail -n +2'
# text. To actually make use of this format's features, you'll need support in
# your editor.
#
-#format-flowed=false
+format-flowed=true
[multipart-converters]
#
@@ -450,7 +452,7 @@ address-book-cmd = sh -c 'abook --mutt-query "%s" | tail -n +2'
#
# Example (obviously, this requires that you write your main text/plain body
# using the markdown syntax):
-text/html=pandoc -f markdown -t html --standalone
+text/html=pandoc --wrap=preserve -f gfm+hard_line_breaks -t html --standalone
[filters]
#
@@ -482,12 +484,12 @@ text/html=pandoc -f markdown -t html --standalone
#
#text/plain=colorize
#text/calendar=calendar
-message/delivery-status=bat -fp
-message/rfc822=bat -fp
-text/html=pandoc -f html -t plain | bat -fp
+message/delivery-status=bat -fn
+message/rfc822=bat -fn
+text/html=pandoc -f html -t plain | bat -fn
#text/html=html | colorize
-text/*=bat -fP --file-name="$AERC_FILENAME"
-application/x-sh=bat -fP -l sh
+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
@@ -525,7 +527,7 @@ application/x-sh=bat -fP -l sh
#
# Executed when a new email arrives in the selected folder
-#mail-received=notify-send "New mail from $AERC_FROM_NAME" "$AERC_SUBJECT"
+mail-received=notify-send "$AERC_FROM_NAME" "$AERC_SUBJECT"
#
# Executed when aerc starts
diff --git a/home-config/aerc/binds.conf b/home-config/aerc/binds.conf
index a3296a0..4dee57f 100644
--- a/home-config/aerc/binds.conf
+++ b/home-config/aerc/binds.conf
@@ -36,7 +36,8 @@ V = :mark -v<Enter>
T = :toggle-threads<Enter>
<Enter> = :view<Enter>
-d = :prompt 'Really delete this message?' 'delete-message'<Enter>
+dd = :mv Trash<Enter>
+dg = :mv [Gmail]/Trash<Enter>
D = :delete<Enter>
A = :archive year<Enter>
@@ -46,7 +47,12 @@ rr = :reply -a<Enter>
rq = :reply -aq<Enter>
Rr = :reply<Enter>
Rq = :reply -q<Enter>
-ff = :forward -A<Enter>
+f = :forward -A<Enter>
+
+# Git custom stuff ala Drew Devault
+ga = :pipe -mb git am -3<Enter>
+gp = :term git push<Enter>
+rt = :reply -aTthanks<Enter>
c = :cf<space>
$ = :term<space>
@@ -69,11 +75,13 @@ O = :open<Enter>
S = :save<space>
| = :pipe<space>
D = :delete<Enter>
-A = :archive flat<Enter>
+dd = :mv Trash<Enter>
+dg = :mv [Gmail]/Trash<Enter>
+A = :archive year<Enter>
<C-l> = :open-link <space>
-f = :forward<Enter>
+f = :forward -A<Enter>
rr = :reply -a<Enter>
rq = :reply -aq<Enter>
Rr = :reply<Enter>
@@ -103,6 +111,9 @@ $ex = <C-x>
<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
@@ -112,6 +123,7 @@ $ex = <C-x>
<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
@@ -126,10 +138,12 @@ 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
new file mode 100644
index 0000000..d9a8de7
--- /dev/null
+++ b/home-config/aerc/signature_personal
@@ -0,0 +1,3 @@
+--
+Best,
+Ryan Schanzenbacher
diff --git a/home-config/aerc/signature_rit_personal b/home-config/aerc/signature_rit_personal
new file mode 100644
index 0000000..efe4ceb
--- /dev/null
+++ b/home-config/aerc/signature_rit_personal
@@ -0,0 +1,5 @@
+--
+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
new file mode 100644
index 0000000..402515f
--- /dev/null
+++ b/home-config/aerc/templates/quoted_reply
@@ -0,0 +1,6 @@
+X-Mailer: aerc {{version}}
+
+{{.Signature}}
+
+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/aerc/templates/thanks b/home-config/aerc/templates/thanks
new file mode 100644
index 0000000..bc920a6
--- /dev/null
+++ b/home-config/aerc/templates/thanks
@@ -0,0 +1,7 @@
+X-Mailer: aerc {{version}}
+
+Thanks!
+
+{{exec "{ git remote get-url --push origin; git reflog -2 origin/main --pretty=format:%h; } | xargs printf 'To %s\n %s..%s main -> main\n'" ""}}
+
+{{.Signature}}
diff --git a/home-config/alacritty/alacritty.yml b/home-config/alacritty/alacritty.yml
index 0d3550b..4fbd991 100644
--- a/home-config/alacritty/alacritty.yml
+++ b/home-config/alacritty/alacritty.yml
@@ -1,13 +1,15 @@
+window:
+ opacity: 0.70
font:
size: 15
normal:
- family: "Monofur for Powerline"
+ family: "Monofur Nerd Font Mono"
style: Regular
bold:
- family: "Monofur for Powerline"
+ family: "Monofur Nerd Font Mono"
style: Bold
italic:
- family: "Monofur for Powerline"
+ family: "Monofur Nerd Font Mono"
style: Italic
diff --git a/home-config/bash_profile b/home-config/bash_profile
index d58e435..6bc7def 100644
--- a/home-config/bash_profile
+++ b/home-config/bash_profile
@@ -5,7 +5,12 @@ export XDG_SESSION_DESKTOP=sway
export _JAVA_AWT_WM_NONREPEATING=1
export XDG_DATA_DIRS=$XDG_DATA_DIRS:~/.nix-profile/share
-export PATH=$PATH:~/.nix-profile/bin
+export PATH=~/.local/bin:$PATH:~/.nix-profile/bin
# 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
+fi
+
diff --git a/home-config/bashrc b/home-config/bashrc
index f52ed48..26fbbf4 100644
--- a/home-config/bashrc
+++ b/home-config/bashrc
@@ -38,9 +38,17 @@ alias grep='grep --color=auto'
alias quit='exit'
export EDITOR=nvim
alias cat='bat --paging=never'
+alias ds='sudo -E guix system -L ~/.config/guix/modules reconfigure ~/.config/guix/$(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 && curl --fail-early --connect-timeout 2 -d "Guix repo updated, re-deploy!" https://ntfy.in.rschanz.org/guix_deployments'
+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 -"
export XDG_DATA_DIRS=$XDG_DATA_DIRS:/var/lib/flatpak/exports/share:/home/ryan/.local/share/flatpak/exports/share
# GPG SETUP FOR SSH
#export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
#gpgconf --launch gpg-agent
export GPG_TTY=$(tty)
+
+eval "$(zoxide init bash)"
diff --git a/home-config/deploy-flag b/home-config/deploy-flag
new file mode 100644
index 0000000..e69de29
diff --git a/home-config/docker/cli-plugins/docker-compose b/home-config/docker/cli-plugins/docker-compose
new file mode 100755
index 0000000..bf829e0
Binary files /dev/null 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/fish_plugins b/home-config/fish/fish_plugins
new file mode 100644
index 0000000..32f71ac
--- /dev/null
+++ b/home-config/fish/fish_plugins
@@ -0,0 +1,5 @@
+jorgebucaran/fisher
+ilancosman/tide@v6
+patrickf1/fzf.fish
+lilyball/nix-env.fish
+oh-my-fish/plugin-foreign-env
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
new file mode 100644
index 0000000..0482a5d
Binary files /dev/null and b/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Bold.ttf differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-BoldItalic.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-BoldItalic.ttf
new file mode 100644
index 0000000..0ea8dfe
Binary files /dev/null and b/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-BoldItalic.ttf differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Italic.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Italic.ttf
new file mode 100644
index 0000000..c373d01
Binary files /dev/null and b/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Italic.ttf differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Regular.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Regular.ttf
new file mode 100644
index 0000000..5fcf955
Binary files /dev/null and b/home-config/fonts/AnonymicePro/AnonymiceProNerdFont-Regular.ttf differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Bold.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Bold.ttf
new file mode 100644
index 0000000..ccdfff1
Binary files /dev/null and b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Bold.ttf differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-BoldItalic.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-BoldItalic.ttf
new file mode 100644
index 0000000..2091671
Binary files /dev/null and b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-BoldItalic.ttf differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Italic.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Italic.ttf
new file mode 100644
index 0000000..67103b6
Binary files /dev/null and b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Italic.ttf differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Regular.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Regular.ttf
new file mode 100644
index 0000000..8610b5b
Binary files /dev/null and b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontMono-Regular.ttf differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Bold.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Bold.ttf
new file mode 100644
index 0000000..303c6cf
Binary files /dev/null and b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Bold.ttf differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-BoldItalic.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-BoldItalic.ttf
new file mode 100644
index 0000000..71f2427
Binary files /dev/null and b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-BoldItalic.ttf differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Italic.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Italic.ttf
new file mode 100644
index 0000000..5e1885e
Binary files /dev/null and b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Italic.ttf differ
diff --git a/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Regular.ttf b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Regular.ttf
new file mode 100644
index 0000000..2ef511d
Binary files /dev/null and b/home-config/fonts/AnonymicePro/AnonymiceProNerdFontPropo-Regular.ttf differ
diff --git a/home-config/fonts/Lilex/LICENSE.txt b/home-config/fonts/AnonymicePro/OFL.txt
similarity index 94%
rename from home-config/fonts/Lilex/LICENSE.txt
rename to home-config/fonts/AnonymicePro/OFL.txt
index 9324092..68d1d00 100644
--- a/home-config/fonts/Lilex/LICENSE.txt
+++ b/home-config/fonts/AnonymicePro/OFL.txt
@@ -1,93 +1,94 @@
-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
+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/Lilex/readme.md b/home-config/fonts/AnonymicePro/readme.md
similarity index 100%
rename from home-config/fonts/Lilex/readme.md
rename to home-config/fonts/AnonymicePro/readme.md
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/LilexNerdFont-Bold.ttf b/home-config/fonts/Lilex/LilexNerdFont-Bold.ttf
new file mode 100644
index 0000000..17e96ee
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFont-Bold.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFont-ExtraLight.ttf b/home-config/fonts/Lilex/LilexNerdFont-ExtraLight.ttf
new file mode 100644
index 0000000..8facc07
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFont-ExtraLight.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFont-ExtraThick.ttf b/home-config/fonts/Lilex/LilexNerdFont-ExtraThick.ttf
new file mode 100644
index 0000000..a724e13
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFont-ExtraThick.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFont-Medium.ttf b/home-config/fonts/Lilex/LilexNerdFont-Medium.ttf
new file mode 100644
index 0000000..0ed3ae9
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFont-Medium.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFont-Regular.ttf b/home-config/fonts/Lilex/LilexNerdFont-Regular.ttf
new file mode 100644
index 0000000..4a11634
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFont-Regular.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFont-Thin.ttf b/home-config/fonts/Lilex/LilexNerdFont-Thin.ttf
new file mode 100644
index 0000000..01259b3
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFont-Thin.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFontMono-Bold.ttf b/home-config/fonts/Lilex/LilexNerdFontMono-Bold.ttf
new file mode 100644
index 0000000..c80849d
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFontMono-Bold.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFontMono-ExtraLight.ttf b/home-config/fonts/Lilex/LilexNerdFontMono-ExtraLight.ttf
new file mode 100644
index 0000000..e869852
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFontMono-ExtraLight.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFontMono-ExtraThick.ttf b/home-config/fonts/Lilex/LilexNerdFontMono-ExtraThick.ttf
new file mode 100644
index 0000000..92a05bd
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFontMono-ExtraThick.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFontMono-Medium.ttf b/home-config/fonts/Lilex/LilexNerdFontMono-Medium.ttf
new file mode 100644
index 0000000..1f307b8
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFontMono-Medium.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFontMono-Regular.ttf b/home-config/fonts/Lilex/LilexNerdFontMono-Regular.ttf
new file mode 100644
index 0000000..137d8f8
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFontMono-Regular.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFontMono-Thin.ttf b/home-config/fonts/Lilex/LilexNerdFontMono-Thin.ttf
new file mode 100644
index 0000000..816470a
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFontMono-Thin.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFontPropo-Bold.ttf b/home-config/fonts/Lilex/LilexNerdFontPropo-Bold.ttf
new file mode 100644
index 0000000..b6f3f50
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFontPropo-Bold.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFontPropo-ExtraLight.ttf b/home-config/fonts/Lilex/LilexNerdFontPropo-ExtraLight.ttf
new file mode 100644
index 0000000..dce2ad5
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFontPropo-ExtraLight.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFontPropo-ExtraThick.ttf b/home-config/fonts/Lilex/LilexNerdFontPropo-ExtraThick.ttf
new file mode 100644
index 0000000..921c748
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFontPropo-ExtraThick.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFontPropo-Medium.ttf b/home-config/fonts/Lilex/LilexNerdFontPropo-Medium.ttf
new file mode 100644
index 0000000..76c13ef
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFontPropo-Medium.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFontPropo-Regular.ttf b/home-config/fonts/Lilex/LilexNerdFontPropo-Regular.ttf
new file mode 100644
index 0000000..4785f1e
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFontPropo-Regular.ttf differ
diff --git a/home-config/fonts/Lilex/LilexNerdFontPropo-Thin.ttf b/home-config/fonts/Lilex/LilexNerdFontPropo-Thin.ttf
new file mode 100644
index 0000000..2f1c77e
Binary files /dev/null and b/home-config/fonts/Lilex/LilexNerdFontPropo-Thin.ttf differ
diff --git a/home-config/fonts/MonofurNerdFont/LICENSE.txt b/home-config/fonts/MonofurNerdFont/LICENSE.txt
new file mode 100644
index 0000000..b20cf9b
--- /dev/null
+++ b/home-config/fonts/MonofurNerdFont/LICENSE.txt
@@ -0,0 +1,20 @@
+------------------------------------------------------------------------
+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
new file mode 100644
index 0000000..a7f5a8f
Binary files /dev/null and b/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Bold.ttf differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Italic.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Italic.ttf
new file mode 100644
index 0000000..4ae48d3
Binary files /dev/null and b/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Italic.ttf differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Regular.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Regular.ttf
new file mode 100644
index 0000000..bfce77f
Binary files /dev/null and b/home-config/fonts/MonofurNerdFont/MonofurNerdFont-Regular.ttf differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Bold.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Bold.ttf
new file mode 100644
index 0000000..459891e
Binary files /dev/null and b/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Bold.ttf differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Italic.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Italic.ttf
new file mode 100644
index 0000000..75e7ed9
Binary files /dev/null and b/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Italic.ttf differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Regular.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Regular.ttf
new file mode 100644
index 0000000..f69999c
Binary files /dev/null and b/home-config/fonts/MonofurNerdFont/MonofurNerdFontMono-Regular.ttf differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Bold.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Bold.ttf
new file mode 100644
index 0000000..7b3a405
Binary files /dev/null and b/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Bold.ttf differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Italic.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Italic.ttf
new file mode 100644
index 0000000..a639973
Binary files /dev/null and b/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Italic.ttf differ
diff --git a/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Regular.ttf b/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Regular.ttf
new file mode 100644
index 0000000..f02fd35
Binary files /dev/null and b/home-config/fonts/MonofurNerdFont/MonofurNerdFontPropo-Regular.ttf differ
diff --git a/home-config/fonts/MonofurNerdFont/readme.md b/home-config/fonts/MonofurNerdFont/readme.md
new file mode 100644
index 0000000..9f2e700
--- /dev/null
+++ b/home-config/fonts/MonofurNerdFont/readme.md
@@ -0,0 +1,8 @@
+
+# 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
new file mode 100644
index 0000000..36b82c8
--- /dev/null
+++ b/home-config/foot/foot.ini
@@ -0,0 +1,7 @@
+font=Lilex Nerd Font Mono:size=14,FiraCode Nerd Font Mono:size=14
+
+[desktop-notifications]
+command=notify-send -a ${app-id} -i ${app-id} ${title} ${body}
+
+[colors]
+alpha=0.75
diff --git a/home-config/gitconfig b/home-config/gitconfig
new file mode 100644
index 0000000..6fa1c67
--- /dev/null
+++ b/home-config/gitconfig
@@ -0,0 +1,19 @@
+[user]
+ email = ryan@rschanz.org
+ name = Ryan Schanzenbacher
+[commit]
+ gpgSign = true
+[filter "lfs"]
+ clean = git-lfs clean -- %f
+ smudge = git-lfs smudge -- %f
+ process = git-lfs filter-process
+ required = true
+[color]
+ ui = auto
+[init]
+ defaultBranch = main
+[sendemail]
+ smtpserver = mail.rschanz.org
+ smtpuser = ryan@rschanz.org
+ smtpencryption = ssl
+ smtpserverport = 465
diff --git a/home-config/home-configuration.scm b/home-config/home-configuration.scm
index e429a79..dd14824 100644
--- a/home-config/home-configuration.scm
+++ b/home-config/home-configuration.scm
@@ -16,7 +16,15 @@
(gnu home services desktop)
(gnu home services gnupg)
(gnu home services)
- (ryan-services pipewire))
+ (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
@@ -25,33 +33,67 @@
(modify-inputs (package-native-inputs neovim)
(prepend gcc-12)))))
+(define %home-symlinks
+ `((".config/guix/home-config/fish" ".config/fish")
+ (".config/guix/home-config/nix-config" ".config/nix")
+ (".config/guix/home-config/tridactyl/native_main" ".local/share/tridactyl/native_main")
+ (".config/guix/home-config/nix-home-manager" ".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"
+ "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"
+ "bombadillo"
"python-msgpack"
+ "wdisplays"
+ "kanshi"
"libreoffice"
"flatpak"
"gnupg"
+ "spotifyd"
"lsof"
"pavucontrol"
+ "netcat"
"bind:utils"
"font-cns11643"
+ "font-google-noto-emoji"
"syncthing"
+ "taskwarrior"
+ "tasksh"
+ ;"imv" ; Nix pkg now for MESA stuff
"perl"
"tor"
"unzip"
- "alacritty"
"htop"
"curl"
"pandoc"
- "texlive-base"
+ "texlive-bin"
+ "texlive-scheme-basic"
"texlive-txfonts"
"texlive-amsfonts"
"texlive-lm"
@@ -60,15 +102,16 @@
"texlive-unicode-math"
"texlive-fontspec"
"texlive-xcolor"
- "texlive-latex-geometry"
+ "texlive-geometry"
"texlive-hyperref"
- "texlive-latex-parskip"
+ "texlive-parskip"
"texlive-etoolbox"
+ "texlive-setspace"
"zathura"
"zathura-pdf-mupdf"
+ "go"
"fzf"
"weechat"
- "icedove-minimal"
"gimp"
"python"
"python:tk"
@@ -76,44 +119,66 @@
"python-lsp-server"
"kdenlive"
"sqlite"
- "mpv"
+ ;"mpv" ; Now a nix pkg for MESA stuff
+ "qbittorrent"
"playerctl"
- "aerc"
+ ;"aerc"
"tcpdump"
"pamixer"
- "git"))
- (list my-neovim)))
+ "git"
+ "git:send-email"
+ "password-store"
+ "node"
+ "kanshi"
+ ;"firefox"
+ "signal-desktop"
+ "sc-im"
+ "git-lfs"))
+ (list my-neovim wl-mirror firefox-wrapped calcurse-fixed )))
;; Below is the list of Home services. To search for available
;; services, run 'guix home search KEYWORD' in a terminal.
(services
- (list (service home-bash-service-type
- (home-bash-configuration
- (aliases '(("grep" . "grep --color=auto") ("ll" . "ls -l")
- ("ls" . "ls -p --color=auto")
- ("python" . "python3")))
- (bashrc (list (local-file
- "bashrc")))
- (bash-profile (list (local-file
- "bash_profile")))))
+ (list ;(service home-bash-service-type
+ ; (home-bash-configuration
+ ;(aliases '(("grep" . "grep --color=auto") ("ll" . "ls -l")
+ ; ("ls" . "ls -p --color=auto")
+ ; ("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))
+ ("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))
- ("home-manager" ,(local-file "nix-home-manager" #:recursive? #t)) ))
+ ("aerc" ,(local-file "aerc" #: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"))
+ (".icons" ,(local-file "icons" #:recursive? #t))
+ (".mozilla/native-messaging-hosts/tridactyl.json" ,(local-file "tridactyl/tridactyl.json"))
;(".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"))))
(service home-pipewire-service-type)
+ (service home-spotifyd-service-type)
(service home-dbus-service-type)
+ ;;; trying some changes
+ ;(template-files "."
+ ;'("spotify-player/app.toml"
+ ;;;
(service home-gpg-agent-service-type
(home-gpg-agent-configuration
(pinentry-program
diff --git a/home-config/hypr/Wallpapers/static/1685362396481634.jpg b/home-config/hypr/Wallpapers/static/1685362396481634.jpg
new file mode 100644
index 0000000..fd49cae
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/1685362396481634.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/1693169418078790.jpg b/home-config/hypr/Wallpapers/static/1693169418078790.jpg
new file mode 100644
index 0000000..8156108
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/1693169418078790.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/1694792956043641.jpg b/home-config/hypr/Wallpapers/static/1694792956043641.jpg
new file mode 100644
index 0000000..431e96b
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/1694792956043641.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/1708470532817406.jpg b/home-config/hypr/Wallpapers/static/1708470532817406.jpg
new file mode 100644
index 0000000..4a4f2f0
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/1708470532817406.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/1720750738377603.jpg b/home-config/hypr/Wallpapers/static/1720750738377603.jpg
new file mode 100644
index 0000000..f8dd9cd
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/1720750738377603.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/1720751011150282.png b/home-config/hypr/Wallpapers/static/1720751011150282.png
new file mode 100644
index 0000000..dbd3e38
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/1720751011150282.png differ
diff --git a/home-config/hypr/Wallpapers/static/1723625710776950.jpg b/home-config/hypr/Wallpapers/static/1723625710776950.jpg
new file mode 100644
index 0000000..71608ff
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/1723625710776950.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/1723626275390685.jpg b/home-config/hypr/Wallpapers/static/1723626275390685.jpg
new file mode 100644
index 0000000..aa8c8c2
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/1723626275390685.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/1728661127589872.jpg b/home-config/hypr/Wallpapers/static/1728661127589872.jpg
new file mode 100644
index 0000000..b5dcbeb
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/1728661127589872.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/4yglzy4rkh4d1.jpeg b/home-config/hypr/Wallpapers/static/4yglzy4rkh4d1.jpeg
new file mode 100644
index 0000000..0ef50ad
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/4yglzy4rkh4d1.jpeg differ
diff --git a/home-config/hypr/Wallpapers/static/7xosa7um3ohd1.jpg b/home-config/hypr/Wallpapers/static/7xosa7um3ohd1.jpg
new file mode 100644
index 0000000..3bb615e
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/7xosa7um3ohd1.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/83juiltm3ohd1.jpg b/home-config/hypr/Wallpapers/static/83juiltm3ohd1.jpg
new file mode 100644
index 0000000..15aff05
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/83juiltm3ohd1.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/CN62QXJ.jpg b/home-config/hypr/Wallpapers/static/CN62QXJ.jpg
new file mode 100644
index 0000000..c49c449
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/CN62QXJ.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/above-clouds.jpg b/home-config/hypr/Wallpapers/static/above-clouds.jpg
new file mode 100644
index 0000000..a525ee8
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/above-clouds.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-bluehour-1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-bluehour-1k.jpg
new file mode 100644
index 0000000..ade3472
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-bluehour-1k.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-budapest.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-budapest.jpg
new file mode 100644
index 0000000..a01b60b
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-budapest.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-close-to-the-sun-1920.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-close-to-the-sun-1920.jpg
new file mode 100644
index 0000000..853ff56
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-close-to-the-sun-1920.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-cold-1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-cold-1k.jpg
new file mode 100644
index 0000000..5152b02
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-cold-1k.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-dreamy-1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-dreamy-1k.jpg
new file mode 100644
index 0000000..3931833
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-dreamy-1k.jpg 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
new file mode 100644
index 0000000..acf008e
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-eclipse-1k.jpg 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
new file mode 100644
index 0000000..f8a50f8
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-eternity-1080px.jpg 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
new file mode 100644
index 0000000..00cbcb1
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-light-at-the-end-hd.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-lights-1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-lights-1k.jpg
new file mode 100644
index 0000000..31b7120
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-lights-1k.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-lines1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-lines1k.jpg
new file mode 100644
index 0000000..73688eb
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-lines1k.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-mountains1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-mountains1k.jpg
new file mode 100644
index 0000000..7448ab1
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-mountains1k.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-new-year1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-new-year1k.jpg
new file mode 100644
index 0000000..816a884
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-new-year1k.jpg 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
new file mode 100644
index 0000000..24311ff
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-portal-1k.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-reflect1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-reflect1k.jpg
new file mode 100644
index 0000000..49ab145
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-reflect1k.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-serenity-1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-serenity-1k.jpg
new file mode 100644
index 0000000..7164548
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-serenity-1k.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-sky1k.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-sky1k.jpg
new file mode 100644
index 0000000..84b9739
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-sky1k.jpg 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
new file mode 100644
index 0000000..cb71169
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-solar-1k.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-wait.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-wait.jpg
new file mode 100644
index 0000000..2dc72ac
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-wait.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/alena-aenami-wings-hd.jpg b/home-config/hypr/Wallpapers/static/alena-aenami-wings-hd.jpg
new file mode 100644
index 0000000..89b1378
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/alena-aenami-wings-hd.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/autumn1.jpg b/home-config/hypr/Wallpapers/static/autumn1.jpg
new file mode 100644
index 0000000..1f06edd
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/autumn1.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/autumn1.png b/home-config/hypr/Wallpapers/static/autumn1.png
new file mode 100644
index 0000000..72cac31
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/autumn1.png differ
diff --git a/home-config/hypr/Wallpapers/static/dawn-mountains-vibrant.jpg b/home-config/hypr/Wallpapers/static/dawn-mountains-vibrant.jpg
new file mode 100644
index 0000000..c678fec
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/dawn-mountains-vibrant.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/lake-winter.jpg b/home-config/hypr/Wallpapers/static/lake-winter.jpg
new file mode 100644
index 0000000..b47a8c9
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/lake-winter.jpg differ
diff --git a/home-config/hypr/Wallpapers/mountains.jpg b/home-config/hypr/Wallpapers/static/mountains.jpg
similarity index 100%
rename from home-config/hypr/Wallpapers/mountains.jpg
rename to home-config/hypr/Wallpapers/static/mountains.jpg
diff --git a/home-config/hypr/Wallpapers/static/northern-lights-2.jpg b/home-config/hypr/Wallpapers/static/northern-lights-2.jpg
new file mode 100644
index 0000000..cb2a7f4
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/northern-lights-2.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/northern-lights-bridge.jpg b/home-config/hypr/Wallpapers/static/northern-lights-bridge.jpg
new file mode 100644
index 0000000..8fa7b28
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/northern-lights-bridge.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/purple-grass.jpg b/home-config/hypr/Wallpapers/static/purple-grass.jpg
new file mode 100644
index 0000000..2a81c54
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/purple-grass.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/purple-intersection.jpg b/home-config/hypr/Wallpapers/static/purple-intersection.jpg
new file mode 100644
index 0000000..cf75de4
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/purple-intersection.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/purple-lakescape.jpg b/home-config/hypr/Wallpapers/static/purple-lakescape.jpg
new file mode 100644
index 0000000..23d28e2
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/purple-lakescape.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/sah1k8tm3ohd1.jpg b/home-config/hypr/Wallpapers/static/sah1k8tm3ohd1.jpg
new file mode 100644
index 0000000..a21261b
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/sah1k8tm3ohd1.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/scarecrow.jpg b/home-config/hypr/Wallpapers/static/scarecrow.jpg
new file mode 100644
index 0000000..f095d15
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/scarecrow.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/snow-1.jpg b/home-config/hypr/Wallpapers/static/snow-1.jpg
new file mode 100644
index 0000000..d00fcd1
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/snow-1.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/snow-2.jpg b/home-config/hypr/Wallpapers/static/snow-2.jpg
new file mode 100644
index 0000000..5343822
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/snow-2.jpg differ
diff --git a/home-config/hypr/Wallpapers/static/vfcfyfyehhi31.png b/home-config/hypr/Wallpapers/static/vfcfyfyehhi31.png
new file mode 100644
index 0000000..adb7f37
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/vfcfyfyehhi31.png differ
diff --git a/home-config/hypr/Wallpapers/static/w7ufw5eb3cuz.jpg b/home-config/hypr/Wallpapers/static/w7ufw5eb3cuz.jpg
new file mode 100644
index 0000000..e59d184
Binary files /dev/null and b/home-config/hypr/Wallpapers/static/w7ufw5eb3cuz.jpg differ
diff --git a/home-config/hypr/autostart.sh b/home-config/hypr/autostart.sh
index 4881fd9..8c7c502 100755
--- a/home-config/hypr/autostart.sh
+++ b/home-config/hypr/autostart.sh
@@ -1,15 +1,34 @@
#!/usr/bin/env bash
-hash dbus-update-activation-environment 2>/dev/null && dbus-update-activation-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP &
-
waybar &
mako &
-swaybg -i ~/.config/hypr/Wallpapers/mountains.jpg &
+#swaybg -i ~/.config/hypr/Wallpapers/above-clouds.jpg &
+
+nice -n13 swww init &
+
+#~/.config/hypr/wallpaper-daemon.sh &
+wpaperd -d &
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 &
-blueman-applet &
+# Kill any orphans of this
+killall wl-clip-persist
+wl-clip-persist -c regular --reconnect-tries 5 &
+
+kanshi -c ~/.config/hypr/kanshi.conf &
+
+# Start the portals
+
+sleep 0.5
+killall -e xdg-desktop-portal-hyprland
+killall xdg-desktop-portal-gtk
+killall xdk-desktop-portal
+
+~/.nix-profile/libexec/xdg-desktop-portal-hyprland &
+~/.nix-profile/libexec/xdg-desktop-portal-gtk &
+sleep 2
+XDG_DESKTOP_PORTAL_DIR="/home/ryan/.nix-profile/share/xdg-desktop-portal/portals" ~/.nix-profile/libexec/xdg-desktop-portal &
diff --git a/home-config/hypr/family_guy.mp4 b/home-config/hypr/family_guy.mp4
new file mode 100644
index 0000000..077fe49
Binary files /dev/null and b/home-config/hypr/family_guy.mp4 differ
diff --git a/home-config/hypr/hyprland.conf b/home-config/hypr/hyprland.conf
index cfb34ab..5fab592 100644
--- a/home-config/hypr/hyprland.conf
+++ b/home-config/hypr/hyprland.conf
@@ -8,6 +8,12 @@ exec-once = dbus-update-activation-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=,preferred,auto,1
+# Set cursor theme
+env = HYPRCURSOR_THEME,XCursor-Pro-Dark-Hyprcursor
+env = HYPRCURSOR_SIZE,26
+env = XCURSOR_THEME,XCursor-Pro-Dark
+env = XCURSOR_SIZE,26
+
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
@@ -20,6 +26,11 @@ source = ~/.config/hypr/monitors.conf
# Some default env vars.
env = XCURSOR_SIZE,24
+debug {
+ disable_logs = false
+ enable_stdout_logs = true
+}
+
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
kb_layout = us
@@ -27,6 +38,7 @@ input {
kb_model =
kb_options =
kb_rules =
+ numlock_by_default = true
follow_mouse = 1
@@ -87,10 +99,10 @@ dwindle {
preserve_split = yes # you probably want this
}
-master {
- # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
- new_is_master = true
-}
+#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
@@ -99,7 +111,8 @@ gestures {
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
-device:epic-mouse-v1 {
+device {
+ name = epic-mouse-v1
sensitivity = -0.5
}
@@ -114,10 +127,12 @@ device:epic-mouse-v1 {
$mainMod = SUPER
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
-bind = $mainMod, Return, exec, alacritty
+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
@@ -134,6 +149,9 @@ 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
@@ -185,16 +203,24 @@ 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 1 --effect-blur 7x5 --effect-greyscale
+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
+bind = $mainMod, S, exec, grimblast save area - | imv -
# 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
@@ -206,15 +232,38 @@ windowrulev2 = size 578 326, class:^(firefox)$, title:^(Picture-in-Picture)$
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 = nomaximizerequest, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$
-windowrulev2 = nofullscreenrequest, 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/hyprlock.conf b/home-config/hypr/hyprlock.conf
new file mode 100644
index 0000000..ca1534c
--- /dev/null
+++ b/home-config/hypr/hyprlock.conf
@@ -0,0 +1,55 @@
+background {
+ monitor =
+ path = /home/ryan/.config/hypr/Wallpapers/static/autumn1.png
+
+ # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
+ blur_passes = 2 # 0 disables blurring
+ blur_size = 7
+ noise = 0.2
+ contrast = 0.8916
+ brightness = 0.8172
+ vibrancy = 0.1696
+ vibrancy_darkness = 0.0
+}
+
+input-field {
+ monitor =
+ size = 200, 50
+ outline_thickness = 3
+ dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
+ dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
+ dots_center = false
+ dots_rounding = -1 # -1 default circle, -2 follow input-field rounding
+ outer_color = rgb(151515)
+ inner_color = rgb(200, 200, 200)
+ font_color = rgb(10, 10, 10)
+ fade_on_empty = true
+ fade_timeout = 1000 # Milliseconds before fade_on_empty is triggered.
+ placeholder_text = <i>Input Password...</i> # Text rendered in the input box when it's empty.
+ hide_input = false
+ rounding = -1 # -1 means complete rounding (circle/oval)
+ check_color = rgb(204, 136, 34)
+ fail_color = rgb(204, 34, 34) # if authentication failed, changes outer_color and fail message color
+ fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> # can be set to empty
+ fail_timeout = 2000 # milliseconds before fail_text and fail_color disappears
+ fail_transition = 300 # transition time in ms between normal outer_color and fail_color
+ capslock_color = -1
+ numlock_color = -1
+ bothlock_color = -1 # when both locks are active. -1 means don't change outer color (same for above)
+ invert_numlock = false # change color if numlock is off
+ swap_font_color = false # see below
+
+ position = 0, -20
+ halign = center
+ valign = center
+}
+
+label {
+ monitor =
+ text = cmd[update:1000] echo "$(date +"%-H:%M:%S")"
+ #color = rgba(255, 255, 255, 0.6)
+ font_size = 80
+ position = 0, 300
+ halign = center
+ valign = center
+}
diff --git a/home-config/hypr/kanshi.conf b/home-config/hypr/kanshi.conf
new file mode 100644
index 0000000..92eed88
--- /dev/null
+++ b/home-config/hypr/kanshi.conf
@@ -0,0 +1,21 @@
+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/subwaysurfer.webm b/home-config/hypr/subwaysurfer.webm
new file mode 100644
index 0000000..594e1c0
Binary files /dev/null and b/home-config/hypr/subwaysurfer.webm differ
diff --git a/home-config/hypr/wallpaper-daemon-animated-old.sh b/home-config/hypr/wallpaper-daemon-animated-old.sh
new file mode 100755
index 0000000..39b2aae
--- /dev/null
+++ b/home-config/hypr/wallpaper-daemon-animated-old.sh
@@ -0,0 +1,106 @@
+#!/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
new file mode 100755
index 0000000..b793c5a
--- /dev/null
+++ b/home-config/hypr/wallpaper-daemon.sh
@@ -0,0 +1,35 @@
+#!/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
new file mode 100755
index 0000000..c6266fc
--- /dev/null
+++ b/home-config/hypr/wallpaper.sh
@@ -0,0 +1,9 @@
+#!/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/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/mpv/scripts/easycrop.lua b/home-config/mpv/scripts/easycrop.lua
new file mode 100644
index 0000000..415fce5
--- /dev/null
+++ b/home-config/mpv/scripts/easycrop.lua
@@ -0,0 +1,254 @@
+local msg = require('mp.msg')
+local assdraw = require('mp.assdraw')
+
+local script_name = "easycrop"
+
+-- Number of crop points currently chosen (0 to 2)
+local points = {}
+-- True if in cropping selection mode
+local cropping = false
+-- Original value of osc property
+local osc_prop = false
+
+-- Helper that converts two points to top-left and bottom-right
+local swizzle_points = function (p1, p2)
+ if p1.x > p2.x then p1.x, p2.x = p2.x, p1.x end
+ if p1.y > p2.y then p1.y, p2.y = p2.y, p1.y end
+end
+
+local clamp = function (val, min, max)
+ assert(min <= max)
+ if val < min then return min end
+ if val > max then return max end
+ return val
+end
+
+local video_space_from_screen_space = function (ssp)
+ -- Video native dimensions and screen size
+ local vid_w = mp.get_property("width")
+ local vid_h = mp.get_property("height")
+ local osd_w = mp.get_property("osd-width")
+ local osd_h = mp.get_property("osd-height")
+
+ -- Factor by which the video is scaled to fit the screen
+ local scale = math.min(osd_w/vid_w, osd_h/vid_h)
+
+ -- Size video takes up in screen
+ local vid_sw, vid_sh = scale*vid_w, scale*vid_h
+
+ -- Video offset within screen
+ local off_x = math.floor((osd_w - vid_sw)/2)
+ local off_y = math.floor((osd_h - vid_sh)/2)
+
+ local vsp = {}
+
+ -- Move the point to within the video
+ vsp.x = clamp(ssp.x, off_x, off_x + vid_sw)
+ vsp.y = clamp(ssp.y, off_y, off_y + vid_sh)
+
+ -- Convert screen-space to video-space
+ vsp.x = math.floor((vsp.x - off_x) / scale)
+ vsp.y = math.floor((vsp.y - off_y) / scale)
+
+ return vsp
+end
+
+local screen_space_from_video_space = function (vsp)
+ -- Video native dimensions and screen size
+ local vid_w = mp.get_property("width")
+ local vid_h = mp.get_property("height")
+ local osd_w = mp.get_property("osd-width")
+ local osd_h = mp.get_property("osd-height")
+
+ -- Factor by which the video is scaled to fit the screen
+ local scale = math.min(osd_w/vid_w, osd_h/vid_h)
+
+ -- Size video takes up in screen
+ local vid_sw, vid_sh = scale*vid_w, scale*vid_h
+
+ -- Video offset within screen
+ local off_x = math.floor((osd_w - vid_sw)/2)
+ local off_y = math.floor((osd_h - vid_sh)/2)
+
+ local ssp = {}
+ ssp.x = vsp.x * scale + off_x
+ ssp.y = vsp.y * scale + off_y
+ return ssp
+end
+
+-- Wrapper that converts RRGGBB / RRGGBBAA to ASS format
+local ass_set_color = function (idx, color)
+ assert(color:len() == 8 or color:len() == 6)
+ local ass = ""
+
+ -- Set alpha value (if present)
+ if color:len() == 8 then
+ local alpha = 0xff - tonumber(color:sub(7, 8), 16)
+ ass = ass .. string.format("\\%da&H%X&", idx, alpha)
+ end
+
+ -- Swizzle RGB to BGR and build ASS string
+ color = color:sub(5, 6) .. color:sub(3, 4) .. color:sub(1, 2)
+ return "{" .. ass .. string.format("\\%dc&H%s&", idx, color) .. "}"
+end
+
+local draw_rect = function (p1, p2)
+ local osd_w, osd_h = mp.get_property("osd-width"), mp.get_property("osd-height")
+
+ ass = assdraw.ass_new()
+
+ -- Draw overlay over surrounding unselected region
+
+ ass:draw_start()
+ ass:pos(0, 0)
+
+ ass:append(ass_set_color(1, "000000aa"))
+ ass:append(ass_set_color(3, "00000000"))
+
+ local l = math.min(p1.x, p2.x)
+ local r = math.max(p1.x, p2.x)
+ local u = math.min(p1.y, p2.y)
+ local d = math.max(p1.y, p2.y)
+
+ ass:rect_cw(0, 0, l, osd_h)
+ ass:rect_cw(r, 0, osd_w, osd_h)
+ ass:rect_cw(l, 0, r, u)
+ ass:rect_cw(l, d, r, osd_h)
+
+ ass:draw_stop()
+
+ -- Draw border around selected region
+
+ ass:new_event()
+ ass:draw_start()
+ ass:pos(0, 0)
+
+ ass:append(ass_set_color(1, "00000000"))
+ ass:append(ass_set_color(3, "000000ff"))
+ ass:append("{\\bord2}")
+
+ ass:rect_cw(p1.x, p1.y, p2.x, p2.y)
+
+ ass:draw_stop()
+
+ mp.set_osd_ass(osd_w, osd_h, ass.text)
+end
+
+local draw_fill = function ()
+ local osd_w, osd_h = mp.get_property("osd-width"), mp.get_property("osd-height")
+
+ ass = assdraw.ass_new()
+ ass:draw_start()
+ ass:pos(0, 0)
+
+ ass:append(ass_set_color(1, "000000aa"))
+ ass:append(ass_set_color(3, "00000000"))
+ ass:rect_cw(0, 0, osd_w, osd_h)
+
+ ass:draw_stop()
+ mp.set_osd_ass(osd_w, osd_h, ass.text)
+end
+
+local draw_clear = function ()
+ local osd_w, osd_h = mp.get_property("osd-width"), mp.get_property("osd-height")
+ mp.set_osd_ass(osd_w, osd_h, "")
+end
+
+local draw_cropper = function ()
+ if #points == 1 then
+ local p1 = screen_space_from_video_space(points[1])
+ local p2 = {}
+ p2.x, p2.y = mp.get_mouse_pos()
+ draw_rect(p1, p2)
+ end
+end
+
+local uncrop = function ()
+ mp.command("no-osd vf del @" .. script_name .. ":crop")
+end
+
+local crop = function(p1, p2)
+ swizzle_points(p1, p2)
+
+ local w = p2.x - p1.x
+ local h = p2.y - p1.y
+ local ok, err = mp.command(string.format(
+ "no-osd vf add @%s:crop=%s:%s:%s:%s", script_name, w, h, p1.x, p1.y))
+
+ if not ok then
+ mp.osd_message("Cropping failed")
+ points = {}
+ end
+end
+
+local easycrop_stop = function ()
+ mp.set_property("osc", osc_prop)
+ cropping = false
+ mp.remove_key_binding("easycrop_mouse_btn0")
+ draw_clear()
+end
+
+local mouse_btn0_cb = function ()
+ if not cropping then
+ return
+ end
+
+ local mx, my = mp.get_mouse_pos()
+ table.insert(points, video_space_from_screen_space({ x = mx, y = my }))
+
+ if #points == 2 then
+ crop(points[1], points[2])
+ easycrop_stop()
+ end
+end
+
+local easycrop_start = function ()
+ -- Cropping requires swdec or hwdec with copy-back
+ local hwdec = mp.get_property("hwdec-current")
+ if hwdec == nil then
+ return mp.msg.error("Cannot determine current hardware decoder mode")
+ end
+ -- Check whitelist of ok values
+ local valid_hwdec = {
+ ["no"] = true, -- software decoding
+ -- Taken from mpv manual
+ ["videotoolbox-co"] = true,
+ ["vaapi-copy"] = true,
+ ["dxva2-copy"] = true,
+ ["d3d11va-copy"] = true,
+ ["mediacodec"] = true
+ }
+ if not valid_hwdec[hwdec] then
+ return mp.osd_message("Cropping requires swdec or hwdec with copy-back (see mpv manual)")
+ end
+
+ -- Just clear the current crop and return, if there is one
+ if #points ~= 0 then
+ uncrop()
+ points = {}
+ return
+ end
+
+ -- Hide OSC
+ osc_prop = mp.get_property("osc")
+ mp.set_property("osc", "no")
+
+ cropping = true
+ mp.add_forced_key_binding("mouse_btn0", "easycrop_mouse_btn0", mouse_btn0_cb)
+ draw_fill()
+end
+
+local easycrop_activate = function ()
+ if cropping then
+ easycrop_stop()
+ else
+ easycrop_start()
+ end
+end
+
+mp.add_key_binding("mouse_move", draw_cropper)
+mp.observe_property("osd-width", "native", draw_cropper)
+mp.observe_property("osd-height", "native", draw_cropper)
+
+mp.add_key_binding("c", "easy_crop", easycrop_activate)
+
diff --git a/home-config/nix-config/nix.conf b/home-config/nix-config/nix.conf
new file mode 100644
index 0000000..c7d7291
--- /dev/null
+++ b/home-config/nix-config/nix.conf
@@ -0,0 +1 @@
+experimental-features = nix-command flakes
diff --git a/home-config/nix-home-manager/flake.lock b/home-config/nix-home-manager/flake.lock
new file mode 100644
index 0000000..f899e74
--- /dev/null
+++ b/home-config/nix-home-manager/flake.lock
@@ -0,0 +1,453 @@
+{
+ "nodes": {
+ "aquamarine": {
+ "inputs": {
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "hyprwayland-scanner": [
+ "hyprland",
+ "hyprwayland-scanner"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1727261104,
+ "narHash": "sha256-rxDI7WrxIRV9it9mDCHcLa7xQykf1JloXnoXr5xQ8zI=",
+ "owner": "hyprwm",
+ "repo": "aquamarine",
+ "rev": "b82fdaff917582a9d568969e15e61b398c71e990",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "aquamarine",
+ "type": "github"
+ }
+ },
+ "flake-utils": {
+ "locked": {
+ "lastModified": 1659877975,
+ "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1729321331,
+ "narHash": "sha256-KVyQq+ez/oB30/WbdNgVD8g/bda34z8NiU187QKQb74=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "122f70545b29ccb922e655b08acfe05bfb44ec68",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "122f70545b29ccb922e655b08acfe05bfb44ec68",
+ "type": "github"
+ }
+ },
+ "hyprcursor": {
+ "inputs": {
+ "hyprlang": [
+ "hyprland",
+ "hyprlang"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1727532803,
+ "narHash": "sha256-ZaZ7h7PY8mQc4vtGmVqWLAq9CAO02gHMyNR5yY8zDmM=",
+ "owner": "hyprwm",
+ "repo": "hyprcursor",
+ "rev": "b98726e431d4d3ed58bd58bee1047cdb81cec69f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprcursor",
+ "type": "github"
+ }
+ },
+ "hyprland": {
+ "inputs": {
+ "aquamarine": "aquamarine",
+ "hyprcursor": "hyprcursor",
+ "hyprland-protocols": "hyprland-protocols",
+ "hyprlang": "hyprlang",
+ "hyprutils": "hyprutils",
+ "hyprwayland-scanner": "hyprwayland-scanner",
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "systems": "systems",
+ "xdph": "xdph"
+ },
+ "locked": {
+ "lastModified": 1728478479,
+ "narHash": "sha256-AbfdIlK92oWpI39xlIaUekPeL9u95sXzxVsSqhIMfIc=",
+ "owner": "hyprwm",
+ "repo": "hyprland",
+ "rev": "4520b30d498daca8079365bdb909a8dea38e8d55",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "ref": "v0.44.1",
+ "repo": "hyprland",
+ "type": "github"
+ }
+ },
+ "hyprland-protocols": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1727451107,
+ "narHash": "sha256-qV9savtHwmZUa0eJE294WYJjKPGB2+bJhwByFShsVyo=",
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "rev": "6b3261ee13a6d2b99de79a31d352f6996e35bde3",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "type": "github"
+ }
+ },
+ "hyprland-protocols_2": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "xdph",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "xdph",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1721326555,
+ "narHash": "sha256-zCu4R0CSHEactW9JqYki26gy8h9f6rHmSwj4XJmlHgg=",
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "rev": "5a11232266bf1a1f5952d5b179c3f4b2facaaa84",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "type": "github"
+ }
+ },
+ "hyprlang": {
+ "inputs": {
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1725997860,
+ "narHash": "sha256-d/rZ/fHR5l1n7PeyLw0StWMNLXVU9c4HFyfskw568so=",
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "rev": "dfeb5811dd6485490cce18d6cc1e38a055eea876",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "type": "github"
+ }
+ },
+ "hyprpicker-git": {
+ "inputs": {
+ "hyprutils": "hyprutils_2",
+ "hyprwayland-scanner": "hyprwayland-scanner_2",
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "systems": "systems_2"
+ },
+ "locked": {
+ "lastModified": 1727705155,
+ "narHash": "sha256-gu26MSYbTlRLMUpZ9PeYXtqqhzPDQXxEDkjiJgwzIIc=",
+ "owner": "hyprwm",
+ "repo": "hyprpicker",
+ "rev": "116cec14a552191a9ad69ca96252ca12ecfa9826",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "ref": "v0.4.1",
+ "repo": "hyprpicker",
+ "type": "github"
+ }
+ },
+ "hyprutils": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1727300645,
+ "narHash": "sha256-OvAtVLaSRPnbXzOwlR1fVqCXR7i+ICRX3aPMCdIiv+c=",
+ "owner": "hyprwm",
+ "repo": "hyprutils",
+ "rev": "3f5293432b6dc6a99f26aca2eba3876d2660665c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprutils",
+ "type": "github"
+ }
+ },
+ "hyprutils_2": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprpicker-git",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprpicker-git",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1727300645,
+ "narHash": "sha256-OvAtVLaSRPnbXzOwlR1fVqCXR7i+ICRX3aPMCdIiv+c=",
+ "owner": "hyprwm",
+ "repo": "hyprutils",
+ "rev": "3f5293432b6dc6a99f26aca2eba3876d2660665c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprutils",
+ "type": "github"
+ }
+ },
+ "hyprwayland-scanner": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1726874836,
+ "narHash": "sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM=",
+ "owner": "hyprwm",
+ "repo": "hyprwayland-scanner",
+ "rev": "500c81a9e1a76760371049a8d99e008ea77aa59e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprwayland-scanner",
+ "type": "github"
+ }
+ },
+ "hyprwayland-scanner_2": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprpicker-git",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprpicker-git",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1726874836,
+ "narHash": "sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM=",
+ "owner": "hyprwm",
+ "repo": "hyprwayland-scanner",
+ "rev": "500c81a9e1a76760371049a8d99e008ea77aa59e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprwayland-scanner",
+ "type": "github"
+ }
+ },
+ "nixgl": {
+ "inputs": {
+ "flake-utils": "flake-utils",
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1713543440,
+ "narHash": "sha256-lnzZQYG0+EXl/6NkGpyIz+FEOc/DSEG57AP1VsdeNrM=",
+ "owner": "nix-community",
+ "repo": "nixGL",
+ "rev": "310f8e49a149e4c9ea52f1adf70cdc768ec53f8a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "nixGL",
+ "rev": "310f8e49a149e4c9ea52f1adf70cdc768ec53f8a",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1729168305,
+ "narHash": "sha256-jmhxZnrlOyLEMUL2+JkVfkN0XWXI5uE6EB5kVZFR0fo=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "2a55bdc8cfcf41551323a4a6cef24d3f566c824d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "2a55bdc8cfcf41551323a4a6cef24d3f566c824d",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "home-manager": "home-manager",
+ "hyprland": "hyprland",
+ "hyprpicker-git": "hyprpicker-git",
+ "nixgl": "nixgl",
+ "nixpkgs": "nixpkgs"
+ }
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1689347949,
+ "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
+ "owner": "nix-systems",
+ "repo": "default-linux",
+ "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default-linux",
+ "type": "github"
+ }
+ },
+ "systems_2": {
+ "locked": {
+ "lastModified": 1689347949,
+ "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
+ "owner": "nix-systems",
+ "repo": "default-linux",
+ "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default-linux",
+ "type": "github"
+ }
+ },
+ "xdph": {
+ "inputs": {
+ "hyprland-protocols": "hyprland-protocols_2",
+ "hyprlang": [
+ "hyprland",
+ "hyprlang"
+ ],
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "hyprwayland-scanner": [
+ "hyprland",
+ "hyprwayland-scanner"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1727524473,
+ "narHash": "sha256-1DGktDtSWIJpnDbVoj/qpvJSH5zg6JbOfuh6xqZMap0=",
+ "owner": "hyprwm",
+ "repo": "xdg-desktop-portal-hyprland",
+ "rev": "7e500e679ede40e79cf2d89b5f5fa3e34923bd26",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "xdg-desktop-portal-hyprland",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/home-config/nix-home-manager/flake.nix b/home-config/nix-home-manager/flake.nix
new file mode 100644
index 0000000..7ba72b4
--- /dev/null
+++ b/home-config/nix-home-manager/flake.nix
@@ -0,0 +1,55 @@
+{
+ description = "Home Manager configuration of ryan";
+
+ inputs = {
+ # Specify the source of Home Manager and Nixpkgs.
+ nixpkgs.url = "github:nixos/nixpkgs/2a55bdc8cfcf41551323a4a6cef24d3f566c824d";
+ home-manager = {
+ url = "github:nix-community/home-manager/122f70545b29ccb922e655b08acfe05bfb44ec68";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ hyprpicker-git = {
+ url = "github:hyprwm/hyprpicker/v0.4.1";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ hyprland = {
+ url = "github:hyprwm/hyprland/v0.44.1";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ nixgl = {
+ url = "github:nix-community/nixGL/310f8e49a149e4c9ea52f1adf70cdc768ec53f8a";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ };
+
+ outputs = { nixpkgs, home-manager, hyprpicker-git, hyprland, nixgl, ... }@inputs:
+ let
+ system = "x86_64-linux";
+ pkgs = nixpkgs.legacyPackages.${system};
+ overlays = [
+ hyprpicker-git.overlays.default
+ nixgl.overlay
+ ];
+ 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;}
+ {
+ _module.args = {
+ inherit hyprland;
+ inherit nixgl;
+ };
+ }
+ ];
+
+ # Optionally use extraSpecialArgs
+ # to pass through arguments to home.nix
+ #extraSpecialArgs = { inherit inputs; };
+ };
+ };
+}
diff --git a/home-config/nix-home-manager/home.nix b/home-config/nix-home-manager/home.nix
index d19051c..72ddf3a 100644
--- a/home-config/nix-home-manager/home.nix
+++ b/home-config/nix-home-manager/home.nix
@@ -1,4 +1,4 @@
-{ config, pkgs, ... }:
+{ config, pkgs, hyprland, nixgl, ... }:
{
# Home Manager needs a bit of information about you and the paths it should
@@ -13,14 +13,16 @@
# 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 = "22.11"; # Please read the comment before changing.
+ 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;
+ #targets.genericLinux.enable = true;
fonts.fontconfig.enable = true;
+ # wayland.windowManager.hyprland.enable = true;
+
# The home.packages option allows you to install Nix packages into your
# environment.
home.packages = with pkgs; [
@@ -28,7 +30,41 @@
# # "Hello, world!" when run.
# pkgs.hello
yt-dlp
- xdg-desktop-portal-hyprland
+ #pass
+ rustup
+ zoxide
+ nodePackages.pnpm
+ gcc
+ aerc
+ pkg-config
+ wttrbar
+ swww
+ wl-clip-persist
+ gifski
+ waypaper
+ gdu
+ spotify-player
+ hyprpicker
+ hyprlock
+ xwayland
+ xdg-desktop-portal
+ xdg-desktop-portal-gtk
+ mpv
+ imv
+ libva
+ libvdpau
+ wpaperd
+
+ # Flakes specific things defined in flake.nix
+ hyprland.packages.${pkgs.system}.default
+ hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland
+ nixgl.packages.${pkgs.system}.nixGLIntel
+
+ # Fonts!
+ noto-fonts
+ liberation_ttf
+ noto-fonts-cjk-sans
+ noto-fonts-emoji
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
diff --git a/home-config/nvim/config/after/ftplugin/mail/custom.vim b/home-config/nvim/config/after/ftplugin/mail/custom.vim
new file mode 100644
index 0000000..75078e5
--- /dev/null
+++ b/home-config/nvim/config/after/ftplugin/mail/custom.vim
@@ -0,0 +1,2 @@
+setlocal tw=0 wm=0
+setlocal wrap linebreak
diff --git a/home-config/nvim/config/init.vim b/home-config/nvim/config/init.vim
index 447da4a..6735d81 100644
--- a/home-config/nvim/config/init.vim
+++ b/home-config/nvim/config/init.vim
@@ -5,6 +5,8 @@ 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'
@@ -16,14 +18,18 @@ Plug 'nvim-treesitter/nvim-treesitter', {'do':':TSUpdate'}
Plug 'vim-pandoc/vim-pandoc'
Plug 'vim-pandoc/vim-pandoc-syntax'
Plug 'dhruvasagar/vim-table-mode'
-Plug '~/.config/nvim/after'
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 'nvim-orgmode/orgmode'
+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
@@ -36,20 +42,28 @@ let g:coq_settings = {'auto_start':'shut-up'}
lua << END
require('lualine').setup()
require('coq')
-require('orgmode').setup_ts_grammar()
+require("transparent")
+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'},
+ ensure_installed = {'vim', 'python'},
}
-require('orgmode').setup({
- org_agenda_files = {'~/Sync/org/**/*'},
- org_default_notes_file = '~/Sync/org/refile.org',
-})
-
vim.opt.conceallevel = 2
vim.opt.concealcursor = nc
@@ -70,8 +84,8 @@ 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 --pdf-engine=xelatex --from=markdown+escaped_line_breaks -V geometry:margin=1in %"
-command Rr exec "!pandoc -t pdf -o %:r.pdf --pdf-engine=xelatex --from=markdown+escaped_line_breaks -V geometry:margin=1in %"
+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/pulseaudio/client.conf b/home-config/pulseaudio/client.conf
new file mode 100644
index 0000000..207e152
--- /dev/null
+++ b/home-config/pulseaudio/client.conf
@@ -0,0 +1 @@
+autospawn = no
diff --git a/home-config/spotify-player/app.toml b/home-config/spotify-player/app.toml
new file mode 100644
index 0000000..4eac5e4
--- /dev/null
+++ b/home-config/spotify-player/app.toml
@@ -0,0 +1,34 @@
+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
index 1b8e4bf..90db93a 100644
--- a/home-config/ssh/config
+++ b/home-config/ssh/config
@@ -12,5 +12,13 @@ Host hetzner
HostName 5.161.207.21
User root
+Host rncorepub
+ Hostname 5.161.89.186
+ User root
+
+Host 192.168.216.1
+ HostkeyAlgorithms +ssh-rsa
+ PubkeyAcceptedAlgorithms +ssh-rsa
+
Host *
KexAlgorithms -sntrup761x25519-sha512@openssh.com
diff --git a/home-config/tridactyl/native_main b/home-config/tridactyl/native_main
new file mode 100755
index 0000000..b00c53e
Binary files /dev/null and b/home-config/tridactyl/native_main differ
diff --git a/home-config/tridactyl/tridactyl.json b/home-config/tridactyl/tridactyl.json
new file mode 100644
index 0000000..0764f98
--- /dev/null
+++ b/home-config/tridactyl/tridactyl.json
@@ -0,0 +1,7 @@
+{
+ "name": "tridactyl",
+ "description": "Tridactyl native command handler",
+ "path": "/home/ryan/.local/share/tridactyl/native_main",
+ "type": "stdio",
+ "allowed_extensions": [ "tridactyl.vim@cmcaine.co.uk","tridactyl.vim.betas@cmcaine.co.uk", "tridactyl.vim.betas.nonewtab@cmcaine.co.uk" ]
+}
diff --git a/home-config/waybar/config b/home-config/waybar/config
index 9d4b88f..375835e 100644
--- a/home-config/waybar/config
+++ b/home-config/waybar/config
@@ -1,21 +1,23 @@
{
- "layer": "bottom",
+ "layer": "top",
"position": "top",
"height": 30,
- "modules-left": ["wlr/workspaces", "hyprland/submap"],
+ "modules-left": ["hyprland/workspaces", "hyprland/submap"],
"modules-center": ["hyprland/window"],
- "modules-right": ["tray", "custom/spotify", "custom/weather", "custom/mail", "custom/storage", "backlight", "pulseaudio", "network", "idle_inhibitor", "battery", "clock"],
+ "modules-right": ["tray", "custom/spotify", "privacy", "custom/weather", "custom/mail", "custom/storage", "backlight", "bluetooth", "pulseaudio", "network", "idle_inhibitor", "battery", "clock"],
"hyprland/submap": {
"format": " {}"
},
- "wlr/workspaces": {
- "format": "{name}",
+ "hyprland/workspaces": {
+ "format": "{id}",
+ "all-outputs": false,
"disable-scroll": true
},
"hyprland/window": {
"max-length": 80,
- "tooltip": false
+ "tooltip": false,
+ "separate-outputs": true
},
"clock": {
"format": "{:%a %d %b %H:%M}",
@@ -34,18 +36,46 @@
"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": "{icon}",
+ "format-alt": "{ipaddr}/{cidr} {icon} {bandwidthTotalBytes}󰹹",
"format": "{ipaddr}/{cidr} {icon}",
"format-alt-click": "click-right",
"format-icons": {
- "wifi": ["", "" ,""],
+ "wifi": ["󰤟", "󰤢" ,"󰤥", "󰤨"],
"ethernet": [""],
- "disconnected": ["睊"]
+ "disconnected": ["󰤭"]
},
- "on-click": "alacritty -e doas nmtui",
+ "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}",
@@ -63,9 +93,9 @@
"interval": 2,
"return-type": "json",
"exec": "~/.config/waybar/modules/spotify.sh",
- "exec-if": "pgrep spotifyd",
+ "exec-if": "~/.config/waybar/modules/check-for-music.sh",
"escape": true,
- "on-click": "~/.config/waybar/modules/spotify-play-pause.sh play-pause"
+ "on-click": "playerctl play-pause"
},
"custom/storage": {
"format-alt": "{} ",
@@ -80,19 +110,27 @@
"format": "{percent}% {icon}",
"format-alt-click": "click-right",
"format-icons": ["", ""],
- "on-scroll-down": "light -A 1",
- "on-scroll-up": "light -U 1"
+ "on-scroll-up": "light -A 1",
+ "on-scroll-down": "light -U 1"
},
- "custom/weather": {
+ "custom/weather_OLD": {
"format-alt": "{}",
"format": "{alt}: {}",
"format-alt-click": "click-right",
"interval": 1800,
"return-type": "json",
- "on-click": "alacritty --class ala-wttr --hold -e curl https://v2.wttr.in",
+ "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": {
diff --git a/home-config/waybar/modules/check-for-music.sh b/home-config/waybar/modules/check-for-music.sh
new file mode 100755
index 0000000..3b735a2
--- /dev/null
+++ b/home-config/waybar/modules/check-for-music.sh
@@ -0,0 +1,7 @@
+#!/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
index a75136c..fc732a1 100755
--- a/home-config/waybar/modules/spotify.sh
+++ b/home-config/waybar/modules/spotify.sh
@@ -1,12 +1,12 @@
#!/bin/sh
-class=$(playerctl metadata --player=spotifyd --format '{{lc(status)}}')
-icon=""
+class=$(playerctl metadata --format '{{lc(status)}}')
+icon="󰎆"
if [[ $class == "playing" ]]; then
- info=$(playerctl metadata --player=spotifyd --format '{{artist}} - {{title}}')
+ info=$(playerctl metadata --format '{{artist}} - {{title}}')
if [[ ${#info} > 40 ]]; then
- info=$(echo $info | cut -c1-40)"..."
+ info=$(playerctl metadata --format '{{title}}' | cut -c1-40)"..."
fi
text=$info" "$icon
elif [[ $class == "paused" ]]; then
diff --git a/home-config/waybar/style.css b/home-config/waybar/style.css
index cf776ad..548056f 100644
--- a/home-config/waybar/style.css
+++ b/home-config/waybar/style.css
@@ -1,7 +1,7 @@
* {
border: none;
border-radius: 0;
- font-family: Sans;
+ font-family: AnonymicePro Nerd Font;
font-size: 15px;
box-shadow: none;
text-shadow: none;
@@ -46,7 +46,7 @@ window#waybar.solo {
color: rgba(238, 46, 36, 1);
}
-#mode, #battery, #cpu, #memory, #network, #pulseaudio, #idle_inhibitor, #backlight, #custom-storage, #custom-spotify, #custom-weather, #custom-mail {
+#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;
}
diff --git a/modules/ryan-config/CACerts/AGFRIntermediate.crt b/modules/ryan-config/CACerts/AGFRIntermediate.crt
new file mode 100644
index 0000000..c3396b6
--- /dev/null
+++ b/modules/ryan-config/CACerts/AGFRIntermediate.crt
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIBxDCCAWqgAwIBAgIQWFilNnPPT41UBf3qhdFw3TAKBggqhkjOPQQDAjAsMRAw
+DgYDVQQKEwdBR0ZSIENBMRgwFgYDVQQDEw9BR0ZSIENBIFJvb3QgQ0EwHhcNMjQw
+MjIwMjE0MjMyWhcNMzQwMjE3MjE0MjMyWjA0MRAwDgYDVQQKEwdBR0ZSIENBMSAw
+HgYDVQQDExdBR0ZSIENBIEludGVybWVkaWF0ZSBDQTBZMBMGByqGSM49AgEGCCqG
+SM49AwEHA0IABCZH+m/ZqIGUJetMA5+z8UnXinchd1nlTJLlCNuq9vyi/hPi1J7t
+wagseTAvP1Nx8qxs52R1Rr16ux4XC6wuM+KjZjBkMA4GA1UdDwEB/wQEAwIBBjAS
+BgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTjq8ChYvI4z+pTz6c3xk9WPoWN
+gDAfBgNVHSMEGDAWgBRnwoWRDbqXsPp5wVsRD/CA4choijAKBggqhkjOPQQDAgNI
+ADBFAiEAyANEYJKlzPuj57XbIc1wT4Lg9la1DX3RI9GHMvHEePwCIC1kqVDWwY0g
+LgaVqlRoh7Tlj21DjneNcsJibFe/W+7g
+-----END CERTIFICATE-----
diff --git a/modules/ryan-config/CACerts/AGFRRoot.crt b/modules/ryan-config/CACerts/AGFRRoot.crt
new file mode 100644
index 0000000..8f8270e
--- /dev/null
+++ b/modules/ryan-config/CACerts/AGFRRoot.crt
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBmTCCAUCgAwIBAgIPctsKjtg1OxvCt5Se83LXMAoGCCqGSM49BAMCMCwxEDAO
+BgNVBAoTB0FHRlIgQ0ExGDAWBgNVBAMTD0FHRlIgQ0EgUm9vdCBDQTAeFw0yNDAy
+MjAyMTQyMzFaFw0zNDAyMTcyMTQyMzFaMCwxEDAOBgNVBAoTB0FHRlIgQ0ExGDAW
+BgNVBAMTD0FHRlIgQ0EgUm9vdCBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
+BCxmw8fgcVHhJrrm3zyUXCY0RUI/O3iS1a6v1soggEB/flAIvnyCWschmDnVr1Dx
+wvpI0R8SW9BjnpuEBXJpYfujRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8E
+CDAGAQH/AgEBMB0GA1UdDgQWBBRnwoWRDbqXsPp5wVsRD/CA4choijAKBggqhkjO
+PQQDAgNHADBEAiBy4WLk2dm50EJ08CJjqRYjrub41Px3lldVuzW545glngIgIx9u
+1SJsxDSFW5S7uC0DOOmpwfDWEsnT2i5QKgLfXRc=
+-----END CERTIFICATE-----
diff --git a/modules/ryan-config/base-system.scm b/modules/ryan-config/base-system.scm
index f0c8e03..0dea854 100644
--- a/modules/ryan-config/base-system.scm
+++ b/modules/ryan-config/base-system.scm
@@ -3,15 +3,22 @@
#:use-module (nongnu packages linux)
#:use-module (gnu system setuid)
#:use-module (gnu packages admin)
+ #:use-module (gnu packages avahi)
#:use-module (guix packages)
#:use-module (gnu packages shells)
#:use-module (guix build-system trivial)
#:use-module (guix licenses)
#:use-module (gnu packages tls)
+ #: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 networking)
#:use-module (rosenthal packages wm)
+ #:use-module (rosenthal services networking)
#:use-module (gnu packages security-token)
#:use-module (gnu services security-token)
#:use-module (gnu services cups)
@@ -22,6 +29,8 @@
#:use-module (gnu services nix)
#:use-module (gnu services sound)
#:use-module (gnu services docker)
+ #:use-module (gnu services avahi)
+ #:use-module (gnu services dbus)
#:use-module (gnu services virtualization))
; Define package that installs my root ca public keys
@@ -82,6 +91,15 @@
"ACTION==\"add\", SUBSYSTEM==\"backlight\", "
"RUN+=\"/run/current-system/profile/bin/chmod g+w /sys/class/backlight/%k/brightness\"")))
+(define %flipper-udev-rule
+ (udev-rule
+ "42-flipperzero.rules"
+ (string-append "SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"0483\", ATTRS{idProduct}==\"5740\", ATTRS{manufacturer}==\"Flipper Devices Inc.\", TAG+=\"uaccess\""
+ "\n"
+ "SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"0483\", ATTRS{idProduct}==\"df11\", ATTRS{manufacturer}==\"STMicroelectronics\", TAG+=\"uaccess\""
+ "\n"
+ "SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"303a\", ATTRS{idProduct}==\"40??\", ATTRS{manufacturer}==\"Flipper Devices Inc.\", TAG+=\"uaccess\"")))
+
(define-public base-operating-system
(operating-system
(kernel linux)
@@ -96,52 +114,54 @@
(name "ryan")
(comment "Ryan")
(group "users")
- ;(shell (file-append zsh "/bin/zsh"))
+ (shell (file-append fish "/bin/fish"))
(home-directory "/home/ryan")
- (supplementary-groups '("wheel" "netdev" "audio" "video" "lp" "plugdev" "docker" "libvirt" "kvm")))
+ (supplementary-groups '("wheel" "netdev" "audio" "video" "lp" "plugdev" "docker" "libvirt" "kvm" "dialout")))
%base-user-accounts))
;; 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"
+ ;"hyprland"
"swaybg"
- "swayidle"
+ ;"swayidle"
;"swaylock-effects"
"fuzzel"
- "alacritty"
+ "foot"
"pinentry-qt"
"adwaita-icon-theme"
"hicolor-icon-theme"
"git"
- "nss-certs"
- ;"waybar"
+ "waybar-experimental"
"gnupg"
"light"
+ "avahi"
"mako"
"grim"
"grimblast"
"slurp"
"wl-clipboard"
- "bluez"
- "blueman"
+ ;"bluez"
+ ;"blueman"
"ldacbt"
"libfreeaptx"
"libfdk"
"opendoas"
;"xdg-desktop-portal-wlr"
- "xdg-desktop-portal"
- "xdg-desktop-portal-gtk"
+ ;"xdg-desktop-portal"
+ ;"xdg-desktop-portal-gtk"
"v4l2loopback-linux-module"
"pipewire"
"docker"
- "libvirt"
- "virt-manager"
+ ;"libvirt" ;New version inherited from service
+ ;"virt-manager"
+ "dconf"
"wireplumber"
"wireshark"
+ "webkitgtk-with-libsoup2" ; Needed for Go wails development
"zsh"))
- (list my-ca-certs swaylock-effects-new waybar-new xdg-desktop-portal-hyprland)
+ (list my-ca-certs virt-manager-ovmf bluez-ryan blueman-ryan swayidle-new)
%my-base-packages ))
;; Below is the list of system services. To search for available
@@ -153,13 +173,33 @@
;; record as a second argument to 'service' below.
(service openssh-service-type)
(service pcscd-service-type)
+ (service cups-service-type
+ (cups-configuration
+ (web-interface? #t)))
+ ;; Avahi is only present for CUPS to support "automagic" printing
+ (service avahi-service-type
+ (avahi-configuration
+ (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)
+ ; Tailscale daemon from rosenthal
+ (service tailscale-service-type
+ (tailscale-configuration
+ (socket "/var/run/tailscale/tailscaled.sock")))
+ (service containerd-service-type)
(service nix-service-type)
(service libvirt-service-type
(libvirt-configuration
+ (libvirt libvirt-ovmf)
(unix-sock-group "libvirt")))
(service virtlog-service-type)
- (service bluetooth-service-type)
+ (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"))))
+ (service bluetooth-service-type
+ (bluetooth-configuration
+ (bluez bluez-ryan)
+ (experimental #t)
+ (fast-connectable? #t)))
(udev-rules-service 'fido2 libfido2 #:groups '("plugdev")))
;; This is the default list of services we
@@ -182,18 +222,28 @@
(udev-service-type config =>
(udev-configuration
(inherit config)
- (rules (cons %backlight-udev-rule
+ (rules (cons* %backlight-udev-rule
+ %flipper-udev-rule
(udev-configuration-rules config)))))
+ (elogind-service-type config =>
+ (elogind-configuration
+ (inherit config)
+ (handle-power-key `ignore)
+ (handle-suspend-key `ignore)
+ (handle-lid-switch `ignore)
+ (kill-user-processes? #t)))
(delete pulseaudio-service-type)
(delete gdm-service-type)
+ (delete avahi-service-type)
;(delete xorg-server-service-type)
(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/deploy-templates/HostTemplate b/modules/ryan-config/deploy-templates/HostTemplate
new file mode 100644
index 0000000..9718c51
--- /dev/null
+++ b/modules/ryan-config/deploy-templates/HostTemplate
@@ -0,0 +1,19 @@
+(use-modules (ryan-config base-system)
+ (gnu))
+
+(operating-system
+ (inherit base-operating-system)
+ (host-name "ChangeMe_HOST")
+ (file-systems (cons* (file-system
+ (mount-point "/")
+ (device (uuid "ChangeMe_ROOT"
+ 'ext4))
+ (type "ext4"))
+ (file-system
+ (mount-point "/boot/efi")
+ (device (uuid "ChangeMe_BOOTEFI"
+ 'fat32))
+ (type "vfat")) %base-file-systems))
+ (swap-devices
+ (list
+ (swap-space (target (uuid "ChangeMe_SWAP"))))))
diff --git a/modules/ryan-config/deploy-templates/HostTemplateEncrypted b/modules/ryan-config/deploy-templates/HostTemplateEncrypted
new file mode 100644
index 0000000..5d74aaa
--- /dev/null
+++ b/modules/ryan-config/deploy-templates/HostTemplateEncrypted
@@ -0,0 +1,24 @@
+(use-modules (ryan-config base-system)
+ (gnu))
+
+(operating-system
+ (inherit base-operating-system)
+ (host-name "ChangeMe_HOST")
+ (mapped-devices (list (mapped-device
+ (source (uuid
+ "ChangeMe_ROOT"))
+ (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 "ChangeMe_BOOTEFI"
+ 'fat32))
+ (type "vfat")) %base-file-systems))
+ (swap-devices
+ (list
+ (swap-space (target (uuid "ChangeMe_SWAP"))))))
diff --git a/modules/ryan-config/user_first_run.sh b/modules/ryan-config/user_first_run.sh
new file mode 100644
index 0000000..6dd77fd
--- /dev/null
+++ b/modules/ryan-config/user_first_run.sh
@@ -0,0 +1,20 @@
+#!/run/current-system/profile/bin/bash
+
+# This should run on user first logon, so let's a go!
+# First, we should run a guix pull
+
+guix pull
+
+hash guix
+
+guix home -L ~/.config/guix/modules reconfigure ~/.config/guix/home-config/home-configuration.scm
+
+sudo herd restart nix-daemon
+
+nix-channel --update
+
+nix-shell '<home-manager>' -A install
+
+source ~/.bashrc
+
+home-manager switch
diff --git a/modules/ryan-config/utils.scm b/modules/ryan-config/utils.scm
new file mode 100644
index 0000000..e889e69
--- /dev/null
+++ b/modules/ryan-config/utils.scm
@@ -0,0 +1,33 @@
+(define-module (ryan-config utils)
+ #:use-module (gnu packages)
+ #:use-module (gnu services)
+ #:use-module (gnu home services)
+ #:use-module (gnu home services shepherd)
+ #:use-module (gnu packages freedesktop)
+ #:use-module (gnu services configuration)
+ #:use-module (guix gexp)
+ #:use-module (ice-9 regex)
+ #:use-module (ice-9 pretty-print)
+ #:use-module (ice-9 textual-ports)
+
+ #:export (gather-manifest-packages
+ apply-template-file))
+
+(define (apply-template template-string value-alist)
+ (regexp-substitute/global #f
+ "\\$\\{([A-Za-z/\\-]+)\\}"
+ template-string
+ 'pre
+ (lambda (m)
+ (let ((entry (assq (string->symbol (match:substring m 1))
+ value-alist)))
+ (if entry
+ (cdr entry)
+ "VALUE NOT FOUND")))
+ 'post))
+
+(define (apply-template-file file-path value-alist)
+ (call-with-input-file file-path
+ (lambda (port)
+ (apply-template (get-string-all port)
+ value-alist))))
diff --git a/modules/ryan-packages/audio.scm b/modules/ryan-packages/audio.scm
new file mode 100644
index 0000000..575a64a
--- /dev/null
+++ b/modules/ryan-packages/audio.scm
@@ -0,0 +1,81 @@
+(define-module (ryan-packages audio)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix gexp)
+ #:use-module (guix build-system meson)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix utils)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages glib)
+ #:use-module (gnu packages audio)
+ #:use-module (gnu packages pulseaudio)
+ #:use-module (gnu packages gtk)
+ #:use-module (gnu packages xiph)
+ #:use-module (gnu packages tbb)
+ #:use-module (gnu packages gettext)
+ #:use-module (gnu packages gnome)
+ #:use-module (gnu packages pretty-print)
+ #:use-module (gnu packages algebra)
+ #:use-module (gnu packages cpp)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages freedesktop)
+ #:use-module (gnu packages cmake)
+ #:use-module (gnu packages maths)
+ #:use-module (gnu packages pkg-config))
+
+(define-public easyeffects
+ (package
+ (name "easyeffects")
+ (version "7.0.1")
+ (arguments
+ (list
+ #:modules
+ '((guix build utils)
+ (guix build meson-build-system))
+ #:imported-modules
+ (append %meson-build-system-modules)
+ #:tests? #f))
+ (native-inputs (list gettext-minimal
+ itstool
+ desktop-file-utils
+ `(,glib "bin")
+ `(,gtk+ "bin")
+ pkg-config
+ cmake
+ appstream-glib))
+ (inputs (list zita-convolver
+ rnnoise
+ tbb
+ fftwf
+ lilv
+ fmt
+ rubberband
+ speexdsp
+ nlohmann-json
+ pipewire
+ libadwaita
+ libsigc++
+ libbs2b
+ libsndfile
+ libsamplerate
+ libebur128
+ libportal
+ gsl
+ speex
+ `(,util-linux "lib")))
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/wwmm/easyeffects/archive/refs/tags/v" version
+ ".tar.gz"))
+ (sha256
+ (base32
+ "05j52fy51zjai7n0j23chydfgkfq9n82h2ih806z3b47zhk2h2j2"))))
+ (build-system meson-build-system)
+ (synopsis "Limiter, compressor, convolver, equalizer and auto volume and many other plugins for PipeWire applications")
+ (description "This package provides @code{easyeffects}, which is an audio application for use atop of @code{pipewire}
+ that allows effects that modify sound sources and sinks. This cannot be updated to the latest version (7.0.8) because
+ the packaged version of @code{gtk} is too old.")
+ (home-page "https://github.com/wwmm/easyeffects")
+ (license license:gpl3+)))
+
+easyeffects
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/calcurse.scm b/modules/ryan-packages/calcurse.scm
new file mode 100644
index 0000000..241bb53
--- /dev/null
+++ b/modules/ryan-packages/calcurse.scm
@@ -0,0 +1,29 @@
+(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))
+
+(define-public calcurse-fixed
+ (package
+ (inherit calcurse)
+ (version "4.8.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://calcurse.org/files/calcurse-"
+ version ".tar.gz"))
+ (sha256
+ (base32 "02l3spj2ai97b87winz3kvsxvf66g74lm46b7kcbhsgx2iqb6syq"))))
+ (propagated-inputs (list python-httplib2))))
+
diff --git a/modules/ryan-packages/freedesktop.scm b/modules/ryan-packages/freedesktop.scm
index 6e13d53..56b5633 100644
--- a/modules/ryan-packages/freedesktop.scm
+++ b/modules/ryan-packages/freedesktop.scm
@@ -3,7 +3,9 @@
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix gexp)
#:use-module (guix build-system meson)
+ #:use-module (guix build-system cmake)
#:use-module (guix build-system qt)
+ #:use-module (guix build utils)
#:use-module (guix packages)
#:use-module (guix git-download)
#:use-module (guix utils)
@@ -12,9 +14,14 @@
#:use-module (gnu packages linux)
#:use-module (gnu packages image)
#:use-module (gnu packages qt)
+ #:use-module (gnu packages bash)
#:use-module (gnu packages cmake)
+ #:use-module (gnu packages gcc)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages freedesktop)
+ #:use-module (gnu packages xorg)
+ #:use-module (gnu packages glib)
+ #:use-module (gnu packages man)
#:use-module (rosenthal packages wm)
#:use-module (gnu packages wm))
@@ -34,10 +41,10 @@
(native-inputs (modify-inputs (package-native-inputs xdg-desktop-portal-wlr)
(append wlroots)))))
-(define-public xdg-desktop-portal-hyprland
+(define-public xdg-desktop-portal-hyprland-ryan
(package
(name "xdg-desktop-portal-hyprland")
- (version "0.5.0")
+ (version "1.3.1")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -46,7 +53,44 @@
(file-name (git-file-name name version))
(sha256
(base32
- "1dmgc0w4wjj9hwqg17wg529v8sbxr6czp9s319d5407jm780x40b"))))
+ "0fdbzxanmmzrvb9wfzg1pdsnlg7dl6v5k8bl44w10n48s7bbbzn0"))))
+ (build-system qt-build-system)
+ (arguments
+ (list
+ #:tests? #f
+ #:configure-flags #~(list "-Dsystemd=disabled")
+ #:qtbase qtbase
+ #:phases
+ ;; After building the portal, we need to build the share selector using qt
+ #~(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)))
+ (("\\<(hyprctl-share-picker)\\>" _ cmd)
+ (string-append #$output "/bin/" cmd))))))))
+ (native-inputs (list gcc-13 pkg-config wayland hyprlang))
+ (inputs (list bash-minimal grim hyprland hyprland-protocols mesa pipewire sdbus-c++ slurp wayland-protocols qtwayland))
+ (home-page "")
+ (synopsis "test")
+ (description "test")
+ (license license:bsd-3)))
+
+(define-public xdg-desktop-portal-hyprland-old
+ (package
+ (name "xdg-desktop-portal-hyprland")
+ (version "1.2.4")
+ (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
+ "1m82rrir2fg7h2cpch6wm3h1rkpnbh9pawlw1wdknw75mi6139r0"))))
(build-system meson-build-system)
(arguments
(list
@@ -90,11 +134,41 @@
(dirname (search-input-file
inputs (string-append "/bin/" program))))
'("slurp"))))))))))
- (native-inputs (list cmake pkg-config qtbase-5))
- (inputs (list elogind hyprland hyprland-protocols slurp pipewire wayland-protocols wayland libinih mesa qtwayland-5 `(,util-linux "lib")))
+ (native-inputs (list gcc-13 cmake pkg-config qtbase-5))
+ (inputs (list elogind hyprland hyprland-protocols slurp pipewire wayland-protocols wayland libinih mesa sdbus-c++ qtwayland-5 `(,util-linux "lib")))
(home-page "")
(synopsis "test")
(description "test")
(license license:bsd-3)))
-xdg-desktop-portal-hyprland
+(define-public wl-mirror
+ (package
+ (name "wl-mirror")
+ (version "0.16.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Ferdi265/wl-mirror")
+ (commit (string-append "v" version))
+ (recursive? #t)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "06i4jrip4q9j1gp81j0jr79cwfj9zdcfcr1n0jpyqlxsysppidlc"))))
+ (inputs (list wayland egl-wayland mesa))
+ (native-inputs (list pkg-config scdoc wayland-protocols))
+ (build-system cmake-build-system)
+ (arguments (list
+ #:tests? #f
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'configure 'touch
+ (lambda _
+ (invoke "touch" "proto/wayland-protocols/.git")
+ (invoke "touch" "proto/wlr-protocols/.git"))))))
+ (home-page "bleh")
+ (synopsis "mirror displays")
+ (description "mirror displays")
+ (license license:expat)))
+
+xdg-desktop-portal-hyprland-ryan
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/gtk.scm b/modules/ryan-packages/gtk.scm
new file mode 100644
index 0000000..3407803
--- /dev/null
+++ b/modules/ryan-packages/gtk.scm
@@ -0,0 +1,45 @@
+(define-module (ryan-packages gtk)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix utils)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages glib)
+ #:use-module (gnu packages cmake)
+ #:use-module (gnu packages gtk))
+
+(define-public glibmm-2.66
+ (package
+ (inherit glibmm-2.64)
+ (name "glibmm")
+ (version "2.66.5")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append "mirror://gnome/sources/glibmm/"
+ (version-major+minor version)
+ "/glibmm-" version ".tar.xz"))
+ (sha256
+ (base32 "0jf1drbb585lcyvh45krkbcjpnq5mwr1scvh0mnbihvfvmi4cf3v"))))))
+
+(define-public pangomm-ryan
+ (package
+ (inherit pangomm-2.46)
+ (propagated-inputs (modify-inputs (package-propagated-inputs pangomm-2.46) (replace "glibmm" glibmm-2.66)))))
+
+(define-public atkmm-ryan
+ (package
+ (inherit atkmm-2.28)
+ (propagated-inputs (modify-inputs (package-propagated-inputs atkmm-2.28) (replace "glibmm" glibmm-2.66)))))
+
+(define-public cairomm-ryan
+ (package
+ (inherit cairomm-1.14)
+ (propagated-inputs (modify-inputs (package-propagated-inputs cairomm-1.14) (replace "glibmm" glibmm-2.66)))))
+
+(define-public gtkmm-ryan
+ (package
+ (inherit gtkmm-3)
+ (propagated-inputs (list gtk+ glibmm cairomm-1.14 atkmm-ryan pangomm-ryan))))
+
+gtkmm-ryan
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
new file mode 100644
index 0000000..600117c
--- /dev/null
+++ b/modules/ryan-packages/linux.scm
@@ -0,0 +1,35 @@
+(define-module (ryan-packages linux)
+ #:use-module (guix download)
+ #:use-module (guix packages)
+ #:use-module (guix gexp)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages python-xyz)
+ #:use-module (guix git-download)
+ #:use-module (guix utils))
+
+(define-public bluez-ryan
+ (package
+ (inherit bluez)
+ (version "5.72")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://kernel.org/linux/bluetooth/bluez-"
+ 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"))))))
+
+bluez-ryan
diff --git a/modules/ryan-packages/mozilla.scm b/modules/ryan-packages/mozilla.scm
new file mode 100644
index 0000000..86a1485
--- /dev/null
+++ b/modules/ryan-packages/mozilla.scm
@@ -0,0 +1,58 @@
+(define-module (ryan-packages mozilla)
+ #:use-module (gnu)
+ #:use-module (guix download)
+ #:use-module (guix packages)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (gnu packages bash)
+ #:use-module (gnu packages linux)
+ #:use-module (nonguix build-system binary)
+ #:use-module (guix build-system trivial)
+ #:use-module (nongnu packages mozilla))
+
+(define-public firefox-wrapped
+ (package
+ (name "firefox-wrapped")
+ (source #f)
+ (version "0.1")
+ (synopsis "Simple wrapper for pipewire in firefox")
+ (description "Simple wrapper for pipewire in firefox")
+ (home-page "http://mozilla.org/")
+ (license license:mpl2.0)
+ (inputs
+ `(("bash" ,bash-minimal)
+ ("pipewire" ,pipewire)
+ ("firefox" ,firefox)))
+ (build-system trivial-build-system)
+ (arguments
+ '(#:modules ((guix build utils))
+ #:builder
+ (begin
+ (use-modules (guix build utils))
+ (let* ((bash (assoc-ref %build-inputs "bash"))
+ (firefox (assoc-ref %build-inputs "firefox"))
+ (pipewire (assoc-ref %build-inputs "pipewire"))
+ (out (assoc-ref %outputs "out"))
+ (exe (string-append out "/bin/firefox")))
+ (mkdir-p (dirname exe))
+
+ (call-with-output-file exe
+ (lambda (port)
+ ;; NOTE: added "export LD_LIBRARY_PATH=pipewire"
+ ;; maybe this can be done better with `wrap-programm'
+ (format port "#!~a \n
+export LD_LIBRARY_PATH=~a \n
+export MOZ_ENABLE_WAYLAND=1 \n
+export MOZ_USE_XINPUT2=1 \n
+exec ~a $@\n"
+ (string-append bash "/bin/bash")
+ (string-append pipewire "/lib")
+ (string-append firefox "/bin/firefox"))))
+ (chmod exe #o555)
+
+ ;; Provide the manual and .desktop file.
+ (copy-recursively (string-append firefox "/share")
+ (string-append out "/share"))
+ (substitute* (string-append
+ out "/share/applications/firefox.desktop")
+ ((firefox) out))
+ #t))))))
diff --git a/modules/ryan-packages/networking.scm b/modules/ryan-packages/networking.scm
new file mode 100644
index 0000000..6d660a3
--- /dev/null
+++ b/modules/ryan-packages/networking.scm
@@ -0,0 +1,14 @@
+(define-module (ryan-packages networking)
+ #:use-module (guix gexp)
+ #:use-module (guix packages)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages networking)
+ #:use-module (ryan-packages linux)
+ #:use-module (guix utils))
+
+(define-public blueman-ryan
+ (package
+ (inherit blueman)
+ (inputs (modify-inputs (package-inputs blueman) (delete "bluez") (prepend bluez-ryan)))))
+
+blueman-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/virtualization.scm b/modules/ryan-packages/virtualization.scm
new file mode 100644
index 0000000..d59ad2e
--- /dev/null
+++ b/modules/ryan-packages/virtualization.scm
@@ -0,0 +1,45 @@
+;;; Stolen from https://g.tylerm.dev/tylerm/dotfiles/raw/branch/main/modules/home-packages/virtualization.scm
+
+(define-module (ryan-packages virtualization)
+ #:use-module (guix packages)
+ #:use-module (guix utils)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages package-management)
+ #:use-module (gnu packages build-tools)
+ #:use-module (gnu packages virtualization)
+ #:use-module (gnu packages firmware)
+ #:use-module (guix gexp))
+
+(define-public libvirt-ovmf
+ (package
+ (inherit libvirt)
+ (name "libvirt-ovmf")
+ (inputs
+ (modify-inputs (package-inputs libvirt)
+ (append qemu)))
+ (arguments
+ (substitute-keyword-arguments (package-arguments libvirt)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'install 'install-firmware
+ (lambda _
+ (let ((fmw (string-append #$output "/share/qemu")))
+ (mkdir-p fmw)
+ (copy-recursively #$(file-append qemu "/share/qemu") fmw))))))))))
+
+(define-public virt-manager-ovmf
+ (package
+ (inherit virt-manager)
+ (name "virt-manager-ovmf")
+ (inputs
+ (modify-inputs (package-inputs virt-manager)
+ (append qemu)))
+ (arguments
+ (substitute-keyword-arguments (package-arguments virt-manager)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'install 'install-firmware
+ (lambda _
+ (let ((fmw (string-append #$output "/share/qemu")))
+ (mkdir-p fmw)
+ (copy-recursively #$(file-append qemu "/share/firmware") fmw))))))))))
diff --git a/modules/ryan-packages/web-server.scm b/modules/ryan-packages/web-server.scm
new file mode 100644
index 0000000..eb1c539
--- /dev/null
+++ b/modules/ryan-packages/web-server.scm
@@ -0,0 +1,63 @@
+(define-module (ryan-packages web-server)
+ #:use-module (guix download)
+ #:use-module (guix packages)
+ #:use-module (guix gexp)
+ #:use-module (gnu packages)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix build-system go)
+ #:use-module (guix git-download)
+ #:use-module (gnu packages golang)
+ #:use-module (guix utils))
+
+(define-public go-github-com-caddy-certmagic
+ (package
+ (name "certmagic")
+ (version "0.19.2")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/caddyserver/certmagic")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0jgbkj0azkbs828vsd3gycpab8pycgf55vrxkvnfmwfjpdiq1551"))))
+ (build-system go-build-system)
+ (arguments
+ (list #:tests? #f
+ #:go go-1.20
+ #:import-path "github.com/caddyserver/certmagic"))
+ (home-page "https://github.com/caddyserver/certmagic")
+ (synopsis "Certbot ACME")
+ (description "Automagic certificate management in Caddy")
+ (license license:expat)))
+
+(define-public caddy
+ (package
+ (name "Caddy")
+ (version "2.7.4")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/caddyserver/caddy")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0jgbkj0azkbs828vsd3gycpab8pycgf55vrxkvnfmwfjpdiq1551"))))
+ (build-system go-build-system)
+ (native-inputs (list go-github-com-google-uuid
+ go-go-uber-org-zap
+ go-github-com-caddy-certmagic
+ go-github-com-prometheus-client-golang
+ go-golang-org-x-term
+ go-golang-org-x-sys))
+ (arguments
+ (list #:tests? #f
+ #:go go-1.20
+ ;#:unpack-path "github.com/caddyserver/caddy"
+ #:import-path "github.com/caddyserver/caddy"))
+ (home-page "https://github.com/caddyserver/caddy")
+ (synopsis "Web server")
+ (description "This package serves the web")
+ (license license:expat)))
+
+caddy
diff --git a/modules/ryan-packages/wm.scm b/modules/ryan-packages/wm.scm
index dce1be0..8b991b7 100644
--- a/modules/ryan-packages/wm.scm
+++ b/modules/ryan-packages/wm.scm
@@ -1,16 +1,36 @@
(define-module (ryan-packages wm)
+ #:use-module ((guix licenses) #:prefix license:)
#:use-module (guix download)
#:use-module (guix packages)
#: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 (ryan-packages gl)
#:use-module (gnu packages wm))
(define-public swaylock-effects-new
(package
(inherit swaylock-effects)
- (version "1.6.11")
+ (version "1.7.0.0")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -18,12 +38,107 @@
(commit (string-append "v" version))))
(sha256
(base32
- "0j7dxn66xqlf6iv2arqzz7mxlh7nf85anvpyf30d2frcidarda9h"))))
+ "0cgpbzdpxj6bbpa8jwql1snghj21mhryyvj6sk46g66lqvwlrqbj"))))
(inputs (modify-inputs (package-inputs swaylock-effects) (delete "linux-pam")))))
+(define-public swayidle-new
+ (package
+ (inherit swayidle)
+ (version "1.8.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/swaywm/swayidle")
+ (commit version)))
+ (file-name (git-file-name "swayidle" version))
+ (sha256
+ (base32 "0y0qdqzx90kvk6l80darldvizr7p5g65bnblhxlq5a2rgvs9hkpx"))))))
+
(define-public waybar-new
(package
(inherit waybar)
- (arguments (list #:configure-flags #~(list "-Dexperimental=true")))))
+ (name "waybar-new")
+ (version "0.10.3")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Alexays/Waybar")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (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)))))
+ ;(native-inputs (modify-inputs (package-native-inputs waybar) (prepend gcc-13)))))
+
+(define cairo-hypr ;;; stolen from rosenthal since it is not exported
+ (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-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."))))
-waybar-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..9f0bdc4
--- /dev/null
+++ b/modules/ryan-services/file-manager.scm
@@ -0,0 +1,25 @@
+(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 home services)
+ #:use-module (gnu home services shepherd)
+ #:use-module (srfi srfi-1)
+ #:use-module (guix gexp))
+
+(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))
diff --git a/modules/ryan-services/spotify.scm b/modules/ryan-services/spotify.scm
new file mode 100644
index 0000000..1ddb9cf
--- /dev/null
+++ b/modules/ryan-services/spotify.scm
@@ -0,0 +1,43 @@
+(define-module (ryan-services spotify)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages rust-apps)
+ #:use-module (gnu services)
+ #:use-module (gnu services configuration)
+ #:use-module (gnu home services)
+ #:use-module (gnu home services shepherd)
+ #:use-module (guix gexp))
+
+(define (home-spotifyd-profile-service config)
+ (map specification->package
+ (list "spotifyd")))
+
+(define (home-spotifyd-shepherd-service config)
+ ;; spotifyd daemon
+ (list (shepherd-service
+ (requirement '(pipewire))
+ (provision '(spotifyd))
+ (stop #~(make-kill-destructor))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append spotifyd "/bin/spotifyd")
+ "--volume-normalisation"
+ "-B320"
+ (format #f "--device-name=~a" (gethostname))
+ "--device-type=computer"
+ "--no-daemon")
+ #:log-file (string-append
+ (or (getenv "XDG_LOG_HOME")
+ (format #f "~a/.local/var/log"
+ (getenv "HOME")))
+ "/spotifyd.log"))))))
+
+(define-public home-spotifyd-service-type
+ (service-type (name 'home-spotifyd)
+ (extensions
+ (list (service-extension
+ home-profile-service-type
+ home-spotifyd-profile-service)
+ (service-extension
+ home-shepherd-service-type
+ home-spotifyd-shepherd-service)))
+ (default-value #f)
+ (description "Provides spotifyd daemon in the background")))
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