diff --git a/configuration.nix b/configuration.nix deleted file mode 100644 index b279c19..0000000 --- a/configuration.nix +++ /dev/null @@ -1,133 +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, on -# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). - -{ pkgs -, ... -}: - -{ - imports = [ - # Include the results of the hardware scan. - ./hardware-configuration.nix - ]; - - # Use the systemd-boot EFI boot loader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - networking.hostName = "twinkpad"; # Define your hostname. - # Pick only one of the below networking options. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. - - # Set your time zone. - time.timeZone = "Europe/Berlin"; - - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Select internationalisation properties. - # i18n.defaultLocale = "en_US.UTF-8"; - # console = { - # font = "Lat2-Terminus16"; - # keyMap = "us"; - # useXkbConfig = true; # use xkb.options in tty. - # }; - - # Enable the X11 windowing system. - services.xserver.enable = true; - - # Enable the GNOME Desktop Environment. - services.xserver.displayManager.gdm.enable = true; - programs.niri.enable = true; - - # Configure keymap in X11 - # services.xserver.xkb.layout = "us"; - # services.xserver.xkb.options = "eurosign:e,caps:escape"; - - # Enable CUPS to print documents. - services.printing.enable = true; - - # Enable sound. - # services.pulseaudio.enable = true; - # OR - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - - }; - - # make pipewire realtime-capable - security.rtkit.enable = true; - - # Enable touchpad support (enabled default in most desktopManager). - # services.libinput.enable = true; - - # Define a user account. Don't forget to set a password with ‘passwd’. - users.mutableUsers = false; - users.users.lucy = { - initialHashedPassword = "$6$QX95LTUGi55mFQOZ$j19/LuGvMeWOBCp/oEOLWDU5rcrEfD9/2AQ3sW1OVMROMJEFpg/hTrWKnOgIUfzWtF32wUxNlThXIJm8YWJwZ."; - isNormalUser = true; - extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. - packages = with pkgs; [ - tree - ]; - }; - - # List packages installed in system profile. - # You can use https://search.nixos.org/ to find more packages (and options). - environment.systemPackages = with pkgs; [ - vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. - wget - ]; - - # Some programs need SUID wrappers, can be configured further or are - # started in user sessions. - programs.mtr.enable = true; - programs.gnupg.agent = { - enable = true; - enableSSHSupport = true; - }; - - # List services that you want to enable: - - # Enable the OpenSSH daemon. - # services.openssh.enable = true; - - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - # Copy the NixOS configuration file and link it from the resulting system - # (/run/current-system/configuration.nix). This is useful in case you - # accidentally delete configuration.nix. - # system.copySystemConfiguration = true; - - # This option defines the first version of NixOS you have installed on this particular machine, - # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. - # - # Most users should NEVER change this value after the initial install, for any reason, - # even if you've upgraded your system to a new NixOS release. - # - # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, - # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how - # to actually do that. - # - # This value being lower than the current NixOS release does NOT mean your system is - # out of date, out of support, or vulnerable. - # - # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, - # and migrated your data accordingly. - # - # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . - system.stateVersion = "25.05"; # Did you read the comment? - - nixpkgs.config.allowUnfree = true; - -} diff --git a/flake.lock b/flake.lock index 530d4f6..7975932 100644 --- a/flake.lock +++ b/flake.lock @@ -221,6 +221,24 @@ } }, "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1756770412, + "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "4524271976b625a4a605beefd893f270620fd751", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { "inputs": { "nixpkgs-lib": [ "stylix", @@ -566,6 +584,21 @@ "type": "github" } }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1754788789, + "narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "a73b9c743612e4244d865a2fdee11865283c04e6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, "nixpkgs-regression": { "locked": { "lastModified": 1643052045, @@ -704,6 +737,7 @@ "c3d2-user-module": "c3d2-user-module", "comin": "comin", "determinate": "determinate", + "flake-parts": "flake-parts_2", "gnome-mobile": "gnome-mobile", "home-manager": "home-manager", "mobile-nixos": "mobile-nixos", @@ -724,7 +758,7 @@ "base16-helix": "base16-helix", "base16-vim": "base16-vim", "firefox-gnome-theme": "firefox-gnome-theme", - "flake-parts": "flake-parts_2", + "flake-parts": "flake-parts_3", "gnome-shell": "gnome-shell", "nixpkgs": [ "nixpkgs" diff --git a/flake.nix b/flake.nix index cddae1c..2ebd617 100644 --- a/flake.nix +++ b/flake.nix @@ -3,6 +3,7 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + flake-parts.url = "github:hercules-ci/flake-parts"; c3d2-user-module.url = "git+https://gitea.c3d2.de/C3D2/nix-user-module.git"; home-manager = { url = "github:nix-community/home-manager"; @@ -37,229 +38,225 @@ }; outputs = - inputs@{ - self, - nixpkgs, - c3d2-user-module, - home-manager, - niri, - nixos-hardware, - treefmt-nix, - determinate, - stylix, - comin, - musnix, - nix-mineral, - mobile-nixos, - gnome-mobile, - nix-flatpak, - }: - let - system = "x86_64-linux"; - pkgs = import nixpkgs { inherit system; }; - lib = pkgs.lib; + inputs@{ flake-parts, ... }: + flake-parts.lib.mkFlake { inherit inputs; } { + # Define supported systems + systems = [ + "x86_64-linux" + "aarch64-linux" + ]; - # Configure treefmt - treefmtEval = treefmt-nix.lib.evalModule pkgs { - projectRootFile = "flake.nix"; - programs = { - nixpkgs-fmt.enable = true; - prettier = { - enable = true; - includes = [ - "*.json" - "*.yaml" - "*.yml" + imports = [ + inputs.treefmt-nix.flakeModule + ]; + + # Per-system configuration + perSystem = + { + config, + pkgs, + lib, + ... + }: + { + # Configure treefmt + treefmt = { + 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" + ]; + }; + }; + + # Packages + packages = let cutieMobileImages = inputs.self.nixosConfigurations.cutie.config.mobile.outputs.android.android-fastboot-images; in { + default = cutieMobileImages; + cutie-mobile-images = + inputs.self.nixosConfigurations.cutie.config.mobile.outputs.android.android-fastboot-images; + 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="; + stripRoot = false; + }; + + installPhase = '' + mkdir -p $out/share/icons/HelloKitty + for file in ${inputs.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 "${inputs.self}/index.theme" ]; then + cp "${inputs.self}/index.theme" "$out/share/icons/HelloKitty/" + else + echo "Warning: index.theme does not exist." + fi + ''; + + meta = with lib; { + description = "Hello Kitty Cursor theme"; + homepage = "https://www.rw-designer.com/cursor-downloadset/hello-kitty.zip"; + license = licenses.gpl2Only; + }; + }; + + 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; + }; + }; + }; + + # Development shell + devShells.default = pkgs.mkShell { + buildInputs = with pkgs; [ + git + ]; + + shellHook = '' + echo "Development shell loaded!" + echo "Run 'nix fmt' to format all files" + ''; + }; + + # Formatting check + checks.formatting = config.treefmt.build.check inputs.self; + }; + + # Flake-level configuration (not per-system) + flake = { + # NixOS configurations + nixosConfigurations = { + cutie = inputs.nixpkgs.lib.nixosSystem { + system = "aarch64-linux"; + modules = [ + ./hosts/cutie/configuration.nix + inputs.gnome-mobile.nixosModules.gnome-mobile + inputs.nix-flatpak.nixosModules.nix-flatpak + (import "${inputs.mobile-nixos}/lib/configuration.nix" { + device = "oneplus-fajita"; + }) ]; }; - 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"; + p50 = inputs.nixpkgs.lib.nixosSystem { + specialArgs = { inherit inputs; }; + system = "x86_64-linux"; + modules = [ + "${inputs.nix-mineral}/nix-mineral.nix" + inputs.niri.nixosModules.niri + inputs.nixos-hardware.nixosModules.lenovo-thinkpad-p50 + ./hosts/p50/configuration.nix + inputs.determinate.nixosModules.default + inputs.musnix.nixosModules.musnix - 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; - }; + inputs.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 + ]; - 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 = { - cutie = nixpkgs.lib.nixosSystem { - system = "aarch64-linux"; - modules = [ - ./hosts/cutie/configuration.nix - gnome-mobile.nixosModules.gnome-mobile - nix-flatpak.nixosModules.nix-flatpak - (import "${mobile-nixos}/lib/configuration.nix" { - device = "oneplus-fajita"; - }) - ]; - }; - 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 - ./hosts/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 = "${ + home.packages = [ 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"; + ]; + + 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 - ]; + } + inputs.c3d2-user-module.nixosModule + ./modules/nix.nix + ./modules/fonts.nix + inputs.comin.nixosModules.comin + ./modules/comin.nix + inputs.stylix.nixosModules.stylix + ./modules/stylix.nix + ./modules/firefox-nixos.nix + ]; + }; }; - }; - fajita-fastboot-images = - inputs.self.nixosConfigurations.fajita.config.mobile.outputs.android.android-fastboot-images; - fajita-minimal-image = - inputs.self.nixosConfigurations.fajita_minimal.config.mobile.outputs.android.android-fastboot-images; - uefi-x86_64-image = inputs.self.nixosConfigurations.uefi-x86_64.config.mobile.outputs.default; - - # 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; + inherit (inputs.self.nixosConfigurations) + fajita-fastboot-images + fajita-minimal-image + uefi-x86_64-image + ; }; }; } diff --git a/hardware-configuration.nix b/hardware-configuration.nix deleted file mode 100644 index 1dd25df..0000000 --- a/hardware-configuration.nix +++ /dev/null @@ -1,65 +0,0 @@ -# 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, modulesPath, ... }: - -{ - imports = - [ - (modulesPath + "/installer/scan/not-detected.nix") - ]; - - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "uas" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { - device = "none"; - fsType = "tmpfs"; - options = [ "defaults" "size=8G" "mode=755" ]; - }; - - fileSystems."/boot" = - { - device = "/dev/disk/by-uuid/0777-71C3"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - fileSystems."/nix" = - { - device = "/dev/disk/by-uuid/3a8c6986-3105-4f1f-a75b-f72e4ec5ecdc"; - fsType = "ext4"; - }; - - boot.initrd.luks.devices."nix".device = "/dev/disk/by-uuid/439beee9-6797-41bc-bc4f-01bfe1a75166"; - - fileSystems."/etc/nixos" = - { - device = "/nix/persist/etc/nixos"; - fsType = "none"; - options = [ "bind" ]; - }; - - fileSystems."/var/log" = - { - device = "/nix/persist/var/log"; - fsType = "none"; - options = [ "bind" ]; - }; - - 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..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/hosts/cutie/configuration.nix b/hosts/cutie/configuration.nix index 70e8167..03ca066 100644 --- a/hosts/cutie/configuration.nix +++ b/hosts/cutie/configuration.nix @@ -31,12 +31,43 @@ environment.sessionVariables.NIXPKGS_ALLOW_UNFREE = "1"; zramSwap.enable = true; - networking.firewall.enable = lib.mkForce false; + networking.firewall.enable = lib.mkForce true; nix.settings.experimental-features = [ "nix-command" "flakes" ]; + networking.networkmanager.enable = true; system.stateVersion = "24.11"; + + services.avahi = { + openFirewall = true; + nssmdns4 = true; # Allows software to use Avahi to resolve. + enable = true; + publish = { + userServices = true; + enable = true; + addresses = true; + workstation = true; + }; + }; + + services.xserver.desktopManager.phosh = { + enable = true; + user = "lucy"; + group = "users"; + }; + + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa = { + enable = true; + support32Bit = true; + }; + pulse.enable = true; + }; + + nixpkgs.config.allowUnfree = true; } diff --git a/modules/home.nix b/modules/home.nix index 8b3f772..7cf0039 100644 --- a/modules/home.nix +++ b/modules/home.nix @@ -1,7 +1,6 @@ -{ - config, - pkgs, - ... +{ config +, pkgs +, ... }: { imports = [ diff --git a/modules/waybar.nix b/modules/waybar.nix index ce9cf47..27bb590 100644 --- a/modules/waybar.nix +++ b/modules/waybar.nix @@ -1,7 +1,6 @@ -{ - config, - pkgs, - ... +{ config +, pkgs +, ... }: { home.packages = with pkgs; [ waybar ];