[xmonad] workspaces conditional on host name

Brandon Allbery allbery.b at gmail.com
Wed Sep 21 17:13:07 UTC 2022


`hostname` gets it from a kernel call, and the kernel gets it from
`/etc/hostname` during system boot. (
https://hackage.haskell.org/package/network-bsd-2.8.1.0/docs/Network-BSD.html#v:getHostName
)

On Wed, Sep 21, 2022, 13:01 Ramon Diaz-Uriarte <rdiaz02 at gmail.com> wrote:

> Then that explains why my setting it on .bashrc did not work. I still do
> not understand why it did not work given that hostname returns the right
> name (and that, in fact, I initially did not set it in .bashrc). But never
> mind, since setting it in .profile works.
>
>
> On Tue, 20-September-2022, at 14:02:40, Brandon Allbery <
> allbery.b at gmail.com> wrote:
> > .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
>
>
> --
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/xmonad/attachments/20220921/cb4bf9a5/attachment-0001.html>


More information about the xmonad mailing list