diff --git a/nix/steam_deck/configuration.nix b/nix/steam_deck/configuration.nix new file mode 100644 index 00000000..28205856 --- /dev/null +++ b/nix/steam_deck/configuration.nix @@ -0,0 +1,61 @@ +{ + config, + pkgs, + nixgl, + ... +}: +{ + imports = [ + # ./roles/2ship2harkinian + # ./roles/ares + # ./roles/dolphin + # ./roles/dont_use_substituters + # ./roles/duckstation + # ./roles/global_options + # ./roles/graphics + # ./roles/pcsx2 + # ./roles/rpcs3 + # ./roles/ryujinx + # ./roles/shipwright + # ./roles/sm64ex + # ./roles/spaghettikart + # ./roles/steam_rom_manager + # ./roles/yuzu + # ./util/copy_files + # ./util/persist_symlink + ./util/unfree_polyfill + ]; + + # enable flakes + # nix = { + # package = pkgs.nix; + # settings.experimental-features = [ + # "nix-command" + # "flakes" + # ]; + # }; + # Automatic garbage collection + # nix.gc = { + # # Runs nix-collect-garbage --delete-older-than 30d + # automatic = true; + # randomizedDelaySec = "14m"; + # options = "--delete-older-than 30d"; + # }; + # nix.settings.auto-optimise-store = true; + + # home.packages = with pkgs; [ + # pkgs.nixgl.nixGLIntel + # (pkgs.nixgl.nixGLCommon pkgs.nixgl.nixGLIntel) + # pkgs.nixgl.nixVulkanIntel + # ]; + + # This would keep build-time dependencies so I can rebuild while offline. + # nix.settings = { + # keep-outputs = true; + # keep-derivations = true; + # }; + + config = { + castrum.packages = with pkgs; [ nano ]; + }; +} diff --git a/nix/steam_deck/configuration/README.org b/nix/steam_deck/configuration/README.org deleted file mode 100644 index 6e324621..00000000 --- a/nix/steam_deck/configuration/README.org +++ /dev/null @@ -1,79 +0,0 @@ -* Initial Setup -** Mount /home/deck/nix to /nix -The default /nix is too small and it could be modified by OS releases. We want to use something in our home folder since that will be untouched in upgrades. - -# TODO: /home/nix gets owned by root but it should be owned by deck:deck for single-user nix installs - -# TODO: nixos-installer adds this to /home/deck/.bash_profile , will this be wiped out in updates? -# if [ -e /home/deck/.nix-profile/etc/profile.d/nix.sh ]; then . /home/deck/.nix-profile/etc/profile.d/nix.sh; fi # added by Nix installer - -Create =/etc/systemd/system/nix-directory.service= -#+begin_src text - [Unit] - Description=Create a `/nix` directory to be used for bind mounting - #PropagatesStopTo=nix-daemon.service - PropagatesStopTo=nix.mount - DefaultDependencies=no - - [Service] - Type=oneshot - ExecStart=steamos-readonly disable - ExecStart=mkdir -vp /nix - ExecStart=chmod -v 0755 /nix - ExecStart=chown -v root /nix - ExecStart=chgrp -v root /nix - ExecStart=steamos-readonly enable - ExecStop=steamos-readonly disable - ExecStop=rmdir /nix - ExecStop=steamos-readonly enable - RemainAfterExit=true -#+end_src - -Create =/etc/systemd/system/nix.mount= -#+begin_src text - [Unit] - Description=Mount `/home/nix` on `/nix` - #PropagatesStopTo=nix-daemon.service - PropagatesStopTo=nix-directory.service - After=nix-directory.service - Requires=nix-directory.service - ConditionPathIsDirectory=/nix - DefaultDependencies=no - #RequiredBy=nix-daemon.service - #RequiredBy=nix-daemon.socket - - [Mount] - What=/home/nix - Where=/nix - Type=none - DirectoryMode=0755 - Options=bind -#+end_src - -Create =/etc/systemd/system/ensure-symlinked-units-resolve.service= -#+begin_src text - [Unit] - Description=Ensure Nix related units which are symlinked resolve - After=nix.mount - Requires=nix-directory.service - Requires=nix.mount - DefaultDependencies=no - - [Service] - Type=oneshot - RemainAfterExit=yes - ExecStart=/usr/bin/systemctl daemon-reload - #ExecStart=/usr/bin/systemctl restart --no-block nix-daemon.socket - - [Install] - WantedBy=sysinit.target -#+end_src - -Enable the mount by running -#+begin_src bash - sudo systemctl enable --now ensure-symlinked-units-resolve.service -#+end_src -** Install nix -#+begin_src bash - sh <(curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install) --no-daemon -#+end_src diff --git a/nix/steam_deck/flake.lock b/nix/steam_deck/flake.lock new file mode 100644 index 00000000..1ff9a022 --- /dev/null +++ b/nix/steam_deck/flake.lock @@ -0,0 +1,82 @@ +{ + "nodes": { + "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" + } + }, + "nixgl": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1762090880, + "narHash": "sha256-fbRQzIGPkjZa83MowjbD2ALaJf9y6KMDdJBQMKFeY/8=", + "owner": "nix-community", + "repo": "nixGL", + "rev": "b6105297e6f0cd041670c3e8628394d4ee247ed5", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixGL", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1770197578, + "narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixgl": "nixgl", + "nixpkgs": "nixpkgs" + } + }, + "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/nix/steam_deck/flake.nix b/nix/steam_deck/flake.nix new file mode 100644 index 00000000..5381c102 --- /dev/null +++ b/nix/steam_deck/flake.nix @@ -0,0 +1,52 @@ +{ + description = "My system configuration"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + nixgl = { + url = "github:nix-community/nixGL"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + outputs = + { + nixpkgs, + nixgl, + ... + }: + let + forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed; + castrum = import ./util/castrum; + in + { + packages = forAllSystems ( + system: + let + pkgs = import nixpkgs { + inherit system; + overlays = [ nixgl.overlay ]; + }; + in + { + profile = castrum.lib.castrumSystem { + inherit pkgs; + # Specifies things to pin in the flake registry and in NIX_PATH. + pinned = { + nixpkgs = toString nixpkgs; + }; + + modules = [ + # { nixpkgs.overlays = [ nixgl.overlay ]; } + # impermanence.homeManagerModules.impermanence + ./hosts/deck + ./configuration.nix + ]; + specialArgs = { + inherit nixgl; + inherit nixpkgs; + }; + }; + } + ); + }; +} diff --git a/nix/steam_deck/hosts/deck/DEPLOY_SWITCH b/nix/steam_deck/hosts/deck/DEPLOY_SWITCH new file mode 100755 index 00000000..574f0890 --- /dev/null +++ b/nix/steam_deck/hosts/deck/DEPLOY_SWITCH @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# +set -euo pipefail +IFS=$'\n\t' +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +: "${JOBS:="1"}" + +TARGET=deck@172.16.16.250 + +rsync -av --progress --delete --exclude=.git "$DIR/../../" "${TARGET}:~/.config/mynix" +rsync -av --progress --delete --exclude=.git "/persist/manual/manual_add_to_store" "${TARGET}:~/.persist/manual/" + +# nix run --extra-experimental-features nix-command --extra-experimental-features flakes .#profile.switch + +# ssh "${TARGET}" 'source /home/deck/.nix-profile/etc/profile.d/nix.sh && for f in ~/.persist/manual/manual_add_to_store/*; do nix-store --add-fixed sha256 "$f"; done' + +ssh "${TARGET}" "source /home/deck/.nix-profile/etc/profile.d/nix.sh && nix run --extra-experimental-features nix-command --extra-experimental-features flakes /home/deck/.config/mynix#profile.switch --show-trace" + +# ssh "${TARGET}" 'cat .config/mynix/flake.lock' > "$DIR/../../flake.lock" diff --git a/nix/steam_deck/hosts/deck/default.nix b/nix/steam_deck/hosts/deck/default.nix new file mode 100644 index 00000000..0259e241 --- /dev/null +++ b/nix/steam_deck/hosts/deck/default.nix @@ -0,0 +1,30 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + imports = [ ]; + + config = { + # me.ares.enable = true; + # me.dolphin.enable = true; + # me.dont_use_substituters.enable = true; + # me.duckstation.enable = true; + # me.graphical = true; + # me.optimizations.enable = true; + # me.pcsx2.enable = true; + # me.rpcs3.enable = true; + # me.ryujinx.enable = true; + # me.ship2harkinian.enable = true; + # me.shipwright.enable = true; + # me.sm64ex.enable = true; + # me.spaghettikart.enable = true; + # me.steam_rom_manager.enable = true; # Steam rom manager UI does not render. I think it wants to be in an AppImage. + # me.yuzu.enable = true; + + castrum.packages = with pkgs; [ ]; + }; +} diff --git a/nix/steam_deck/configuration/flake.lock b/nix/steam_deck/old_home_manager_configuration/flake.lock similarity index 100% rename from nix/steam_deck/configuration/flake.lock rename to nix/steam_deck/old_home_manager_configuration/flake.lock diff --git a/nix/steam_deck/configuration/flake.nix b/nix/steam_deck/old_home_manager_configuration/flake.nix similarity index 100% rename from nix/steam_deck/configuration/flake.nix rename to nix/steam_deck/old_home_manager_configuration/flake.nix diff --git a/nix/steam_deck/configuration/home.nix b/nix/steam_deck/old_home_manager_configuration/home.nix similarity index 100% rename from nix/steam_deck/configuration/home.nix rename to nix/steam_deck/old_home_manager_configuration/home.nix diff --git a/nix/steam_deck/configuration/hosts/deck/DEPLOY_SWITCH b/nix/steam_deck/old_home_manager_configuration/hosts/deck/DEPLOY_SWITCH similarity index 100% rename from nix/steam_deck/configuration/hosts/deck/DEPLOY_SWITCH rename to nix/steam_deck/old_home_manager_configuration/hosts/deck/DEPLOY_SWITCH diff --git a/nix/steam_deck/configuration/hosts/deck/default.nix b/nix/steam_deck/old_home_manager_configuration/hosts/deck/default.nix similarity index 100% rename from nix/steam_deck/configuration/hosts/deck/default.nix rename to nix/steam_deck/old_home_manager_configuration/hosts/deck/default.nix diff --git a/nix/steam_deck/configuration/roles/2ship2harkinian/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/2ship2harkinian/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/2ship2harkinian/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/2ship2harkinian/default.nix diff --git a/nix/steam_deck/configuration/roles/2ship2harkinian/files/2ship2harkinian.json b/nix/steam_deck/old_home_manager_configuration/roles/2ship2harkinian/files/2ship2harkinian.json similarity index 100% rename from nix/steam_deck/configuration/roles/2ship2harkinian/files/2ship2harkinian.json rename to nix/steam_deck/old_home_manager_configuration/roles/2ship2harkinian/files/2ship2harkinian.json diff --git a/nix/steam_deck/configuration/roles/ares/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/ares/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/ares/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/ares/default.nix diff --git a/nix/steam_deck/configuration/roles/ares/files/settings.bml b/nix/steam_deck/old_home_manager_configuration/roles/ares/files/settings.bml similarity index 100% rename from nix/steam_deck/configuration/roles/ares/files/settings.bml rename to nix/steam_deck/old_home_manager_configuration/roles/ares/files/settings.bml diff --git a/nix/steam_deck/configuration/roles/blank/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/blank/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/blank/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/blank/default.nix diff --git a/nix/steam_deck/configuration/roles/dolphin/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/dolphin/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/dolphin/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/dolphin/default.nix diff --git a/nix/steam_deck/configuration/roles/dolphin/files/Dolphin.ini b/nix/steam_deck/old_home_manager_configuration/roles/dolphin/files/Dolphin.ini similarity index 100% rename from nix/steam_deck/configuration/roles/dolphin/files/Dolphin.ini rename to nix/steam_deck/old_home_manager_configuration/roles/dolphin/files/Dolphin.ini diff --git a/nix/steam_deck/configuration/roles/dolphin/files/GCPadNew.ini b/nix/steam_deck/old_home_manager_configuration/roles/dolphin/files/GCPadNew.ini similarity index 100% rename from nix/steam_deck/configuration/roles/dolphin/files/GCPadNew.ini rename to nix/steam_deck/old_home_manager_configuration/roles/dolphin/files/GCPadNew.ini diff --git a/nix/steam_deck/configuration/roles/dolphin/files/GFX.ini b/nix/steam_deck/old_home_manager_configuration/roles/dolphin/files/GFX.ini similarity index 100% rename from nix/steam_deck/configuration/roles/dolphin/files/GFX.ini rename to nix/steam_deck/old_home_manager_configuration/roles/dolphin/files/GFX.ini diff --git a/nix/steam_deck/configuration/roles/dolphin/files/deck.ini b/nix/steam_deck/old_home_manager_configuration/roles/dolphin/files/deck.ini similarity index 100% rename from nix/steam_deck/configuration/roles/dolphin/files/deck.ini rename to nix/steam_deck/old_home_manager_configuration/roles/dolphin/files/deck.ini diff --git a/nix/steam_deck/configuration/roles/dont_use_substituters/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/dont_use_substituters/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/dont_use_substituters/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/dont_use_substituters/default.nix diff --git a/nix/steam_deck/configuration/roles/duckstation/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/duckstation/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/duckstation/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/duckstation/default.nix diff --git a/nix/steam_deck/configuration/roles/duckstation/files/settings.ini b/nix/steam_deck/old_home_manager_configuration/roles/duckstation/files/settings.ini similarity index 100% rename from nix/steam_deck/configuration/roles/duckstation/files/settings.ini rename to nix/steam_deck/old_home_manager_configuration/roles/duckstation/files/settings.ini diff --git a/nix/steam_deck/configuration/roles/duckstation/package/001-fix-test-inclusion.diff b/nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/001-fix-test-inclusion.diff similarity index 100% rename from nix/steam_deck/configuration/roles/duckstation/package/001-fix-test-inclusion.diff rename to nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/001-fix-test-inclusion.diff diff --git a/nix/steam_deck/configuration/roles/duckstation/package/002-hardcode-vars.diff b/nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/002-hardcode-vars.diff similarity index 100% rename from nix/steam_deck/configuration/roles/duckstation/package/002-hardcode-vars.diff rename to nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/002-hardcode-vars.diff diff --git a/nix/steam_deck/configuration/roles/duckstation/package/003-fix-NEON-intrinsics.patch b/nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/003-fix-NEON-intrinsics.patch similarity index 100% rename from nix/steam_deck/configuration/roles/duckstation/package/003-fix-NEON-intrinsics.patch rename to nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/003-fix-NEON-intrinsics.patch diff --git a/nix/steam_deck/configuration/roles/duckstation/package/LICENSE b/nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/LICENSE similarity index 100% rename from nix/steam_deck/configuration/roles/duckstation/package/LICENSE rename to nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/LICENSE diff --git a/nix/steam_deck/configuration/roles/duckstation/package/package.nix b/nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/package.nix similarity index 100% rename from nix/steam_deck/configuration/roles/duckstation/package/package.nix rename to nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/package.nix diff --git a/nix/steam_deck/configuration/roles/duckstation/package/remove-cubeb-vendor.patch b/nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/remove-cubeb-vendor.patch similarity index 100% rename from nix/steam_deck/configuration/roles/duckstation/package/remove-cubeb-vendor.patch rename to nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/remove-cubeb-vendor.patch diff --git a/nix/steam_deck/configuration/roles/duckstation/package/shaderc-patched.nix b/nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/shaderc-patched.nix similarity index 100% rename from nix/steam_deck/configuration/roles/duckstation/package/shaderc-patched.nix rename to nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/shaderc-patched.nix diff --git a/nix/steam_deck/configuration/roles/duckstation/package/sources.nix b/nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/sources.nix similarity index 100% rename from nix/steam_deck/configuration/roles/duckstation/package/sources.nix rename to nix/steam_deck/old_home_manager_configuration/roles/duckstation/package/sources.nix diff --git a/nix/steam_deck/configuration/roles/global_options/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/global_options/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/global_options/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/global_options/default.nix diff --git a/nix/steam_deck/configuration/roles/graphics/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/graphics/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/graphics/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/graphics/default.nix diff --git a/nix/steam_deck/configuration/roles/pcsx2/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/pcsx2/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/pcsx2/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/pcsx2/default.nix diff --git a/nix/steam_deck/configuration/roles/pcsx2/files/PCSX2.ini b/nix/steam_deck/old_home_manager_configuration/roles/pcsx2/files/PCSX2.ini similarity index 100% rename from nix/steam_deck/configuration/roles/pcsx2/files/PCSX2.ini rename to nix/steam_deck/old_home_manager_configuration/roles/pcsx2/files/PCSX2.ini diff --git a/nix/steam_deck/configuration/roles/rpcs3/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/rpcs3/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/rpcs3/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/rpcs3/default.nix diff --git a/nix/steam_deck/configuration/roles/rpcs3/files/CurrentSettings.ini b/nix/steam_deck/old_home_manager_configuration/roles/rpcs3/files/CurrentSettings.ini similarity index 100% rename from nix/steam_deck/configuration/roles/rpcs3/files/CurrentSettings.ini rename to nix/steam_deck/old_home_manager_configuration/roles/rpcs3/files/CurrentSettings.ini diff --git a/nix/steam_deck/configuration/roles/ryujinx/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/ryujinx/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/ryujinx/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/ryujinx/default.nix diff --git a/nix/steam_deck/configuration/roles/ryujinx/files/Config.json b/nix/steam_deck/old_home_manager_configuration/roles/ryujinx/files/Config.json similarity index 100% rename from nix/steam_deck/configuration/roles/ryujinx/files/Config.json rename to nix/steam_deck/old_home_manager_configuration/roles/ryujinx/files/Config.json diff --git a/nix/steam_deck/configuration/roles/shipwright/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/shipwright/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/shipwright/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/shipwright/default.nix diff --git a/nix/steam_deck/configuration/roles/shipwright/files/shipofharkinian.json b/nix/steam_deck/old_home_manager_configuration/roles/shipwright/files/shipofharkinian.json similarity index 100% rename from nix/steam_deck/configuration/roles/shipwright/files/shipofharkinian.json rename to nix/steam_deck/old_home_manager_configuration/roles/shipwright/files/shipofharkinian.json diff --git a/nix/steam_deck/configuration/roles/shipwright/package/LICENSE b/nix/steam_deck/old_home_manager_configuration/roles/shipwright/package/LICENSE similarity index 100% rename from nix/steam_deck/configuration/roles/shipwright/package/LICENSE rename to nix/steam_deck/old_home_manager_configuration/roles/shipwright/package/LICENSE diff --git a/nix/steam_deck/configuration/roles/shipwright/package/darwin-fixes.patch b/nix/steam_deck/old_home_manager_configuration/roles/shipwright/package/darwin-fixes.patch similarity index 100% rename from nix/steam_deck/configuration/roles/shipwright/package/darwin-fixes.patch rename to nix/steam_deck/old_home_manager_configuration/roles/shipwright/package/darwin-fixes.patch diff --git a/nix/steam_deck/configuration/roles/shipwright/package/disable-downloading-stb_image.patch b/nix/steam_deck/old_home_manager_configuration/roles/shipwright/package/disable-downloading-stb_image.patch similarity index 100% rename from nix/steam_deck/configuration/roles/shipwright/package/disable-downloading-stb_image.patch rename to nix/steam_deck/old_home_manager_configuration/roles/shipwright/package/disable-downloading-stb_image.patch diff --git a/nix/steam_deck/configuration/roles/shipwright/package/package.nix b/nix/steam_deck/old_home_manager_configuration/roles/shipwright/package/package.nix similarity index 100% rename from nix/steam_deck/configuration/roles/shipwright/package/package.nix rename to nix/steam_deck/old_home_manager_configuration/roles/shipwright/package/package.nix diff --git a/nix/steam_deck/configuration/roles/sm64ex/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/sm64ex/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/sm64ex/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/sm64ex/default.nix diff --git a/nix/steam_deck/configuration/roles/sm64ex/files/sm64config.txt b/nix/steam_deck/old_home_manager_configuration/roles/sm64ex/files/sm64config.txt similarity index 100% rename from nix/steam_deck/configuration/roles/sm64ex/files/sm64config.txt rename to nix/steam_deck/old_home_manager_configuration/roles/sm64ex/files/sm64config.txt diff --git a/nix/steam_deck/configuration/roles/spaghettikart/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/spaghettikart/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/spaghettikart/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/spaghettikart/default.nix diff --git a/nix/steam_deck/configuration/roles/spaghettikart/files/spaghettify.cfg.json b/nix/steam_deck/old_home_manager_configuration/roles/spaghettikart/files/spaghettify.cfg.json similarity index 100% rename from nix/steam_deck/configuration/roles/spaghettikart/files/spaghettify.cfg.json rename to nix/steam_deck/old_home_manager_configuration/roles/spaghettikart/files/spaghettify.cfg.json diff --git a/nix/steam_deck/configuration/roles/spaghettikart/package/LICENSE b/nix/steam_deck/old_home_manager_configuration/roles/spaghettikart/package/LICENSE similarity index 100% rename from nix/steam_deck/configuration/roles/spaghettikart/package/LICENSE rename to nix/steam_deck/old_home_manager_configuration/roles/spaghettikart/package/LICENSE diff --git a/nix/steam_deck/configuration/roles/spaghettikart/package/dont-fetch-stb.patch b/nix/steam_deck/old_home_manager_configuration/roles/spaghettikart/package/dont-fetch-stb.patch similarity index 100% rename from nix/steam_deck/configuration/roles/spaghettikart/package/dont-fetch-stb.patch rename to nix/steam_deck/old_home_manager_configuration/roles/spaghettikart/package/dont-fetch-stb.patch diff --git a/nix/steam_deck/configuration/roles/spaghettikart/package/git-deps.patch b/nix/steam_deck/old_home_manager_configuration/roles/spaghettikart/package/git-deps.patch similarity index 100% rename from nix/steam_deck/configuration/roles/spaghettikart/package/git-deps.patch rename to nix/steam_deck/old_home_manager_configuration/roles/spaghettikart/package/git-deps.patch diff --git a/nix/steam_deck/configuration/roles/spaghettikart/package/package.nix b/nix/steam_deck/old_home_manager_configuration/roles/spaghettikart/package/package.nix similarity index 100% rename from nix/steam_deck/configuration/roles/spaghettikart/package/package.nix rename to nix/steam_deck/old_home_manager_configuration/roles/spaghettikart/package/package.nix diff --git a/nix/steam_deck/configuration/roles/steam_rom_manager/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/steam_rom_manager/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/steam_rom_manager/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/steam_rom_manager/default.nix diff --git a/nix/steam_deck/configuration/roles/steam_rom_manager/package.nix b/nix/steam_deck/old_home_manager_configuration/roles/steam_rom_manager/package.nix similarity index 100% rename from nix/steam_deck/configuration/roles/steam_rom_manager/package.nix rename to nix/steam_deck/old_home_manager_configuration/roles/steam_rom_manager/package.nix diff --git a/nix/steam_deck/configuration/roles/yuzu/default.nix b/nix/steam_deck/old_home_manager_configuration/roles/yuzu/default.nix similarity index 100% rename from nix/steam_deck/configuration/roles/yuzu/default.nix rename to nix/steam_deck/old_home_manager_configuration/roles/yuzu/default.nix diff --git a/nix/steam_deck/configuration/roles/yuzu/files/deck.ini b/nix/steam_deck/old_home_manager_configuration/roles/yuzu/files/deck.ini similarity index 100% rename from nix/steam_deck/configuration/roles/yuzu/files/deck.ini rename to nix/steam_deck/old_home_manager_configuration/roles/yuzu/files/deck.ini diff --git a/nix/steam_deck/configuration/roles/yuzu/files/qt-config.ini b/nix/steam_deck/old_home_manager_configuration/roles/yuzu/files/qt-config.ini similarity index 100% rename from nix/steam_deck/configuration/roles/yuzu/files/qt-config.ini rename to nix/steam_deck/old_home_manager_configuration/roles/yuzu/files/qt-config.ini diff --git a/nix/steam_deck/configuration/util/copy_files/default.nix b/nix/steam_deck/old_home_manager_configuration/util/copy_files/default.nix similarity index 100% rename from nix/steam_deck/configuration/util/copy_files/default.nix rename to nix/steam_deck/old_home_manager_configuration/util/copy_files/default.nix diff --git a/nix/steam_deck/configuration/util/persist_symlink/default.nix b/nix/steam_deck/old_home_manager_configuration/util/persist_symlink/default.nix similarity index 100% rename from nix/steam_deck/configuration/util/persist_symlink/default.nix rename to nix/steam_deck/old_home_manager_configuration/util/persist_symlink/default.nix diff --git a/nix/steam_deck/configuration/util/unfree_polyfill/default.nix b/nix/steam_deck/old_home_manager_configuration/util/unfree_polyfill/default.nix similarity index 100% rename from nix/steam_deck/configuration/util/unfree_polyfill/default.nix rename to nix/steam_deck/old_home_manager_configuration/util/unfree_polyfill/default.nix diff --git a/nix/steam_deck/util/castrum/castrumSystem.nix b/nix/steam_deck/util/castrum/castrumSystem.nix new file mode 100644 index 00000000..5791d5f2 --- /dev/null +++ b/nix/steam_deck/util/castrum/castrumSystem.nix @@ -0,0 +1,72 @@ +# Creates a profile. Arguments are forwarded to pkgs.buildEnv. +# +# The following attributes are available: +# - .switch: switches to the profile +# - .rollback: rolls back to the previous version of the profile +args@{ + # nixpkgs to use + pkgs, + # Name of the profile, which appears in the Nix store path of the result + name ? "castrum-profile", + # Items to pin in the flake registry and NIX_PATH, such that they're seen by + # `nix run nixpkgs#hello` and `nix-shell -p hello --run hello`. + pinned ? { }, + # Extra arguments given when switching profiles (n.b. not shell escaped). + extraSwitchArgs ? [ ], + + modules ? [ ], + specialArgs ? { }, + ... +}: +let + args' = builtins.removeAttrs args [ + "pkgs" + "pinned" + "extraSwitchArgs" + "modules" + "specialArgs" + ]; + pins = import ./pin.nix { inherit pkgs pinned; }; + + config = pkgs.lib.evalModules { + modules = [ ./modules ] ++ modules; + specialArgs = specialArgs // { + _pkgs = pkgs; + }; + }; + + env = pkgs.buildEnv ( + args' + // { + inherit name; + paths = [ pkgs.nix ] ++ config.config.castrum.packages; + } + ); +in +env +// { + switch = pkgs.writeShellScriptBin "switch" '' + nix-env --set ${env} ${toString extraSwitchArgs} "$@" + ''; + rollback = pkgs.writeShellScriptBin "rollback" '' + nix-env --rollback ${toString extraSwitchArgs} "$@" + ''; + + # pass through pins, so you can e.g. nix build .#profile.pins.channels + inherit pins; + # This script pins any of the items in "pinned" in both the flake registry + # and the nix channels, such that `nix run nixpkgs#hello` and + # `nix-shell -p hello --run hello` will hit the same nixpkgs as is used in + # the declarative profile. + # + # It is not really possible to cleanly roll this back in terms of the flake + # registry, so we suggest just reverting with git in that case. + pin = pkgs.writeShellScriptBin "pin" '' + if [[ $UID == 0 ]]; then + ${pins.pinFlakes { isRoot = true; }} + else + ${pins.pinFlakes { isRoot = false; }} + fi + nix-env --profile /nix/var/nix/profiles/per-user/$USER/channels --set ${pins.channels} + ''; +} diff --git a/nix/steam_deck/util/castrum/default.nix b/nix/steam_deck/util/castrum/default.nix new file mode 100644 index 00000000..51e1d418 --- /dev/null +++ b/nix/steam_deck/util/castrum/default.nix @@ -0,0 +1,3 @@ +{ + lib = import ./lib.nix; +} diff --git a/nix/steam_deck/util/castrum/lib.nix b/nix/steam_deck/util/castrum/lib.nix new file mode 100644 index 00000000..dc2f9235 --- /dev/null +++ b/nix/steam_deck/util/castrum/lib.nix @@ -0,0 +1,3 @@ +{ + castrumSystem = import ./castrumSystem.nix; +} diff --git a/nix/steam_deck/util/castrum/modules/default.nix b/nix/steam_deck/util/castrum/modules/default.nix new file mode 100644 index 00000000..bc68f2a2 --- /dev/null +++ b/nix/steam_deck/util/castrum/modules/default.nix @@ -0,0 +1,13 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + imports = [ + ./nixpkgs.nix + ./packages.nix + ]; +} diff --git a/nix/steam_deck/util/castrum/modules/nixpkgs.nix b/nix/steam_deck/util/castrum/modules/nixpkgs.nix new file mode 100644 index 00000000..373cecf3 --- /dev/null +++ b/nix/steam_deck/util/castrum/modules/nixpkgs.nix @@ -0,0 +1,68 @@ +{ + config, + options, + lib, + _pkgs, + nixpkgs, + ... +}: + +let + # finalPkgs = _pkgs; + finalPkgs = import nixpkgs { + system = _pkgs.system; + config = { }; + overlays = [ ]; + # inherit system; + # overlays = [ nixgl.overlay ]; + }; +in +{ + imports = [ + ]; + + # options.nixpkgs = { + # config = lib.mkOption { + # default = { }; + # example = lib.literalExpression '' + # { allowBroken = true; allowUnfree = true; } + # ''; + # type = configType; + # description = '' + # Global configuration for Nixpkgs. + # The complete list of [Nixpkgs configuration options](https://nixos.org/manual/nixpkgs/unstable/#sec-config-options-reference) is in the [Nixpkgs manual section on global configuration](https://nixos.org/manual/nixpkgs/unstable/#chap-packageconfig). + + # Ignored when {option}`nixpkgs.pkgs` is set. + # ''; + # }; + + # overlays = lib.mkOption { + # default = [ ]; + # example = lib.literalExpression '' + # [ + # (self: super: { + # openssh = super.openssh.override { + # hpnSupport = true; + # kerberos = self.libkrb5; + # }; + # }) + # ] + # ''; + # type = lib.types.listOf overlayType; + # description = '' + # List of overlays to apply to Nixpkgs. + # This option allows modifying the Nixpkgs package set accessed through the `pkgs` module argument. + + # For details, see the [Overlays chapter in the Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#chap-overlays). + + # If the {option}`nixpkgs.pkgs` option is set, overlays specified using `nixpkgs.overlays` will be applied after the overlays that were already included in `nixpkgs.pkgs`. + # ''; + # }; + # }; + + config = { + _module.args = { + pkgs = finalPkgs; + }; + }; +} diff --git a/nix/steam_deck/util/castrum/modules/packages.nix b/nix/steam_deck/util/castrum/modules/packages.nix new file mode 100644 index 00000000..b3f28d00 --- /dev/null +++ b/nix/steam_deck/util/castrum/modules/packages.nix @@ -0,0 +1,25 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + imports = [ + ]; + + options.castrum = { + packages = lib.mkOption { + type = lib.types.listOf lib.types.path; + default = [ ]; + example = with pkgs; [ + nano + bash + ]; + description = '' + List of packages to install. + ''; + }; + }; +} diff --git a/nix/steam_deck/util/castrum/pin.nix b/nix/steam_deck/util/castrum/pin.nix new file mode 100644 index 00000000..e3953bd4 --- /dev/null +++ b/nix/steam_deck/util/castrum/pin.nix @@ -0,0 +1,33 @@ +{ + pkgs, + pinned ? { }, +}: +let + inherit (pkgs) lib; + pathOk = item: builtins.match ".*-source$" (toString item) != null; + pathChecked = + name: item: + pkgs.lib.assertMsg (pathOk item) '' + Flake registry pin item path must end with -source, due to https://github.com/NixOS/nix/issues/7075. + Name: ${name} + Path: ${toString item} + + Consider pinning nixpkgs with `builtins.fetchTarball` with `name` set to "source". + ''; + + pins = builtins.mapAttrs ( + name: value: + assert pathChecked name value; + value + ) pinned; +in +{ + inherit pins; + channels = pkgs.linkFarm "user-environment" pins; + pinFlakes = + { isRoot }: + lib.concatMapStringsSep "\n" ( + name: + "nix registry pin ${lib.optionalString isRoot "--registry /etc/nix/registry.json"} --override-flake ${name} ${pins.${name}} ${name}" + ) (builtins.attrNames pins); +} diff --git a/nix/steam_deck/util/unfree_polyfill/default.nix b/nix/steam_deck/util/unfree_polyfill/default.nix new file mode 100644 index 00000000..55b05dc2 --- /dev/null +++ b/nix/steam_deck/util/unfree_polyfill/default.nix @@ -0,0 +1,20 @@ +{ + config, + lib, + foo, + ... +}: + +let + inherit (builtins) elem; + inherit (lib) getName mkOption; + inherit (lib.types) listOf str; +in +{ + # Pending https://github.com/NixOS/nixpkgs/issues/55674 + options.allowedUnfree = mkOption { + type = listOf str; + default = [ ]; + }; + # config.nixpkgs.config.allowUnfreePredicate = p: elem (getName p) config.allowedUnfree; +}