{ config, lib, osConfig, perSystem, flake, pkgs, ... }: let inherit (lib) mkIf; inherit (osConfig.virtualisation) libvirtd; inherit (osConfig.hardware) bluetooth; in { imports = with flake.modules.homePrograms; [ atuin direnv fish helix oh-my-posh syncthing wezterm wl-kbptr yazi ]; systemd.user.settings.Manager.DefaultEnvironment = { TERMINAL = "wezterm"; HISTFILE = ''"$XDG_STATE_HOME"/bash/history''; CARGO_HOME = ''"$XDG_DATA_HOME"/cargo''; DOTNET_CLI_HOME = ''"$XDG_DATA_HOME"/dotnet''; GNUPGHOME = ''"$XDG_DATA_HOME"/gnupg''; ICEAUTHORITY = ''"$XDG_CACHE_HOME"/ICEauthority''; NUGET_PACKAGES = ''"$XDG_CACHE_HOME"/NuGetPackages''; NPM_CONFIG_INIT_MODULE = ''"$XDG_CONFIG_HOME"/npm/config/npm-init.js''; NPM_CONFIG_CACHE = ''"$XDG_CACHE_HOME"/npm''; # NPM_CONFIG_TMP = ''"$XDG_RUNTIME_DIR"/npm''; }; programs = lib.attrsets.recursiveUpdate { bat.enable = true; # cat in rust btop.enable = true; # direnv.enable = true; distrobox.enable = true; difftastic.enable = true; eza.enable = true; # ls in rust fd.enable = true; # find in rust fzf.enable = true; # fuzzy finder in rust git.enable = true; gitui.enable = true; # git ui in rust jujutsu.enable = true; # vcs in rust keychain.enable = true; nix-index-database.comma.enable = true; nix-index.enable = true; nix-your-shell.enable = true; obsidian.enable = true; pay-respects.enable = true; # thefuck in rust ripgrep.enable = true; # grep in rust zellij.enable = true; zk.enable = true; zoxide.enable = true; # fuzzy cd in rust } { btop.settings.update_ms = 200; btop.package = pkgs.btop-rocm; difftastic.git.enable = true; difftastic.git.diffToolMode = true; helix.defaultEditor = true; git.signing.format = "ssh"; git.settings.alias.cl = "clone"; git.settings.alias.co = "checkout"; git.settings.sequence.editor = lib.getExe pkgs.git-interactive-rebase-tool; keychain.keys = ["id_ed25519"]; obsidian.package = perSystem.mypackages.obsidian-bwrapped.override { bwrapperOpts = { sockets.x11 = false; mounts.readWrite = [ "$HOME/Obsidian" ]; }; }; # obsidian.vaults = { # personal.target = "Obsidian/Personal"; # university.target = "Obsidian/University"; # }; }; home.packages = with pkgs; [ # development utils alejandra # nix formatter in rust # devenv # programming deps in rust # (mkIf config.programs.jujutsu.enable jj-fzf) # fuzzy finder jujutsu tui (broken) just # make in rust silicon # create code pics in rust ] ++ [ # console utils # bluetuith # bluetooth tui in go dua # disk space usage in rust duf # better df in go fend # calculator in rust # mprocs # process runner in rust ouch # archive manager in rust # procs # ps in rust rbw # bitwarden cli in rust sd # sed in rust systemctl-tui # systemctl tui in rust trashy # trash cli in rust up # ultimate plumber in go wiremix # pavucontrol for wireplumber in rust ] ++ [ # various wrappers (perSystem.mypackages.prismlauncher-bwrapped.override { addPkgs = with pkgs; [mangohud gamemode gamescope glfw3-minecraft]; packageOverrides = { jdks = with pkgs; [ # graalvmPackages.graalvm-ce # zulu8 zulu17 zulu ]; }; }) (perSystem.mypackages.zen-browser-bwrapped.override { bwrapperOpts.sockets.x11 = false; }) (perSystem.mypackages.legcord-bwrapped.override { bwrapperOpts.sockets.x11 = false; }) (perSystem.mypackages.helium-browser-bwrapped.override { bwrapperOpts.sockets.x11 = false; bwrapperOpts.mounts.readWrite = ["$XDG_DOWNLOAD_DIR"]; }) (pkgs.mkBwrapper rec { app = { addPkgs = with pkgs; [mangohud gamemode gamescope]; package = pkgs.heroic.override { extraPkgs = pkgs: app.addPkgs; }; id = "com.heroicgameslauncher.hgl_bwrapper"; runScript = "heroic"; # isFhsenv = true; }; dbus.session.talks = [ "com.canonical.Unity" "org.freedesktop.Notifications" "org.freedesktop.PowerManagement" "org.freedesktop.ScreenSaver" "org.gnome.SettingsDaemon.MediaKeys" "org.kde.StatusNotifierWatcher" ]; dbus.system.talks = [ "org.freedesktop.UDisks2" "org.freedesktop.UPower" ]; mounts.readWrite = [ "/storage/games/heroic" "$HOME/.config/wine-tools" ]; mounts.read = [ "$XDG_CONFIG_HOME/mangohud" ]; }) ] ++ [ (pkgs.writeShellApplication { name = "rbw-ls"; runtimeInputs = with pkgs; [rbw jq csvlens]; text = '' rbw ls --raw \ | jq -r '["name","user","folder","id"], ( .[] | [(.name // "none"), (.user // "none"), (.folder // "none"), .id]) | @csv' \ | csvlens ''; }) (pkgs.writeShellApplication { name = "rbw-get"; runtimeInputs = with pkgs; [rbw wl-clipboard]; text = ''rbw get --clipboard "$1" && sleep 5 && wl-copy -c''; }) (pkgs.writeShellApplication { name = "bw-get"; runtimeInputs = with pkgs; [bitwarden-cli jq wl-clipboard csvlens]; text = '' bw get item \ "$(bw list items \ | jq -r '["name","user","id"], (.[] | [(.name), (.login.username), (.id)]) | @csv' \ | csvlens)" \ | jq -r '.login.password' \ | wl-copy \ && sleep 5 && wl-copy -c ''; }) (pkgs.writeShellApplication { name = "rbw-totp"; runtimeInputs = with pkgs; [rbw wl-clipboard]; text = ''rbw totp --clipboard "$1" && sleep 5 && wl-copy -c''; }) ] ++ [ # misc apps adwaita-icon-theme # vial # qmk keyboard configuring app pinentry-gnome3 # pinentry for rbw (mkIf libvirtd.enable virt-manager) # libvirt gui # waycheck # check wayland protocols gpu-screen-recorder-gtk ] ++ [ # gui libadwaita apps celluloid # mpv gui in libadwaita # gnome-text-editor helvum # pipewire patchbay in rust # junction # app chooser # mission-center # task manager in rust (partly) # (mkIf bluetooth.enable overskride) # bluetooth gui in rust pika-backup # borg gui in rust # pwvucontrol # pipewire gui in rust perSystem.zmx.default # sonusmix # pipewire routing tool in rust ]; xdg.systemDirs.data = ["/home/user/.bwrapper/helium/local/share"]; # xdg.desktopEntries.uni = { # actions."Copy".exec = "fish -c \"~/.local/bin/uni --copy\""; # categories = ["Utility" "X-Launch" "Network"]; # comment = "Select and open or copy URLs from a list."; # exec = "fish -c \"~/.local/bin/uni\""; # icon = "web-browser"; # name = "Uni URL Handler"; # startupNotify = true; # terminal = false; # type = "Application"; # }; }