diff --git a/home-profiles/desktop/.local/share/icons/default/index.theme b/home-profiles/desktop/.local/share/icons/default/index.theme
new file mode 100644
index 0000000000000000000000000000000000000000..7ec79d133cc8c0a21ec808658d94dd8aafbde2aa
--- /dev/null
+++ b/home-profiles/desktop/.local/share/icons/default/index.theme
@@ -0,0 +1,2 @@
+[icon theme]
+Inherits=Simple-and-Soft
\ No newline at end of file
diff --git a/nixos/layers/desktop.nix b/nixos/layers/desktop.nix
index 2178b82aafeed3fd0a583951229fa2b1be740cb2..8b38871eff281334bf8c548e5b55c84fbdf35dbe 100644
--- a/nixos/layers/desktop.nix
+++ b/nixos/layers/desktop.nix
@@ -34,6 +34,9 @@ in
     vscode
     networkmanagerapplet
 
+    # cursor theme
+    simpleandsoft
+
     # soft desktop dependencies
     swaylockWithIdle
     zsh
diff --git a/nixos/pkgs/default.nix b/nixos/pkgs/default.nix
index e56f5b6b53c3df9b2299574d1279194564a12a93..b91589f4352f406b0c1b7d6076c931e11a349c8f 100644
--- a/nixos/pkgs/default.nix
+++ b/nixos/pkgs/default.nix
@@ -11,6 +11,7 @@ let
     haskell-ide-engine = (import ./haskell-ide-engine { inherit pkgs; }).haskell-ide-engine;
     neovim = (import ./neovim { inherit pkgs; }).neovim;
     nginx-sso = callPackage ./nginx-sso {};
+    simpleandsoft = (import ./simpleandsoft { inherit pkgs; }).simpleandsoft;
   };
 
 in newpkgs
diff --git a/nixos/pkgs/simpleandsoft/28427-simpleandsoft-0.2.tar.gz b/nixos/pkgs/simpleandsoft/28427-simpleandsoft-0.2.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..9efb995c47d32cf6a6457339fb00175bbbacf1b8
Binary files /dev/null and b/nixos/pkgs/simpleandsoft/28427-simpleandsoft-0.2.tar.gz differ
diff --git a/nixos/pkgs/simpleandsoft/default.nix b/nixos/pkgs/simpleandsoft/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..6f46e58986034bca2936d5467e1eb106296b84f4
--- /dev/null
+++ b/nixos/pkgs/simpleandsoft/default.nix
@@ -0,0 +1,4 @@
+{ pkgs ? import <nixpkgs> {} }:
+{
+  simpleandsoft = pkgs.callPackage ./simpleandsoft.nix {};
+}
\ No newline at end of file
diff --git a/nixos/pkgs/simpleandsoft/simpleandsoft.nix b/nixos/pkgs/simpleandsoft/simpleandsoft.nix
new file mode 100644
index 0000000000000000000000000000000000000000..654ebb147621bf8725cfa95341b9f17234fe5637
--- /dev/null
+++ b/nixos/pkgs/simpleandsoft/simpleandsoft.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, writeTextFile, tree }:
+stdenv.mkDerivation rec {
+  # Cursor theme "Simple and Soft" from https://store.kde.org/p/999946/
+  pname = "simpleandsoft";
+  version = "0.2";
+
+  src = ./28427-simpleandsoft-0.2.tar.gz;
+
+  indexTheme = ''
+    [Icon Theme]
+    Name=Simple-and-Soft
+    Comment=A simple and soft X cursor theme
+    Example=left_ptr_watch
+  '';
+  passAsFile = [ "indexTheme" ];
+
+  buildInputs = [ tree ];
+
+  installPhase = ''
+    mkdir -p "$out/share/icons/Simple-and-Soft"
+    tree
+    cp -R "cursors" "$out/share/icons/Simple-and-Soft/cursors"
+    install -Dm644 "$indexThemePath" "$out/share/icons/Simple-and-Soft/index.theme"
+  '';
+}
\ No newline at end of file