os-release-1.0.2.1: /etc/os-release helpers
Safe HaskellNone
LanguageHaskell2010

System.OsRelease

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

Instances details
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.2.1-LE94qd9Ie1j2n3jmrqXfhZ" '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.