This is an historic document. As this project was merged with a project global changelog file and versioning was adopted. This documents currently only helps a bit to understand the history of this project.

This changelog is inspired by Version numbers are based on Semantic Versioning 2.0.0. Please, create a one sentence summary for each release.

The concrete echo format of each command is not stable. Changes to this are not considered major changes.

This changelog is deprecated. Changes are now written to the root changelog instead.


Major Changes

  • 2022-09-11 #168:
    1. Rename dependencies.test to test.dependencies, in order to prepare test.* prefix for all test commands.
    2. Also rename user.bin.configure.uses.dependencies.test to user.bin.configure.uses.test.dependencies.
  • 2022-07-06 Installed project commands now pass their arguments to the original real command, instead of suppressing these. If one installs the as a project repository, arguments to the call of are now passed to
  • 2022-04-17 repo.synchronize.with executes after, in order to avoid errors caused by missing sub repos.
  • 2022-02-25 #158 Do not change the PATH during the installation of OS state interface: now does not call and therefore does not edit ~/.bashrc. This avoids unexpected changes to the user configs. The command was created, which is the original version of This way there is still a command, that installs the OSSI project with full functionality.

Minor Changes

  • 2022-11-18 Recommend chezmoi for dotfile management.
  • 2022-10-16 #168 Integrate repo management.
    1. repo.process now uses bin/net.splitcells.osi.repos.peers in order to find all peer repos, that are on the same folder level as the current repo. Sub repos are repos located in the folder of the current repo. Peer repos are repos located at the same folder as the current repo. This make synchronizing local repos with online repo hosters like SourceHut and GitHub a lot easier, because before that, each repo had to be pushed manually, or via a script. This was more burdensome compared to pushing a meta to another meta repo, because online repo hosters typically do not allow nested hierachies of repos. Now one can push all SourceHut repos via, instead of using many instances of cd [...]; git remote show SourceHut || git remote add SourceHut [...]; git remote set-url SourceHut [...]; git push SourceHut.
    2. Introduction of the project file bin/net.splitcells.osi.repos.hosts. This command echos all hosts of the current repo, its subs and peers. This is used by in order to not only push all repos, but to also push these to all hosts (i.e. GitLab, GitHub, SourceHut etc.).
    3. Overall, the changes made it a lot easier to adapt to changes of the repo structure and its hosts. This is particularly the case, when mainstream git hosters are used. It makes it a lot easier, to create completely new commands.
  • 2022-10-03 Deprecate, because it is not working correctly.
  • 2022-09-11 #162: Create command, in order to test if peer is reachable via (local/internet etc.) network.
  • 2022-07-29 Deprecate
  • 2022-06-18: #168: Create command
  • 2022-05-28: #168: repo.status now executes ./bin/net.splitcells.osi.repos.peers in order to find additional sub repos, that are located in the same repo as the current is. This is a way to support repo nesting with a flat folder structure.
  • 2022-03-27 Create in order to more easily upload files to new remote servers.

[5.0.0] - 2022-02-28

Major Changes

  1. Remove deprecated command command.managed.define.
  2. Disable debug logging by default. Add environment variable 'log_level'. When set to 'debug', debug log is enabled.
  3. 'repo.verify' now also checks if sub folders, are really instances of a repository.
  4. Create '' command, that downloads missing sub repositories.
  5. Remove '' as the same can be done via 'network.configure'.

Minor Changes

  1. Create command convention Exits with 0, if this repo can be synchronized and else exits 1. This can be used as a safeguard for automated synchronization commands.


  • 2022-05-06
    1. repo.process now shows the repo path, where the error occur.
    2. Fixed quoting issues of echo's arguments in command.repositories.install.
  • Command "echo.error" previously did only echo the message "error" and ignored the argument. This was fixed.

Version 4.0.1

Release project in order to test release process.

Major Changes

  1. Remove "user.programs.close.gracefully", because it was defined incorrectly and also was not used.

