Skip to content

Commit

Permalink
add initial cli
Browse files Browse the repository at this point in the history
  • Loading branch information
Lurkki14 committed Dec 26, 2023
1 parent 38e178b commit 485d064
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 1 deletion.
4 changes: 3 additions & 1 deletion default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
, boost
, cmake
, cudatoolkit
, git
, fetchFromGitHub
, git
, haskellPackages
, libdrm
, libX11
, libXext
Expand Down Expand Up @@ -40,6 +41,7 @@ mkDerivation rec {
'';

nativeBuildInputs = [
(haskellPackages.ghcWithPackages (p: with p; [ dbus ]))
git
pkg-config
];
Expand Down
3 changes: 3 additions & 0 deletions dev/cli-run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
cd "$(dirname "$0")"

DBUS_SYSTEM_BUS_ADDRESS=unix:path=/tmp/tuxclocker-dbus-socket ../inst/bin/tuxclocker
2 changes: 2 additions & 0 deletions meson_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ option('daemon', type: 'boolean', value: 'true', description: 'Build daemon')
option('plugins', type: 'boolean', value: 'true', description: 'Build plugins')
option('library', type: 'boolean', value: 'true', description: 'Build library')
option('gui', type: 'boolean', value: 'true', description: 'Build Qt GUI')
# Disabled by default to not break builds
option('cli', type: 'boolean', value: 'false', description: 'Build CLI')
option('require-python-hwdata', type: 'boolean', value: 'false',
description: 'Require python-hwdata for prettier AMD GPU names')
option('require-amd', type: 'boolean', value: 'false',
Expand Down
4 changes: 4 additions & 0 deletions src/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,7 @@ endif
if get_option('gui')
subdir('tuxclocker-qt')
endif

if get_option('cli')
subdir('tuxclocker-cli')
endif
42 changes: 42 additions & 0 deletions src/tuxclocker-cli/Main.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{-# LANGUAGE OverloadedStrings #-}

import Data.Either
import Data.Functor
import Data.Maybe
import Data.Text (Text)
import DBus
import DBus.Client
import qualified DBus.Introspection as I

tuxClockerCall :: MethodCall -> MethodCall
tuxClockerCall call = call { methodCallDestination = Just "org.tuxclocker" }

getObject :: Client -> ObjectPath -> IO I.Object
getObject client path = do
reply <- call_ client $
tuxClockerCall $ methodCall path "org.freedesktop.DBus.Introspectable" "Introspect"
let xml = fromVariant (head $ methodReturnBody reply)
pure $ fromMaybe
(error ("Invalid introspection XML: " ++ show xml))
(xml >>= I.parseXML path)

getName :: Client -> ObjectPath -> IO Variant
getName client path =
let
call = tuxClockerCall $ methodCall path "org.tuxclocker.Node" "name"
in
getProperty client call <&> fromRight (toVariant ("Unnamed" :: Text))

printDBusTree :: Client -> IO ()
printDBusTree client =
go client "/" where
go client path = do
object <- getObject client path
print $ I.objectPath object
name <- getName client $ I.objectPath object
print name
mapM_ (go client) (I.objectPath <$> I.objectChildren object)

main = do
client <- connectSystem
printDBusTree client
3 changes: 3 additions & 0 deletions src/tuxclocker-cli/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
install_dir = join_paths(get_option('prefix'), get_option('bindir'))

run_command('cabal', 'install', '--installdir=@0@'.format(install_dir))
10 changes: 10 additions & 0 deletions src/tuxclocker-cli/tuxclocker.cabal
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: tuxclocker
version: 0.0.1
cabal-version: 2.0
build-type: Simple

executable tuxclocker
build-depends: base >= 4.16,
dbus >= 1.2,
text >= 2.0
main-is: Main.hs

0 comments on commit 485d064

Please sign in to comment.