diff --git a/flake.lock b/flake.lock
index ec459ab..945a4ef 100644
--- a/flake.lock
+++ b/flake.lock
@@ -65,6 +65,47 @@
         "type": "github"
       }
     },
+    "crane": {
+      "inputs": {
+        "nixpkgs": [
+          "sheet-organizer",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1717469187,
+        "narHash": "sha256-UVvFGiWFGPfVXG7Xr6HPKChx9hhtzkGaGAS/Ph1Khjg=",
+        "owner": "ipetkov",
+        "repo": "crane",
+        "rev": "7e86136dc729cdf237aa59a5a02687bc0d1144b6",
+        "type": "github"
+      },
+      "original": {
+        "owner": "ipetkov",
+        "repo": "crane",
+        "type": "github"
+      }
+    },
+    "deploy-rs": {
+      "inputs": {
+        "flake-compat": "flake-compat",
+        "nixpkgs": "nixpkgs",
+        "utils": "utils"
+      },
+      "locked": {
+        "lastModified": 1727447169,
+        "narHash": "sha256-3KyjMPUKHkiWhwR91J1YchF6zb6gvckCAY1jOE+ne0U=",
+        "owner": "serokell",
+        "repo": "deploy-rs",
+        "rev": "aa07eb05537d4cd025e2310397a6adcedfe72c76",
+        "type": "github"
+      },
+      "original": {
+        "owner": "serokell",
+        "repo": "deploy-rs",
+        "type": "github"
+      }
+    },
     "devshell": {
       "inputs": {
         "nixpkgs": [
@@ -107,6 +148,26 @@
         "type": "github"
       }
     },
+    "disko": {
+      "inputs": {
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1732540163,
+        "narHash": "sha256-5EYzmoTpem2IB9JWzd41sL98pz3lyyCSTiCjv08i4Uk=",
+        "owner": "nix-community",
+        "repo": "disko",
+        "rev": "2ed5e30fc7e34adf455db8b02b9151d3922a54ea",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "repo": "disko",
+        "type": "github"
+      }
+    },
     "flake-compat": {
       "flake": false,
       "locked": {
@@ -156,20 +217,6 @@
       }
     },
     "flake-compat_4": {
-      "locked": {
-        "lastModified": 1696426674,
-        "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
-        "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
-        "revCount": 57,
-        "type": "tarball",
-        "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz"
-      },
-      "original": {
-        "type": "tarball",
-        "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
-      }
-    },
-    "flake-compat_5": {
       "flake": false,
       "locked": {
         "lastModified": 1696426674,
@@ -185,7 +232,37 @@
         "type": "github"
       }
     },
+    "flake-compat_5": {
+      "locked": {
+        "lastModified": 1696426674,
+        "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+        "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+        "revCount": 57,
+        "type": "tarball",
+        "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz"
+      },
+      "original": {
+        "type": "tarball",
+        "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
+      }
+    },
     "flake-compat_6": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1696426674,
+        "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+        "owner": "edolstra",
+        "repo": "flake-compat",
+        "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+        "type": "github"
+      },
+      "original": {
+        "owner": "edolstra",
+        "repo": "flake-compat",
+        "type": "github"
+      }
+    },
+    "flake-compat_7": {
       "flake": false,
       "locked": {
         "lastModified": 1650374568,
@@ -224,7 +301,7 @@
     },
     "flake-utils": {
       "inputs": {
-        "systems": "systems_2"
+        "systems": "systems_4"
       },
       "locked": {
         "lastModified": 1726560853,
@@ -242,7 +319,7 @@
     },
     "flake-utils-plus": {
       "inputs": {
-        "flake-utils": "flake-utils_2"
+        "flake-utils": "flake-utils_3"
       },
       "locked": {
         "lastModified": 1715533576,
@@ -261,7 +338,25 @@
     },
     "flake-utils_2": {
       "inputs": {
-        "systems": "systems_3"
+        "systems": "systems_5"
+      },
+      "locked": {
+        "lastModified": 1710146030,
+        "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
+    "flake-utils_3": {
+      "inputs": {
+        "systems": "systems_6"
       },
       "locked": {
         "lastModified": 1694529238,
@@ -279,7 +374,7 @@
     },
     "git-hooks": {
       "inputs": {
-        "flake-compat": "flake-compat_5",
+        "flake-compat": "flake-compat_6",
         "gitignore": "gitignore_3",
         "nixpkgs": [
           "nixvim",
@@ -450,17 +545,17 @@
         "hyprlang": "hyprlang",
         "hyprutils": "hyprutils",
         "hyprwayland-scanner": "hyprwayland-scanner",
-        "nixpkgs": "nixpkgs",
+        "nixpkgs": "nixpkgs_2",
         "pre-commit-hooks": "pre-commit-hooks",
-        "systems": "systems",
+        "systems": "systems_2",
         "xdph": "xdph"
       },
       "locked": {
-        "lastModified": 1732291262,
-        "narHash": "sha256-EDTvzp9ExAljyfESZZN8UQM08bpYvI2hFTaXivp3frg=",
+        "lastModified": 1732545731,
+        "narHash": "sha256-nRit2lb7kha7bcNB6pwhySbpI7Tjc1PLnkJvayBiJr8=",
         "ref": "refs/heads/main",
-        "rev": "745a82ce8ab19d958e344f5925bb1dc8ea7d6a53",
-        "revCount": 5488,
+        "rev": "268778823676ef2bbda42050d78946e1fc27fc31",
+        "revCount": 5497,
         "submodules": true,
         "type": "git",
         "url": "https://github.com/hyprwm/Hyprland"
@@ -605,6 +700,47 @@
         "type": "github"
       }
     },
+    "music-reader": {
+      "inputs": {
+        "naersk": "naersk",
+        "nixpkgs": [
+          "nixpkgs"
+        ],
+        "utils": "utils_2"
+      },
+      "locked": {
+        "lastModified": 1732479786,
+        "narHash": "sha256-N2NxDB5ggCUzeGZKA5CL5IKu/tuMDTDusacMy1ua+SQ=",
+        "ref": "refs/heads/master",
+        "rev": "c8795588d83f1238637e60a0e1a484402502df53",
+        "revCount": 50,
+        "type": "git",
+        "url": "https://gitlab.julian-mutter.de/julian/music-reader"
+      },
+      "original": {
+        "type": "git",
+        "url": "https://gitlab.julian-mutter.de/julian/music-reader"
+      }
+    },
+    "naersk": {
+      "inputs": {
+        "nixpkgs": "nixpkgs_3"
+      },
+      "locked": {
+        "lastModified": 1698420672,
+        "narHash": "sha256-/TdeHMPRjjdJub7p7+w55vyABrsJlt5QkznPYy55vKA=",
+        "owner": "nix-community",
+        "repo": "naersk",
+        "rev": "aeb58d5e8faead8980a807c840232697982d47b9",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "ref": "master",
+        "repo": "naersk",
+        "type": "github"
+      }
+    },
     "nix-colors": {
       "inputs": {
         "base16-schemes": "base16-schemes",
@@ -667,17 +803,17 @@
     },
     "nix-matlab": {
       "inputs": {
-        "flake-compat": "flake-compat_2",
+        "flake-compat": "flake-compat_3",
         "nixpkgs": [
           "nixpkgs"
         ]
       },
       "locked": {
-        "lastModified": 1731942113,
-        "narHash": "sha256-BQWjXeukGYAMxsxUV9QEDz93GWEQ+nzfoe6FXvk2ygU=",
+        "lastModified": 1732460506,
+        "narHash": "sha256-BE5aJOUwTINKg80xQhVeTwELCXpvQ3NCFynQ9Uzbcd0=",
         "owner": "doronbehar",
         "repo": "nix-matlab",
-        "rev": "eec33c6addd18912889d8a19bb49ce3428935abb",
+        "rev": "0a764e005f1311dc4a0e9cfa3193afcbfeda7a7a",
         "type": "gitlab"
       },
       "original": {
@@ -709,18 +845,34 @@
         "type": "github"
       }
     },
-    "nixpkgs": {
+    "nixos-hardware": {
       "locked": {
-        "lastModified": 1731676054,
-        "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=",
+        "lastModified": 1732483221,
+        "narHash": "sha256-kF6rDeCshoCgmQz+7uiuPdREVFuzhIorGOoPXMalL2U=",
         "owner": "NixOS",
-        "repo": "nixpkgs",
-        "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add",
+        "repo": "nixos-hardware",
+        "rev": "45348ad6fb8ac0e8415f6e5e96efe47dd7f39405",
         "type": "github"
       },
       "original": {
         "owner": "NixOS",
-        "ref": "nixos-unstable",
+        "ref": "master",
+        "repo": "nixos-hardware",
+        "type": "github"
+      }
+    },
+    "nixpkgs": {
+      "locked": {
+        "lastModified": 1702272962,
+        "narHash": "sha256-D+zHwkwPc6oYQ4G3A1HuadopqRwUY/JkMwHz1YF7j4Q=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "e97b3e4186bcadf0ef1b6be22b8558eab1cdeb5d",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixpkgs-unstable",
         "repo": "nixpkgs",
         "type": "github"
       }
@@ -789,6 +941,36 @@
       }
     },
     "nixpkgs_2": {
+      "locked": {
+        "lastModified": 1731676054,
+        "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "nixpkgs_3": {
+      "locked": {
+        "lastModified": 1704842529,
+        "narHash": "sha256-OTeQA+F8d/Evad33JMfuXC89VMetQbsU4qcaePchGr4=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "eabe8d3eface69f5bb16c18f8662a702f50c20d5",
+        "type": "github"
+      },
+      "original": {
+        "id": "nixpkgs",
+        "type": "indirect"
+      }
+    },
+    "nixpkgs_4": {
       "locked": {
         "lastModified": 1731797254,
         "narHash": "sha256-df3dJApLPhd11AlueuoN0Q4fHo/hagP75LlM5K1sz9g=",
@@ -807,7 +989,7 @@
     "nixvim": {
       "inputs": {
         "devshell": "devshell_2",
-        "flake-compat": "flake-compat_4",
+        "flake-compat": "flake-compat_5",
         "flake-parts": "flake-parts",
         "git-hooks": "git-hooks",
         "home-manager": "home-manager_2",
@@ -834,7 +1016,7 @@
     },
     "pre-commit-hooks": {
       "inputs": {
-        "flake-compat": "flake-compat",
+        "flake-compat": "flake-compat_2",
         "gitignore": "gitignore",
         "nixpkgs": [
           "hyprland",
@@ -858,7 +1040,7 @@
     },
     "pre-commit-hooks_2": {
       "inputs": {
-        "flake-compat": "flake-compat_3",
+        "flake-compat": "flake-compat_4",
         "gitignore": "gitignore_2",
         "nixpkgs": [
           "nix-topology",
@@ -886,36 +1068,63 @@
     "root": {
       "inputs": {
         "alacritty-theme": "alacritty-theme",
+        "deploy-rs": "deploy-rs",
+        "disko": "disko",
         "home-manager": "home-manager",
         "hyprland": "hyprland",
         "hyprland-plugins": "hyprland-plugins",
+        "music-reader": "music-reader",
         "nix-colors": "nix-colors",
         "nix-ld": "nix-ld",
         "nix-matlab": "nix-matlab",
         "nix-topology": "nix-topology",
-        "nixpkgs": "nixpkgs_2",
+        "nixos-hardware": "nixos-hardware",
+        "nixpkgs": "nixpkgs_4",
         "nixpkgs-stable": "nixpkgs-stable_2",
         "nixpkgs-unstable": "nixpkgs-unstable",
         "nixvim": "nixvim",
+        "sheet-organizer": "sheet-organizer",
         "snowfall-lib": "snowfall-lib",
         "sops-nix": "sops-nix",
         "yazi-flavors": "yazi-flavors"
       }
     },
+    "sheet-organizer": {
+      "inputs": {
+        "crane": "crane",
+        "flake-utils": "flake-utils_2",
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1732563271,
+        "narHash": "sha256-YvNdoK/FvH34DZQqR4V2RoFN4q7q1QQQgV8Rvv3HqfY=",
+        "ref": "refs/heads/master",
+        "rev": "26133a692f2b218e54b98f1f21335ba43f2ee086",
+        "revCount": 68,
+        "type": "git",
+        "url": "https://gitlab.julian-mutter.de/julian/sheet-organizer"
+      },
+      "original": {
+        "type": "git",
+        "url": "https://gitlab.julian-mutter.de/julian/sheet-organizer"
+      }
+    },
     "snowfall-lib": {
       "inputs": {
-        "flake-compat": "flake-compat_6",
+        "flake-compat": "flake-compat_7",
         "flake-utils-plus": "flake-utils-plus",
         "nixpkgs": [
           "nixpkgs"
         ]
       },
       "locked": {
-        "lastModified": 1730136121,
-        "narHash": "sha256-tfVayj13Zw+zzOKrmJhnvBod7Hdb9ixBR6/4GUlyMA0=",
+        "lastModified": 1732544274,
+        "narHash": "sha256-qvzLIxuqukl0nxpXHEh5+iw1BLeLxYOwRC0+7cFUbPo=",
         "owner": "snowfallorg",
         "repo": "lib",
-        "rev": "dd348182c1a010993e68004eada86cf0341fe2c4",
+        "rev": "cfeacd055545ab5de0ecfd41e09324dcd8fb2bbb",
         "type": "github"
       },
       "original": {
@@ -945,6 +1154,21 @@
       }
     },
     "systems": {
+      "locked": {
+        "lastModified": 1681028828,
+        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+        "owner": "nix-systems",
+        "repo": "default",
+        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-systems",
+        "repo": "default",
+        "type": "github"
+      }
+    },
+    "systems_2": {
       "locked": {
         "lastModified": 1689347949,
         "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
@@ -959,7 +1183,7 @@
         "type": "github"
       }
     },
-    "systems_2": {
+    "systems_3": {
       "locked": {
         "lastModified": 1681028828,
         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@@ -974,7 +1198,37 @@
         "type": "github"
       }
     },
-    "systems_3": {
+    "systems_4": {
+      "locked": {
+        "lastModified": 1681028828,
+        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+        "owner": "nix-systems",
+        "repo": "default",
+        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-systems",
+        "repo": "default",
+        "type": "github"
+      }
+    },
+    "systems_5": {
+      "locked": {
+        "lastModified": 1681028828,
+        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+        "owner": "nix-systems",
+        "repo": "default",
+        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-systems",
+        "repo": "default",
+        "type": "github"
+      }
+    },
+    "systems_6": {
       "locked": {
         "lastModified": 1681028828,
         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@@ -1010,6 +1264,42 @@
         "type": "github"
       }
     },
+    "utils": {
+      "inputs": {
+        "systems": "systems"
+      },
+      "locked": {
+        "lastModified": 1701680307,
+        "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
+    "utils_2": {
+      "inputs": {
+        "systems": "systems_3"
+      },
+      "locked": {
+        "lastModified": 1701680307,
+        "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
     "xdph": {
       "inputs": {
         "hyprland-protocols": [
@@ -1054,11 +1344,11 @@
     "yazi-flavors": {
       "flake": false,
       "locked": {
-        "lastModified": 1731512520,
-        "narHash": "sha256-O6lYGY1DdMUTG9rrB+1R2i4KFgDEWsksp5MYbDmAvJo=",
+        "lastModified": 1732522261,
+        "narHash": "sha256-zqbwE8SvY9nQyGt0NDxK9OlFMAJ5EHtTeEDZtpb1FuA=",
         "owner": "yazi-rs",
         "repo": "flavors",
-        "rev": "4a3082f4e96914f2fd9c5e42714c27173526fbb3",
+        "rev": "c04be98a3fde8787da4a7b07dec65451b40ee600",
         "type": "github"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index 7132fdf..8cff773 100644
--- a/flake.nix
+++ b/flake.nix
@@ -7,6 +7,10 @@
 
     nixpkgs = nixpkgs-stable;
 
+    deploy-rs.url = "github:serokell/deploy-rs";
+
+    nixos-hardware.url = "github:NixOS/nixos-hardware/master";
+
     home-manager = {
       url = "github:nix-community/home-manager/release-24.05";
       inputs.nixpkgs.follows = "nixpkgs";
@@ -17,6 +21,11 @@
       inputs.nixpkgs.follows = "nixpkgs";
     };
 
+    disko = {
+      url = "github:nix-community/disko";
+      inputs.nixpkgs.follows = "nixpkgs";
+    };
+
     alacritty-theme = {
       url = "github:alacritty/alacritty-theme";
       flake = false;
@@ -54,6 +63,13 @@
 
     nix-ld.url = "github:Mic92/nix-ld";
     nix-ld.inputs.nixpkgs.follows = "nixpkgs";
+
+    ## My projects
+    sheet-organizer.url = "git+https://gitlab.julian-mutter.de/julian/sheet-organizer";
+    sheet-organizer.inputs.nixpkgs.follows = "nixpkgs";
+
+    music-reader.url = "git+https://gitlab.julian-mutter.de/julian/music-reader";
+    music-reader.inputs.nixpkgs.follows = "nixpkgs";
   };
 
   outputs =
@@ -94,20 +110,33 @@
 
       systems.modules.nixos = with inputs; [
         nix-topology.nixosModules.default
+        sops-nix.nixosModules.sops
         disko.nixosModules.disko
       ];
+      systems.hosts.pianonix.modules = with inputs; [ nixos-hardware.nixosModules.raspberry-pi-4 ];
 
-      topology =
-        with inputs;
-        let
-          host = self.nixosConfigurations.${builtins.head (builtins.attrNames self.nixosConfigurations)};
-        in
-        import nix-topology {
-          inherit (host) pkgs; # Only this package set must include nix-topology.overlays.default
-          modules = [
-            (import ./topology { inherit (host) config; })
-            { inherit (self) nixosConfigurations; }
-          ];
+      # topology =
+      #   with inputs;
+      #   let
+      #     host = self.nixosConfigurations.${builtins.head (builtins.attrNames self.nixosConfigurations)};
+      #   in
+      #   import nix-topology {
+      #     inherit (host) pkgs; # Only this package set must include nix-topology.overlays.default
+      #     modules = [
+      #       (import ./topology { inherit (host) config; })
+      #       { inherit (self) nixosConfigurations; }
+      #     ];
+      #   };
+
+      # deploy-rs node configuration
+      deploy.nodes.pianonix = {
+        hostname = "pianonix.local";
+        profiles.system = {
+          sshUser = "root";
+          user = "root";
+          path = inputs.deploy-rs.lib.aarch64-linux.activate.nixos inputs.self.nixosConfigurations.pianonix;
+          confirmTimeout = 90; # default: 30s; raspberrypi takes a little longer restarting services
         };
+      };
     };
 }
diff --git a/homes/x86_64-linux/julian@pianonix/default.nix b/homes/x86_64-linux/julian@pianonix/default.nix
index 8951c30..5d65147 100644
--- a/homes/x86_64-linux/julian@pianonix/default.nix
+++ b/homes/x86_64-linux/julian@pianonix/default.nix
@@ -9,7 +9,7 @@
 
   # 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`).
+  home,
   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.
@@ -18,7 +18,7 @@
   # All other arguments come from the home home.
   config,
   ...
-}:
+}@arguments:
 {
   home.username = "julian";
   home.homeDirectory = "/home/julian";
@@ -39,6 +39,30 @@
     fonts.enable = true;
   };
 
+  # Prevent screen from going blank (check these settings with `xset q`)
+  # And disable bell sound (b)
+  xsession.initExtra = ''
+    ${pkgs.xorg.xset}/bin/xset s off
+    ${pkgs.xorg.xset}/bin/xset -dpms
+    ${pkgs.xorg.xset}/bin/xset b off
+  '';
+
+  services.syncthing.tray.enable = true;
+  services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
+
+  home.packages = with pkgs; [
+    music-reader
+    sheet-organizer
+  ];
+
+  # Autostart link
+  home.file = {
+    ".config/autostart/sheet-organizer.desktop".source = "${pkgs.sheet-organizer}/share/applications/sheet-organizer.desktop";
+    ".config/sheet-organizer/config.toml".text = ''
+      working_directory = "/home/julian/Klavier"
+    '';
+  };
+
   # Let Home Manager install and manage itself.
   programs.home-manager.enable = true;
 
diff --git a/overlays/input-flake-packages/default.nix b/overlays/input-flake-packages/default.nix
new file mode 100644
index 0000000..38fcdd0
--- /dev/null
+++ b/overlays/input-flake-packages/default.nix
@@ -0,0 +1,5 @@
+{ inputs, ... }:
+final: prev: {
+  sheet-organizer = "inputs.sheet-organizer.defaultPackage.${prev.system}";
+  music-reader = "inputs.music-reader.defaultPackage.${prev.system}";
+}
diff --git a/systems/aarch64-linux/pianonix/default.nix b/systems/aarch64-linux/pianonix/default.nix
new file mode 100644
index 0000000..dab2f7c
--- /dev/null
+++ b/systems/aarch64-linux/pianonix/default.nix
@@ -0,0 +1,172 @@
+# Edit this configuration file to define what should be installed on
+# your system.  Help is available in the configuration.nix(5) man page
+# and in the NixOS manual (accessible by running ‘nixos-help’).
+
+{
+  lib,
+  inputs,
+  config,
+  pkgs,
+  ...
+}:
+{
+  imports = [ ./hardware-configuration.nix ];
+
+  # disko.devices.disk.main.device = "/dev/mmcblk1";
+
+  networking.networkmanager.enable = true;
+  # networking.wireless.enable = true;
+  # networking.wireless.environmentFile = config.sops.secrets."wifi/pianonix".path;
+  # networking.wireless.networks = {
+  #   "@SSID@".psk = "@PSK@";
+  # };
+  networking.hostName = "pianonix"; # Define your hostname.
+
+  # Set your time zone.
+  time.timeZone = "Europe/Berlin";
+
+  modules = {
+    nix-settings.enable = true;
+    xserver-defaults.enable = true;
+    keymap.enable = true;
+    builder.enable = false;
+    # system.boot-efi.enable = true;
+    sound.enable = true;
+
+    locales.enable = true;
+    pcmanfm.enable = true;
+
+    # i3.enable = true;
+    # gdm.enable = true;
+    redshift.enable = true;
+
+    # wayland.enable = true;
+    # hyprland.enable = true;
+    # tuigreet.enable = true;
+
+    # virtualbox.enable = true;
+    users-julian.enable = true;
+    syncthing = {
+      enable = true;
+      overrideSettings = true;
+    };
+    # xdg-portal.enable = true;
+    polkit.enable = true;
+    keyring.enable = true;
+  };
+
+  users.mutableUsers = false;
+  users.users.julian.hashedPasswordFile = config.sops.secrets."password/pianonix".path;
+
+  # Enable the Desktop Environment.
+  # services.xserver.displayManager.lightdm.enable = true;
+  services.displayManager.autoLogin = {
+    enable = true;
+    user = "julian";
+  };
+
+  boot.loader.timeout = 1; # Set boot loader timeout to 1s
+
+  programs.dconf.enable = true;
+  # De-facto disable network manager, which is enabled by gnome
+  # networking.networkmanager.unmanaged = [ "*" ];
+  services.xserver.desktopManager = {
+    xfce = {
+      enable = true;
+    };
+  };
+
+  services.xserver.xautolock.enable = false;
+  services.xserver.desktopManager.xfce.enableScreensaver = false;
+
+  # xdg.portal.lxqt.enable = true;
+
+  services.openssh = {
+    enable = true;
+    # require public key authentication for better security
+    settings.PasswordAuthentication = false;
+    settings.KbdInteractiveAuthentication = false;
+    settings.PermitRootLogin = "yes";
+  };
+  users.users."root".openssh.authorizedKeys.keys = [
+    "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDVk/m4ydcYXzHxTWeNw2MlwxKU+JirTVOeHsYR4wdTokwYyNWZ3/zPcU4+XekSRatwJW1LJYrZ1Y5IJkobzgnOvYVI7SXZ1Tbzb1kAcnChSt+Dp/pKdMPZ8yY3PTFZh+R5F3rWFA/YZqTRhh0vuxPIVbLl7zOPExWwYGn9crkZaYZvKHVvgE5660hXo9pxbUKsSs+DIy/AE7gfKiZLusY95nk9T/jZ7Vmhl0UsF0RiDsfxgE664/vEKe8b+82kKCDt5nJVe8THSrjaw4+NUhef6R8UoUO1/Pn4TKq3Gil3Z36wPEPdkw2lYzX+d1EFyaC3hZJedSUfdFliPOejIbNvvhPBBD1wAGxxyuJZB5KLwWN7/efwCgw45buLbVfUuwwug7K7GK84A3yzqClbZKKv8rYdO04UG64A+Taq2LeyxQIDjygTgGk/1j/0Neb1RO0FbjlbTeNMZ54P+u7BTEcikJCsbFeseWDtYzupQtLt96KMbcdRgHy0CTGqFHE+my8= julian@julian-aspi"
+  ];
+
+  # Do not alway generate man-cache, making builds much faster
+  documentation.man.generateCaches = false;
+
+  # MDNS on local network
+  services.avahi = {
+    enable = true;
+    nssmdns4 = true;
+    publish.enable = true;
+    publish.addresses = true;
+  };
+
+  services.syncthing.key = config.sops.secrets."syncthing/pianonix/key".path;
+  services.syncthing.cert = config.sops.secrets."syncthing/pianonix/cert".path;
+  services.syncthing.settings = {
+    devices = {
+      "aspi-nix" = {
+        id = "DM5QRYU-ILJ4XYB-4V6NZDG-RAMVOND-3RSDSYR-52TW6RW-3XIU333-T7FNAA3";
+      };
+      "pianonix" = {
+        id = "FD3XSFW-7LQSCIQ-KHZPLNQ-7VZYGKH-RJ2ZKTJ-BG67NRH-36TQIZM-CXDYWAH";
+      };
+    };
+    folders = {
+      "Klavier" = {
+        path = "/home/julian/Klavier";
+        id = "flc3m-q4gp2";
+        devices = [
+          "aspi-nix"
+          "pianonix"
+        ];
+      };
+    };
+  };
+
+  # Packages needed as root
+  environment.systemPackages = with pkgs; [
+    vim
+    htop
+    mc
+  ];
+
+  # VNC server
+  # services.x2goserver.enable = true;
+
+  # networking.firewall.enable = false;
+
+  # networking.firewall.allowedTCPPorts = [
+  #   8000
+  #   5901
+  # ];
+
+  # Disable the GNOME3/GDM auto-suspend feature that cannot be disabled in GUI!
+  # If no user is logged in, the machine will power down after 20 minutes.
+  systemd.targets.sleep.enable = false;
+  systemd.targets.suspend.enable = false;
+  systemd.targets.hibernate.enable = false;
+  systemd.targets.hybrid-sleep.enable = false;
+
+  ## Raspberry pi specific config
+  hardware.raspberry-pi."4" = {
+    fkms-3d.enable = true;
+    touch-ft5406.enable = true;
+  };
+  # Prevent host becoming unreachable on wifi after some time (for raspberry pi)
+  networking.networkmanager.wifi.powersave = false;
+  # Enable audio devices on raspberry pi
+  # boot.kernelParams = [
+  #   "snd_bcm2835.enable_hdmi=1"
+  #   "snd_bcm2835.enable_headphones=1"
+  # ];
+  # boot.loader.raspberryPi.firmwareConfig = ''
+  #   dtparam=audio=on
+  # '';
+
+  # ======================== DO NOT CHANGE THIS ========================
+  system.stateVersion = "22.11";
+  # ======================== DO NOT CHANGE THIS ========================
+}
diff --git a/systems/aarch64-linux/pianonix/hardware-configuration.nix b/systems/aarch64-linux/pianonix/hardware-configuration.nix
new file mode 100644
index 0000000..c21f1a1
--- /dev/null
+++ b/systems/aarch64-linux/pianonix/hardware-configuration.nix
@@ -0,0 +1,36 @@
+# Do not modify this file!  It was generated by ‘nixos-generate-config’
+# and may be overwritten by future invocations.  Please make changes
+# to /etc/nixos/configuration.nix instead.
+{
+  config,
+  lib,
+  pkgs,
+  modulesPath,
+  ...
+}:
+
+{
+  imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
+
+  boot.initrd.availableKernelModules = [ "xhci_pci" ];
+  boot.initrd.kernelModules = [ ];
+  boot.kernelModules = [ ];
+  boot.extraModulePackages = [ ];
+
+  fileSystems."/" = {
+    device = "/dev/disk/by-uuid/44444444-4444-4444-8888-888888888888";
+    fsType = "ext4";
+  };
+
+  swapDevices = [ ];
+
+  # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
+  # (the default) this is the recommended approach. When using systemd-networkd it's
+  # still possible to use this option, but it's recommended to use it in conjunction
+  # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
+  networking.useDHCP = lib.mkDefault true;
+  # networking.interfaces.end0.useDHCP = lib.mkDefault true;
+  # networking.interfaces.wlan0.useDHCP = lib.mkDefault true;
+
+  nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
+}
diff --git a/systems/x86_64-linux/pianonix/default.nix b/systems/x86_64-linux/pianonix/default.nix
deleted file mode 100644
index 9b5f892..0000000
--- a/systems/x86_64-linux/pianonix/default.nix
+++ /dev/null
@@ -1,103 +0,0 @@
-# Edit this configuration file to define what should be installed on
-# your system.  Help is available in the configuration.nix(5) man page
-# and in the NixOS manual (accessible by running ‘nixos-help’).
-
-{
-  lib,
-  inputs,
-  config,
-  pkgs,
-  ...
-}:
-{
-  imports = [ ./disko-config.nix ];
-
-  disko.devices.disk.main.device = "/dev/sda";
-
-  networking.networkmanager.enable = true;
-  networking.hostName = "pianonix"; # Define your hostname.
-
-  # Set your time zone.
-  time.timeZone = "Europe/Berlin";
-
-  modules = {
-    nix-settings.enable = true;
-    xserver-defaults.enable = true;
-    keymap.enable = true;
-    builder.enable = false;
-    system.boot-efi.enable = true;
-    sound.enable = true;
-
-    locales.enable = true;
-    pcmanfm.enable = true;
-
-    # i3.enable = true;
-    # gdm.enable = true;
-    redshift.enable = true;
-
-    wayland.enable = true;
-    # hyprland.enable = true;
-    # tuigreet.enable = true;
-
-    # virtualbox.enable = true;
-    users-julian.enable = true;
-    # syncthing.enable = true;
-    xdg-portal.enable = true;
-    polkit.enable = true;
-    keyring.enable = true;
-  };
-
-  users.mutableUsers = false;
-  users.users.root.hashedPassword = "$y$j9T$mDQgl0GARH9fKg01akW1V0$2E5Z4TVra0RbY.tO2B6rW2YnVtJ6tbzZkJRvGWciSkB";
-  # no password
-  users.users.julian.hashedPassword = "$y$j9T$khuv2ubKt48fkWS754jkL1$/YSqi4mWV9ccfnMAWCF0yumnwZrJ/ddg2TZTuZaDsi8";
-
-  # Enable the Desktop Environment.
-  # services.xserver.displayManager.lightdm.enable = true;
-  services.displayManager.autoLogin = {
-    enable = true;
-    user = "julian";
-  };
-
-  services.xserver.desktopManager = {
-    # xterm.enable = false;
-    lxqt = {
-      enable = true;
-    };
-  };
-  xdg.portal.lxqt.enable = true;
-
-  services.openssh = {
-    enable = true;
-    # require public key authentication for better security
-    settings.PasswordAuthentication = false;
-    settings.KbdInteractiveAuthentication = false;
-    settings.PermitRootLogin = "yes";
-  };
-  users.users."root".openssh.authorizedKeys.keys = [
-    "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDVk/m4ydcYXzHxTWeNw2MlwxKU+JirTVOeHsYR4wdTokwYyNWZ3/zPcU4+XekSRatwJW1LJYrZ1Y5IJkobzgnOvYVI7SXZ1Tbzb1kAcnChSt+Dp/pKdMPZ8yY3PTFZh+R5F3rWFA/YZqTRhh0vuxPIVbLl7zOPExWwYGn9crkZaYZvKHVvgE5660hXo9pxbUKsSs+DIy/AE7gfKiZLusY95nk9T/jZ7Vmhl0UsF0RiDsfxgE664/vEKe8b+82kKCDt5nJVe8THSrjaw4+NUhef6R8UoUO1/Pn4TKq3Gil3Z36wPEPdkw2lYzX+d1EFyaC3hZJedSUfdFliPOejIbNvvhPBBD1wAGxxyuJZB5KLwWN7/efwCgw45buLbVfUuwwug7K7GK84A3yzqClbZKKv8rYdO04UG64A+Taq2LeyxQIDjygTgGk/1j/0Neb1RO0FbjlbTeNMZ54P+u7BTEcikJCsbFeseWDtYzupQtLt96KMbcdRgHy0CTGqFHE+my8= julian@julian-aspi"
-  ];
-
-  # Packages needed as root
-  environment.systemPackages = with pkgs; [
-    vim
-    htop
-    mc
-  ];
-
-  ## Raspberry pi specific config
-  # Prevent host becoming unreachable on wifi after some time (for raspberry pi)
-  networking.networkmanager.wifi.powersave = false;
-  # Enable audio devices on raspberry pi
-  boot.kernelParams = [
-    "snd_bcm2835.enable_hdmi=1"
-    "snd_bcm2835.enable_headphones=1"
-  ];
-  boot.loader.raspberryPi.firmwareConfig = ''
-    dtparam=audio=on
-  '';
-
-  # ======================== DO NOT CHANGE THIS ========================
-  system.stateVersion = "22.11";
-  # ======================== DO NOT CHANGE THIS ========================
-}
diff --git a/systems/x86_64-linux/pianonix/disko-config.nix b/systems/x86_64-linux/pianonix/disko-config.nix
deleted file mode 100644
index d68cc85..0000000
--- a/systems/x86_64-linux/pianonix/disko-config.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-# USAGE in your configuration.nix.
-# Update devices to match your hardware.
-# {
-#  imports = [ ./disko-config.nix ];
-#  disko.devices.disk.main.device = "/dev/sda";
-# }
-{
-  disko.devices = {
-    disk = {
-      main = {
-        type = "disk";
-        content = {
-          type = "gpt";
-          partitions = {
-            boot = {
-              size = "1M";
-              type = "EF02"; # for grub MBR
-            };
-            ESP = {
-              size = "1G";
-              type = "EF00";
-              content = {
-                type = "filesystem";
-                format = "vfat";
-                mountpoint = "/boot";
-              };
-            };
-            root = {
-              size = "100%";
-              content = {
-                type = "filesystem";
-                format = "ext4";
-                mountpoint = "/";
-              };
-            };
-          };
-        };
-      };
-    };
-  };
-}
diff --git a/systems/x86_64-linux/pianonix/hardware-configuration.nix b/systems/x86_64-linux/pianonix/hardware-configuration.nix
deleted file mode 100644
index 8cd9409..0000000
--- a/systems/x86_64-linux/pianonix/hardware-configuration.nix
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  config,
-  lib,
-  pkgs,
-  modulesPath,
-  ...
-}:
-
-{
-
-  # TODO: This has to adapted yet !!!
-
-  boot.initrd.availableKernelModules = [
-    "vmd"
-    "xhci_pci"
-    "ahci"
-    "nvme"
-    "usb_storage"
-    "usbhid"
-    "sd_mod"
-  ];
-  boot.initrd.kernelModules = [ "dm-snapshot" ];
-  boot.kernelModules = [ "kvm-intel" ];
-  boot.extraModulePackages = [ ];
-
-  boot.initrd.luks.devices = {
-    root = {
-      device = "/dev/disk/by-uuid/a4dc9a2c-725b-4252-8fbb-093a271c31ba";
-      preLVM = true;
-      allowDiscards = true;
-    };
-  };
-
-  fileSystems."/" = {
-    device = "/dev/disk/by-uuid/bbc45be3-75f5-40c5-8427-2a425de8422c";
-    fsType = "btrfs";
-    options = [
-      "subvol=root"
-      "compress=zstd"
-    ];
-  };
-
-  fileSystems."/home" = {
-    device = "/dev/disk/by-uuid/bbc45be3-75f5-40c5-8427-2a425de8422c";
-    fsType = "btrfs";
-    options = [
-      "subvol=home"
-      "compress=zstd"
-    ];
-  };
-
-  fileSystems."/nix" = {
-    device = "/dev/disk/by-uuid/bbc45be3-75f5-40c5-8427-2a425de8422c";
-    fsType = "btrfs";
-    options = [
-      "subvol=nix"
-      "compress=zstd"
-      "noatime"
-    ];
-  };
-
-  fileSystems."/boot" = {
-    device = "/dev/disk/by-uuid/7040-F37C";
-    fsType = "vfat";
-  };
-
-  swapDevices = [ { device = "/dev/disk/by-uuid/26140b4a-0579-406d-a484-35aa31b32e80"; } ];
-
-  # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
-  # (the default) this is the recommended approach. When using systemd-networkd it's
-  # still possible to use this option, but it's recommended to use it in conjunction
-  # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
-  networking.useDHCP = lib.mkDefault true;
-  # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;
-  # networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true;
-
-  nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
-  powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
-  hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
-}