diff --git a/homes/x86_64-linux/julian@aspi/default.nix b/homes/x86_64-linux/julian@aspi/default.nix
index 07d7453..b7eb6af 100644
--- a/homes/x86_64-linux/julian@aspi/default.nix
+++ b/homes/x86_64-linux/julian@aspi/default.nix
@@ -43,79 +43,7 @@
     nix-helper.enable = true;
 
     desktop.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
-      rustc
-      rustfmt
-      cargo
-      clippy
-      rust-analyzer
-
-      # Further tools
-      cntr # nix debugger
-
-      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
-      '')
-      (pkgs.writeShellScriptBin "expenses-tracker" ''
-        java -jar /home/julian/dev/expensestracker/app/build/libs/app.jar
-      '')
-
-      zotero
-      xfce.mousepad
-      tor-browser
-
-      ## My scripts
-      frajul.deploy-to-pianopi
-      frajul.open-messaging
-      frajul.edit-config
-      frajul.xwacomcalibrate
-      frajul.lntocp
-    ]
-    ++ lib.lists.concatMap (packages-list-file: import packages-list-file { inherit pkgs; }) [
-      ./fonts.nix
-      ./packages.nix
-    ];
-
-  services.blueman-applet.enable = true;
-  services.nextcloud-client.enable = true;
-  services.nextcloud-client.startInBackground = true;
-  services.network-manager-applet.enable = true;
-
-  services.syncthing.tray.enable = true;
-  services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
-
-  programs.chromium = {
-    enable = true;
-    extensions = [
-      # Tampermonkey
-      { id = "dhdgffkkebhmkfjojejmpbldmpobfkfo"; }
-    ];
+    suites.default.enable = true;
   };
 
   # Let Home Manager install and manage itself.
diff --git a/homes/x86_64-linux/julian@aspi/fonts.nix b/homes/x86_64-linux/julian@aspi/fonts.nix
deleted file mode 100644
index 72eee37..0000000
--- a/homes/x86_64-linux/julian@aspi/fonts.nix
+++ /dev/null
@@ -1,15 +0,0 @@
-{ pkgs, ... }:
-
-with pkgs;
-[
-  (nerdfonts.override { fonts = [ "FiraCode" ]; })
-  font-awesome
-  dejavu_fonts
-  noto-fonts
-  noto-fonts-cjk
-  noto-fonts-emoji
-  liberation_ttf
-  fira-code
-  fira-code-symbols
-  source-code-pro
-]
diff --git a/homes/x86_64-linux/julian@aspi/packages.nix b/homes/x86_64-linux/julian@aspi/packages.nix
deleted file mode 100644
index e113297..0000000
--- a/homes/x86_64-linux/julian@aspi/packages.nix
+++ /dev/null
@@ -1,160 +0,0 @@
-{ pkgs, ... }:
-
-with pkgs;
-[
-
-  shellcheck
-
-  # Further tools
-  lazygit
-
-  # makemkv
-  audacity
-  gnome.cheese
-  zoom-us
-  qutebrowser
-
-  unetbootin
-
-  # For SSS exercises
-  pwndbg
-  gcc
-  hexedit
-
-  xournalpp
-
-  zip
-  p7zip # unzip 7zip archives
-
-  imagemagick
-  ghostscript # needed for imagemagick with pdfs
-
-  firefox
-  thunderbird
-  # nextcloud-client # use service instead
-  qalculate-gtk
-  libqalculate
-
-  # schildichat-desktop # not updated regularly
-  # element-desktop
-  nheko
-  tdesktop # telegram
-
-  tealdeer
-  gcolor3
-  # cups
-  wget
-  nodejs
-  git
-  dotter
-  mc
-  # broot
-  rnr # renaming tool in rust
-  # doublecmd
-  # mucommander
-  tree
-  wezterm
-  kitty
-  bat
-  ripgrep
-  fd
-  fzf
-  topgrade
-
-  arandr
-  htop
-  # texlive.combined.scheme-full
-  # texlab
-  usbutils # lsusb
-  pciutils # lspci
-
-  gnome.gnome-keyring
-  gnome.seahorse
-  polkit_gnome
-  nix-index
-  python3
-  libnotify
-  libclang
-  libreoffice
-  killall
-  findutils
-  xorg.xkill
-  unzip
-  vlc
-  handbrake
-  nmap
-  jq
-  jdk
-  # emacsPackages.clang-format # formatting for java
-  gradle
-  maven
-  android-tools
-  scrcpy
-  # dvdisaster
-  mate.engrampa
-  unixtools.procps
-  ffmpeg
-  links2
-  julia-bin
-  # xdg-desktop-portal-gtk
-  discord
-  lnav # log analyzing tool
-  fdupes # find and delete duplicate files
-  digikam
-  dbeaver-bin
-  sqlite
-
-  nomacs
-  rocketchat-desktop
-
-  (texlive.combine {
-    # for rendering latex in inkscape
-    inherit (texlive)
-      scheme-medium
-      standalone
-      amsmath
-      preview
-      ;
-  })
-  # (pkgs.inkscape-with-extensions.override {
-  #   inkscapeExtensions = [ pkgs.inkscape-extensions.textext ];
-  # })
-  # inkscape-with-extensions
-  # inkscape-extensions.textext
-  inkscape
-
-  geogebra
-
-  languagetool
-  xclip
-  okular # Pdf reader with many features, good for commenting documents
-  evince # Simple pdf reader, good for focusing on document content
-  pdfsam-basic # Split, merge, etc for pdfs
-
-  poppler_utils # Pdf utils including pdfimages
-  matlab # Using nix-matlab overlay defined in flake
-  sage
-
-  gimp
-
-  devbox
-  parted
-  drawio
-  du-dust # Like du tree but better
-  gnupg
-  rpi-imager
-
-  # lf
-  # rustdesk
-  # realvnc-vnc-viewer
-  calibre
-
-  audible-cli
-
-  unstable.path-of-building
-
-  conda
-  watchexec # Run command when any file in current dir changes
-
-  pkg-config # Often needed to build something
-]
diff --git a/homes/x86_64-linux/julian@kardorf/default.nix b/homes/x86_64-linux/julian@kardorf/default.nix
index 0ebb39b..e8857cf 100644
--- a/homes/x86_64-linux/julian@kardorf/default.nix
+++ b/homes/x86_64-linux/julian@kardorf/default.nix
@@ -39,30 +39,7 @@
     nix-helper.enable = true;
 
     desktop.enable = true;
