{
  pkgs,
  config,
  ...
}: {
  # You can import other home-manager modules here
  imports = [
    # If you want to use modules your own flake exports (from modules/home-manager):
    # outputs.homeManagerModules.example

    # Or modules exported from other flakes (such as nix-colors):
    # inputs.nix-colors.homeManagerModules.default

    # You can also split up your configuration and import pieces of it here:
    # ./nvim.nix
    ./package-configs/plasma-desktop.nix
    ./package-configs/firefox.nix
    ./package-configs/konsole
    ./package-configs/foot
    ./package-configs/freetube
    ./package-configs/vesktop
  ];
  nixpkgs = {
    # You can add overlays here
    overlays = [
      # You can also add overlays exported from other flakes:
      # neovim-nightly-overlay.overlays.default

      # Or define it inline, for example:
      # (final: prev: {
      #   hi = final.hello.overrideAttrs (oldAttrs: {
      #     patches = [ ./change-hello-to-hi.patch ];
      #   });
      # })
      # (final: prev: {
      #   catppuccin-vsc = final.catppuccin-vsc.overrideAttrs (oldAttrs: {
      #     accent = "mauve";
      #     boldKeywords = true;
      #     italicComments = true;
      #     italicKeywords = true;
      #     extraBordersEnabled = false;
      #     workbenchMode = "default";
      #     bracketMode = "rainbow";
      #     colorOverrides = {};
      #     customUIColors = {};
      #   });
      # })
      # (final: prev: {
      #   catppuccin-vsc = final.catppuccin-vsc.overrideAttrs (oldAttrs: {
      #     accent = "mauve";
      #     boldKeywords = true;
      #     italicComments = true;
      #     italicKeywords = true;
      #     extraBordersEnabled = false;
      #     workbenchMode = "default";
      #     bracketMode = "rainbow";
      #     colorOverrides = {};
      #     customUIColors = {};
      #   });
      # })
    ];
    config = {
      permittedInsecurePackages = ["cinny-4.2.3" "cinny-unwrapped-4.2.3" "cinny-4.2.2" "cinny-unwrapped-4.2.2"];
      # Configure your nixpkgs instance

      # Disable if you don't want unfree packages
      allowUnfree = true;
    };
  };
  systemd.user = {
    # services."nextcloud-autosync@" = {
    #   Unit = {
    #     Description = "Auto sync Nextcloud";
    #     After = "network-online.target";
    #     PartOf = ["nextcloud-autosyncs.target"];
    #   };
    #   Service = {
    #     Type = "simple";
    #     ExecStart = "${pkgs.nextcloud-client}/bin/nextcloudcmd -h -n --path /%i /home/lillian/%i https://nextcloud.gladtherescake.eu";
    #     TimeoutStopSec = "180";
    #     KillMode = "process";
    #     KillSignal = "SIGINT";
    #   };
    #   Install.WantedBy = ["multi-user.target"];
    # };
    # targets.nextcloud-autosyncs = {
    #   Unit = {
    #     Description = "workers";
    #     Requires = ["nextcloud-autosync@Music" "nextcloud-autosync@Pictures" "nextcloud-autosync@Scripts" "nextcloud-autosync@Videos" "nextcloud-autosync@Documents"];
    #     PartOf = "nextcloud-autosyncs.target";
    #   };
    #   Install.WantedBy = ["multi-user.target"];
    # };
    # timers.nextcloud-autosyncs = {
    #   Unit.Description = "Automatic sync files with Nextcloud when booted up after 5 minutes then rerun every 60 minutes";
    #   Timer.OnBootSec = "5min";
    #   Timer.OnUnitActiveSec = "60min";
    #   Install.WantedBy = ["multi-user.target" "timers.target"];
    # };

    # Nicely reload system units when changing configs
    startServices = "sd-switch";
  };

  home = {
    username = "lillian";
    homeDirectory = "/home/lillian";

    file = {
      Music = {
        source = config.lib.file.mkOutOfStoreSymlink "/home/lillian/Nextcloud/Music";
        target = "Music";
      };
      Pictures = {
        source = config.lib.file.mkOutOfStoreSymlink "/home/lillian/Nextcloud/Pictures";
        target = "Pictures";
      };
      Screenshots = {
        source = config.lib.file.mkOutOfStoreSymlink "/home/lillian/Nextcloud/Pictures/Screenshots";
        target = "Screenshots";
      };
      Scripts = {
        source = config.lib.file.mkOutOfStoreSymlink "/home/lillian/Nextcloud/Scripts";
        target = "Scripts";
      };
      Videos = {
        source = config.lib.file.mkOutOfStoreSymlink "/home/lillian/Nextcloud/Videos";
        target = "Videos";
      };
      Documents = {
        source = config.lib.file.mkOutOfStoreSymlink "/home/lillian/Nextcloud/Documents";
        target = "Documents";
      };
      floorp = {
        source = config.lib.file.mkOutOfStoreSymlink "/home/lillian/.mozilla/firefox";
        target = ".floorp";
      };
    };

    # Add stuff for your user as you see fit:
    # programs.neovim.enable = true;
    # home.packages = with pkgs; [ steam ];

    packages = with pkgs; [
      # Coding:
      direnv
      git
      git-credential-manager
      git-credential-manager
      ruff

      # Chat applications:
      signal-desktop
      vesktop
      # cinny-desktop

      # Gaming:
      prismlauncher
      steam
      gamescope

      # Multimedia:
      vlc
      fcast-receiver
      fcast-client

      # Office applications:
      onlyoffice-bin
      gimp
      thunderbird

      # System tools:
      rage
      flameshot
      fzf
      nextcloud-client
      nitrokey-app
      protonvpn-gui
      virtualbox
      #watchmate
      qbittorrent

      # Theming:
      catppuccin-cursors
      (catppuccin-kde.override {
        flavour = ["macchiato"];
        accents = ["mauve"];
      })
      catppuccin-sddm-corners

      # Theming:
      catppuccin-cursors
      (catppuccin-kde.override {
        flavour = ["macchiato"];
        accents = ["mauve"];
      })
      catppuccin-sddm-corners

      # Web browsing:
      firefoxpwa
      firefoxpwa
      ungoogled-chromium
    ];
  };
  programs = {
    # vscode = {
    #   enable = true;
    #   package = pkgs.vscodium;
    #   extensions = with pkgs.vscode-extensions; [
    #     catppuccin.catppuccin-vsc
    #     catppuccin.catppuccin-vsc-icons
    #     charliermarsh.ruff
    #     eamodio.gitlens
    #     github.vscode-pull-request-github
    #     jnoortheen.nix-ide
    #     kamadorueda.alejandra
    #     mkhl.direnv
    #     ms-toolsai.jupyter
    #     ms-pyright.pyright
    #     oderwat.indent-rainbow
    #     rust-lang.rust-analyzer
    #     yzhang.markdown-all-in-one
    #   ];
    # };

    obs-studio.enable = true;
    obs-studio.plugins = with pkgs.obs-studio-plugins; [
      wlrobs
      obs-backgroundremoval
      obs-pipewire-audio-capture
    ];

    # Enable home-manager and git
    home-manager.enable = true;
    git = {
      enable = true;
      userEmail = "git@lillianviolet.dev";
      userName = "Lillian-Violet";
      extraConfig = {
        init = {
          defaultBranch = "main";
        };
      };
      ignores = [
        "*.direnv"
        "*.vscode"
        ".envrc"
        "venv"
        "venv"
      ];
      signing.format = "ssh";
    };

    gpg.enable = true;
    gpg.settings = {
      default-key = "0d43 5407 034c 2ad9 2d42 799d 280e 061d ff60 0f0d";
      default-recipient-self = true;
      auto-key-locate = "local,wkd,keyserver";
      keyserver = "hkps://keys.openpgp.org";
      auto-key-retrieve = true;
      auto-key-import = true;
      keyserver-options = "honor-keyserver-url";
      no-autostart = true;
    };
  };
  services = {
    kdeconnect.package = pkgs.kdePackages.kdeconnect-kde;
    kdeconnect.enable = true;
  };
}