/nixcfg

NixOS configuration files

Primary LanguageNix

nixcfg

flake.nix

{
    inputs = {
        nixpkgs = { url = "github:NixOS/nixpkgs/nixos-unstable"; };
        nixpkgs2009 = { url = "github:NixOS/nixpkgs/nixos-20.09"; };
        home-manager = { url = "github:nix-community/home-manager"; };
        nur = { url = "github:nix-community/NUR"; };
        flake-utils-plus.url = "github:gytis-ivaskevicius/flake-utils-plus";
        wine-wayland = { url = "git+https://gitlab.collabora.com/alf/wine?ref=wayland"; flake = false; };
        wine-lol = { url = "github:lutris/wine/lutris-lol-5.5"; flake = false; };
        mozilla = { url = "github:mozilla/nixpkgs-mozilla"; flake = false; };
        sops-nix = { url = "github:Mic92/sops-nix"; };
        agenix = { url = "github:ryantm/agenix"; };
        musnix = { url = "github:cidkidnix/musnix/b45d670b2c79c071e4b8affb52d42f9604bd3130"; };


        home-manager.inputs.nixpkgs.follows = "nixpkgs";
    };

    outputs = inputs:
      let
        remoteNixpkgsPatches = [ 
        ];
        localNixpkgsPatches = [ ];
        originPkgs = inputs.nixpkgs.legacyPackages."x86_64-linux";
        nixpkgs = originPkgs.applyPatches {
          name = "nixpkgs-patched";
          src = inputs.nixpkgs;
          patches = map originPkgs.fetchpatch remoteNixpkgsPatches ++ localNixpkgsPatches;
          postPatch = ''
            patch=$(printf '%s\n' ${builtins.concatStringsSep " " (map (p: p.sha256) remoteNixpkgsPatches ++ localNixpkgsPatches)} |sort | sha256sum | cut -c -7)
            echo "+patch-$patch" >.version-suffix
          '';
        };

        lib = originPkgs.lib;

        machines = builtins.mapAttrs (machineName: machineConfig:
          let cfg = import machineConfig { inherit inputs; }; in
          import (nixpkgs + "/nixos/lib/eval-config.nix") (cfg // {
            extraArgs = {
              inherit machineName inputs;
              machines = inputs.self.nixosConfigurations;
            } // (cfg.extraArgs or {});
            modules = cfg.modules ++ [({pkgs, ...}: {
              system.nixos.revision = lib.mkIf (inputs.self ? rev) inputs.self.rev;
              nixpkgs.config = {};
              nixpkgs.overlays = [ overrides desktopapps inputs.nur.overlay ];
              # Let 'nixos-version --json' know about the Git revision of this flake.
              system.configurationRevision = lib.mkIf (inputs.self ? rev) inputs.self.rev;
      })];
    }));
        overrides = self: super: rec {
          xwayland = super.xwayland.overrideAttrs ({ patches ? [ ], ... }: {
            preConfigure = ''
              patch -p1 < ${./machines/cfg/patches/xwayland.patch}
            '';
          });

          libinput-patched = super.libinput.overrideAttrs (old: {
            patches = (old.patches or []) ++ [ ./machines/cfg/patches/libinput.patch ];
          });

          wine-cemu = super.wineWowPackages.unstable.overrideAttrs (old: {
            patches = (old.patches or []) ++ [ ./machines/cfg/patches/wine/childwindow.patch ];
          });

          wine-wayland-osu = (super.wineStable.overrideDerivation (
            { buildInputs ? [ ]
            , configureFlags ? [ ]
            , makeFlags ? [ ]
            , patches ? [ ]
            , ... 
            }: {
              src = inputs.wine-wayland;
              buildInputs = buildInputs ++ (with super.pkgsi686Linux; [
                wayland libxkbcommon wayland.dev
              ]);
              configureFlags = configureFlags ++ [ "--with-wayland" ];
              XKBCOMMON_CFLAGS = "-I${super.pkgsi686Linux.libxkbcommon.dev}/include";
              XKBCOMMON_LIBS = "-L${super.pkgsi686Linux.libxkbcommon.out}/lib -lxkbcommon";
              patches = patches ++ [ ./machines/cfg/patches/wine/winepulse-v6.10-wasapifriendly.patch ];
            }
          )).override {
            mingwSupport = true;
            vulkanSupport = true;
          };

          wine-osu = super.wineUnstable.overrideAttrs (old: {
            src = super.fetchurl {
              url = "https://dl.winehq.org/wine/source/6.x/wine-6.7.tar.xz";
              sha256 = "sha256-wwUUt3YdRhFRSuAhyx41QSjXfv9UooPxQB7nAid7vqQ=";
            };
            patches = old.patches ++ [ ./machines/cfg/patches/wine/winepulse-revert.patch ];
          });

          winetricks = super.winetricks.override {
            wine = wine-osu;
          };

          wlroots-patched = super.wlroots.overrideAttrs (old: {
            buildInputs = with super; [
              libGL wayland wayland-protocols libinput-patched libxkbcommon pixman
              xorg.xcbutilwm xorg.libX11 libcap xorg.xcbutilimage xorg.xcbutilerrors mesa
              libpng ffmpeg libuuid xorg.xcbutilrenderutil xwayland
            ];
          });

          sway = super.sway.overrideAttrs (old: {
            buildInputs = with super; [
              wayland libxkbcommon pcre json_c dbus libevdev
              pango cairo libinput-patched libcap pam gdk-pixbuf librsvg
              wlroots-patched wayland-protocols libdrm
            ];
          });

          materia-theme = super.materia-theme.overrideAttrs (old: {
            src = super.fetchFromGitHub {
              owner = "nana-4";
              repo = old.pname;
              rev = "v20210322";
              sha256 = "sha256-dHcwPTZFWO42wu1LbtGCMm2w/YHbjSUJnRKcaFllUbs=";
            };
          });

          beatmap-importer = super.writeShellScriptBin "beatmap-import" ''
            #!/usr/bin/env bash
            cp ~/Downloads/*.osz ~/.osu/Songs && rm ~/Downloads/*.osz
          '';

          #freecad = super.freecad.override {
          #  spaceNavSupport = false;
          #};

          minecraft-bedrock-appimage = super.appimageTools.wrapType2 {
            name = "minecraft-bedrock";
            src = super.fetchurl {
              url = "https://github.com/ChristopherHX/linux-packaging-scripts/releases/download/v0.2.1-661/Minecraft_Bedrock_Launcher-x86_64-0.0.661.AppImage";
              sha256 = "";
            };
            extraPkgs = pkgs: with super; [ libpulseaudio alsaLib alsaUtils pkgsi686Linux.zlib ];
          };

          spotifyd = super.spotifyd.override {
            withMpris = true;
            withPulseAudio = true;
          };

          vscodium-wayland = super.vscodium.overrideAttrs (old: {
            buildInputs = old.buildInputs ++ [
              super.makeWrapper
            ];
            postInstall = ''
                wrapProgram $out/bin/codium \
                  --add-flags "--enable-features=UseOzonePlatform --ozone-platform=wayland" 
            '';
          });

          element-wayland = super.element-desktop.overrideAttrs (old: {
            buildInputs = old.buildInputs ++ [
              super.makeWrapper
            ];
            postInstall = ''
              wrapProgram $out/bin/element-desktop \
                --add-flags "--enable-features=UseOzonePlatform --ozone-platform=wayland"
            '';
          });

          alvr = super.callPackage ./machines/cfg/packages/alvr {};

          ### Nopaystation
          pkg2zip = super.callPackage ./machines/cfg/packages/pkg2zip {};
          nps = super.callPackage ./machines/cfg/packages/nps {};

          ### Openauto
          aasdk = super.callPackage ./machines/cfg/packages/aasdk {};
          openauto = super.libsForQt5.callPackage ./machines/cfg/packages/openauto {};

          ### Cockpit
          cockpit = super.callPackage ./machines/cfg/packages/cockpit {};

          ### mpv-notify-send
          mpv-notify-send = super.callPackage ./machines/cfg/packages/mpv-notify-send {};

          ### Optabletdriver
          #opentabletdriver-updated = super.callPackage ./machines/cfg/packages/opentabletdriver {};

          ### Discord 0.0.15 update
          #discord = super.discord.overrideAttrs (_: {
          #  src = super.fetchurl {
          #    url = "https://dl.discordapp.net/apps/linux/0.0.15/discord-0.0.15.tar.gz";
          #    sha256 = "sha256-re3pVOnGltluJUdZtTlSeiSrHULw1UjFxDCdGj/Dwl4=";
          # };
          #});
          
          linux-cidkid = super.linuxPackagesFor (super.linux_latest.override {
            ignoreConfigErrors = true;
          });

          obs-wlrobs = (super.obs-wlrobs.overrideAttrs (old: {
            src = super.fetchhg {
              url = old.src.url;
              rev = "4184a4a8ea7dc054c993efa16007f3a75b2c6f51";
              sha256 = "sha256-rKmhsP/Fxdz5JBIosxCYyc+YwzaAeBNE04Hb0X6O3ZA=";
            };
          })).override {
            dmabufSupport = true;
          };
          
          # Pin gnome3
          #gnome = inputs.nixpkgs2009.legacyPackages.x86_64-linux.gnome3;

          /*
            subset = (super.subset // {
              packagename = super.subset.packagename.overrideAttrs (old: {});
            });
          */
        };

        desktopapps = import ./machines/cfg/overlays/desktopapps.nix;
        discord-wayland = import ./machines/cfg/overlays/discord-wayland.nix;

      in rec {
          nixosConfigurations = machines {
            jupiter = machines/nixos-desktop;
          };
      };
}