[xmonad] workspaces conditional on host name

Brandon Allbery allbery.b at gmail.com
Tue Sep 20 12:02:40 UTC 2022


.bashrc is only read by interactive shells.

On Tue, Sep 20, 2022 at 4:42 AM Ramon Diaz-Uriarte <rdiaz02 at gmail.com> wrote:
>
>
> Thanks. I tried exporting it, by adding an explicit export to .bashrc, but it did not work; looking around, it seems that with some display managers and at least in Debian, .bashrc might not be read early enough; (at least in Debian), .profile seems a safer bet (which is what I've finally settled on).
>
>
> Best,
>
> R.
>
>
> On Mon, 19-September-2022, at 22:05:20, Brandon Allbery <allbery.b at gmail.com> wrote:
> > You might check if `$HOSTNAME` is actually exported. There's a
> > difference between "exported" and merely "set" in most shells; use the
> > "export" command (or "env") to see which names are actually exported.
> > (On my Ubuntu system, `$HOSTNAME` isn't set at all.)
> >
> > On Mon, Sep 19, 2022 at 3:41 PM Ramon Diaz-Uriarte <rdiaz02 at gmail.com> wrote:
> >>
> >> Dear Brandon and Platon,
> >>
> >> Thanks a lot! I fixed it as suggested (use a new, different, variable name to
> >> hold the value from the let, and pass that to myConfig), and it now works. :-)
> >>
> >>
> >> Actually, there was something else that was not working: when I print
> >>
> >> io (getEnv "HOSTNAME")
> >>
> >> and
> >>
> >> io (getEnv "HOST")
> >>
> >> I get Nothing in both cases. I do not understand why that happens, since
> >>
> >> ramon at Phelsuma:~$ hostname
> >> Phelsuma
> >> ramon at Phelsuma:~$ echo $HOSTNAME
> >> Phelsuma
> >>
> >>
> >> Anyway, I solved it by setting in ~/.profile
> >>
> >> export HOSTNAME_PROFILE_XMONAD=$HOSTNAME
> >>
> >> And doing, in xmonad.hs
> >>
> >> hostname <- io (getEnv "HOSTNAME_PROFILE_XMONAD")
> >>
> >>
> >>
> >> Maybe it is related to how I call XMonad (it is called from
> >> /usr/bin/xmonad-session, which if I remember correctly I started doing because
> >> I use lxdm as display manager).
> >>
> >> Thanks again.
> >>
> >> Best,
> >>
> >>
> >> R.
> >>
> >>
> >>
> >>
> >> On Mon, 19-September-2022, at 19:33:08, Brandon Allbery <allbery.b at gmail.com>
> >> wrote:
> >> > Oh, I missed that. Yes, the `myWorkspaces` you set in `main` has
> >> > nothing to do with the global one which `myConfig` sees; you need to
> >> > pass the new one in. And possibly rename it so it's more obvious that
> >> > they're not related.
> >> >
> >> > On Mon, Sep 19, 2022 at 1:30 PM Platon Pronko <platon7pronko at gmail.com>
> >> > wrote:
> >> >>
> >> >> Hi!
> >> >>
> >> >> It looks like `myWorkspaces` in `myConfig` definition is referencing this defintion:
> >> >>
> >> >> myWorkspaces    = map show[1..7]
> >> >>
> >> >> instead of the one you actually want. Maybe try adding workspaces as an argument to `myConfig`? Something like this:
> >> >>
> >> >> myConfig workspaces = def {
> >> >>           --- blablabla
> >> >>           workspaces = workspaces
> >> >>           }
> >> >>
> >> >> main :: IO ()
> >> >> main = do
> >> >>     hostname <- io (getEnv "HOSTNAME")
> >> >>     let workspaces = case hostname of
> >> >>           Just "Phelsuma" -> myWorkspacesPhelsuma
> >> >>           Just "Triturus" -> myWorkspacesTriturus
> >> >>           _ -> myWorkspaces
> >> >>     xmonad
> >> >>        $ ewmh
> >> >>        $ dynamicProjects myProjects
> >> >>        $ withNavigation2DConfig def
> >> >>        $ docks
> >> >>        $ withEasySB (statusBarProp "xmobar ~/.xmonad/.xmobarrc" (pure myXmobarPP)) defToggleStrutsKey
> >> >>        $ myConfig workspaces
> >> >>
> >> >> --
> >> >> Best regards,
> >> >> Platon Pronko
> >> >> PGP 2A62D77A7A2CB94E
> >> >>
> >> >> On 2022-09-19 19:01, Ramon Diaz-Uriarte wrote:
> >> >> > Dear All,
> >> >> >
> >> >> > I use XMonad on different machines. The configuration is identical, except for the default workspaces, so I'd like to have the config file set the default workspaces automagically. Haskell ignorant here, but googling around I think I am almost there. These are, I think, the relevant pieces
> >> >> >
> >> >> >
> >> >> > myWorkspaces    = map show[1..7]
> >> >> > myWorkspacesPhelsuma    = map show[1..3] ++ ["top", "sync", "zot",  "whats"]
> >> >> > myWorkspacesTriturus    = map show[1..2] ++ ["top", "sync"]
> >> >> >
> >> >> >
> >> >> > main :: IO ()
> >> >> > main = do
> >> >> >     hostname <- io (getEnv "HOSTNAME")
> >> >> >     let myWorkspaces = case hostname of
> >> >> >           "Phelsuma" -> myWorkspacesPhelsuma
> >> >> >           "Triturus" -> myWorkspacesTriturus
> >> >> >           _ -> myWorkspaces
> >> >> >     xmonad
> >> >> >        $ ewmh
> >> >> >        $ dynamicProjects myProjects
> >> >> >        $ withNavigation2DConfig def
> >> >> >        $ docks
> >> >> >        $ withEasySB (statusBarProp "xmobar ~/.xmonad/.xmobarrc" (pure myXmobarPP)) defToggleStrutsKey
> >> >> >        $ myConfig
> >> >> >
> >> >> >
> >> >> > myConfig = def {
> >> >> >           --- blablabla
> >> >> >           workspaces =  myWorkspaces
> >> >> >           }
> >> >> >
> >> >> >
> >> >> > However, I keep getting an error:
> >> >> >
> >> >> >      • Couldn't match expected type ‘Maybe String’
> >> >> >                    with actual type ‘[Char]’
> >> >> >      • In the pattern: "Phelsuma"
> >> >> >        In a case alternative: "Phelsuma" -> myWorkspacesPhelsuma
> >> >> >        In the expression:
> >> >> >          case hostname of
> >> >> >            "Phelsuma" -> myWorkspacesPhelsuma
> >> >> >            "Triturus" -> myWorkspacesTriturus
> >> >> >            _ -> myWorkspaces
> >> >> >      |
> >> >> > 882 |          "Phelsuma" -> myWorkspacesPhelsuma
> >> >> >      |          ^^^^^^^^^^
> >> >> >
> >> >> > (and the same error for the second entry, "Triturus")
> >> >> >
> >> >> >
> >> >> > This I think should be fairly easy to fix, but I can't find how. I tried
> >> >> > writing the case section as
> >> >> >
> >> >> > let myWorkspaces = case hostname of
> >> >> >           Just "Phelsuma" -> myWorkspacesPhelsuma
> >> >> >           Just "Triturus" -> myWorkspacesTriturus
> >> >> >           _ -> myWorkspaces
> >> >> >
> >> >> > and that does not give me an error, but it seems to ignore the actual
> >> >> > hostname and uses the "default" one (the one with workspaces 1 to 7). So I
> >> >> > think I am using "Just" incorrectly and possibly also misunderstanding how
> >> >> > "let" works in main.
> >> >> >
> >> >> > Any suggestions?
> >> >> >
> >> >> > Thanks,
> >> >> >
> >> >> _______________________________________________
> >> >> xmonad mailing list
> >> >> xmonad at haskell.org
> >> >> http://mail.haskell.org/cgi-bin/mailman/listinfo/xmonad
> >>
> >>
> >> --
> >> Ramon Diaz-Uriarte
> >> Department of Biochemistry, Lab B-31
> >> Facultad de Medicina
> >> Universidad Autónoma de Madrid
> >> Arzobispo Morcillo, 4
> >> 28029 Madrid
> >> Spain
> >>
> >> Phone: +34-91-497-2412
> >>
> >> Email: rdiaz02 at gmail.com
> >>        r.diaz at uam.es
> >>
> >> https://ligarto.org/rdiaz
>
>
> --
> Ramon Diaz-Uriarte
> Department of Biochemistry, Lab B-31
> Facultad de Medicina
> Universidad Autónoma de Madrid
> Arzobispo Morcillo, 4
> 28029 Madrid
> Spain
>
> Phone: +34-91-497-2412
>
> Email: rdiaz02 at gmail.com
>        r.diaz at uam.es
>
> https://ligarto.org/rdiaz



-- 
brandon s allbery kf8nh
allbery.b at gmail.com


More information about the xmonad mailing list