-  };
-
-  home.packages =
-    lib.lists.concatMap (packages-list-file: import packages-list-file { inherit pkgs; })
-      [
-        ./fonts.nix
-        ./packages.nix
-      ];
-  fonts.fontconfig.enable = true; # required to autoload fonts from packages
-
-  gtk = {
-    enable = true;
-    # theme.name = "Adwaita-dark";
-  };
-
-  services.syncthing.tray.enable = true;
-  services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
-
-  programs.chromium = {
-    enable = true;
-    extensions = [
-      # Tampermonkey
-      { id = "dhdgffkkebhmkfjojejmpbldmpobfkfo"; }
-    ];
+    suites.default.enable = true;
   };
 
   # Let Home Manager install and manage itself.
diff --git a/homes/x86_64-linux/julian@kardorf/fonts.nix b/homes/x86_64-linux/julian@kardorf/fonts.nix
deleted file mode 100644
index e95d6d9..0000000
--- a/homes/x86_64-linux/julian@kardorf/fonts.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{ pkgs, ... }:
-
-with pkgs; [
-  (nerdfonts.override { fonts = [ "FiraCode" ]; })
-  font-awesome
-  dejavu_fonts
-  noto-fonts
-  noto-fonts-cjk
-  noto-fonts-emoji
-  liberation_ttf
-  fira-code
-  fira-code-symbols
-  source-code-pro
-]
diff --git a/homes/x86_64-linux/julian@kardorf/packages.nix b/homes/x86_64-linux/julian@kardorf/packages.nix
deleted file mode 100644
index 492a2c2..0000000
--- a/homes/x86_64-linux/julian@kardorf/packages.nix
+++ /dev/null
@@ -1,188 +0,0 @@
-{ pkgs, ... }:
-
-with pkgs;
-[
-
-  shellcheck
-
-  # Rust setup
-  rustc
-  rustfmt
-  cargo
-  clippy
-  rust-analyzer
-
-  # Further tools
-  lazygit
-  languagetool
-
-  # makemkv
-  audacity
-  gnome.cheese
-  zoom-us
-  qutebrowser
-
-  unetbootin
-
-  # For SSS exercises
-  pwndbg
-  gcc
-  hexedit
-
-  # rfid reader tests
-  openct
-  opensc
-  pcsclite
-  pcsctools
-  ccid
-  libnfc
-
-  xournalpp
-
-  xfce.thunar-archive-plugin
-  zip
-  p7zip # unzip 7zip archives
-  imagemagick
-  firefox
-  thunderbird
-  nextcloud-client
-  qalculate-gtk
-  libqalculate
-
-  # schildichat-desktop # not updated regularly
-  element-desktop
-  tdesktop # telegram
-
-  tealdeer
-  gcolor3
-  # cups
-  wget
-  gparted
-  nodejs
-  git
-  dotter
-  mc
-  broot
-  rnr # renaming tool in rust
-  doublecmd
-  mucommander
-  tree
-  wezterm
-  kitty
-  bat
-  ripgrep
-  fd
-  fzf
-  topgrade
-
-  arandr
-  wireguard-tools
-  htop
-  texlive.combined.scheme-full
-  texlab
-  usbutils # lsusb
-  pciutils # lspci
-
-  gnome.gnome-keyring
-  gnome.seahorse
-  polkit_gnome
-  nix-index
-  python3
-  libnotify
-  libclang
-  libreoffice
-  killall
-  findutils
-  xorg.xkill
-  unzip
-  vlc
-  handbrake
-  nmap
-  jq
-  jdk
-  # emacsPackages.clang-format # formatting for java
-  gradle
-  maven
-  android-tools
-  scrcpy
-  # dvdisaster
-  mate.engrampa
-  # toybox
-  unixtools.procps
-  qpdfview
-  ffmpeg
-  links2
-  julia-bin
-  xdg-desktop-portal-gtk
-  discord
-  lnav # log analyzing tool
-  fdupes # find and delete duplicate files
-  digikam
-  dbeaver-bin
-  pavucontrol
-  sqlite
-
-  nomacs
-  rocketchat-desktop
-  zotero
-  inkscape
-  pulseaudio
-  gcolor3
-  geogebra
-
-  languagetool
-  xclip
-  okular # Pdf reader with many features, good for commenting documents
-  evince # Simple pdf reader, good for focusing on document content
-  pdfsam-basic # Split, merge, etc for pdfs
-
-  poppler_utils # Pdf utils including pdfimages
-  matlab # Using nix-matlab overlay defined in flake
-  # sage
-
-  gimp
-
-  devbox
-  parted
-  drawio
-  du-dust # Like du tree but better
-  gnupg
-  rpi-imager
-
-  wine
-  winetricks
-
-  # lf
-  # rustdesk
-  # realvnc-vnc-viewer
-  calibre
-
-  audible-cli
-
-  # cudaPackages.cudatoolkit
-  # openmvg
-  # colmapWithCuda
-  path-of-building
-
-  nheko
-
-  pkg-config # Often needed to build something
-
-  ## My scripts
-  frajul.edit-config
-  frajul.xwacomcalibrate
-
-  (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
-  '')
-  (pkgs.writeShellScriptBin "expenses-tracker" ''
-    java -jar /home/julian/dev/expensestracker/app/build/libs/app.jar
-  '')
-]
diff --git a/modules/home/fonts/default.nix b/modules/home/fonts/default.nix
new file mode 100644
index 0000000..302991a
--- /dev/null
+++ b/modules/home/fonts/default.nix
@@ -0,0 +1,48 @@
+{
+  # 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.
+  system, # The system architecture for this host (eg. `x86_64-linux`).
+  target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
+  format, # A normalized name for the system target (eg. `iso`).
+  virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
+  systems, # An attribute map of your defined hosts.
+
+  # All other arguments come from the module system.
+  config,
+  host,
+  ...
+}:
+
+with lib;
+
+let
+  cfg = config.modules.fonts;
+in
+{
+  options.modules.fonts = {
+    enable = mkOption { default = false; };
+  };
+
+  config = mkIf cfg.enable {
+    fonts.fontconfig.enable = true; # required to autoload fonts from packages
+    home.packages = with pkgs; [
+      (nerdfonts.override { fonts = [ "FiraCode" ]; })
+      font-awesome
+      dejavu_fonts
+      noto-fonts
+      noto-fonts-cjk
+      noto-fonts-emoji
+      liberation_ttf
+      fira-code
+      fira-code-symbols
+      source-code-pro
+    ];
+  };
+}
diff --git a/modules/home/suites/default/default.nix b/modules/home/suites/default/default.nix
new file mode 100644
index 0000000..f2e4011
--- /dev/null
+++ b/modules/home/suites/default/default.nix
@@ -0,0 +1,216 @@
+{
+  # 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.
+  system, # The system architecture for this host (eg. `x86_64-linux`).
+  target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
+  format, # A normalized name for the system target (eg. `iso`).
+  virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
+  systems, # An attribute map of your defined hosts.
+
+  # All other arguments come from the module system.
+  config,
+  host,
+  ...
+}:
+
+with lib;
+
+let
+  cfg = config.modules.suites.default;
+in
+{
+  options.modules.suites.default = {
+    enable = mkOption { default = false; };
+  };
+
+  config = mkIf cfg.enable {
+    # TODO: put this and relevant packages into desktop suite
+    services.blueman-applet.enable = true;
+    services.nextcloud-client.enable = true;
+    services.nextcloud-client.startInBackground = true;
+    services.network-manager-applet.enable = true;
+
+    services.syncthing.tray.enable = true;
+    services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
+
+    programs.chromium = {
+      enable = true;
+      extensions = [
+        # Tampermonkey
+        { id = "dhdgffkkebhmkfjojejmpbldmpobfkfo"; }
+      ];
+    };
+
+    home.packages = with pkgs; [
+      android-tools # adb
+      arandr
+      audacity
+      audible-cli
+      bat
+      calibre # ebook manager and viewer
+      cargo
+      clippy
+      cntr # nix debugger
+      conda
+      dbeaver-bin
+      devbox # run docker-commands
+      digikam
+      discord
+
+      drawio
+      du-dust # Like du tree but better
+      # dvdisaster
+      # element-desktop
+      # rocketchat-desktop
+      thunderbird
+      tdesktop # telegram
+      # schildichat-desktop # not updated regularly
+      nheko
+      evince # Simple pdf reader, good for focusing on document content
+
+      fd # better find
+      fdupes # find and delete duplicate files
+      ffmpeg
+      findutils # locate
+      firefox
+
+      fzf # Fuzzy finder
+      gcc
+      gcolor3 # Color picker
+      geogebra
+      ghostscript # needed for imagemagick with pdfs
+      imagemagick
+      gimp
+      git
+      gnome.cheese
+      gnupg
+      gradle
+      handbrake
+      hexedit
+      htop
+
+      (texlive.combine {
+        # for rendering latex in inkscape
+        inherit (texlive)
+          scheme-medium
+          standalone
+          amsmath
+          preview
+          ;
+      })
+      # (pkgs.inkscape-with-extensions.override {
+      #   inkscapeExtensions = [ pkgs.inkscape-extensions.textext ];
+      # })
+      # inkscape-with-extensions
+      # inkscape-extensions.textext
+      inkscape
+
+      jdk
+      jq # Command line JSON processor
+      julia-bin
+      killall
+      kitty # Terminal
+      languagetool # Grammar checker
+      lazygit # Git client
+      libclang
+      libnotify
+      libreoffice
+      links2 # Tui web-browser
+      lnav # log analyzing tool
+      mate.engrampa
+
+      matlab # Using nix-matlab overlay defined in flake
+      maven
+      mc # Tui file browser
+      # nix-index
+      nmap
+      nodejs
+      nomacs # Image viewer
+      okular # Pdf reader with many features, good for commenting documents
+      p7zip # unzip 7zip archives
+      parted
+      pavucontrol
+      pciutils # lspci
+      pdfsam-basic # Split, merge, etc for pdfs
+      pkg-config # Often needed to build something
+
+      poppler_utils # Pdf utils including pdfimages
+      pwndbg # improved gdb (debugger)
+      python3
+
+      libqalculate # Nice tui calculator (qalc)
+      qalculate-gtk # Nice gui calculator
+
+      qpdfview
+      # qutebrowser
+      # realvnc-vnc-viewer
+      ripgrep # better grep
+      rnr # renaming tool
+      rpi-imager # make isos
+
+      # rustdesk
+
+      rust-analyzer
+      rustc
+      rustfmt
+
+      sage # Maths notebooks
+      scrcpy # Mirror android screen to pc
+      # shellcheck # Check bash scripts for common errors
+      sqlite
+      tealdeer # tldr
+      topgrade # System update
+      tor-browser
+      tree
+      unetbootin # TODO
+      unixtools.procps # TODO
+      unstable.path-of-building # Path of Building
+      unzip
+      usbutils # lsusb
+      vlc
+      watchexec # Run command when any file in current dir changes
+      wezterm # Terminal
+      wget
+
+      wine
+      winetricks
+
+      wireguard-tools # wg-quick
+      xclip # x11 clipboard access from terminal
+      xfce.mousepad # simple text editor
+      xorg.xkill
+      xournalpp # Edit pdf files
+      zip
+      zoom-us # Video conferencing
+      zotero # Manage papers and other sources
+
+      ## My scripts
+      frajul.deploy-to-pianopi
+      frajul.edit-config
+      frajul.lntocp
+      frajul.open-messaging
+      frajul.xwacomcalibrate
+
+      (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
+      '')
+      (pkgs.writeShellScriptBin "expenses-tracker" ''
+        java -jar /home/julian/dev/expensestracker/app/build/libs/app.jar
+      '')
+    ];
+  };
+}