{ config, pkgs, ... }: # https://nix-community.github.io/home-manager/options.html let my-deps = { notify-send = "${pkgs.libnotify}/bin/notify-send"; playerctl = "${pkgs.playerctl}/bin/playerctl"; grim = "${pkgs.grim}/bin/grim"; slurp = "${pkgs.slurp}/bin/slurp"; amixer = "${pkgs.alsa-utils}/bin/amixer"; swaybg = "${pkgs.swaybg}/bin/swaybg"; terminal = "${pkgs.foot}/bin/foot"; chafa = "${pkgs.chafa}/bin/chafa"; exiftool = "${pkgs.exiftool}/bin/exiftool"; wc = "${pkgs.coreutils}/bin/wc"; jq = "${pkgs.jq}/bin/jq"; hyprctl = "${pkgs.hyprland}/bin/hyprctl"; xargs = "${pkgs.findutils}/bin/xargs"; menu = "${config.programs.menu.package}${config.programs.menu.dmenuCommand}"; fileman = "${pkgs.pcmanfm}/bin/pcmanfm"; gawk = "${pkgs.gawk}/bin/awk"; glow = "${pkgs.glow}/bin/glow"; ffmpegthumbnailer = "${pkgs.ffmpegthumbnailer}/bin/ffmpegthumbnailer"; }; lf-sixel = pkgs.callPackage ../../custom/lf-sixel/. {}; in { imports = [ ./graphical.nix ../../lib/programs/home/neovim/. ]; programs.home-manager.enable = true; home.username = "tristan"; home.homeDirectory = "/home/tristan"; xdg.userDirs.enable = true; home.packages = with pkgs; [ libnotify dig jq fx mosh ripgrep usbutils wl-clipboard du-dust htop libsixel yt-dlp playerctl neofetch tree ansible ]; programs.fish = { enable = true; }; services.udiskie = { enable = true; notify = true; }; programs.rbw = { enable = true; settings = { email = "tristan@tristans.cloud"; base_url = "https://vault.tristans.cloud"; pinentry = "gnome3"; }; }; programs.ssh.enable = true; programs.ssh.matchBlocks = { "git.tristans.cloud" = { user = "git"; hostname = "100.116.82.65"; port = 2222; }; "alpine" = { hostname = "100.116.82.65"; user = "tristan"; }; }; programs.lf.enable = true; programs.lf.package = lf-sixel; programs.lf.keybindings = { D = "trash"; R = "drag"; "" = ":rename"; "" = "open-with"; }; programs.lf.commands = { drag = "%${pkgs.ripdrag}/bin/ripdrag -x \"$fx\""; trash = "%${pkgs.trash-cli}/bin/trash-put \"$fx\""; open = "$set -f; ${pkgs.ranger}/bin/rifle -p 0 \"$fx\""; open-with = '' ''${{ set -f ${pkgs.ranger}/bin/rifle -l "$fx" read -p "Open with: " method ${pkgs.ranger}/bin/rifle -p "$method" "$fx" }}''; bulk-rename = '' ''${{ old="$(mktemp)" new="$(mktemp)" if [ -n "$fs" ]; then fs="$(basename -a $fs)" else fs="$(ls)" fi printf '%s\n' "$fs" >"$old" printf '%s\n' "$fs" >"$new" $EDITOR "$new" [ "$(wc -l < "$new")" -ne "$(wc -l < "$old")" ] && exit paste "$old" "$new" | while IFS= read -r names; do src="$(printf '%s' "$names" | cut -f1)" dst="$(printf '%s' "$names" | cut -f2)" if [ "$src" = "$dst" ] || [ -e "$dst" ]; then continue fi mv -- "$src" "$dst" done rm -- "$old" "$new" lf -remote "send $id unselect" }}''; }; programs.lf.previewer.source = pkgs.writeShellScript "preview" '' image () { echo "$1" ${my-deps.chafa} "$1" -f sixel -s "$(($2/2))x$3" | sed 's/#/\n#/g' ${my-deps.exiftool} "$1" } batted () { cat "$@" } mkdir -p "$HOME/.cache/lf" CACHE="$HOME/.cache/lf/thumbnail.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}'))" case "$(printf "%s\n" "$(readlink -f "$1")" | awk '{print tolower($0)}')" in *.tgz|*.tar.gz) tar tzf "$1" ;; *.tar.bz2|*.tbz2) tar tjf "$1" ;; *.tar.txz|*.txz) xz --list "$1" ;; *.tar) tar tf "$1" ;; *.zip|*.jar|*.war|*.ear|*.oxt) unzip -l "$1" ;; *.rar) unrar l "$1" ;; *.md) ${my-deps.glow} -s dark "$1" ;; *.7z) 7z l "$1" ;; *.[1-8]) man "$1" | col -b ;; *.o) nm "$1";; *.torrent) transmission-show "$1" ;; *.iso) iso-info --no-header -l "$1" ;; *.odt|*.ods|*.odp|*.sxw) odt2txt "$1" ;; *.doc) catdoc "$1" ;; *.docx) docx2txt "$1" - ;; *.xml|*.html) w3m -dump "$1";; *.xls|*.xlsx) ssconvert --export-type=Gnumeric_stf:stf_csv "$1" "fd://1" | batted --language=csv ;; *.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.mka) ${my-deps.exiftool} "$1" ;; *.pdf) [ ! -f "$CACHE.jpg" ] && \ pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE" image "$CACHE.jpg" "$2" "$3" "$4" "$5" ;; *.epub) [ ! -f "$CACHE" ] && \ epub-thumbnailer "$1" "$CACHE" 1024 image "$CACHE" "$2" "$3" "$4" "$5" ;; *.cbz|*.cbr|*.cbt) [ ! -f "$CACHE" ] && \ comicthumb "$1" "$CACHE" 1024 image "$CACHE" "$2" "$3" "$4" "$5" ;; *.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|*.mov|*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx) [ ! -f "$CACHE.jpg" ] && \ ${my-deps.ffmpegthumbnailer} -i "$1" -o "$CACHE.jpg" -s 0 -q 5 image "$CACHE.jpg" "$2" "$3" "$4" "$5" ;; *.bmp|*.jpg|*.jpeg|*.png|*.xpm|*.webp|*.jfif) image "$1" "$2" "$3" "$4" "$5" ;; *.svg) [ ! -f "$CACHE.jpg" ] && \ convert "$1" "$CACHE.jpg" image "$CACHE.jpg" "$2" "$3" "$4" "$5" ;; *.ino) batted --language=cpp "$1" ;; *) batted "$1" ;; esac ''; home.file.".icons/default".source = "${pkgs.vanilla-dmz}/share/icons/Vanilla-DMZ"; programs.helix = { enable = true; languages = { nix = { auto-format = true; language-server = { command = "${pkgs.rnix-lsp}/bin/rnix-lsp"; }; }; go = { auto-format = true; language-server = { command = "${pkgs.gopls}/bin/gopls"; }; }; typescript = { auto-format = true; language-server = { command = "${pkgs.nodePackages.typescript-language-server}/bin/typescript-language-server"; }; }; }; }; home.file.".config/pipewire/pipewire.conf.d/raop-discover.conf".text = '' context.modules = [ { name = libpipewire-module-raop-discover args = { } } ] ''; services.kdeconnect = { enable = true; indicator = true; }; programs.pandoc = { enable = true; defaults = { metadata = { author = "Tristan Beedell"; }; pdf-engine = "xelatex"; }; }; programs.direnv.enable = true; }