[Shield Tablet General] tenFootPedal:
What works

Leanback Launcher

Leanback App Buttons (you may still want Sideload Launcher for some things)

Leanback Recommendations

HDMI-CEC (insofar as my TV supports it YMMV)

Shield Controller, including right thumbstick as mouse

Ten Foot experiences for applications that check for it

What doesn't work

Cast Receiver

Probably other things, this is a work in progress

What's needed

ADB access - If you don't have the Android SDK you can just use Minimal ADB and Fastboot

Stock 5.0 OTA (Android 7.0 Nougat) - I don't know how necessary this is but it's what I used.

Root

TWRP or some means of flashing a zip

Open GApps arm tvstock

Step 1 - Debloat

First we need to get rid of a number of things that we won't need, or will get in the way. Use debloat.zip for this. I actually like to run this initially, as well as after Gapps are installed. The script file inside is copied in the spoiler below.

mount("ext4", "EMMC", "/dev/block/platform/sdhci-tegra.3/by-name/APP", "/system");
ui_print("System app removals");

delete_recursive("/system/priv-app/BackupRestoreConfirmation");
delete_recursive("/system/priv-app/BlockedNumberProvider");
delete_recursive("/system/priv-app/ConfigUpdater");
delete_recursive("/system/priv-app/CalendarProvider");
delete_recursive("/system/priv-app/Contacts");
delete_recursive("/system/priv-app/ContactsProvider");
delete_recursive("/system/priv-app/DocumentsUI");
delete_recursive("/system/priv-app/GmsCore");
delete_recursive("/system/priv-app/GoogleBackupTransport");
delete_recursive("/system/priv-app/GoogleFeedback");
delete_recursive("/system/priv-app/GoogleLoginService");
delete_recursive("/system/priv-app/GoogleOneTimeInitializer");
delete_recursive("/system/priv-app/GooglePartnerSetup");
delete_recursive("/system/priv-app/GoogleServicesFramework");
delete_recursive("/system/priv-app/MmsService");
delete_recursive("/system/priv-app/Phonesky");
delete_recursive("/system/priv-app/SetupWizard");
delete_recursive("/system/priv-app/TegraOTA");
delete_recursive("/system/priv-app/TeleService");
delete_recursive("/system/priv-app/Telecom");
delete_recursive("/system/priv-app/Velvet");
delete_recursive("/system/priv-app/NvLauncher");
delete_recursive("/system/priv-app/NvCustomize");
#delete_recursive("/system/priv-app/NvRpxService"); needed for controller pairing
delete_recursive("/system/priv-app/nvlasso");
delete_recursive("/system/priv-app/shield_platform_analyzer");
delete_recursive("/system/priv-app/shieldcustomize");
delete_recursive("/system/priv-app/Katniss");

delete_recursive("/system/app/CalendarGoogle");
delete_recursive("/system/app/Chrome");
delete_recursive("/system/app/CloudPrint");
delete_recursive("/system/app/DeskClockGoogle");
delete_recursive("/system/app/Drive");
delete_recursive("/system/app/ExactCalculator");
delete_recursive("/system/app/FaceLock");
delete_recursive("/system/app/Gmail2");
delete_recursive("/system/app/GoogleContactsSyncAdapter");
delete_recursive("/system/app/GooglePrintRecommendationService");
delete_recursive("/system/app/GoogleTTS");
delete_recursive("/system/app/Hangouts");
delete_recursive("/system/app/JusWrite");
delete_recursive("/system/app/Maps");
delete_recursive("/system/app/Music2");
delete_recursive("/system/app/PlayGames");
delete_recursive("/system/app/PrintSpooler");
delete_recursive("/system/app/SoundRecorder");
delete_recursive("/system/app/Tn8Tdc");
delete_recursive("/system/app/Videos");
delete_recursive("/system/app/Write");
delete_recursive("/system/app/idsmonitor");
delete_recursive("/system/app/stylusmobile-oem");
delete_recursive("/system/app/talkback");
delete_recursive("/system/app/trine2");
delete_recursive("/system/app/Twitch");
delete_recursive("/system/app/YouTube");
delete_recursive("/system/app/Music2Pano");
delete_recursive("/system/app/VideosPano");

