os-release-1.0.0: /etc/os-release helpers

Safe HaskellNone
LanguageHaskell2010

System.OsRelease

Contents

Description

A module to retrieve os-release information according to the freedesktop standard: https://www.freedesktop.org/software/systemd/man/os-release.html

Usage example:

do
  Just (OsRelease {..}) <- fmap osRelease <$> parseOsRelease
  putStrLn name
Synopsis

data types

data OsRelease Source #

All the explicitly documented fields of os-release.

Instances
Show OsRelease Source # 
Instance details

Defined in System.OsRelease

Generic OsRelease Source # 
Instance details

Defined in System.OsRelease

Associated Types

type Rep OsRelease :: Type -> Type #

ToJSON OsRelease Source # 
Instance details

Defined in System.OsRelease

FromJSON OsRelease Source # 
Instance details

Defined in System.OsRelease

type Rep OsRelease Source # 
Instance details

Defined in System.OsRelease

type Rep OsRelease = D1 (MetaData "OsRelease" "System.OsRelease" "os-release-1.0.0-JOqGfJDjY0BAYeks3DiA2f" False) (C1 (MetaCons "OsRelease" PrefixI True) ((((S1 (MetaSel (Just "name") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 String) :*: S1 (MetaSel (Just "version") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String))) :*: (S1 (MetaSel (Just "id") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 String) :*: S1 (MetaSel (Just "id_like") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String)))) :*: ((S1 (MetaSel (Just "version_codename") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String)) :*: S1 (MetaSel (Just "version_id") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String))) :*: (S1 (MetaSel (Just "pretty_name") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 String) :*: (S1 (MetaSel (Just "ansi_color") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String)) :*: S1 (MetaSel (Just "cpe_name") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String)))))) :*: (((S1 (MetaSel (Just "home_url") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String)) :*: S1 (MetaSel (Just "documentation_url") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String))) :*: (S1 (MetaSel (Just "support_url") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String)) :*: S1 (MetaSel (Just "bug_report_url") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String)))) :*: ((S1 (MetaSel (Just "privacy_policy_url") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String)) :*: S1 (MetaSel (Just "build_id") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String))) :*: (S1 (MetaSel (Just "variant") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String)) :*: (S1 (MetaSel (Just "variant_id") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String)) :*: S1 (MetaSel (Just "logo") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe String))))))))

read/parse os-release

parseOsRelease :: IO (Maybe OsReleaseResult) Source #

Tries to read "/etc/os-release" and "/usr/lib/os_release" in order and parses into OsReleaseResult. Returns Nothing if both files could not be read.

readOsRelease :: IO String Source #

Tries to read "/etc/os-release" and "/usr/lib/os_release" in order.

Throws IOError if both files could not be read.

defaults

defaultOsRelease :: OsRelease Source #

The defaults as per the spec:

NAME=Linux
ID=linux
PRETTY_NAME=Linux

defaultAssignments :: [(String, String)] Source #

Like defaultOsRelease, except as key-value pair.

low-level

parseAssignments :: Parsec Void String [Either (ParseError String Void) (String, String)] Source #

Parse the entire file, handling newlines and comments gracefully.

This parser generally shouldn't fail, but instead report a failed parsed line as Left value.

parseAssignment :: Parsec Void String (String, String) Source #

Parse a single line assignment and extract the right hand side. This is only a subset of a shell parser, refer to the spec for details.

getAllAssignments Source #

Arguments

:: String

file contents of os-release

-> [Either (ParseError String Void) (String, String)] 

Get all allAssignments as (key, val) from the os-release file contents.

getOsRelease Source #

Arguments

:: [(String, String)]

assignments

-> OsRelease 

Parse the assignments into OsRelease. This is merged with the defaults as per the spec. In case of no assignments, also returns the defaults.

parseOsRelease' :: String -> OsReleaseResult Source #

Like parseOsRelease, except taking the input String explicitly. Primarily for tests.