Home

Awesome

cOS, the configurable OS

NOTE! cOS isn't done and this is currently in a beta phase.

cOS is a configurable OS inspired by NixOS built for ComputerCraft. The entire configuration of the OS is built from a single configuration file, which enables and disables specific elements of the OS. Any package that isn't configured won't be enabled (unless another package relies on it) and thus won't be usable. As the packages system is completely modular, anything can be done on startup. The intended way to use the packages system is to use a package as an installer for a package, not as the actual code of the package itself. This practice is ignored by the system utilities in order to bundle system utilities with the OS itself.

Features

Complaince

We comply with the following standards

Installation

Run the following command to install the latest build

wget run https://raw.githubusercontent.com/knijn/cos/main/cos/programs/installer/installer.lua install

Example configuration

Here's the example /cos/config.lua file

return {
    silent_startup = false,
    packages = {
        cos_syslog = {
            path = "/.syslog",
            daemon = true
        },
        cos_daemon = {}
    }
}

File structure

.
├── cos
│   ├── config.lua (the main configuration file)
│   ├── hook.lua (the file that gets ran on startup)
│   ├── lib (libraries are stored here)   
│   ├── packages (the package definition files itself)
│   │   ├── cos_daemon.lua
│   │   ├── redrun.lua
│   │   ├── syslog.lua
│   │   └── ...
│   └── programs (folder which holds the programs that a package installs)
│       ├── syslog (a package puts this folder into the path to enable itself
|       |   └── syslog.lua
│       └── ... 
└── startup.lua (program that runs hook.lua that does all the magic)

List of all configuration options

return {
    silent_startup = false,
    pretty_boot = true, -- wether to show the pretty boot screen during bootup
    pretty_boot_time = 2, -- an amount of time to add to wait until continuing. this is to make the actual screen visible
    theme = {
        primary_color = colors.blue,
        secondary_color = colors.lightBlue,
        text_color = colors.white
    },
    settings = {
        ["path.programs"] = "/cos/programs/ccsmb10"
    },
    packages = {
        archive = {},
        cos_syslog = {
            path = ".syslog",
            daemon = true
        },
        cos_daemon = {},
        gist = {},
        libdeflate = {},
        sha1 = {},
        sha256 = {},
        version = {},
        cos_ls = {} -- Currently broken when running `ls`
        installer = { -- this is the installer configuration used to build cos
            directories = {
                "/cos/programs/",
                "/cos/packages/"
            },
            files = {
                "/cos/hook.lua",
                "/startup.lua"
            },
            ignore = {
                "/cos/programs/ccsmb10"
            }
        },
    }
}

Environment

cOS makes the following information available in the environment:

_G.cos_loaded_packages -- A table of packages and wether they're loaded or not
-- example:
_G.cos_loaded_packages.syslog = "true" -- true if it loaded correctly, false if it didnt


_G.cos_packages -- A table that a package can insert data into

_G.cos_packages_config -- A table where each package gets their config inserted into
-- example:
_G.cos_packages_config.syslog = {
            path = ".syslog",
            daemon = true
        },

Roadmap

The following things are planned, but not implemented yet: