{ description = "A very basic flake"; inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; c3d2-user-module.url = "git+https://gitea.c3d2.de/C3D2/nix-user-module.git"; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; niri.url = "github:sodiboo/niri-flake"; nixos-hardware.url = "github:NixOS/nixos-hardware/master"; treefmt-nix = { url = "github:numtide/treefmt-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; determinate.url = "https://flakehub.com/f/DeterminateSystems/determinate/*"; comin = { url = "github:nlewo/comin"; inputs.nixpkgs.follows = "nixpkgs"; }; stylix = { url = "github:nix-community/stylix"; inputs.nixpkgs.follows = "nixpkgs"; }; musnix.url = "github:musnix/musnix"; nix-mineral = { url = "github:cynicsketch/nix-mineral"; flake = false; }; }; outputs = inputs@{ self , nixpkgs , c3d2-user-module , home-manager , niri , nixos-hardware , treefmt-nix , determinate , stylix , comin , musnix , nix-mineral , }: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; lib = pkgs.lib; # Configure treefmt treefmtEval = treefmt-nix.lib.evalModule pkgs { projectRootFile = "flake.nix"; programs = { nixpkgs-fmt.enable = true; prettier = { enable = true; includes = [ "*.json" "*.yaml" "*.yml" ]; }; taplo.enable = true; }; settings = { global.excludes = [ "*.lock" "result" ".git/" "*.md" "*.sh" "*.py" "*.js" "*.ts" ]; }; }; in { packages.${system} = { hello-kitty-cursors = pkgs.stdenv.mkDerivation { pname = "hello-kitty-cursors"; version = "1.0.0"; src = pkgs.fetchzip { url = "https://www.rw-designer.com/cursor-downloadset/hello-kitty.zip"; sha256 = "sha256-p4US/gftDL0ne4l0dHUIKKZy2oibkOqdJ3fMisySnNM="; # Replace with the actual hash of the zip file stripRoot = false; }; installPhase = '' mkdir -p $out/share/icons/HelloKitty for file in ${self}/cursors/*; do if [ -e "$file" ]; then cp "$file" "$out/share/icons/HelloKitty/" else echo "Warning: File $file does not exist." fi done # Adjust the path to index.theme if necessary if [ -e "${self}/index.theme" ]; then cp "${self}/index.theme" "$out/share/icons/HelloKitty/" else echo "Warning: index.theme does not exist." fi ''; meta = with nixpkgs.lib; { description = "Hello Kitty Cursor theme"; homepage = "https://www.rw-designer.com/cursor-downloadset/hello-kitty.zip"; license = licenses.gpl2Only; maintainers = with maintainers; [ your-maintainer-name ]; # Replace with your name }; }; wallpapers = pkgs.stdenv.mkDerivation { name = "wallpapers"; src = ./assets; buildInputs = with pkgs; [ ffmpeg ]; buildPhase = '' # Create output directory mkdir -p $out/share/wallpapers # Copy static wallpaper cp "wp6553608.jpg" "$out/share/wallpapers/static-wallpaper.jpg" # Copy original animated wallpaper cp "Anime Live Wallpaper - Anime Cat Girl Snow - HD - no copyright [SiMc3l0ido0].mp4" \ "$out/share/wallpapers/anime-cat-girl-snow.mp4" # Create optimized version ${pkgs.ffmpeg}/bin/ffmpeg -i "Anime Live Wallpaper - Anime Cat Girl Snow - HD - no copyright [SiMc3l0ido0].mp4" \ -vf "scale=1920:1080:force_original_aspect_ratio=increase,crop=1920:1080" \ -r 30 -c:v libx264 -crf 28 -preset medium \ -t 30 -an "$out/share/wallpapers/anime-cat-girl-snow-optimized.mp4" ''; installPhase = '' # Files are already in the right place from buildPhase echo "Wallpapers installed to $out/share/wallpapers" ''; meta = with lib; { description = "Personal wallpaper collection"; platforms = platforms.linux; }; }; }; nixosConfigurations.p50 = nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs; }; system = "x86_64-linux"; modules = [ "${nix-mineral}/nix-mineral.nix" niri.nixosModules.niri nixos-hardware.nixosModules.lenovo-thinkpad-p50 ./configuration.nix determinate.nixosModules.default musnix.nixosModules.musnix home-manager.nixosModules.home-manager { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.backupFileExtension = "backup"; home-manager.extraSpecialArgs = { inherit inputs; }; home-manager.users.lucy = { pkgs , inputs , ... }: { imports = [ ./modules/home.nix ./modules/bottom.nix ./modules/htop.nix ]; home.packages = with pkgs; [ inputs.self.packages.${pkgs.system}.wallpapers ]; home.file = { ".local/share/wallpapers/anime-cat-girl-snow.mp4".source = "${ inputs.self.packages.${pkgs.system}.wallpapers }/share/wallpapers/anime-cat-girl-snow.mp4"; ".local/share/wallpapers/static-wallpaper.jpg".source = "${ inputs.self.packages.${pkgs.system}.wallpapers }/share/wallpapers/static-wallpaper.jpg"; ".local/share/wallpapers/anime-cat-girl-snow-optimized.mp4".source = "${ inputs.self.packages.${pkgs.system}.wallpapers }/share/wallpapers/anime-cat-girl-snow-optimized.mp4"; }; }; } c3d2-user-module.nixosModule ./modules/nix.nix ./modules/fonts.nix comin.nixosModules.comin ./modules/comin.nix stylix.nixosModules.stylix ./modules/stylix.nix ./modules/firefox-nixos.nix ]; }; # Add treefmt formatter formatter.${system} = treefmtEval.config.build.wrapper; # Optional: Add a dev shell with treefmt devShells.${system}.default = pkgs.mkShell { buildInputs = with pkgs; [ git treefmtEval.config.build.wrapper ]; shellHook = '' echo "Development shell loaded!" echo "Run 'nix fmt' to format all files" echo "Run 'treefmt' to format with treefmt directly" ''; }; # Optional: Add formatting check checks.${system} = { formatting = treefmtEval.config.build.check self; }; }; }