Minor Changes

  1. Add support for manpages.
  2. Create command '' in order provide configuration that fit most users.
  3. Create command '' in order to detect, if the current shell is interactive.
  4. Verify folder structure before repository content. Move folder check functionality of 'repo.verify' to 'repo.verify.folder.structure'. 'repo.verify' still calls 'repo.verify.folder.structure'. 'repo.verify' now first verifies the folder structure of the complete repository recursively. This speeds up the checking process, if a folder is missing.
  5. Exit 'repo.process' on first error by default.

Version 4.0.0

Starting with this version, major changes, that are not backwards compatible, will only be done, in order to fix errors as long as it is justifiable.

Major Changes

  1. Remove all logging levels in order to greatly simplify code.
  2. Rename "ssh.key.generate" to "user.ssh.key.generate" in order to better represent meaning of program.
  3. Add new secondary objectives:
    1. "Do not change the system or the user without being explicitly told by the user to do it."
    2. "Minimize the effects on the state of the system by this framework."
  4. "command.mananged.environment.configure": Ensure that bash configuration is always active in graphical shell only.
  5. Migrate to new repository layout.
  6. Create command "repo.verify".
  7. "echo.error" now just echos to stderr. Other commands do not filter echoed errors correctly anymore.

Minor Changes

  1. Setup contribution guide lines.
  2. "": Create command in order to test, if environment has required command.
  3. Document some interesting third party shell software.
  4. Create command "".
  5. Setup CI for Github.
  6. Migrate to Github as main repository while still supporting Gitlab.
  7. Support command to enable framework in non interactive shells: '. ~/bin/net.splitcells.os.state.interface.commands.managed/command.managed.export.bin'
  8. "": Create command to show system info overview.
  9. "system.shutdown" & "user.programs.close.gracefully": Create commands to shutdown system.
  10. "user.trash.empty": Create command to empty trash.
  11. "user.messages.add": Create command to send message to user.
  12. "": Create command to configure additional default configurations.
  13. "user.weekly": Create command for weekly execution with additional task that is disabled by default.


  1. Improving debug logging during first installation.
  2. "command.managed.execute": Clear current line after execution end.
  3. "": Omit duplicate lines in output in error case.
  4. "command.repositories.install": Install commands in alphabetic order.
  5. Add some tests.
  6. Improve performance of "".
  7. "" echo command output, if command exited with error.
  8. "package.install": fix output for software specific installation programs.
  9. "repo.remote.set": correct command line argument order.
  10. Solve performance problems of "" and "".

Version 3.0.0

Major Changes

  1. Remove variables inside profile. Use commands in order to get configuration values instead. Repalced variables and their new commands:

    current_echo_level -> echo.level.config

    critical_echo_level -> echo.level.critical

    error_echo_level -> echo.level.error

    warning_echo_level -> echo.level.warning

    info_echo_level ->

    debug_echo_level -> echo.level.debug

    tracing_echo_level -> echo.level.trace

  2. Use only word 'shell' for terminal. Replaced commands:

    terminal width -> shell.width ->

  3. "package.install":

    1. Use program specific installer first, in order to install program even if starter script is already present.
    2. End package install package specific script ends succesfully.

Minor Changes

  1. Place all project programs in bin folder and make project make compatible.
  2. Define optional default user specific repository.
  3. Log at debug level the arguments of "".
  4. Some documentation updates.
  5. "echo.line.current.set": Create warning when echo filtering does not work.
  6. Create "" option.
  7. Create test for "repo.clone.into.current.test".
  8. Create "repo.create" command.
  9. Update "package.install" documentation according to usage experience.
  10. Update "user.configure" documentation.
  11. Define CI pipeline for gitlab.
  12. Create test suite.


  1. "shell.width" supports non interactive shells.
  2. "": Clear current echo line after command is executed.
  3. Clear current output line after a managed command was executed.
  4. Command "echo.filtered"
    1. Prevent argument interpretation in "echo.filtered".
    2. Prevent line wrapping, if the filtered echo of a command is longer than the terminal width. This is done by limiting the output of filtered echos to the width of the terminal. In other words: if there is nothing to be reported during the execution of the command, no output is visible after the commands execution.
  5. Documentation improvements.
  6. Provide fall back value for "shell.width", if it could not be determined.
  7. Make "shell.width" more portable.
  8. Correctly visit child repos in "repo.process" by removing duplicate "cd $subrepo".
  9. Unify quoting of command names in logging.
  10. Create error, if there is no implementation of a managed command.
  11. Support "shell.width" in non interactive shell.

