dot(Celeste): add celeste module

This commit is contained in:
js0ny 2026-03-09 17:08:04 +00:00
parent e15d9c76e8
commit 5548400ff8
4 changed files with 328 additions and 3 deletions

View file

@ -118,12 +118,10 @@ in {
noname noname
steamcmd steamcmd
# Celeste mod manager (for Steam version)
(olympus.override { celesteWrapper = "steam-run"; })
]; ];
imports = [ imports = [
../programs/retroarch.nix ../programs/retroarch.nix
../programs/celeste
paradoxLauncherUserSettings paradoxLauncherUserSettings
victoria3Settings victoria3Settings
pdxSdkSettingsEU5 pdxSdkSettingsEU5

View file

@ -0,0 +1,11 @@
{...}: {
imports = [
./lib.nix
];
programs.celeste = {
enable = true;
withSteam = true;
withOlympus = true;
settingsFile = ./settings.celeste;
};
}

View file

@ -0,0 +1,94 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.programs.celeste;
in {
options.programs.celeste = {
enable = mkEnableOption "Celeste";
withOlympus = mkOption {
type = types.bool;
default = false;
description = "Whether to include the Olympus mod manager.";
};
withSteam = mkOption {
type = types.bool;
default = true;
description = "Whether the game is installed via Steam (affects mod manager configuration).";
};
withEverest = mkOption {
type = types.bool;
default = false;
description = ''
Whether to install Everest mod loader.
Only applicable when using the celestegame (itch.io) package.
'';
};
writableDir = mkOption {
type = types.nullOr types.str;
default = null;
description = ''
Writable directory for Everest mods and logs.
Required when using celestegame with Everest, since the Nix store is read-only.
Example: "/home/user/Games/Celeste/writable"
'';
};
gameDir = mkOption {
type = types.nullOr types.str;
default = null;
description = ''
Path where a symbolic link to the Celeste installation will be created.
Useful for Olympus to discover the celestegame installation.
Example: "/home/user/Games/Celeste/game"
'';
};
settingsFile = mkOption {
type = types.nullOr types.path;
default = null;
description = ''
Path to the Celeste settings XML file in the dotfiles repository.
Will be symlinked to ~/.local/share/Celeste/Backups/settings.celeste
via mkOutOfStoreSymlink (out-of-store so the file remains mutable).
'';
};
};
config = mkIf cfg.enable {
home.packages =
# Olympus mod manager
(optional cfg.withOlympus (
if cfg.withSteam
then pkgs.olympus.override {celesteWrapper = "steam-run";}
else
(
if cfg.gameDir != null
then pkgs.olympus.override {finderHints = cfg.gameDir;}
else pkgs.olympus
)
))
# celestegame (itch.io DRM-free version)
++ (optional (!cfg.withSteam) (
pkgs.celestegame.override (
{}
// (optionalAttrs cfg.withEverest {withEverest = true;})
// (optionalAttrs (cfg.writableDir != null) {writableDir = cfg.writableDir;})
// (optionalAttrs (cfg.gameDir != null) {gameDir = cfg.gameDir;})
)
));
# Symlink settings.celeste from dotfiles repo
home.file = mkIf (cfg.settingsFile != null) {
".local/share/Celeste/Backups/settings.celeste".source =
config.lib.file.mkOutOfStoreSymlink cfg.settingsFile;
};
};
}

View file

@ -0,0 +1,222 @@
<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Version>1.4.0.0</Version>
<DefaultFileName />
<Fullscreen>true</Fullscreen>
<WindowScale>6</WindowScale>
<ViewportPadding>0</ViewportPadding>
<VSync>true</VSync>
<DisableFlashes>false</DisableFlashes>
<ScreenShake>false</ScreenShake>
<Rumble>true</Rumble>
<GrabMode>Hold</GrabMode>
<CrouchDashMode>Press</CrouchDashMode>
<MusicVolume>10</MusicVolume>
<SFXVolume>10</SFXVolume>
<SpeedrunClock>File</SpeedrunClock>
<LastSaveFile>0</LastSaveFile>
<Language>schinese</Language>
<Pico8OnMainMenu>false</Pico8OnMainMenu>
<SetViewportOnce>false</SetViewportOnce>
<VariantsUnlocked>true</VariantsUnlocked>
<Left>
<Keyboard>
<Keys>Left</Keys>
</Keyboard>
<Controller>
<Buttons>LeftThumbstickLeft</Buttons>
<Buttons>DPadLeft</Buttons>
</Controller>
</Left>
<Right>
<Keyboard>
<Keys>Right</Keys>
</Keyboard>
<Controller>
<Buttons>LeftThumbstickRight</Buttons>
<Buttons>DPadRight</Buttons>
</Controller>
</Right>
<Down>
<Keyboard>
<Keys>Down</Keys>
</Keyboard>
<Controller>
<Buttons>LeftThumbstickDown</Buttons>
<Buttons>DPadDown</Buttons>
</Controller>
</Down>
<Up>
<Keyboard>
<Keys>Up</Keys>
</Keyboard>
<Controller>
<Buttons>LeftThumbstickUp</Buttons>
<Buttons>DPadUp</Buttons>
</Controller>
</Up>
<MenuLeft>
<Keyboard>
<Keys>Left</Keys>
</Keyboard>
<Controller>
<Buttons>LeftThumbstickLeft</Buttons>
<Buttons>DPadLeft</Buttons>
</Controller>
</MenuLeft>
<MenuRight>
<Keyboard>
<Keys>Right</Keys>
</Keyboard>
<Controller>
<Buttons>LeftThumbstickRight</Buttons>
<Buttons>DPadRight</Buttons>
</Controller>
</MenuRight>
<MenuDown>
<Keyboard>
<Keys>Down</Keys>
</Keyboard>
<Controller>
<Buttons>LeftThumbstickDown</Buttons>
<Buttons>DPadDown</Buttons>
</Controller>
</MenuDown>
<MenuUp>
<Keyboard>
<Keys>Up</Keys>
</Keyboard>
<Controller>
<Buttons>LeftThumbstickUp</Buttons>
<Buttons>DPadUp</Buttons>
</Controller>
</MenuUp>
<Grab>
<Keyboard>
<Keys>Z</Keys>
<Keys>V</Keys>
<Keys>LeftShift</Keys>
</Keyboard>
<Controller>
<Buttons>LeftTrigger</Buttons>
<Buttons>RightTrigger</Buttons>
<Buttons>LeftShoulder</Buttons>
<Buttons>RightShoulder</Buttons>
</Controller>
</Grab>
<Jump>
<Keyboard>
<Keys>C</Keys>
</Keyboard>
<Controller>
<Buttons>A</Buttons>
<Buttons>Y</Buttons>
</Controller>
</Jump>
<Dash>
<Keyboard>
<Keys>X</Keys>
</Keyboard>
<Controller>
<Buttons>X</Buttons>
<Buttons>B</Buttons>
</Controller>
</Dash>
<Talk>
<Keyboard>
<Keys>OemQuestion</Keys>
</Keyboard>
<Controller>
<Buttons>B</Buttons>
</Controller>
</Talk>
<Pause>
<Keyboard>
<Keys>Enter</Keys>
</Keyboard>
<Controller>
<Buttons>Start</Buttons>
</Controller>
</Pause>
<Confirm>
<Keyboard>
<Keys>C</Keys>
</Keyboard>
<Controller>
<Buttons>A</Buttons>
</Controller>
</Confirm>
<Cancel>
<Keyboard>
<Keys>X</Keys>
<Keys>Back</Keys>
</Keyboard>
<Controller>
<Buttons>B</Buttons>
<Buttons>X</Buttons>
</Controller>
</Cancel>
<Journal>
<Keyboard>
<Keys>Tab</Keys>
</Keyboard>
<Controller>
<Buttons>LeftTrigger</Buttons>
</Controller>
</Journal>
<QuickRestart>
<Keyboard>
<Keys>R</Keys>
</Keyboard>
<Controller />
</QuickRestart>
<DemoDash>
<Keyboard>
<Keys>S</Keys>
</Keyboard>
<Controller />
</DemoDash>
<RightMoveOnly>
<Keyboard />
<Controller />
</RightMoveOnly>
<LeftMoveOnly>
<Keyboard />
<Controller />
</LeftMoveOnly>
<UpMoveOnly>
<Keyboard />
<Controller />
</UpMoveOnly>
<DownMoveOnly>
<Keyboard />
<Controller />
</DownMoveOnly>
<RightDashOnly>
<Keyboard />
<Controller />
</RightDashOnly>
<LeftDashOnly>
<Keyboard />
<Controller />
</LeftDashOnly>
<UpDashOnly>
<Keyboard />
<Controller />
</UpDashOnly>
<DownDashOnly>
<Keyboard />
<Controller />
</DownDashOnly>
<LaunchWithFMODLiveUpdate>false</LaunchWithFMODLiveUpdate>
<LaunchInDebugMode>false</LaunchInDebugMode>
<!--
LaunchWithFMODLiveUpdate:
This Enables FMOD Studio Live Update so you can interact with the sounds in real time.
Note this will also require access to the private network.
LaunchInDebugMode:
Debug Mode can destroy save files, crash the game, and do other unwanted behaviour.
It is not documented. Use at own risk.
-->
</Settings>