{ config, pkgs, name, lib, ... }: # 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"; }; lf-sixel = pkgs.callPackage ../custom/lf-sixel/. { }; in { programs.home-manager.enable = true; home.username = "tristan"; home.homeDirectory = "/home/tristan"; xdg.userDirs.enable = true; home.packages = (with pkgs; [ libnotify dig jq usbutils wl-clipboard du-dust htop imv libsixel yt-dlp playerctl swww neofetch obs-studio selectdefaultapplication input-leap pwvucontrol easyeffects inkscape libsForQt5.okular pavucontrol qpwgraph element-desktop brave gimp quickemu bitwarden libsForQt5.kasts libreoffice (makeDesktopItem { name = "logseq"; desktopName = "Logseq"; exec = "${logseq}/bin/logseq --ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --disable-gpu"; }) ]); programs.fish = { enable = true; }; services.udiskie = { enable = true; notify = true; }; gtk = { enable = true; theme = { name = "Materia-dark"; package = pkgs.materia-theme; }; iconTheme = { name = "Vimix-Doder"; package = pkgs.vimix-icon-theme; }; cursorTheme = { name = "Vanilla-DMZ"; package = pkgs.vanilla-dmz; size = 24; }; gtk3.bookmarks = [ "file:///home/tristan/Documents" "file:///home/tristan/Pictures/Screenshots" "file:///home/tristan/Downloads" ]; }; programs.mpv.enable = true; programs.mpv.bindings = { l = "seek 5"; h = "seek -5"; e = "add chapter 1"; b = "add chapter -1"; ">" = "multiply speed 1.1"; "<" = "multiply speed 1/1.1"; "." = "frame-step"; "," = "frame-back-step"; "ctrl+n" = "playlist-next"; "ctrl+p" = "playlist-prev"; k = "add volume 2"; j = "add volume -2"; m = "cycle mute"; c = "cycle sub-visibility"; }; programs.mpv.scripts = [ pkgs.mpvScripts.mpris ]; programs.foot.settings = { main = { term = "xterm-256color"; font = "mono:size=12"; }; colors = { foreground = "abb2bf"; background = "000000"; regular0 = "222222"; regular1 = "eb3a26"; regular2 = "7fbc59"; regular3 = "e9db65"; regular4 = "4781d1"; regular5 = "7d74bb"; regular6 = "50a2bd"; regular7 = "dcdccc"; bright0 = "666666"; bright1 = "e15d4e"; bright2 = "8fbd73"; bright3 = "e3d97e"; bright4 = "6791ce"; bright5 = "8f88be"; bright6 = "6caabf"; bright7 = "ffffff"; alpha = 0.8; }; }; programs.rbw = { enable = true; settings = { email = "tristan@tristans.cloud"; base_url = "https://vault.tristans.cloud"; }; }; programs.ssh.enable = true; programs.ssh.matchBlocks = { "git.tristans.cloud" = { user = "git"; 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 () { ${my-deps.chafa} "$1" -f sixel -s "$(($2/2))x$3" | sed 's/#/\n#/g' ${ my-deps.exiftool } "$1" } batted () { cat "$@" } 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) 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" ] && \ 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.librewolf.enable = true; 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 = { } } ] ''; systemd.user.services = { snapclient = { Unit = { Description = "Snapclient"; }; Service = { ExecStart = "${pkgs.snapcast}/bin/snapclient -h music.local"; }; Install = { WantedBy = ["graphical-session.target"]; }; }; }; services.kdeconnect = { enable = true; indicator = true; }; programs.qutebrowser = { enable = true; searchEngines = { DEFAULT = "https://search.brave.com/search?q={}"; w = "https://en.wikipedia.org/wiki/Special:Search?search={}&go=Go&ns0=1"; aw = "https://wiki.archlinux.org/?search={}"; nw = "https://nixos.wiki/index.php?search={}"; nixpkgs = "https://search.nixos.org/packages?channel=unstable&query={}"; }; settings = { colors = { webpage.preferred_color_scheme = "dark"; }; tabs = { background = false; indicator.width = 0; favicons.scale = 2.0; position = "left"; show = "always"; width = 40; }; }; extraConfig = '' c.tabs.padding = { "bottom" : 10, "left" : 5, "right" : 5, "top" : 10 } ''; }; programs.pandoc = { enable = true; defaults = { metadata = { author = "Tristan Beedell"; }; pdf-engine = "xelatex"; }; }; }