Version 2.0.0

Major Changes

  1. Set main remote during synchronization with foreign remote.
  2. Use MPL 2.0 for every program. Some programs with other licenses were moved to "net.splitcells.os.state.interface.lib".
  3. Correct command names:
    1. Rename "exit.on.error" to "sh.session.exit.on.error".
    2. Rename "exit.with.error" to "sh.session.exit.with.error".

Minor Changes

  1. Support same features for processing of local and remote repositories.
  2. Create "repo.mirror.into.current". This can be used in order to make mirrors of complex mirrors.
  3. Support complex repositories for "repo.remote.set".


  1. Clean up last line in echo before exit of managed command.
  2. Do only print argument literally for echo commands.
  3. Prevent command "repo.synchronize" from doing the same multiple times.

Version 1.7.1

Fix issues.


  1. Adapt to console width in "echo.line.current.set". This prevents the line reset to print too much or too less.
  2. Make "echo.deprecated.command" compatible with "echo.filtered".
  3. Fix bugs in "repo.process" found by usage.
    1. Prevent folders being processed twice.
    2. Only use the echo commands of this project.
    3. Ignore hidden folders if the remote is not ssh. Before that, this was only done for remotes accessed via remotes.
  4. Fix duplicate writings of console configuration settings.

Version 1.7.0

Fix issues found by usage.

Major Changes

  1. Rename command "echo.tracing" to "echo.trace".
  2. Remove echo filtering from "command.managed.execute".
  3. Abort repository processing on first error.

Minor Changes

  1. Update internal documentation of some commands.


  1. Correct parameter propagation in "repo.pull.from", "" and "repo.synchronize.with".

  2. Correct parameter propagation of "repo.pull.from".

  3. Correct parameter propagation in "repo.pull.from" and "".

  4. Correct stderr piping in "".

  5. Clear current line content with empty space in "echo.line.current.set". Previously the command just reset the cursor position. If this command was called twice with a longer string argument in the first call compared to the second call, the part of the first call would be still visible.


    echo.line.current.set "Marvin has a pen."

    echo.line.current.set "Alice"

    Would result into: "Alice has a pen."

  6. Make release configuration public in order to simplify release process on different computers.

Version 1.6.1


  1. HOTFIX: Fix bug in logging of "command.managed.execute". The bug caused the echo not being shown after execution and ending the command with an error.

Version 1.6.0

Minor Changes

  1. Create "read.text" command that reads multiple line strings from stdin.


  1. Filter output of release process.
  2. Force quoting command scripts.
  3. Prevent wait time trough echo filtering by default.

Version 1.5.0

Major Changes

  1. Filter

Version 1.5.0

Major Changes

  1. Create release script.

Version 1.4.0

Minor Changes

  1. Introduce new configuration guide line.
  2. Filtered echo is now visible on the last line in the console. It is deleted by the next echo. This way one can follow the execution progress without filling output with unimportant information.

Version 1.3.0

Major Changes

  1. Echo filtering for managed command execution.
  2. Remove command "". This command is not used.
  3. Add command "".

Minor Changes

  1. Bugfixes

Version 1.2.1-1.2.7

  1. Testing release with

Version 1.2.0

Establish release process.

Minor Changes

  1. Use echo levels for every command.


  1. Prevent duplicate variable export in ".profile" after multiple installations.

Version 1.1.0

Some changes are not listed as CHANGLOG was created after them.

Major Changes

  1. Rename command "user.task.daily" to "user.task".
  2. Rename command "repo.commit" to "repo.commit.all".
  3. Rename command "system.adaptations.update" to "system.update".

Minor Changes

Introduce echo levels.

Version 1.0.1

Fix issues found during first installation on other Fedora installation.

Version 1.0.0

First usable version created.