{ config, lib, pkgs, inputs, ... }: { # Let Home Manager install and manage itself. programs.home-manager.enable = true; imports = [ ./packages.nix ./unstable.nix ./home-minimal.nix ]; home.sessionVariables = { MOZ_ENABLE_WAYLAND = 1; _JAVA_AWT_WM_NONREPARENTING = 1; }; xdg.mimeApps = { enable = true; associations.added."application/pdf" = [ "org.pwmt.zathura.desktop" ]; defaultApplications."application/pdf" = [ "org.pwmt.zathura.desktop" ]; }; programs.msmtp.enable = true; programs.mbsync.enable = true; programs.mu.enable = true; accounts.email = { accounts.hacc = { address = "stuebinm@hacc.space"; imap.host = "mail.hacc.space"; mbsync = { enable = true; create = "maildir"; }; msmtp.enable = true; mu.enable = true; primary = true; realName = "stuebinm"; smtp.host = "mail.hacc.space"; userName = "stuebinm@hacc.space"; passwordCommand = "secret-tool lookup mail hacc"; }; accounts.disroot = { address = "stuebinm@disroot.org"; imap.host = "disroot.org"; mbsync = { enable = true; create = "maildir"; }; msmtp.enable = true; mu.enable = true; realName = "terru"; smtp.host = "disroot.org"; userName = "stuebinm@disroot.org"; passwordCommand = "secret-tool lookup mail disroot"; }; accounts.tum = { address = "stuebinm@in.tum.de"; imap.host = "mail.in.tum.de"; mbsync = { enable = true; create = "maildir"; }; msmtp.enable = true; mu.enable = true; realName = "stuebinm"; smtp.host = "mail.in.tum.de"; userName = "stuebinm@in.tum.de"; passwordCommand = "secret-tool lookup mail in.tum.de"; }; accounts.ilztalbahn = { address = "stuebinm@ilztalbahn.eu"; imap.host = "imap.strato.de"; mbsync = { enable = true; create = "maildir"; }; msmtp.enable = true; mu.enable = true; realName = "terru"; smtp.host = "smtp.strato.de"; userName = "stuebinm@ilztalbahn.eu"; passwordCommand = "secret-tool lookup mail ilztalbahn"; }; }; programs.bash = { shellAliases = { "lrz-vpn" = "sudo openconnect https://asa-cluster.lrz.de -g AnyConnect"; news = "newsboat"; pj = "pijul"; }; }; programs.fish = { shellAliases = { "lrz-vpn" = "sudo openconnect https://asa-cluster.lrz.de"; news = "newsboat"; pj = "pijul"; agenda = "CLICOLOR_FORCE=1 almanac month ~/.cache/feedsync/* | less"; xmlpretty = "xmllint --format - | bat -l xml"; wormhole = "wormhole-rs"; noms = "curl https://www.bahn.de/service/zug/db_lounge -s | htmlq --attribute href a | grep Speisen | xargs curl -s | pdftotext - /dev/stdout | less"; gosh = "rlwrap gosh"; geojson2gtfs = ''jq -r ".features[0].geometry.coordinates | to_entries | map([.value[0], .value[1], .key])[] | @csv"''; slurpqr = "grim -g (slurp) - | zbarimg -q --raw - | wl-copy -n && wl-paste"; }; functions.fetchpdf.body = '' set url $argv[1] if test "$url" = "" echo "No url given" return end set anchors (curl -L $url | sd '\n' "" | htmlq a | rg .pdf) set choice (paste (printf '%s\n' $anchors | htmlq -t a | psub) (printf '%s\n' $anchors | htmlq --attribute href a | psub) | fzf) if test "$status" != 0 return end set docurl (echo $choice | cut -f 2) set docname (echo $choice | cut -f 1) echo Fetching $docname from $docurl curl "$docurl" > ~/Downloads/news/"$docname".pdf zathura ~/Downloads/news/"$docname".pdf if test (read -P "move this file to archive? [y/N] ") = "y" set filename (read -P "filename? [$docname] ") if test "$filename" = "" cp ~/Downloads/news/"$docname".pdf ~/archive/"$docname".pdf else cp ~/Downloads/news/"$docname".pdf ~/archive/$filename end end ''; functions.nix-what.body = '' nix-doc search $argv[1] ~/clones/nixpkgs ''; functions.bahnsteig.body = '' set station (echo $argv) if string upper -q $station set name (string escape --style=url $station) set station (curl -sL https://ril100.bahnhof.name/$name) echo ril100 $station end curl -s https://overpass-api.de/api/interpreter -d " [out:json][timeout:25]; node[~\"railway:ref|railway:ref:parent\"~\"^$station\$\"][operator~\"^(DB|Deutsch)\"]; rel[public_transport~\"stop_area|stop_area_group\"](bn) -> .a; rel[public_transport~\"stop_area|stop_area_group\"](br.a) -> .b; (.a;.b;); nwr[railway=platform](>>); out; " | jq '.elements[].tags.ref | select(. != null)' | sort ''; functions.stealemoji.body = '' if [ (expr (count $argv) % 2) != 0 ] echo wrong count of arguments return 1 end set n (expr (count $argv) / 2) echo stealing $n emoji mkdir -p /tmp/stealemoji for i in (seq $n) echo stealing $i curl -s $argv[$i] > /tmp/$argv[(expr $i + 1)].png end cd /tmp scp $argv[(seq 2 2 (expr $n + 1))].png flora:/var/lib/containers/pleroma/var/lib/akkoma/static/emoji/unsorted/ ssh flora machinectl shell pleroma /bin/sh -c \"pleroma_ctl emoji reload\" ''; }; programs.kitty = { enable = true; extraConfig = '' background_opacity 0.8 confirm_os_window_close 0 allow_remote_control yes ''; }; programs.neovim = { enable = true; viAlias = true; plugins = with pkgs; [ (vimPlugins.nvim-treesitter.withPlugins (plugins: [ tree-sitter-grammars.tree-sitter-nix ])) ]; generatedConfigViml = '' lua < /dev/null" ; ${cmd} ; set browser "${config.programs.newsboat.browser} %u"''; in '' color background white default color listnormal white default color listnormal_unread magenta default bold color listfocus black white bold color listfocus_unread magenta white bold color info green color0 color article white default ssl-verifypeer no macro v ${mkMpv "open-in-browser"} macro 1 ${mkMpv "one"} macro 2 ${mkMpv "two"} macro 3 ${mkMpv "three"} macro 4 ${mkMpv "four"} macro 5 ${mkMpv "five"} macro f set browser "${pkgs.xdg_utils}/bin/xdg-open %u >/dev/null 2>&1 &" ; open-in-browser ; set browser "${config.programs.newsboat.browser} %u" macro d set browser "kitty @launch --type tab fish -c 'fetchpdf %u'" ; open-in-browser ; set browser "${config.programs.newsboat.browser} %u" bind-key j down bind-key k up ''; }; programs.gpg = { enable = true; settings = { auto-key-locate = "keyserver"; with-fingerprint = ""; }; }; programs.ssh = { # forwardAgent = true; enable = true; extraConfig = '' SetEnv TERM=xterm-256color ''; matchBlocks = let keydir = config.home.homeDirectory + "/.ssh"; hetznerlogin = match: {user = "root"; identityFile = keydir + "/hetzner.pub";} // match; vpslogin = hostname: hetznerlogin {inherit hostname;}; in { "parsons" = { hostname = "parsons.hacc.space"; port = 62954; user = "stuebinm"; identityFile = keydir + "/id_ed25519"; }; "flora" = vpslogin "flora.stuebinm.eu"; "chaski" = vpslogin "chaski.stuebinm.eu"; "cgit" = vpslogin "flora.stuebinm.eu" // {user = "git";}; "mate" = { hostname = "192.168.69.174"; user = "root"; identityFile = keydir + "/hetzner.pub"; }; "c3voc" = { hostname = "git.c3voc.de"; user = "git"; identityFile = keydir + "/id_surltesh-echer"; }; "encoder* mixer* atem* minion*" = { # hostname = "%h.lan.c3voc.de"; user = "voc"; extraOptions.StrictHostKeyChecking = "no"; }; "nobelium" = { hostname = "no.colorspace.club"; user = "root"; identityFile = keydir + "/id_ed25519"; }; "colorspace-git" = { hostname = "no.colorspace.club"; user = "git"; identityFile = keydir + "/id_ed25519"; }; "git.infra4future.de" = { hostname = "git.infra4future.de"; user = "gitea"; identityFile = keydir + "/id_ed25519"; addressFamily = "inet"; }; "namauh" = { hostname = "10.11.99.1"; user = "root"; identityFile = keydir + "/id_ed25519"; }; }; }; programs.mpv = { enable = true; bindings = { "up" = "add speed 0.1"; "down" = "add speed -0.1"; "n" = "add chapter 1"; "p" = "add chapter -1"; "f" = "cycle osd-level up"; }; config.osd-status-msg = "\${estimated-frame-number} (\${percent-pos}%)"; }; services.mako = { enable = true; backgroundColor = "#74389eb0"; borderColor = "#c27cb6ff"; defaultTimeout = 5000; # milliseconds padding = "10"; output = "DP-9"; }; services.mpd = { enable = true; musicDirectory = "${config.home.homeDirectory}/music"; network.startWhenNeeded = true; }; programs.bat = { enable = true; config.wrap = "never"; syntaxes = { isabelle = { src = inputs.isabelle-utils; file = "/isabelle.sublime-syntax"; }; gleam = { src = pkgs.fetchFromGitHub { owner = "molnarmark"; repo = "sublime-gleam"; rev = "2e761cdb1a87539d827987f997a20a35efd68aa9"; sha256 = "sha256-Zj2DKTcO1t9g18qsNKtpHKElbRSc9nBRE2QBzRn9+qs="; }; file = "/syntax/gleam.sublime-syntax"; }; }; }; xdg.mimeApps.associations.added."x-scheme-handler/tg" = "org.telegram.desktop.deskopt"; }