Skip to content

Customising the Filesystem

Retro Jack edited this page Mar 26, 2026 · 20 revisions

Customising the Filesystem

The virtual filesystem is defined in prompt/index.html as a JavaScript array called fs. Everything — drives, directories, and files — lives in this one structure. No server or database required.

Finding the Filesystem

Open prompt/index.html and search for:

var fs = [{

Everything between that line and the closing }]; is the filesystem.


Adding a Link File

Link files open a URL in a new tab when executed.

Find the directory you want to add to and add a new entry to its files array:

{ name: 'GITHUB.COM', link: 'https://github.com/yourname' }

Example — adding a GitHub link to C:\LGR:

{
    name: 'LGR',
    directories: [],
    files: [
        { name: 'YOUTUBE.COM', link: 'https://www.youtube.com/@LGR' },
        { name: 'GITHUB.COM',  link: 'https://github.com/yourname' },  // added
        ...
    ]
}

The user can then type github or github.com at the prompt to open it.


Adding a Batch File

Batch files run a sequence of commands when executed. Commands are separated by \n.

{ name: 'HELLO.BAT', data: 'echo off\nsetcol 2e\necho Hello, world!\nsetcol 07\necho on' }

Supported batch commands: echo, echo off/on, cls, cd, dir, setcol, and any filename that exists in the current directory.

Example — a batch file that navigates and lists a directory:

{ name: 'GAMES.BAT', data: 'cls\ncd\\GAMES\ndir/w/o\n' }

Adding a Directory

Add an entry to the directories array of the parent directory:

{
    name: 'MUSIC',
    directories: [],
    files: [
        { name: 'SPOTIFY.COM', link: 'https://open.spotify.com/...' },
        { name: 'BANDCAMP.COM', link: 'https://yourname.bandcamp.com' }
    ]
}

Example — adding C:\MUSIC alongside the existing C:\LGR and C:\GAMES:

var fs = [{
    name: 'c',
    directories: [
        { name: 'LGR',   ... },
        { name: 'GAMES', ... },
        {                           // added
            name: 'MUSIC',
            directories: [],
            files: [
                { name: 'SPOTIFY.COM',  link: 'https://open.spotify.com/...' },
                { name: 'BANDCAMP.COM', link: 'https://yourname.bandcamp.com' }
            ]
        }
    ],
    ...
}];

The user can then type cd\music and dir to browse it.


Adding Nested Subdirectories

Directories can be nested to any depth. Each directory object has its own directories array — just keep nesting.

Structure:

{
    name: 'PARENT',
    directories: [
        {
            name: 'CHILD',
            directories: [
                {
                    name: 'GRANDCHILD',
                    directories: [],
                    files: [
                        { name: 'DEEP.COM', link: 'https://example.com' }
                    ]
                }
            ],
            files: [
                { name: 'CHILD.COM', link: 'https://example.com' }
            ]
        }
    ],
    files: [
        { name: 'PARENT.COM', link: 'https://example.com' }
    ]
}

The user navigates into nested directories exactly like real DOS:

cd\parent
cd child
cd grandchild

Or in one step using an absolute path:

cd\parent\child\grandchild

Example — a C:\GAMES tree with genre subdirectories:

{
    name: 'GAMES',
    directories: [
        {
            name: 'ACTION',
            directories: [
                {
                    name: 'FPS',
                    directories: [],
                    files: [
                        { name: 'doom.exe',   link: 'https://archive.org/details/The_Ultimate_Doom' },
                        { name: 'quake.exe',  link: 'https://archive.org/details/quake106.html' }
                    ]
                },
                {
                    name: 'PLATFORM',
                    directories: [],
                    files: [
                        { name: 'keen4e.exe', link: 'https://archive.org/details/CommanderKeenGoodbyeGalaxy' }
                    ]
                }
            ],
            files: [
                { name: 'sw.bat', data: 'cls\ncd\\GAMES\\ACTION\ndir/w/o\n' }
            ]
        },
        {
            name: 'STRATEGY',
            directories: [],
            files: [
                { name: 'sc2000.exe', link: 'https://archive.org/details/msdos_SimCity_2000_-_CD_Collection_1994' }
            ]
        }
    ],
    files: [
        { name: 'sw.bat', data: 'cls\ncd\\GAMES\ndir/w/o\n' }
    ]
}

Tip: Add a .BAT file at each level to make navigation easier:

{ name: 'ACTION.BAT', data: 'cls\ncd\\GAMES\\ACTION\ndir/w/o\n' }

Users can then type action from anywhere to jump straight in.


Changing the Boot Directory

AUTOEXEC.BAT runs automatically on load. It's defined in the root files array:

files: [
    { name: 'autoexec.bat', data: 'c:\ncd lgr\ncls\ndir/w/o\n' },
    ...
]

To boot into a different directory, change cd lgr to the directory name you want:

{ name: 'autoexec.bat', data: 'c:\ncd music\ncls\ndir/w/o\n' }

Setting a Custom Color Scheme

Use setcol in AUTOEXEC.BAT to set colors on boot. The argument is two hex digits: background then foreground.

{ name: 'autoexec.bat', data: 'echo off\nsetcol 17\nc:\ncd lgr\ncls\ndir/w/o\n' }
Code Background Foreground
07 Black Light Gray (default)
17 Dark Blue Light Gray
2e Dark Green Yellow
4e Dark Red Yellow
0a Black Green
0f Black White

See the Font System page for the full 16-color palette reference.


Full Example

A complete custom directory added to the filesystem:

{
    name: 'PORTFOLIO',
    directories: [],
    files: [
        { name: 'WEBSITE.COM',  link: 'https://yoursite.com' },
        { name: 'GITHUB.COM',   link: 'https://github.com/yourname' },
        { name: 'LINKEDIN.COM', link: 'https://linkedin.com/in/yourname' },
        { name: 'README.BAT',   data: 'echo off\nsetcol 0b\necho Welcome to my portfolio!\nsetcol 07\necho on' }
    ]
}

Boot straight into it by updating AUTOEXEC.BAT:

{ name: 'autoexec.bat', data: 'c:\ncd portfolio\ncls\ndir/w/o\n' }

Clone this wiki locally