{
  # Snowfall Lib provides a customized `lib` instance with access to your flake's library
  # as well as the libraries available from your flake's inputs.
  lib,
  # An instance of `pkgs` with your overlays and packages applied is also available.
  pkgs,
  # You also have access to your flake's inputs.
  inputs,

  # Additional metadata is provided by Snowfall Lib.
  namespace, # The namespace used for your flake, defaulting to "internal" if not set.
  home, # The home architecture for this host (eg. `x86_64-linux`).
  target, # The Snowfall Lib target for this home (eg. `x86_64-home`).
  format, # A normalized name for the home target (eg. `home`).
  virtual, # A boolean to determine whether this home is a virtual target using nixos-generators.
  host, # The host name for this home.

  # All other arguments come from the home home.
  config,
  ...
}:
{
  home.username = "julian";
  home.homeDirectory = "/home/julian";

  modules = {
    non-nixos.is-nixos = true;
    shell = {
      # zsh.enable = true;
      fish.enable = true;
      direnv.enable = true;
    };
    topgrade.enable = true;
    neovim.enable = true;
    alacritty.enable = true;
    emacs.enable = true;
    # i3.enable = true;
    # rofi.enable = true;
    hyprland.enable = true;
    nix-helper.enable = true;
  };

  home.packages =
    with pkgs;
    [
      # Code formatters for use with doom emacs
      nixfmt-rfc-style # nix
      dockfmt # docker
      google-java-format # java

      # Lsps for use with doom emacs
      # neocmakelsp # cmake

      # Rust setup
      unstable.rustc
      unstable.rustfmt
      unstable.cargo
      unstable.clippy
      unstable.rust-analyzer

      # Further tools
      cntr # nix debugger

      (lib.frajul.my-helper-function lazygit)
      languagetool
      # wireguard-tools

      # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })

      (pkgs.writeShellScriptBin "matlab-paper" ''
        matlab -desktop -sd "/home/julian/dev/phdthesis/Phase B/mainSimulation" -softwareopengl
      '')
      (pkgs.writeShellScriptBin "matlab-robotik" ''
        matlab -desktop -sd "/home/julian/nas-sync/Studium/Vorlesungen-Master/ss24/Robotik2" -softwareopengl
      '')
      (pkgs.writeShellScriptBin "matlab-gram" ''
        export GTK_PATH=/usr/lib/gtk-3.0
        nix shell nixpkgs#gcc11 --command matlab -desktop -sd "/home/julian/dev/matlab-gram" -softwareopengl
      '')

      zotero
      xfce.mousepad
      tor-browser
      wl-clipboard

      ## My scripts
      pkgs.frajul.deploy-to-pianopi
      pkgs.frajul.edit-config
      pkgs.frajul.open-messaging
    ]
    ++ lib.lists.concatMap (packages-list-file: import packages-list-file { inherit pkgs; }) [
      ./fonts.nix
      ./packages.nix
    ];

  services.gammastep = {
    enable = true;
    latitude = 47.92;
    longitude = 10.12;
    provider = "manual";
  };

  # Let Home Manager install and manage itself.
  programs.home-manager.enable = true;

  # ======================== DO NOT CHANGE THIS ========================
  home.stateVersion = "23.11";
  # ======================== DO NOT CHANGE THIS ========================
}
