diff options
Diffstat (limited to 'home')
-rw-r--r-- | home/home.nix | 265 | ||||
-rw-r--r-- | home/newsboat-lib.nix | 21 | ||||
-rw-r--r-- | home/newsboat-public.nix | 147 | ||||
-rw-r--r-- | home/packages.nix | 69 | ||||
-rw-r--r-- | home/unstable.nix | 14 |
5 files changed, 516 insertions, 0 deletions
diff --git a/home/home.nix b/home/home.nix new file mode 100644 index 0000000..f2a0f7e --- /dev/null +++ b/home/home.nix @@ -0,0 +1,265 @@ +{ config, pkgs, inputs, ... }: + +{ + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + + imports = [ + ./packages.nix + ./unstable.nix + ]; + + home.keyboard.options = [ "caps:escape" ]; + + 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 = "cat ~/mailpasswd"; + }; + }; + + programs.bash = { + enable = true; + historyControl = [ "ignoredups" "ignorespace" ]; + historyFileSize = 10000; + + # set shell prompt & tty for the gnu pinentry (otherwise gnupg will crash) + initExtra = '' + export GPG_TTY=`tty` + # this shouldn't be necessary, but apparently nix is broken ... + NIX_PATH=$HOME/.nix-defexpr/channels''${NIX_PATH:+:}$NIX_PATH + PS1='\[\033[1;36m\] >>> [\j|\u@\w]\$: \[\033[00m\]' + ''; + + shellAliases = { + "lrz-vpn" = "sudo openconnect https://asa-cluster.lrz.de -g AnyConnect"; + ll = "ls -slF"; + news = "newsboat"; + pj = "pijul"; + }; + }; + + programs.starship = { + enable = true; + enableBashIntegration = true; + enableFishIntegration = true; + settings = { + directory.truncation_length = 10; + }; + }; + + programs.nushell = { + enable = true; + settings = { + startup = [ + "mkdir ~/.cache/starship" + "starship init nu | save ~/.cache/starship/init.nu" + "source ~/.cache/starship/init.nu" + ]; + prompt = "starship_prompt"; + }; + }; + + programs.fish = { + enable = true; + shellAliases = { + "lrz-vpn" = "sudo openconnect https://asa-cluster.lrz.de"; + news = "newsboat"; + pj = "pijul"; + nix-shell = "nix-shell --command fish"; + le = "exa"; + ll = "exa -lh --grid --icons"; + llt = "exa -lh --tree --icons"; + lt = "exa --tree --icons"; + }; + functions = { + fish_greeting = { + body = ""; + }; + }; + }; + + programs.newsboat = { + enable = true; + urls = (import ./newsboat-public.nix) ++ (import inputs.feeds); + browser = pkgs.lynx.outPath + "/bin/lynx"; + reloadThreads = 100; + queries = { + unread = ''unread="yes"''; + security = ''tags # "security"''; + ao3 = ''tags # "ao3"''; + blogs = ''unread="yes" and tags # "blog"''; + video = ''tags # "video"''; + podcasts = ''tags # "podcast"''; + news = ''tags # "news"''; + }; + extraConfig = '' + 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 set browser "mpv %u >/dev/null 2>&1 &" ; open-in-browser ; set browser "${config.programs.newsboat.browser} %u" + 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" + + bind-key j down + bind-key k up + ''; + }; + + + programs.bat = { + enable = true; + config.wrap = "never"; + }; + + + programs.obs-studio = { + enable = true; + plugins = let + move-transition = import obs/move-transition.nix; + obs-websocket = import obs/obs-websocket.nix; + in + with pkgs; [ + ]; + }; + + programs.git = { + enable = true; + package = pkgs.gitAndTools.gitFull; + userEmail = "stuebinm@disroot.org"; + userName = "stuebinm"; + + signing = { + # signByDefault = true; + key = "0x8FBE8AAD32FA12B7"; + }; + + extraConfig = { + log.showSignature = true; + init.defaultBranch = "main"; + }; + + delta = { + enable = true; + options = { + decorations = { + commit-decoration-style = "bold yellow"; + file-decoration-style = "bold blue"; + file-style = "bold yellow"; + }; + features = "decorations line-numbers navigate"; + whitespace-error-style = "22 reverse"; + }; + }; + }; + + programs.gpg = { + enable = true; + settings = { + auto-key-locate = "keyserver"; + with-fingerprint = ""; + }; + }; + services.gpg-agent = { + enable = true; + pinentryFlavor = "gtk2"; + maxCacheTtl = 1800; + }; + + + programs.htop = { + enable = true; + settings = { + fields = "0 48 17 18 38 46 47 49 1"; + sort_key = 46; + sort_direction = -1; + hide_kernel_threads = 1; + hide_userland_threads = 0; + shadow_other_users = 1; + show_program_path = 0; + highlight_base_name = 1; + find_comm_in_cmdline = 1; + header_margin = 1; + show_cpu_usage = 1; + color_scheme = 5; + enable_mouse = 1; + delay = 15; + header_layout = "two_67_33"; + column_meters_0 = "AllCPUs Memory Swap"; + column_meter_modes_0 = "1 1 1"; + column_meters_1 = "Tasks LoadAverage Uptime NetworkIO"; + column_meter_modes_1 = "2 2 2 2"; + }; + }; + + programs.ssh = { + forwardAgent = true; + enable = true; + matchBlocks = let + keydir = config.home.homeDirectory + "/.ssh"; + hetznerlogin = match: {user = "root"; identityFile = keydir + "/hetzner"; forwardAgent = true;} // match; + vpslogin = hostname: hetznerlogin {inherit hostname;}; + lmulogin = hostname: {identityFile = keydir + "/key_lmu"; user = "lmu-user"; } // { inherit hostname;}; + in { + "parsons" = hetznerlogin { + hostname = "parsons.hacc.space"; + port = 62954; + user = "stuebinm"; + identityFile = keydir + "/id_rsa"; + }; + "discuss" = hetznerlogin { + user = "root"; + hostname = "23.88.58.86"; + port = 62954; + identityFile = keydir + "/id_rsa"; + }; + "flora" = vpslogin "nix.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"; + }; + "lmucast-test" = lmulogin "lmzveun-h5base.srv.mwn.de"; + "lmucast-prod" = lmulogin "lmzveun-pro-h5base.srv.mwn.de"; + "lmu-salsa" = { + hostname = "lmzveun-salsa.srv.mwn.de"; + user = "ra72koc"; + identityFile = keydir + "/key_lmu"; + }; + }; + }; + + programs.mpv = { + enable = true; + bindings = { + "up" = "add speed 0.1"; + "down" = "add speed -0.1"; + "n" = "add chapter 1"; + "p" = "add chapter -1"; + }; + }; + +} diff --git a/home/newsboat-lib.nix b/home/newsboat-lib.nix new file mode 100644 index 0000000..1344a9b --- /dev/null +++ b/home/newsboat-lib.nix @@ -0,0 +1,21 @@ + +rec { + tags = tags: url: { + tags = tags; + inherit url; + }; + btag = url: t: tags [ t "blog" ] url; + btags = url: ts: tags (ts ++ [ "blog" ]) url; + + ntag = url: t: tags [ t "news" ] url; + jtag = url: t: tags [ t "journal" ] url; + + vtag = url: t: tags [ t "video" ] url; + ytag = channel: tag: vtag ("https://www.youtube.com/feeds/videos.xml?channel_id=${channel}") tag; + blender = channel: vtag "https://video.blender.org/feeds/videos.xml?videoChannelId=${toString channel}" "blender"; + + podcast = url: tags [ "podcast" ] url; + music = url: tags [ "music" ] url; + + fr = "français"; +} diff --git a/home/newsboat-public.nix b/home/newsboat-public.nix new file mode 100644 index 0000000..cca7cf5 --- /dev/null +++ b/home/newsboat-public.nix @@ -0,0 +1,147 @@ + +with import ./newsboat-lib.nix; +[ + # news + (ntag "https://thinkmods.store/blogs/news.atom" "tech") + (ntag "http://feeds.feedburner.com/Blendernation" "blender") + (ntag "https://puri.sm/feed/" "tech") + (ntag "https://events.ccc.de" "chaos") + (ntag "https://this-week-in-rust.org/rss.xml" "prog") + (ntag "https://weekly.nixos.org/feeds/all.rss.xml" "prog") + (ntag "https://haskellweekly.news/newsletter.atom" "prog") + (ntag "https://zerforschung.org/index.xml" "chaos") + (ntag "https://jacobinitalia.it/feed" "it") + (ntag "https://ctxt.es/es/?tpl=87" "es") + (jtag "https://madeinchinajournal.com/feed/" "pol") + (jtag "https://decorrespondent.nl/feed/v1/publications" "pol") + (jtag "https://solar.lowtechmagazine.com/feeds/all-en.atom.xml" "tech") + (btag "https://www.omgubuntu.co.uk/feed" "tech") + + # blogs + (btag "https://scilogs.spektrum.de/klimalounge/feed/" "climate") + (btag "http://scienceblogs.de/astrodicticum-simplex/feed/" "science") + (btag "https://linus-neumann.de/feed/" "chaos") + (btag "https://acoup.blog/feed/" "history") + (btag "https://www.exurbe.com/feed" "history") + (btag "https://zompist.wordpress.com/feed/" "ling") + (btag "https://pluralistic.net/feed/" "chaos") + (btag "https://www.arkadymartine.net/blog?format=rss" "books") + (btags "https://antiquipop.hypotheses.org/feed" [ "history" fr ]) + (btag "https://peterfalkingham.com/feed/" "3d") + (btag "https://www.kuketz-blog.de/feed/" "sec") + (btag "https://caramel.hypotheses.org/feed" fr) + (btag "https://www.pine64.org/blog/feed/" "chaos") + (btag "https://crewsproject.wordpress.com/category/news-and-events/feed/" "ling") + (btag "https://gretchenmcculloch.com/news/feed/" "ling") + (btag "https://mutualintelligibility.substack.com/feed" "ling") + (btag "https://www.neilgaiman.com/feed/journal/" "books") + (btag "https://fernostwaerts.substack.com/feed" "pol") + (btag "https://dhmuc.hypotheses.org/feed" "dh") + (btag "https://log.munichmakerlab.de/rss" "chaos") + (btag "https://code.blender.org/feed/" "3d") + (btags "https://isohedral.ca/blog/feed/" [ "math" "3d" ]) + (btag "http://exple.tive.org/blarg/feed/" "chaos") + (btag "https://www.antipope.org/charlie/blog-static/atom.xml" "books") + (btag "https://pages.vassar.edu/pharos/feed/" "history") + (btag "https://fasterthanli.me/index.xml" "chaos") + (btag "https://dannybate.com/feed/" "ling") + (btag "https://blog.filippo.io/rss/" "comp") + (btag "https://serokell.io/blog.rss.xml" "copm") + (btag "https://jaspervdj.be/rss.xml" "comp") + (btag "https://ambrevar.xyz/atom.xml" "chaos") + (btag "https://esoteric.codes/rss" "chaos") + (btag "https://grimgrains.com/links/rss.xml" "chaos") + (btag "https://blog.benjojo.co.uk/rss.xml" "chaos") + (btag "https://wiki.xxiivv.com/links/rss.xml" "chaos") + (btag "https://www.davidrevoy.com/feed/rss" "art") + (btag "https://xkcd.com/atom.xml" "xkcd") + (btag "https://what-if.xkcd.com/feed.atom" "xkcd") + (btag "https://reckoning.press/feed/" "stories") + (btag "http://strangehorizons.com/feed/" "stories") + (btag "https://grahamc.com/feed/" "comp") + (btag "https://elephly.net/feed.xml" "comp") + (btag "https://www.haskellforall.com/feeds/posts/default" "comp") + (btag "http://conal.net/blog/feed" "comp") + (btag "https://michael.stapelberg.ch/posts/tags/distri/feed.xml" "comp") + (btag "https://mattermost.com/blog/category/releases/rss" "security") + (btag "https://ionathan.ch/feed.xml" "comp") + (btag "https://wingolog.org/feed/atom" "comp") + (btag "https://os.phil-opp.com/rss.xml" "comp") + (btag "https://joeyh.name/blog/index.rss" "comp") + (btag "https://www.dawn-lang.org/feed.xml" "comp") + (btag "https://christine.website/blog.rss" "comp") + (btag "https://blog.veitheller.de/feed.rss" "comp") + (btag "https://alhassy.github.io/rss.xml" "comp") + (btag "https://hpc.guix.info/blog/feed.xml" "comp") + (btag "https://tratt.net/laurie/blog/entries.rss" "comp") + (btag "https://dataswamp.org/~solene/rss.xml" "comp") + (btag "https://signal.eu.org/blog/rss" "comp") + (btag "http://arctrain.de/feed/rss" "sci") + (btag "https://sandymaguire.me/atom" "comp") + (btag "https://reasonablypolymorphic.com/atom" "comp") + (btag "https://vanemden.wordpress.com/feed/" "comp") + (btag "https://spacekookie.de/rss.xml" "comp") + (btag "https://risingentropy.com/rss" "math") + (btag "https://www.extrema.is/articles/tag/index:haskell-books.rss" "comp") + (btag "https://wickedchicken.github.io/index.xml" "comp") + (btag "https://chrispenner.ca/atom.xml" "comp") + (btag "https://hannes.robur.coop/atom" "comp") + (btag "https://ryanglscott.github.io/feed.xml" "cat") + (btag "https://journal.infinitenegativeutility.com/feed/" "art") + (btag "https://bkastl.de/feed" "comp") + (btag "https://dysphoric.dev/feed" "comp") + + + # videos + (vtag "https://media.ccc.de/updates.rdf" "chaos") # Media.CCC.de + (ytag "UC9rxWtgVUFls4LocQhXoNJA" "tech") # Software Circus + (ytag "UCXuqSBlHAE6Xw-yeJA0Tunw" "tech") # Linus Tech Tips + (ytag "UCBa659QWEk1AI4Tg--mrJ2A" "stuff") # Tom Scott + (ytag "UCtGG8ucQgEJPeUPhJZ4M4jA" "stuff") # Rare Earth + (ytag "UCwRH985XgMYXQ6NxXDo8npw" "stuff") # Kurzgesagt de + (ytag "UCsXVk37bltHxD1rDPwtNM8Q" "stuff") # Kurzgesagt en + (ytag "UC9GwQ_SGeq7Nrn4NQfwVoRA" "climate") # Students for Future + (ytag "UCN29LJGZ8FY30ysxdTnDsaw" "stuff") # Die Filmanalyse + (ytag "UCv1WDP5EiipMQ__C4Cg6aow" "pol") # Tilo Jung + (ytag "UCX6b17PVsYBQ0ip5gyeme-Q" "stuff") # Crash Course + (ytag "UCsaGKqPZnGp_7N80hcHySGQ" "history") # Tasting History + (ytag "UCncTjqw75krp9j_wRRh5Gvw" "writing") # World Building Notes + (ytag "UCPlJ-KlPelfnwq0GHSeSpGQ" "talks") # It's all about Math + (ytag "UCmrWzKsW9IGU2l6a_MGJ3dw" "ling") # LangTime Studio + (ytag "UCXl0Zbk8_rvjyLwAR-Xh9pQ" "maths") # Insights into Mathematics (Wildberger) + (ytag "UCPjHlmSGP-rMg5PR-PyaJug" "chaos") # Henk Rijckaert + (ytag "UC3XTzVzaHQEd30rQbuvCtTQ" "latenight") # Last Week Tonight + (ytag "UCSju5G2aFaWMqn-_0YBtq5A" "maths") # Standupmaths + (ytag "UC2PA-AKmVpU6NKCGtZq_rKQ" "left") # Philosophy Tube + (ytag "UC4zzTEL5tuIgGMvzjk1Ozbg" "maths") # Henry Segerman + (ytag "UCyHDQ5C6z1NDmJ4g6SerW8g" "sci") # maiLab + (ytag "UClt01z1wHHT7c5lKcU8pxRQ" "left") # hbomberguy + (ytag "UCVfMwipzxB2GUqRuJpxr7Ng" "climate") # fff muc + (ytag "UCG1h-Wqjtwz7uUANw6gazRw" "books") # Lindsay Ellis + (ytag "UCiQo406SKypmtAQXIHdZ6mA" "stuff") # Birchpunk + (ytag "UCbbQalJ4OaC0oQ0AqRaOJ9g" "stuff") # Jay Foreman + (ytag "UC1H1NWNTG2Xi3pt85ykVSHA" "prog") # Jordan Harrod (AI) + (ytag "UC2zfPMH_srjxUN5EYrfIhCw" "comp") # Zurich friends of Haskell + (ytag "UCUQo7nzH1sXVpzL92VesANw" "stuff") # DIY Perks + (blender 2737) # blender developers + (blender 10) # reels + (blender 9) # open movies + (blender 4) # main blender channel + + # podcasts + (podcast "https://craphound.com/feed/") + (podcast "https://omny.fm/shows/ologies-with-alie-ward/playlists/podcast.rss") + (podcast "https://feeds.soundcloud.com/users/soundcloud:users:237055046/sounds.rss") + (podcast "https://fernostwaerts.de/feed/mp3/") + (podcast "https://allesgesagt.podigee.io/feed/mp3") + (podcast "https://logbuch-netzpolitik.de/feed") + (podcast "https://feeds.feedburner.com/SrslyWrong") + (podcast "https://efforg.libsyn.com/rss") + (podcast "https://feed.podbean.com/lingfieldnotes/feed.xml") + (podcast "https://dasklima.podigee.io/feed/mp3") + (podcast "https://www.haecksen.org/podcast/rss") + (podcast "https://www.ndr.de/nachrichten/info/podcast4684.xml") + + (music "https://feeds.soundcloud.com/users/soundcloud%3Ausers%3A39508706/sounds.rss") + +] diff --git a/home/packages.nix b/home/packages.nix new file mode 100644 index 0000000..55036d8 --- /dev/null +++ b/home/packages.nix @@ -0,0 +1,69 @@ +{ config, lib, pkgs, inputs, ... }: + +let + naersk = pkgs.callPackage inputs.naersk {}; + extras = { + sfz = naersk.buildPackage inputs.sfz; + }; +in +{ + home.packages = with pkgs; [ + (emacsWithPackages (epkgs: [ epkgs.exwm epkgs.pdf-tools epkgs.vterm ])) + emacs-all-the-icons-fonts + + # flake-enabled version of nix + (pkgs.writeScriptBin "nif" '' + #!/usr/bin/env bash + exec ${pkgs.nixFlakes}/bin/nix --experimental-features "nix-command flakes" "$@" + '') + # never version of unison for playing around + (unison-ucm.overrideAttrs (old: rec { + milestone_id = "M2g"; + version = "1.0.${milestone_id}-alpha"; + src = fetchurl { + url = "https://github.com/unisonweb/unison/releases/download/release/${milestone_id}/ucm-linux.tar.gz"; + sha256 = "004jx7q657mkcrvilk4lfkp8xcpl2bjflpn9m2p7jzlrlk97v9nj"; + }; + })) + # internet apps & clients + firefox thunderbird keepassxc chromium signal-desktop mumble lynx + openconnect matterhorn + # graphics & audio + audacity blender darktable vlc kdenlive moc ffmpeg-full + gimp-with-plugins inkscape krita meshlab pavucontrol moc + gst_all_1.gstreamer + # LaTeX & documents + texlive.combined.scheme-full xournal pandoc + # extra documentation, data, resources that aren't programs + manpages nerdfonts + # general cli utils + tree dnsutils inetutils pijul bat age libsecret gping bottom dogdns + cifs-utils jekyll fzf ripgrep fd bandwhich exa dive + ripgrep python39Packages.isort shellcheck graphviz + poppler unzip acpi extras.sfz + youtube-dl + # git + gitAndTools.gitAnnex git-bug git-appraise + # graphical utils + kitty baobab + # things for emacs + sqlite brightnessctl scrot playerctl tlp + # haskell & co + ghc cabal-install stack haskell.packages.ghc8107.haskell-language-server + haskellPackages.hoogle haskellPackages.stylish-haskell + # other functional things + racket dhall lean dune_2 ocamlPackages.utop ocamlPackages.ocp-indent + ocamlPackages.merlin ocaml + # html, js & co + jq html-tidy nodePackages.stylelint nodePackages.js-beautify zola + # purescript + spago purescript # nodePackages.purescript-language-server nodejs + # rust + rls cargo rustc rust-analyzer rustfmt + # others + gcc nixfmt niv cachix julia_16-bin python39 + # isabelle + # (import "${inputs.playground.outPath}/isabelle-nix-fhsenv") + # (import /home/stuebinm/projects/isabelle-utils {}).isabat + ]; +} diff --git a/home/unstable.nix b/home/unstable.nix new file mode 100644 index 0000000..78ce4f6 --- /dev/null +++ b/home/unstable.nix @@ -0,0 +1,14 @@ +{config, pkgs, inputs, system, ...}: + +with import inputs.nixpkgs-unstable {inherit system; }; +{ + home.packages = [ + dino + nyxt + zulip-term + carp + foliate + elixir_1_12 + elixir_ls + ]; +} |