diff --git a/.gitea/workflows/publish-attic.yaml b/.gitea/workflows/publish-attic.yaml new file mode 100644 index 0000000..03b95dc --- /dev/null +++ b/.gitea/workflows/publish-attic.yaml @@ -0,0 +1,71 @@ +name: Publish packages to Attic + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + publish: + runs-on: ubuntu-latest + + env: + ATTIC_SERVER: ${{ secrets.ATTIC_SERVER }} + ATTIC_CACHE: ${{ secrets.ATTIC_CACHE }} + ATTIC_TOKEN: ${{ secrets.ATTIC_TOKEN }} + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@v18 + continue-on-error: true + + - name: Install Attic client + shell: bash + run: | + set -euo pipefail + + if command -v attic >/dev/null 2>&1; then + exit 0 + fi + + nix profile install --accept-flake-config nixpkgs#attic-client + echo "$HOME/.nix-profile/bin" >> "$GITHUB_PATH" + + - name: Configure Attic + shell: bash + run: | + set -euo pipefail + + : "${ATTIC_SERVER:?Set the ATTIC_SERVER secret to your Attic API base URL}" + : "${ATTIC_CACHE:?Set the ATTIC_CACHE secret to the destination cache name}" + : "${ATTIC_TOKEN:?Set the ATTIC_TOKEN secret to a token with push access}" + + export PATH="$HOME/.nix-profile/bin:$PATH" + + attic login --set-default ci "$ATTIC_SERVER" "$ATTIC_TOKEN" + attic use "$ATTIC_CACHE" + + - name: Build packages + shell: bash + run: | + set -euo pipefail + + system="$(nix eval --impure --raw --expr builtins.currentSystem)" + + nix build --accept-flake-config --no-link --print-out-paths -L \ + ".#packages.${system}.sable-web" \ + ".#packages.${system}.musicpresence" \ + ".#packages.${system}.vintage-story" \ + ".#packages.${system}.swaytreesave" \ + | tee built-paths.txt + + - name: Push packages to Attic + shell: bash + run: | + set -euo pipefail + export PATH="$HOME/.nix-profile/bin:$PATH" + xargs -r attic push "$ATTIC_CACHE" < built-paths.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1cd791b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +result/ diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..c183105 --- /dev/null +++ b/flake.lock @@ -0,0 +1,117 @@ +{ + "nodes": { + "darwin": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779036909, + "narHash": "sha256-zXcwYQGCT6pzinK+1dBB2ekTVtfxGZAapb3Evdcu4fY=", + "owner": "LnL7", + "repo": "nix-darwin", + "rev": "56c666e108467d87d13508936aade6d567f2a501", + "type": "github" + }, + "original": { + "owner": "LnL7", + "repo": "nix-darwin", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1779507042, + "narHash": "sha256-7wOwi8B6D0BYsieZCnHZZj2sNUzgJhLoIVSfkwB7lxQ=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "509ed3c603349a9d43de9e2ae6613baea6bd5b34", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1778443072, + "narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1779357205, + "narHash": "sha256-cCO8aTqss5x9Ky8GWkpY0Hy5fyTZEbtifSUV8QjSzic=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f83fc3c307e74bc5fd5adb7eb6b8b13ffd2a36e1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "darwin": "darwin", + "flake-utils": "flake-utils", + "home-manager": "home-manager", + "nixpkgs": "nixpkgs_2" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix index 9c21e85..5cb328d 100644 --- a/flake.nix +++ b/flake.nix @@ -14,7 +14,6 @@ systems = [ "x86_64-linux" "aarch64-linux" - # "x86_64-darwin" "aarch64-darwin" ]; forAllSystems = f: nixpkgs.lib.genAttrs systems f; diff --git a/overlays/default.nix b/overlays/default.nix index e69de29..ce16870 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -0,0 +1 @@ +final: prev: { } diff --git a/pkgs/default.nix b/pkgs/default.nix index 3929150..f52b915 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,5 +1,6 @@ { pkgs }: { sable-web = pkgs.callPackage ./common/sable.nix {}; - music-presense = pkgs.callPackage ./linux/music-presence.nix {}; + swaytreesave = pkgs.callPackage ./linux/swaytreesave.nix {}; + musicpresence = pkgs.callPackage ./linux/musicpresence.nix {}; vintage-story = pkgs.callPackage ./linux/vintage-story.nix {}; } diff --git a/pkgs/linux/music-presence.nix b/pkgs/linux/music-presence.nix deleted file mode 100644 index e3c2ebb..0000000 --- a/pkgs/linux/music-presence.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ pkgs }: -{ - default = - let - pname = "musicpresence"; - version = "2.3.5"; - - src = pkgs.fetchurl { - url = "https://github.com/ungive/discord-music-presence/releases/download/v${version}/${pname}-${version}-linux-x86_64.AppImage"; - hash = "sha256-M7oDxVevspA3SGuHktS8ChQAYopgIqypiVlzyE4uyqI="; - }; - - appimageContents = pkgs.appimageTools.extract { inherit pname version src; }; - in - pkgs.appimageTools.wrapType2 { - inherit pname version src; - - nativeBuildInputs = with pkgs; [ makeWrapper ]; - extraInstallCommands = '' - wrapProgram $out/bin/${pname} \ - --set QT_QPA_PLATFORM xcb \ - --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" - install -Dm444 ${appimageContents}/musicpresence.desktop -t $out/share/applications - ''; - - passthru.updateScript = pkgs.nix-update-script { }; - }; -} diff --git a/pkgs/linux/musicpresence.nix b/pkgs/linux/musicpresence.nix new file mode 100644 index 0000000..c347a69 --- /dev/null +++ b/pkgs/linux/musicpresence.nix @@ -0,0 +1,27 @@ +{ pkgs }: +let + pname = "musicpresence"; + version = "2.3.5"; + + src = pkgs.fetchurl { + url = "https://github.com/ungive/discord-music-presence/releases/download/v${version}/${pname}-${version}-linux-x86_64.AppImage"; + hash = "sha256-M7oDxVevspA3SGuHktS8ChQAYopgIqypiVlzyE4uyqI="; + }; + + appimageContents = pkgs.appimageTools.extract { + inherit pname version src; + }; +in +pkgs.appimageTools.wrapType2 { + inherit pname version src; + + nativeBuildInputs = with pkgs; [ makeWrapper ]; + extraInstallCommands = '' + wrapProgram $out/bin/${pname} \ + --set QT_QPA_PLATFORM xcb \ + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" + install -Dm444 ${appimageContents}/musicpresence.desktop -t $out/share/applications + ''; + + passthru.updateScript = pkgs.nix-update-script { }; +} diff --git a/pkgs/linux/swaytreesave.nix b/pkgs/linux/swaytreesave.nix new file mode 100644 index 0000000..73702a3 --- /dev/null +++ b/pkgs/linux/swaytreesave.nix @@ -0,0 +1,24 @@ +{ pkgs }: +let + pname = "swaytreesave"; + version = "0.4.0"; + + src = pkgs.fetchFromGitHub { + owner = "fabienjuif"; + repo = "swaytreesave"; + rev = "v${version}"; + sha256 = "sha256-aAJBbauOiFERABF13hMhxyvRBzcx5c1F+vbm/U+JS8o="; + }; +in pkgs.rustPlatform.buildRustPackage { + inherit pname version src; + cargoLock = { lockFile = "${src}/Cargo.lock"; }; + + meta = { + description = "CLI to save and load your compositors tree/layout"; + mainProgram = "swaytreesave"; + homepage = "https://github.com/fabienjuif/swaytreesave"; + maintainers = [ "wymillerlinux" ]; + platforms = [ "x86_64-linux" ]; + changelog = "https://github.com/fabienjuif/swaytreesave/releases/tag/v${version}"; + }; +} diff --git a/pkgs/linux/vintage-story.nix b/pkgs/linux/vintage-story.nix index b6f1fed..3119a9c 100644 --- a/pkgs/linux/vintage-story.nix +++ b/pkgs/linux/vintage-story.nix @@ -2,100 +2,99 @@ let x11Support = true; waylandSupport = true; -in { - default = pkgs.stdenv.mkDerivation (finalAttrs: - let - inherit (pkgs) lib; - in { - pname = "vintagestory"; - version = "1.21.6"; +in pkgs.stdenv.mkDerivation (finalAttrs: + let + inherit (pkgs) lib; + in { + pname = "vintagestory"; + version = "1.21.6"; - src = pkgs.fetchurl { - url = "https://cdn.vintagestory.at/gamefiles/stable/vs_client_linux-x64_${finalAttrs.version}.tar.gz"; - hash = "sha256-LkiL/8W9MKpmJxtK+s5JvqhOza0BLap1SsaDvbLYR0c="; - }; + src = pkgs.fetchurl { + url = "https://cdn.vintagestory.at/gamefiles/stable/vs_client_linux-x64_${finalAttrs.version}.tar.gz"; + hash = "sha256-LkiL/8W9MKpmJxtK+s5JvqhOza0BLap1SsaDvbLYR0c="; + }; - nativeBuildInputs = with pkgs; [ - makeWrapper - copyDesktopItems - ]; + nativeBuildInputs = with pkgs; [ + makeWrapper + copyDesktopItems + ]; - runtimeLibs = with pkgs; [ - gtk2 - sqlite - openal - cairo - libGLU - SDL2 - freealut - libglvnd - pipewire - libpulseaudio - ] - ++ lib.optionals x11Support (with pkgs.xorg; [ - libX11 - libXi - libXcursor - ]) - ++ lib.optionals waylandSupport (with pkgs; [ - wayland - libxkbcommon - ]); + runtimeLibs = with pkgs; [ + gtk2 + sqlite + openal + cairo + libGLU + SDL2 + freealut + libglvnd + pipewire + libpulseaudio + ] + ++ lib.optionals x11Support (with pkgs.xorg; [ + libX11 + libXi + libXcursor + ]) + ++ lib.optionals waylandSupport (with pkgs; [ + wayland + libxkbcommon + ]); - desktopItems = [ - (pkgs.makeDesktopItem { - name = "vintagestory"; - desktopName = "Vintage Story"; - exec = "vintagestory"; - icon = "vintagestory"; - comment = "Innovate and explore in a sandbox world"; - categories = [ "Game" ]; - }) + desktopItems = [ + (pkgs.makeDesktopItem { + name = "vintagestory"; + desktopName = "Vintage Story"; + exec = "vintagestory"; + icon = "vintagestory"; + comment = "Innovate and explore in a sandbox world"; + categories = [ "Game" ]; + }) - (pkgs.makeDesktopItem { - name = "vsmodinstall-handler"; - desktopName = "Vintage Story 1-click Mod Install Handler"; - comment = "Handler for vintagestorymodinstall:// URI scheme"; - exec = "vintagestory -i %u"; - mimeTypes = [ "x-scheme-handler/vintagestorymodinstall" ]; - noDisplay = true; - terminal = false; - }) - ]; + (pkgs.makeDesktopItem { + name = "vsmodinstall-handler"; + desktopName = "Vintage Story 1-click Mod Install Handler"; + comment = "Handler for vintagestorymodinstall:// URI scheme"; + exec = "vintagestory -i %u"; + mimeTypes = [ "x-scheme-handler/vintagestorymodinstall" ]; + noDisplay = true; + terminal = false; + }) + ]; - installPhase = '' - runHook preInstall + installPhase = '' + runHook preInstall - mkdir -p $out/share/vintagestory $out/bin $out/share/pixmaps $out/share/fonts/truetype - cp -r * $out/share/vintagestory - cp $out/share/vintagestory/assets/gameicon.xpm $out/share/pixmaps/vintagestory.xpm - cp $out/share/vintagestory/assets/game/fonts/*.ttf $out/share/fonts/truetype + mkdir -p $out/share/vintagestory $out/bin $out/share/pixmaps $out/share/fonts/truetype + cp -r * $out/share/vintagestory + cp $out/share/vintagestory/assets/gameicon.xpm $out/share/pixmaps/vintagestory.xpm + cp $out/share/vintagestory/assets/game/fonts/*.ttf $out/share/fonts/truetype - runHook postInstall + runHook postInstall + ''; + + preFixup = + let + runtimeLibs' = lib.strings.makeLibraryPath finalAttrs.runtimeLibs; + in + '' + makeWrapper ${lib.meta.getExe pkgs.dotnet-runtime_8} $out/bin/vintagestory \ + --prefix LD_LIBRARY_PATH : "${runtimeLibs'}" \ + --set-default mesa_glthread true \ + ${lib.strings.optionalString waylandSupport '' + --set-default OPENTK_4_USE_WAYLAND 1 \ + ''} \ + --add-flags $out/share/vintagestory/Vintagestory.dll + + makeWrapper ${lib.meta.getExe pkgs.dotnet-runtime_8} $out/bin/vintagestory-server \ + --prefix LD_LIBRARY_PATH : "${runtimeLibs'}" \ + --set-default mesa_glthread true \ + --add-flags $out/share/vintagestory/VintagestoryServer.dll + + find "$out/share/vintagestory/assets/" -not -path "*/fonts/*" -regex ".*/.*[A-Z].*" | while read -r file; do + local filename="$(basename -- "$file")" + ln -sf "$filename" "''${file%/*}"/"''${filename,,}" + done ''; - - preFixup = - let - runtimeLibs' = lib.strings.makeLibraryPath finalAttrs.runtimeLibs; - in - '' - makeWrapper ${lib.meta.getExe pkgs.dotnet-runtime_8} $out/bin/vintagestory \ - --prefix LD_LIBRARY_PATH : "${runtimeLibs'}" \ - --set-default mesa_glthread true \ - ${lib.strings.optionalString waylandSupport '' - --set-default OPENTK_4_USE_WAYLAND 1 \ - ''} \ - --add-flags $out/share/vintagestory/Vintagestory.dll - - makeWrapper ${lib.meta.getExe pkgs.dotnet-runtime_8} $out/bin/vintagestory-server \ - --prefix LD_LIBRARY_PATH : "${runtimeLibs'}" \ - --set-default mesa_glthread true \ - --add-flags $out/share/vintagestory/VintagestoryServer.dll - - find "$out/share/vintagestory/assets/" -not -path "*/fonts/*" -regex ".*/.*[A-Z].*" | while read -r file; do - local filename="$(basename -- "$file")" - ln -sf "$filename" "''${file%/*}"/"''${filename,,}" - done - ''; - }); -} + } + )