diff --git a/nix/configurations/vanadium/home/xmobar.nix b/nix/configurations/vanadium/home/xmobar.nix index 43202ff1..f1e21c1e 100644 --- a/nix/configurations/vanadium/home/xmobar.nix +++ b/nix/configurations/vanadium/home/xmobar.nix @@ -1,50 +1,26 @@ -{ - programs.xmobar = { - enable = true; - # XMobar's config file is not a segment of valid Haskell source code -- it is instead a DSL - # Note how `Run` handles its arguments properly without parens? - # - # Also xmobar wants GHC if we use it as a library, and I'm lazy, you probably want to keep it this way. - extraConfig = '' - Config { overrideRedirect = False - , font = "Iosevka 13" - , bgColor = "#000000" - , fgColor = "#FFFFFF" - , position = BottomH 30 - , commands = [ Run Date "%a %d %H:%M:%S" "date" 10 - , Run Com "tomorrow" - [ "--target", "2025-08-14" - , "--target", "2025-08-21" - ] "" 3600 - , Run Battery - [ "-t", " (" - , "-H", "70" - , "-L", "20" - , "-h", "green" - , "-n", "orange" - , "-l", "red" - , "--" - , "-P" - , "-A", "20" - , "-a", "notify-send -u critical \"Battery Low\" \"Please charge your battery\"" - ] - 60 - , Run Com "powerprofilesctl" [ "get" ] "" 60 - , Run XMonadLog - , Run - Weather "LFRN" - [ "-t", ": C" - , "-L","10", "-H", "25" - , "--normal", "white" - , "--high", "orange" - , "--low", "blue" - ] - 9000 - ] - , sepChar = "%" - , alignSep = "}{" - , template = " %XMonadLog% }{ %LFRN% | %battery%, %powerprofilesctl%) | %date%, j%tomorrow% " - } - ''; +{pkgs, ...}: { + home.packages = let + wrapped-xmobar = pkgs.symlinkJoin { + name = "xmobar"; + paths = with pkgs; [ + # Xmobar wants ghc + (haskellPackages.ghcWithPackages (self: [ + self.xmobar + ])) + # The executable + xmobar + ]; + }; + in [ + wrapped-xmobar + ]; + + xdg.configFile = { + "xmobar" = { + # Xmobar uses the directory to compile too, + # Linking the entire folder directly would make the directory not writable + recursive = true; + source = "${./xmobar}"; + }; }; } diff --git a/nix/configurations/vanadium/home/xmobar/xmobar.hs b/nix/configurations/vanadium/home/xmobar/xmobar.hs new file mode 100644 index 00000000..171eb21c --- /dev/null +++ b/nix/configurations/vanadium/home/xmobar/xmobar.hs @@ -0,0 +1,61 @@ +import Xmobar + +import Data.Function ((&)) + +config = + defaultConfig + { overrideRedirect = False + , font = "Iosevka 13" + , bgColor = "#000000" + , fgColor = "#FFFFFF" + , position = BottomH 30 + , commands = + [ Run $ Date "%a %d %H:%M:%S" "date" (1 &second) + , Run $ + Com + "tomorrow" + [ "--target", "2025-08-14" + , "--target", "2025-08-21" + ] + "" + (60 &minute) + , Run $ + Battery + [ "-t", " (" + , "-H", "70" + , "-L", "20" + , "-h", "green" + , "-n", "orange" + , "-l", "red" + , "--" + , "-P" + , "-A", "20" + , "-a", "notify-send -u critical \"Battery Low\" \"Please charge your battery\"" + ] + (6 &second) + , Run $ Com "powerprofilesctl" ["get"] "" (6 &second) + , Run XMonadLog + , Run $ + Weather + "LFRN" + [ "-t", ": C" + , "-L","10", "-H", "25" + , "--normal", "white" + , "--high", "orange" + , "--low", "blue" + ] + (15 &minute) + ] + , sepChar = "%" + , alignSep = "}{" + , template = " %XMonadLog% }{ %LFRN% | %battery%, %powerprofilesctl%) | %date%, j%tomorrow% " + } + +second :: Int -> Int +second = (* 10) + +minute :: Int -> Int +minute = (* 60) . second + +main :: IO () +main = xmobar config