osutil

OS Utils for Nim, simple tiny but useful procs for OS. Turn Display OFF and set Process Name.

Pure Nim score 30/100 · tests present · docs generated

Summary

Latest Version Unknown
License LGPLv3
CI Status Passing
Downloads 0
Last Indexed 2026-07-21 05:24

Installation

nimble install osutil
choosenim install osutil
git clone https://github.com/juancarlospaco/nim-osutil

OS Compatibility

Platform Linux macOS Windows FreeBSD OpenBSD NetBSD Android iOS WASM Embedded
osutil - - - - - - -

Source

Repository https://github.com/juancarlospaco/nim-osutil
Homepage https://github.com/juancarlospaco/nim-osutil
Documentation View Documentation
Registry Source nimble_official

README

nim-os-util

  • This module is Linux-only.
  • at wrapper for Nim.
  • cpulimit wrapper for Nim.
  • ionice wrapper for Nim.
  • xset wrapper for Nim.

screenshot

Use

>>> import osutil
>>> echo set_process_name("MyAwesomeNimApp")
>>> discard set_process_cpu_limit(50) # Max CPU usage 50%, 5%~100% is valid.
>>> echo set_process_ionice()         # Max I/O usage class 3, 0~3 is valid.
>>> echo at("midnight", "/bin/free")  # Free at Midnight, as Job 1. Poor mans AT wrapper for Nim.
>>> echo atq()                        # Lists all AT Jobs with number ID from queue.
>>> echo atrm(1)                      # Removes Job 1 from job queue.
>>> echo set_display_off()            # Turn OFF monitor display.

Install

nimble install osutil

Requisites

  • cpulimit (Linux Package)
  • ionice (Linux Package)
  • xset (Linux Package)
  • at (Linux Package)

Documentation

  • If something is missing from Docs check the source code, its executable by itself.
set_process_name("SomeName") **Description:** Set the current Process name in Nim, shows up on system monitor with custom name. If you dont set the process name it will show up as `"nim"` or `"main"` or the filename of the main executable. For SysAdmins and DevOps is important to quickly identify a particular process on the system monitor, that can be a GUI or a command like `htop` or `glances`. Giving a proper name to your processes makes your software feel more professional. Uses a low level call to `libc.so`. **Only available on Linux.** **Arguments:** - `name` A Name for your Process, `string` type, required. **Returns:** None.
set_process_cpu_limit(limit) **Description:** Set the current Process CPU Usage Limit cap from 5% to 100% on global percentage. `5` ~ `100` is valid. 100% makes almost no effect. This is designed for background unimportant stuff, do not use on user-facing GUI!. It starts a child sub-process that will cap the main process, when main process ends so does the sub-process. With this you can trade speed for lower CPU resource usage, for example you can extend battery life on mobile devices by doing so. Uses `cpulimit` **Only available on Linux.** **Arguments:** - `limit` A Limit on CPU Usage on Percentage for your Process, global percentage for all CPU Cores, `range[5..100]` type, defaults to `5` which means 5% CPU max, required. **Returns:** `Process`.
set_process_ionice(scheduling_class) **Description:** Set the current Process I/O Usage Limit cap from "Idle" to "Real-Time". Its similar to https://nim-lang.org/docs/posix.html#nice,cint but for I/O. `0` ~ `3` is valid. `2` makes no effect. This may delay I/O Operations to disk. `0` is `none`, `1` is `RealTime`, `2` is `best-effort` (Default), `3` is `idle`. The default of all systems is `2`, `best-effort`. This is designed for background unimportant stuff, do not use on user-facing GUI!. With this you can trade speed for lower I/O resource usage, for example you can extend battery life on mobile devices by doing so. Uses `ionice` **Only available on Linux.** **Arguments:** - `scheduling_class` A Limit on I/O Usage for your Process, `range[0..3]` type, defaults to `3` which means `idle`, `idle` means use I/O when idle, required. **Returns:** `tuple[output: TaintedString, exitCode: int]`.
set_display_off() **Description:** Turn Display Off using Nim, crossplatform, 1 proc, turns off monitor, designed for long running tasks on mobile devices. **Arguments:** None. **Returns:** `tuple[output: TaintedString, exitCode: int]`.