delete_recursive("/system/vendor/app/CalibNotifier");
delete_recursive("/system/vendor/app/ConsoleSplash");
#delete_recursive("/system/vendor/app/ConsoleUI");
delete_recursive("/system/vendor/app/NvAndroidOSC");
delete_recursive("/system/vendor/app/NvBenchmarkBlocker");
delete_recursive("/system/vendor/app/NvCPLUpdater");
delete_recursive("/system/vendor/app/NvCamera");
delete_recursive("/system/vendor/app/NvEsrd");
delete_recursive("/system/vendor/app/NvGamecast");
delete_recursive("/system/vendor/app/NvRegistration");
delete_recursive("/system/vendor/app/Stats");
delete_recursive("/system/vendor/app/TegraZone");
delete_recursive("/system/vendor/app/Welcome");
delete_recursive("/system/vendor/app/nvbatterymonitorservice");
delete_recursive("/system/vendor/app/nvidiafeedback");
delete_recursive("/system/vendor/app/nvpowerstats");
delete_recursive("/system/vendor/app/watercolor");

ui_print("Finish");

Step 2 - TV Permissions

Some apps with ten foot experiences are packaged and distributed separately from their mobile/tablet counterparts (like Twitch and ESPN). Others, package all experiences together and ask for permissions at runtime (like PBS Video and PBS Kids). The attached tv_permissions.zip file adds these, as well as android.software.picture_in_picture in order to prevent an exception when the home button is double tapped.

Step 3 - Settings activity is now broken

This is because our conflicted device is looking for the ribbon at the top of the settings activity, but it doesn't exist in the tv layout. fixes.zip patches Settings.apk to include the ribbon in the tv layout.

If you have issues with this, try running debloat and tv_permissions, boot the device, then go back to recovery and flash fixes.zip.

Step 4 - Open GApps tvstock

Big thanks to the Open GApps guys for this one. I cheated a bit here and instead of adding the packages one-by-one to be removed in the debloat script, I manually removed a number of tars from the zip file. I'll fix this, I promise but in the meantime open up the zip file and remove the following:

GApps/castreceiver-arm.tar.lz

GApps/gamepadpairing-arm.tar.lz

GApps/livechannels-arm.tar.lz

GApps/talkback-arm.tar.lz

GApps/tvmovies-arm.tar.lz

GApps/tvmusic-arm.tar.lz

GApps/tvplaygames-arm.tar.lz

Core/bugreport-all.tar.lz

Core/googlebackuptransport-all.tar.lz

Core/googlecontactssync-all.tar.lz

Core/gsfcore-all.tar.lz

Core/notouch-all.tar.lz

Core/setupwraith-all.tar.lz

...or don't if you want to experiment with Google Play Services, but that's not my cup of tea on a TV device. Early builds saw hangouts messages popping up while my wife and I were watching tv (ugh). By the way anything you do with any of this knowledge your sole responsibility.

Other Minutiae

Use the SPMC fork if you use Kodi. You will get recommendations/now playing, among other things.

Some apps may look for Play Services at runtime (I had this with Twitch, for example). If you don't want GPS/GSF I can verify that microG works for this. I used Lanchon's Haystack for signature spoofing. This required Linux and the Android SDK, but there are other ways to accomplish signature spoofing, I just didn't try them.

You'll need some means of downloading app packages without Play Store on your device. I used Raccoon and DummyDroid with the build.prop from Shield Android TV and this user agent string:

'Android-Finsky/6.5.08.D-all (versionCode=80650800,sdk=23,device=foster,hardware=foster_e,product=foster,build=NRD90M:user)'

Originally, I wanted to do this as a custom AOSP or Lineage-based rom. Some of the issues I ran into were beyond my reckoning and I decided to cut bait and use stock. Lineage does work though, you'll just be sacrificing HDMI-CEC and Granular HDMI audio volume (Steel01 got HDMI audio working though, so big props there).

One thing that was bugging me was that the Shield Controller won't wake the tablet when the tablet is on batter power, even if you have it set to leave wifi on when sleeping. The following setting will fix this:

adb shell settings put system com.nvidia.blakepairing.agoAlwaysOn 1

Edit 3/6

Guide skeleton, can't attach zips, screens, or post links

Setting to wake device on battery power

Edit 3/9

Screens and flashable zips added