mirror of
https://github.com/elkowar/dots-of-war.git
synced 2024-12-23 21:12:22 +00:00
92 lines
No EOL
45 KiB
HTML
92 lines
No EOL
45 KiB
HTML
<!DOCTYPE html>
|
||
<!-- saved from url=(0055)https://sitr.us/2018/05/13/build-xmonad-with-stack.html -->
|
||
<html lang="en" data-react-helmet="lang"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="x-ua-compatible" content="ie=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><style data-href="/styles.f628065b851287e306e5.css">@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:100;src:local("IBM Plex Sans Thin "),local("IBM Plex Sans-Thin"),url(/static/ibm-plex-sans-latin-100-245539db8ee56425757ef728eda8194e.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-100-9a582f3a304f421eca4027517706843c.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:italic;font-display:swap;font-weight:100;src:local("IBM Plex Sans Thin italic"),local("IBM Plex Sans-Thinitalic"),url(/static/ibm-plex-sans-latin-100italic-3c34cf080b38f5fb1d4c59ffa45b3967.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-100italic-1ea7c5d21b5956b602bdf9656cfb353f.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:200;src:local("IBM Plex Sans Extra Light "),local("IBM Plex Sans-Extra Light"),url(/static/ibm-plex-sans-latin-200-bf72c8412ab06c393f52efc5beb26ea7.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-200-67524c36348a323f78f2845e3aafc2d4.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:italic;font-display:swap;font-weight:200;src:local("IBM Plex Sans Extra Light italic"),local("IBM Plex Sans-Extra Lightitalic"),url(/static/ibm-plex-sans-latin-200italic-bbc2d55223638ce450424a917e1104b2.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-200italic-52df25607ec284ca361ae50ba24b3580.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:300;src:local("IBM Plex Sans Light "),local("IBM Plex Sans-Light"),url(/static/ibm-plex-sans-latin-300-9e1c48af24191f6ea8aede14957c5d01.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-300-10bb6a0ae6dc8000d999ab622a45e281.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:italic;font-display:swap;font-weight:300;src:local("IBM Plex Sans Light italic"),local("IBM Plex Sans-Lightitalic"),url(/static/ibm-plex-sans-latin-300italic-c76f2ab53673e964b6e6734c1c455761.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-300italic-d3566d5bb4f31d86bfb9fda09563b416.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:local("IBM Plex Sans Regular "),local("IBM Plex Sans-Regular"),url(/static/ibm-plex-sans-latin-400-263d6267533501f58c33b12b382e3abb.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-400-a2c56f946488a9a267ba6ba21471a217.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:italic;font-display:swap;font-weight:400;src:local("IBM Plex Sans Regular italic"),local("IBM Plex Sans-Regularitalic"),url(/static/ibm-plex-sans-latin-400italic-89a93a1bdde48c7bb104150de88affce.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-400italic-272f86114c980c52c131dfc3b4ae3276.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:local("IBM Plex Sans Medium "),local("IBM Plex Sans-Medium"),url(/static/ibm-plex-sans-latin-500-0866c24487514ad726738fb24f8e015b.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-500-f6d5c5d5b849796d6a8f5a2953b60753.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:italic;font-display:swap;font-weight:500;src:local("IBM Plex Sans Medium italic"),local("IBM Plex Sans-Mediumitalic"),url(/static/ibm-plex-sans-latin-500italic-ffd12d59339823b8cf53b9f99b47d87c.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-500italic-ccd41bd1a5bfa8bad2cd8d35fdaeb3d1.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:local("IBM Plex Sans SemiBold "),local("IBM Plex Sans-SemiBold"),url(/static/ibm-plex-sans-latin-600-7852d4dc26ef44df58e23dc0b9722d6f.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-600-337b16517a230dc830b84dc6e6167b68.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:italic;font-display:swap;font-weight:600;src:local("IBM Plex Sans SemiBold italic"),local("IBM Plex Sans-SemiBolditalic"),url(/static/ibm-plex-sans-latin-600italic-17e5379fd9a99b9bcb26ea983f391b6a.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-600italic-6f4ba6aa87fa99d5bc2b90a7b40a0ded.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:700;src:local("IBM Plex Sans Bold "),local("IBM Plex Sans-Bold"),url(/static/ibm-plex-sans-latin-700-c9983d3d04f3ed6c2eafee1db1d24e06.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-700-b8809d619a33eb825b0450281ff752e7.woff) format("woff")}@font-face{font-family:IBM Plex Sans;font-style:italic;font-display:swap;font-weight:700;src:local("IBM Plex Sans Bold italic"),local("IBM Plex Sans-Bolditalic"),url(/static/ibm-plex-sans-latin-700italic-02954beec9e742bb1f3ae27b7e7cb71f.woff2) format("woff2"),url(/static/ibm-plex-sans-latin-700italic-72e9af409ddafc63a5dd380e34758560.woff) format("woff")}</style><meta name="generator" content="Gatsby 2.18.25"><link rel="alternate" type="application/rss+xml" title="sitr.us - posts by Jesse Hallett" href="https://feeds.feedburner.com/hallettj"><title>I finally set up XMonad to build with Stack! | sitr.us</title><link data-react-helmet="true" rel="openid.delegate" href="https://sitr.us/"><link data-react-helmet="true" rel="openid.server" href="https://indieauth.com/openid"><meta data-react-helmet="true" name="description" content="The XMonad window manager is configured in Haskell.
|
||
That means that when you want to apply a new configuration you actually build
|
||
xmonad…"><meta data-react-helmet="true" name="image" content="https://sitr.us/banner.jpg"><meta data-react-helmet="true" property="og:title" content="I finally set up XMonad to build with Stack!"><meta data-react-helmet="true" property="og:url" content="https://sitr.us"><meta data-react-helmet="true" property="og:description" content="The XMonad window manager is configured in Haskell.
|
||
That means that when you want to apply a new configuration you actually build
|
||
xmonad…"><meta data-react-helmet="true" property="og:image" content="https://sitr.us/banner.jpg"><meta data-react-helmet="true" property="og:type" content="website"><meta data-react-helmet="true" property="og:image:alt" content="The XMonad window manager is configured in Haskell.
|
||
That means that when you want to apply a new configuration you actually build
|
||
xmonad…"><meta data-react-helmet="true" name="twitter:card" content="summary_large_image"><meta data-react-helmet="true" name="twitter:title" content="I finally set up XMonad to build with Stack!"><meta data-react-helmet="true" name="twitter:url" content="https://sitr.us"><meta data-react-helmet="true" name="twitter:description" content="The XMonad window manager is configured in Haskell.
|
||
That means that when you want to apply a new configuration you actually build
|
||
xmonad…"><meta data-react-helmet="true" name="twitter:image" content="https://sitr.us/banner.jpg"><meta data-react-helmet="true" name="twitter:image:alt" content="The XMonad window manager is configured in Haskell.
|
||
That means that when you want to apply a new configuration you actually build
|
||
xmonad…"><meta data-react-helmet="true" name="twitter:creator" content="@hallettj"><meta data-react-helmet="true" name="gatsby-theme" content="@lekoarts/gatsby-theme-minimal-blog"><link rel="preconnect dns-prefetch" href="https://www.google-analytics.com/"><link rel="sitemap" type="application/xml" href="https://sitr.us/sitemap.xml"><link rel="icon" href="https://sitr.us/icons/icon-48x48.png?v=caf57ab8a19cf2e6a923cd405e7b66a9"><link rel="manifest" href="https://sitr.us/manifest.webmanifest"><meta name="theme-color" content="#cb9d06"><link rel="apple-touch-icon" sizes="48x48" href="https://sitr.us/icons/icon-48x48.png?v=caf57ab8a19cf2e6a923cd405e7b66a9"><link rel="apple-touch-icon" sizes="72x72" href="https://sitr.us/icons/icon-72x72.png?v=caf57ab8a19cf2e6a923cd405e7b66a9"><link rel="apple-touch-icon" sizes="96x96" href="https://sitr.us/icons/icon-96x96.png?v=caf57ab8a19cf2e6a923cd405e7b66a9"><link rel="apple-touch-icon" sizes="144x144" href="https://sitr.us/icons/icon-144x144.png?v=caf57ab8a19cf2e6a923cd405e7b66a9"><link rel="apple-touch-icon" sizes="192x192" href="https://sitr.us/icons/icon-192x192.png?v=caf57ab8a19cf2e6a923cd405e7b66a9"><link rel="apple-touch-icon" sizes="256x256" href="https://sitr.us/icons/icon-256x256.png?v=caf57ab8a19cf2e6a923cd405e7b66a9"><link rel="apple-touch-icon" sizes="384x384" href="https://sitr.us/icons/icon-384x384.png?v=caf57ab8a19cf2e6a923cd405e7b66a9"><link rel="apple-touch-icon" sizes="512x512" href="https://sitr.us/icons/icon-512x512.png?v=caf57ab8a19cf2e6a923cd405e7b66a9"><link as="script" rel="preload" href="./I finally set up XMonad to build with Stack! _ sitr.us_files/styles-2c3ea41ae3281f2424df.js"><link as="script" rel="preload" href="./I finally set up XMonad to build with Stack! _ sitr.us_files/component---src-lekoarts-gatsby-theme-minimal-blog-core-templates-post-query-tsx-bb65031b5086bc35ab24.js"><link as="script" rel="preload" href="./I finally set up XMonad to build with Stack! _ sitr.us_files/commons-8d1316e99596af343d32.js"><link as="script" rel="preload" href="./I finally set up XMonad to build with Stack! _ sitr.us_files/app-1d89443379b1055b2f94.js"><link as="script" rel="preload" href="./I finally set up XMonad to build with Stack! _ sitr.us_files/webpack-runtime-889e88d4b2c87811c013.js"><link as="fetch" rel="preload" href="https://sitr.us/page-data/2018/05/13/build-xmonad-with-stack.html/page-data.json" crossorigin="anonymous"><style data-emotion="css-global"></style><style data-emotion-css="wuy82p">.css-wuy82p{font-family:"IBM Plex Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:1.625;font-weight:400;color:var(--theme-ui-colors-text,#2d3748);background-color:var(--theme-ui-colors-background,#fff);}</style><style data-emotion="css-global"></style><style data-emotion-css="1g597hz">.css-1g597hz{border:0;-webkit-clip:react(0 0 0 0);clip:react(0 0 0 0);height:1px;width:1px;margin:-1px;padding:0;overflow:hidden;position:absolute;}.css-1g597hz:focus{padding:1rem;position:fixed;top:15px;left:15px;background-color:var(--theme-ui-colors-heading,#000);color:var(--theme-ui-colors-background,#fff);z-index:1;width:auto;height:auto;-webkit-clip:auto;clip:auto;-webkit-text-decoration:none;text-decoration:none;}</style><style data-emotion-css="feqrbk">.css-feqrbk{width:100%;min-width:0;max-width:1024px;margin-left:auto;margin-right:auto;padding:1rem;}@media screen and (min-width:640px){.css-feqrbk{padding:2rem;}}</style><style data-emotion-css="185ihix">.css-185ihix{box-sizing:border-box;min-width:0;width:100%;min-width:0;max-width:1024px;margin-left:auto;margin-right:auto;padding:1rem;}@media screen and (min-width:640px){.css-185ihix{padding:2rem;}}</style><style data-emotion-css="1wt4r56">.css-1wt4r56{margin-bottom:4rem;}@media screen and (min-width:640px){.css-1wt4r56{margin-bottom:8rem;}}</style><style data-emotion-css="1eswzqe">.css-1eswzqe{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}</style><style data-emotion-css="190uhut">.css-190uhut{box-sizing:border-box;margin:0;min-width:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}</style><style data-emotion-css="dz3ojy">.css-dz3ojy{color:var(--theme-ui-colors-heading,#000);-webkit-text-decoration:none;text-decoration:none;}</style><style data-emotion-css="1kmktz0">.css-1kmktz0{margin-top:0;margin-bottom:0;font-weight:500;font-size:1.5rem;}@media screen and (min-width:640px){.css-1kmktz0{font-size:1.875rem;}}</style><style data-emotion-css="af3ja4">.css-af3ja4{opacity:0.65;position:relative;border-radius:5px;width:40px;height:25px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-transition:opacity 0.3s ease;transition:opacity 0.3s ease;border:none;outline:none;background:none;cursor:pointer;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;}.css-af3ja4:hover,.css-af3ja4:focus{opacity:1;}</style><style data-emotion-css="iiu7h7">.css-iiu7h7{position:relative;width:24px;height:24px;border-radius:50%;border:none;background-color:var(--theme-ui-colors-transparent,transparent);-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);-webkit-transition:all 0.45s ease;transition:all 0.45s ease;overflow:hidden;box-shadow:inset 8px -8px 0px 0px var(--theme-ui-colors-toggleIcon,#2d3748);}.css-iiu7h7:before{content:"";position:absolute;right:-9px;top:-9px;height:24px;width:24px;border:none;border-radius:50%;-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0);opacity:1;-webkit-transition:-webkit-transform 0.45s ease;-webkit-transition:transform 0.45s ease;transition:transform 0.45s ease;}.css-iiu7h7:after{content:"";width:8px;height:8px;border-radius:50%;margin:-4px 0 0 -4px;position:absolute;top:50%;left:50%;box-shadow:0 -23px 0 var(--theme-ui-colors-toggleIcon,#2d3748),0 23px 0 var(--theme-ui-colors-toggleIcon,#2d3748),23px 0 0 var(--theme-ui-colors-toggleIcon,#2d3748),-23px 0 0 var(--theme-ui-colors-toggleIcon,#2d3748),15px 15px 0 var(--theme-ui-colors-toggleIcon,#2d3748),-15px 15px 0 var(--theme-ui-colors-toggleIcon,#2d3748),15px -15px 0 var(--theme-ui-colors-toggleIcon,#2d3748),-15px -15px 0 var(--theme-ui-colors-toggleIcon,#2d3748);-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:all 0.35s ease;transition:all 0.35s ease;}</style><style data-emotion-css="1kvspmd">.css-1kvspmd{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-bottom-style:solid;border-bottom-width:1px;border-bottom-color:var(--theme-ui-colors-divide,#cbd5e0);padding-bottom:1rem;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem;color:var(--theme-ui-colors-secondary,#5f6c80);-webkit-flex-flow:wrap;-ms-flex-flow:wrap;flex-flow:wrap;}.css-1kvspmd a{color:var(--theme-ui-colors-secondary,#5f6c80);}.css-1kvspmd a:hover{color:var(--theme-ui-colors-heading,#000);}</style><style data-emotion-css="nrb238">.css-nrb238{font-size:1rem;}.css-nrb238 a:not(:last-of-type){margin-right:1rem;}@media screen and (min-width:640px){.css-nrb238{font-size:18px;}}.css-nrb238 .active{color:var(--theme-ui-colors-heading,#000);}</style><style data-emotion-css="1od09yo">.css-1od09yo{color:var(--theme-ui-colors-primary,#6b46c1);-webkit-text-decoration:none;text-decoration:none;}.css-1od09yo:hover{-webkit-text-decoration:underline;text-decoration:underline;}</style><style data-emotion-css="e5k4e3">.css-e5k4e3{font-size:1rem;}.css-e5k4e3 a:not(:first-of-type){margin-left:1rem;}@media screen and (min-width:640px){.css-e5k4e3{font-size:18px;}}</style><style data-emotion-css="1ph55o9">.css-1ph55o9{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;}.css-1ph55o9 [data-name='live-editor']{font-size:1rem;}.css-1ph55o9 [data-name='live-editor'] textarea,.css-1ph55o9 [data-name='live-editor'] pre{padding:1rem !important;}.css-1ph55o9 [data-name='live-preview']{padding:calc(0.5rem + 10px) !important;background-color:#d2c7ec;}.css-1ph55o9 .prism-code{font-size:1rem;padding:1rem;webkit-overflow-scrolling:touch;background-color:var(--theme-ui-colors-transparent,transparent);overflow:initial;float:left;min-width:100%;margin-bottom:0;}.css-1ph55o9 .prism-code[data-linenumber="false"] .token-line{padding-left:1rem;}.css-1ph55o9 .token{display:inline-block;}.css-1ph55o9 p > code,.css-1ph55o9 li > code{background-color:rgb(1,22,39);color:rgb(214,222,235);padding-left:0.5rem;padding-right:0.5rem;padding-top:0.25rem;padding-bottom:0.25rem;}.css-1ph55o9 .gatsby-highlight{font-size:1rem;position:relative;webkit-overflow-scrolling:touch;background-color:rgb(1,22,39);overflow:auto;margin-left:0;margin-right:0;}@media screen and (min-width:640px){.css-1ph55o9 .gatsby-highlight{margin-left:0;margin-right:0;}}@media screen and (min-width:768px){.css-1ph55o9 .gatsby-highlight{margin-left:0;margin-right:0;}}@media screen and (min-width:1024px){.css-1ph55o9 .gatsby-highlight{margin-left:-1rem;margin-right:-1rem;}}.css-1ph55o9 .gatsby-highlight .token-line{margin-left:-1rem;margin-right:-1rem;}.css-1ph55o9 .gatsby-highlight pre.language-{margin-top:0;}.css-1ph55o9 .gatsby-highlight pre.language-noLineNumbers{margin-top:0;}.css-1ph55o9 .gatsby-highlight pre[class*="language-"]:before{background-color:var(--theme-ui-colors-white,#fff);border-radius:0 0 0.25rem 0.25rem;color:var(--theme-ui-colors-black,#000);font-size:12px;-webkit-letter-spacing:0.025rem;-moz-letter-spacing:0.025rem;-ms-letter-spacing:0.025rem;letter-spacing:0.025rem;padding:0.1rem 0.5rem;position:absolute;left:1rem;text-align:right;text-transform:uppercase;top:0;}.css-1ph55o9 .gatsby-highlight pre[class~="language-javascript"]:before{content:"js";background:#f7df1e;color:var(--theme-ui-colors-black,#000);}.css-1ph55o9 .gatsby-highlight pre[class~="language-js"]:before{content:"js";background:#f7df1e;color:var(--theme-ui-colors-black,#000);}.css-1ph55o9 .gatsby-highlight pre[class~="language-jsx"]:before{content:"jsx";background:#61dafb;color:var(--theme-ui-colors-black,#000);}.css-1ph55o9 .gatsby-highlight pre[class~="language-ts"]:before{content:"ts";background:#61dafb;color:var(--theme-ui-colors-black,#000);}.css-1ph55o9 .gatsby-highlight pre[class~="language-tsx"]:before{content:"tsx";background:#61dafb;color:var(--theme-ui-colors-black,#000);}.css-1ph55o9 .gatsby-highlight pre[class~="language-html"]:before{content:"html";background:#005a9c;color:var(--theme-ui-colors-white,#fff);}.css-1ph55o9 .gatsby-highlight pre[class~="language-graphql"]:before{content:"GraphQL";background:#E10098;}.css-1ph55o9 .gatsby-highlight pre[class~="language-css"]:before{content:"css";background:#ff9800;color:var(--theme-ui-colors-black,#000);}.css-1ph55o9 .gatsby-highlight pre[class~="language-mdx"]:before{content:"mdx";background:#f9ac00;color:var(--theme-ui-colors-black,#000);}.css-1ph55o9 .gatsby-highlight pre[class~="language-text"]:before{content:"text";}.css-1ph55o9 .gatsby-highlight pre[class~='language-shell']:before{content:'shell';}.css-1ph55o9 .gatsby-highlight pre[class~='language-sh']:before{content:'sh';}.css-1ph55o9 .gatsby-highlight pre[class~='language-bash']:before{content:'bash';}.css-1ph55o9 .gatsby-highlight pre[class~='language-yaml']:before{content:'yaml';background:#ffa8df;}.css-1ph55o9 .gatsby-highlight pre[class~='language-markdown']:before{content:'md';}.css-1ph55o9 .gatsby-highlight pre[class~='language-json']:before,.css-1ph55o9 .gatsby-highlight pre[class~='language-json5']:before{content:'json';background:linen;}.css-1ph55o9 .gatsby-highlight pre[class~='language-diff']:before{content:'diff';background:#e6ffed;}.css-1ph55o9 .gatsby-highlight > code[class*="language-"],.css-1ph55o9 .gatsby-highlight > pre[class=*="language-"]{word-spacing:normal;word-break:normal;overflow-wrap:normal;line-height:1.5;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}.css-1ph55o9 .line-number-style{display:inline-block;width:3em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;opacity:0.3;text-align:center;position:relative;}.css-1ph55o9 .code-title{background-color:#d2c7ec;color:var(--theme-ui-colors-black,#000);font-size:0.875rem;padding-left:1rem;padding-right:1rem;padding-top:0.5rem;padding-bottom:0.5rem;font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;margin-left:0;margin-right:0;}@media screen and (min-width:640px){.css-1ph55o9 .code-title{margin-left:0;margin-right:0;}}@media screen and (min-width:768px){.css-1ph55o9 .code-title{margin-left:0;margin-right:0;}}@media screen and (min-width:1024px){.css-1ph55o9 .code-title{margin-left:-1rem;margin-right:-1rem;}}.css-1ph55o9 [data-name='live-preview'],.css-1ph55o9 [data-name='live-editor']{margin-left:0;margin-right:0;}@media screen and (min-width:640px){.css-1ph55o9 [data-name='live-preview'],.css-1ph55o9 [data-name='live-editor']{margin-left:0;margin-right:0;}}@media screen and (min-width:768px){.css-1ph55o9 [data-name='live-preview'],.css-1ph55o9 [data-name='live-editor']{margin-left:0;margin-right:0;}}@media screen and (min-width:1024px){.css-1ph55o9 [data-name='live-preview'],.css-1ph55o9 [data-name='live-editor']{margin-left:-1rem;margin-right:-1rem;}}.css-1ph55o9 .token-line{padding-right:1rem;}.css-1ph55o9 .highlight-line{background-color:rgb(2,55,81);border-left:4px solid rgb(2,155,206);}.css-1ph55o9 .highlight-line .line-number-style{width:calc(3em - 4px);opacity:0.5;left:-2px;}</style><style data-emotion-css="1489aiv">.css-1489aiv{box-sizing:border-box;min-width:0;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;}.css-1489aiv [data-name='live-editor']{font-size:1rem;}.css-1489aiv [data-name='live-editor'] textarea,.css-1489aiv [data-name='live-editor'] pre{padding:1rem !important;}.css-1489aiv [data-name='live-preview']{padding:calc(0.5rem + 10px) !important;background-color:#d2c7ec;}.css-1489aiv .prism-code{font-size:1rem;padding:1rem;webkit-overflow-scrolling:touch;background-color:var(--theme-ui-colors-transparent,transparent);overflow:initial;float:left;min-width:100%;margin-bottom:0;}.css-1489aiv .prism-code[data-linenumber="false"] .token-line{padding-left:1rem;}.css-1489aiv .token{display:inline-block;}.css-1489aiv p > code,.css-1489aiv li > code{background-color:rgb(1,22,39);color:rgb(214,222,235);padding-left:0.5rem;padding-right:0.5rem;padding-top:0.25rem;padding-bottom:0.25rem;}.css-1489aiv .gatsby-highlight{font-size:1rem;position:relative;webkit-overflow-scrolling:touch;background-color:rgb(1,22,39);overflow:auto;margin-left:0;margin-right:0;}@media screen and (min-width:640px){.css-1489aiv .gatsby-highlight{margin-left:0;margin-right:0;}}@media screen and (min-width:768px){.css-1489aiv .gatsby-highlight{margin-left:0;margin-right:0;}}@media screen and (min-width:1024px){.css-1489aiv .gatsby-highlight{margin-left:-1rem;margin-right:-1rem;}}.css-1489aiv .gatsby-highlight .token-line{margin-left:-1rem;margin-right:-1rem;}.css-1489aiv .gatsby-highlight pre.language-{margin-top:0;}.css-1489aiv .gatsby-highlight pre.language-noLineNumbers{margin-top:0;}.css-1489aiv .gatsby-highlight pre[class*="language-"]:before{background-color:var(--theme-ui-colors-white,#fff);border-radius:0 0 0.25rem 0.25rem;color:var(--theme-ui-colors-black,#000);font-size:12px;-webkit-letter-spacing:0.025rem;-moz-letter-spacing:0.025rem;-ms-letter-spacing:0.025rem;letter-spacing:0.025rem;padding:0.1rem 0.5rem;position:absolute;left:1rem;text-align:right;text-transform:uppercase;top:0;}.css-1489aiv .gatsby-highlight pre[class~="language-javascript"]:before{content:"js";background:#f7df1e;color:var(--theme-ui-colors-black,#000);}.css-1489aiv .gatsby-highlight pre[class~="language-js"]:before{content:"js";background:#f7df1e;color:var(--theme-ui-colors-black,#000);}.css-1489aiv .gatsby-highlight pre[class~="language-jsx"]:before{content:"jsx";background:#61dafb;color:var(--theme-ui-colors-black,#000);}.css-1489aiv .gatsby-highlight pre[class~="language-ts"]:before{content:"ts";background:#61dafb;color:var(--theme-ui-colors-black,#000);}.css-1489aiv .gatsby-highlight pre[class~="language-tsx"]:before{content:"tsx";background:#61dafb;color:var(--theme-ui-colors-black,#000);}.css-1489aiv .gatsby-highlight pre[class~="language-html"]:before{content:"html";background:#005a9c;color:var(--theme-ui-colors-white,#fff);}.css-1489aiv .gatsby-highlight pre[class~="language-graphql"]:before{content:"GraphQL";background:#E10098;}.css-1489aiv .gatsby-highlight pre[class~="language-css"]:before{content:"css";background:#ff9800;color:var(--theme-ui-colors-black,#000);}.css-1489aiv .gatsby-highlight pre[class~="language-mdx"]:before{content:"mdx";background:#f9ac00;color:var(--theme-ui-colors-black,#000);}.css-1489aiv .gatsby-highlight pre[class~="language-text"]:before{content:"text";}.css-1489aiv .gatsby-highlight pre[class~='language-shell']:before{content:'shell';}.css-1489aiv .gatsby-highlight pre[class~='language-sh']:before{content:'sh';}.css-1489aiv .gatsby-highlight pre[class~='language-bash']:before{content:'bash';}.css-1489aiv .gatsby-highlight pre[class~='language-yaml']:before{content:'yaml';background:#ffa8df;}.css-1489aiv .gatsby-highlight pre[class~='language-markdown']:before{content:'md';}.css-1489aiv .gatsby-highlight pre[class~='language-json']:before,.css-1489aiv .gatsby-highlight pre[class~='language-json5']:before{content:'json';background:linen;}.css-1489aiv .gatsby-highlight pre[class~='language-diff']:before{content:'diff';background:#e6ffed;}.css-1489aiv .gatsby-highlight > code[class*="language-"],.css-1489aiv .gatsby-highlight > pre[class=*="language-"]{word-spacing:normal;word-break:normal;overflow-wrap:normal;line-height:1.5;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}.css-1489aiv .line-number-style{display:inline-block;width:3em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;opacity:0.3;text-align:center;position:relative;}.css-1489aiv .code-title{background-color:#d2c7ec;color:var(--theme-ui-colors-black,#000);font-size:0.875rem;padding-left:1rem;padding-right:1rem;padding-top:0.5rem;padding-bottom:0.5rem;font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;margin-left:0;margin-right:0;}@media screen and (min-width:640px){.css-1489aiv .code-title{margin-left:0;margin-right:0;}}@media screen and (min-width:768px){.css-1489aiv .code-title{margin-left:0;margin-right:0;}}@media screen and (min-width:1024px){.css-1489aiv .code-title{margin-left:-1rem;margin-right:-1rem;}}.css-1489aiv [data-name='live-preview'],.css-1489aiv [data-name='live-editor']{margin-left:0;margin-right:0;}@media screen and (min-width:640px){.css-1489aiv [data-name='live-preview'],.css-1489aiv [data-name='live-editor']{margin-left:0;margin-right:0;}}@media screen and (min-width:768px){.css-1489aiv [data-name='live-preview'],.css-1489aiv [data-name='live-editor']{margin-left:0;margin-right:0;}}@media screen and (min-width:1024px){.css-1489aiv [data-name='live-preview'],.css-1489aiv [data-name='live-editor']{margin-left:-1rem;margin-right:-1rem;}}.css-1489aiv .token-line{padding-right:1rem;}.css-1489aiv .highlight-line{background-color:rgb(2,55,81);border-left:4px solid rgb(2,155,206);}.css-1489aiv .highlight-line .line-number-style{width:calc(3em - 4px);opacity:0.5;left:-2px;}</style><style data-emotion-css="1bzbprl">.css-1bzbprl{font-family:inherit;font-weight:700;line-height:1.25;margin:0;margin-bottom:0.25rem;font-size:1.875rem;margin-top:0.5rem;color:var(--theme-ui-colors-heading,#000);}@media screen and (min-width:640px){.css-1bzbprl{font-size:2.25rem;}}@media screen and (min-width:768px){.css-1bzbprl{font-size:3rem;}}</style><style data-emotion-css="1fkzbc2">.css-1fkzbc2{color:var(--theme-ui-colors-secondary,#5f6c80);margin-top:1rem;font-size:1rem;}.css-1fkzbc2 a{color:var(--theme-ui-colors-secondary,#5f6c80);}@media screen and (min-width:640px){.css-1fkzbc2{font-size:1rem;}}@media screen and (min-width:768px){.css-1fkzbc2{font-size:1.25rem;}}</style><style data-emotion-css="f0b8g7">.css-f0b8g7{margin-top:4rem;margin-bottom:4rem;}.css-f0b8g7 .gatsby-resp-image-wrapper{margin-top:2rem;margin-bottom:2rem;box-shadow:rgba(0,0,0,0.15) 0px 32px 32px 0px,rgba(0,0,0,0.15) 0px 16px 16px 0px,rgba(0,0,0,0.15) 0px 8px 8px 0px,rgba(0,0,0,0.15) 0px 4px 4px 0px;}@media screen and (min-width:640px){.css-f0b8g7 .gatsby-resp-image-wrapper{margin-top:2rem;margin-bottom:2rem;}}@media screen and (min-width:768px){.css-f0b8g7 .gatsby-resp-image-wrapper{margin-top:4rem;margin-bottom:4rem;}}</style><style data-emotion-css="1bkk5q4">.css-1bkk5q4{font-size:1rem;-webkit-letter-spacing:-0.003em;-moz-letter-spacing:-0.003em;-ms-letter-spacing:-0.003em;letter-spacing:-0.003em;line-height:1.625;--baseline-multiplier:0.179;--x-height-multiplier:0.35;}@media screen and (min-width:640px){.css-1bkk5q4{font-size:1rem;}}@media screen and (min-width:768px){.css-1bkk5q4{font-size:1.25rem;}}</style><style data-emotion-css="15rlv7r">.css-15rlv7r li{font-size:1rem;-webkit-letter-spacing:-0.003em;-moz-letter-spacing:-0.003em;-ms-letter-spacing:-0.003em;letter-spacing:-0.003em;line-height:1.625;--baseline-multiplier:0.179;--x-height-multiplier:0.35;}@media screen and (min-width:640px){.css-15rlv7r li{font-size:1rem;}}@media screen and (min-width:768px){.css-15rlv7r li{font-size:1.25rem;}}</style><style data-emotion-css="6x8z6y">.css-6x8z6y{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:8rem;color:var(--theme-ui-colors-secondary,#5f6c80);-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;border-top-style:solid;border-top-width:1px;border-top-color:var(--theme-ui-colors-divide,#cbd5e0);padding-top:1rem;}.css-6x8z6y a{color:var(--theme-ui-colors-secondary,#5f6c80);-webkit-text-decoration:none;text-decoration:none;}.css-6x8z6y a:hover{color:var(--theme-ui-colors-heading,#000);-webkit-text-decoration:underline;text-decoration:underline;}.css-6x8z6y a:focus{color:var(--theme-ui-colors-heading,#000);}@media screen and (min-width:640px){.css-6x8z6y{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}@media screen and (min-width:768px){.css-6x8z6y{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;}}</style><style data-emotion-css="1fk4m44">.css-1fk4m44{border-width:0;vertical-align:middle;}</style><script charset="utf-8" src="./I finally set up XMonad to build with Stack! _ sitr.us_files/12-d587acbd2fe2ca8ca618.js"></script><link rel="prefetch" href="https://sitr.us/page-data/about/page-data.json" crossorigin="anonymous" as="fetch"><link rel="prefetch" href="https://sitr.us/page-data/blog/page-data.json" crossorigin="anonymous" as="fetch"><link rel="prefetch" href="https://sitr.us/page-data/tags/x-monad/page-data.json" crossorigin="anonymous" as="fetch"><link rel="prefetch" href="https://sitr.us/page-data/index/page-data.json" crossorigin="anonymous" as="fetch"><link rel="prefetch" href="https://sitr.us/component---node-modules-lekoarts-gatsby-theme-minimal-blog-core-src-templates-page-query-tsx-b48df875d40e887efb07.js"><link rel="prefetch" href="https://sitr.us/component---src-lekoarts-gatsby-theme-minimal-blog-core-templates-blog-query-tsx-cff89e6980695b74d021.js"><link rel="prefetch" href="https://sitr.us/component---node-modules-lekoarts-gatsby-theme-minimal-blog-core-src-templates-tag-query-tsx-551b07f8097e353b4de7.js"><link rel="prefetch" href="https://sitr.us/component---src-lekoarts-gatsby-theme-minimal-blog-core-templates-homepage-query-tsx-699cefe8b04da8b3eff9.js"></head><body><script async="" src="./I finally set up XMonad to build with Stack! _ sitr.us_files/analytics.js"></script><script>(function() { try {
|
||
var mode = localStorage.getItem('theme-ui-color-mode');
|
||
if (!mode) return
|
||
document.body.classList.add('theme-ui-' + mode);
|
||
} catch (e) {} })();</script><div id="___gatsby"><div style="outline:none" tabindex="-1" role="group" id="gatsby-focus-wrapper"><div data-testid="theme-root" class="css-wuy82p"><a href="https://sitr.us/2018/05/13/build-xmonad-with-stack.html#skip-nav" data-skip-link="true" class="css-1g597hz">Skip to content</a><div class="css-185ihix"><header class="css-1wt4r56"><div class="css-190uhut"><a aria-label="sitr.us - Back to home" class="css-dz3ojy" href="https://sitr.us/"><h1 class="css-1kmktz0">sitr.us</h1></a><button type="button" aria-label="Activate Dark Mode" title="Activate Dark Mode" class="css-af3ja4"><div class="css-iiu7h7"></div></button></div><div class="css-1kvspmd"><nav class="css-nrb238"><a class="css-1od09yo" href="https://sitr.us/blog">Blog</a><a class="css-1od09yo" href="https://sitr.us/about">About</a></nav><div class="css-e5k4e3"><a href="https://github.com/hallettj/" class="css-1od09yo">Github</a><a href="https://twitter.com/hallettj/" class="css-1od09yo">Twitter</a><a href="mailto:jesse@sitr.us" class="css-1od09yo">Email</a></div></div></header><main id="skip-nav" class="css-1489aiv"><h2 class="css-1bzbprl">I finally set up XMonad to build with Stack!</h2><p class="css-1fkzbc2"><time datetime="2018-05-13">2018-05-13</time> — <a class="css-1od09yo" href="https://sitr.us/tags/x-monad">XMonad</a> — <span>3<!-- --> min read</span></p><section class="css-f0b8g7"><p class="css-1bkk5q4">The <a href="http://xmonad.org/" class="css-1od09yo">XMonad</a> window manager is configured in Haskell.
|
||
That means that when you want to apply a new configuration you actually build
|
||
xmonad itself incorporating code from your configuration file.
|
||
It sounds more painful than it is -
|
||
when you install xmonad you get an executable called <code class="css-0">xmonad</code> that handles the
|
||
details of bootstrapping your custom build.
|
||
The command <code class="css-0">xmonad --recompile</code> builds <code class="css-0">~/.xmonad/xmonad.hs</code>,
|
||
and subsequent invocations of <code class="css-0">xmonad</code> run the executable that is produced.</p><p class="css-1bkk5q4">When you configure xmonad you are actually writing your own version of the
|
||
program.
|
||
Because you can write arbitrary code the possibilities for customization are
|
||
endless!
|
||
As with any software project,
|
||
you get maximum expressive power when you bring in third-party libraries.
|
||
<code class="css-0">xmonad-contrib</code> is a popular choice -
|
||
but you can import any Haskell library that you want.
|
||
With libraries come the problem of managing library packages.
|
||
In the past I used the <code class="css-0">cabal</code> command to globally install library packages.
|
||
From time to time I would clear out my installed packages,
|
||
or change something while working on another Haskell project,
|
||
and then my window manager would stop working.
|
||
I wanted a better option.</p><p class="css-1bkk5q4"><a href="https://docs.haskellstack.org/en/stable/README/" class="css-1od09yo">Stack</a> is my preferred dependency management and build tool for Haskell
|
||
projects.
|
||
Stack automatically fetches project dependencies,
|
||
and maintains isolated sets of installed packages for each project.
|
||
With stack I declare dependencies in a <a href="https://github.com/hallettj/dot-xmonad/blob/master/home/.xmonad/my-xmonad.cabal" class="css-1od09yo">.cabal file</a>,
|
||
and stack ensures that I have up-to-date copies of all libraries whenever
|
||
xmonad builds itself.</p><p class="css-1bkk5q4">To use stack I needed to hook into xmonad's build process.
|
||
I used this <a href="http://brianbuccola.com/how-to-install-xmonad-and-xmobar-via-stack/" class="css-1od09yo">blog post</a> as a starting point.
|
||
That post provides instructions for using the <code class="css-0">stack ghc</code> command to invoke ghc
|
||
in an environment prepared by stack.
|
||
But I have some custom code modules in <code class="css-0">~/.xmonad/lib/</code>,
|
||
and I had problems getting ghc to find those when running <code class="css-0">stack ghc</code>.
|
||
So I opted to set up a fully-fledged stack project which is built with the
|
||
usual <code class="css-0">stack build</code> command.
|
||
You can take a look at my <a href="https://github.com/hallettj/dot-xmonad/tree/master/home/.xmonad" class="css-1od09yo">~/.xmonad/</a> directory to get the high-level view.</p><p class="css-1bkk5q4">The key is the <a href="https://github.com/hallettj/dot-xmonad/blob/master/home/.xmonad/build" class="css-1od09yo">build</a> script.
|
||
Starting in xmonad v0.13 if there is an executable called <code class="css-0">build</code> in your
|
||
<code class="css-0">~/.xmonad/</code> directory then xmonad will defer to that script.
|
||
<code class="css-0">build</code> gets a path as an argument which is where the compiled xmonad executable
|
||
should be placed.
|
||
My script looks like this:</p><div class="gatsby-highlight" data-language="sh"><pre class="prism-code language-sh" data-linenumber="false" style="color: rgb(214, 222, 235); background-color: rgb(1, 22, 39);"><div class="token-line" style="color: rgb(214, 222, 235);"><span class="token plain">#!/bin/sh</span></div><div class="token-line" style="color: rgb(214, 222, 235);"><span class="token plain" style="display: inline-block;"></span></div><div class="token-line" style="color: rgb(214, 222, 235);"><span class="token plain">set -e</span></div><div class="token-line" style="color: rgb(214, 222, 235);"><span class="token plain" style="display: inline-block;"></span></div><div class="token-line" style="color: rgb(214, 222, 235);"><span class="token plain">stack build :my-xmonad --verbosity error</span></div><div class="token-line" style="color: rgb(214, 222, 235);"><span class="token plain">stack install :my-xmonad --local-bin-path bin/ --verbosity error</span></div><div class="token-line" style="color: rgb(214, 222, 235);"><span class="token plain">mv bin/my-xmonad "$1"</span></div></pre></div><p class="css-1bkk5q4">My <code class="css-0">my-xmonad.cabal</code> file declares an executable named <code class="css-0">my-xmonad</code>
|
||
(which is actually my customized version of xmonad).
|
||
This script builds that executable,
|
||
installs the it to <code class="css-0">~/.xmonad/bin/my-xmonad</code>
|
||
(thanks to the <code class="css-0">--local-bin-path</code> argument to <code class="css-0">stack install</code>),
|
||
and finally moves the executable to the location given by the first argument to
|
||
the <code class="css-0">build</code> script.</p><p class="css-1bkk5q4">You can detailed on working with stack from stack's <a href="https://docs.haskellstack.org/en/stable/GUIDE/" class="css-1od09yo">user guide</a>.
|
||
If you want to get going quickly I created a stack <a href="https://raw.githubusercontent.com/hallettj/dot-xmonad/master/home/.xmonad/xmonad.hsfiles" class="css-1od09yo">project template</a> to set
|
||
up xmonad with stack.
|
||
Here is what you do:</p><ul class="css-15rlv7r"><li class="css-0">Install xmonad and stack using your preferred package manager - you need xmonad v0.13 or later.</li><li class="css-0">Run <code class="css-0">stack new my-xmonad https://raw.githubusercontent.com/hallettj/dot-xmonad/master/home/.xmonad/xmonad.hsfiles</code></li><li class="css-0">If you are setting up a new xmonad configuration then <code class="css-0">mv my-xmonad ~/.xmonad</code>. Otherwise copy files from <code class="css-0">my-xmonad/</code> to <code class="css-0">~/.xmonad/</code> and then delete <code class="css-0">my-xmonad/</code>. The relevant files are:<ul class="css-15rlv7r"><li class="css-0"><code class="css-0">my-xmonad.cabal</code>, your project manifest</li><li class="css-0"><code class="css-0">build</code></li><li class="css-0"><code class="css-0">lib/</code> - this directory must exist or the project will not build!</li><li class="css-0"><code class="css-0">xmonad.hs</code>, in case you do not have your own</li><li class="css-0"><code class="css-0">.gitignore</code>, in case you want to version-control your xmonad config</li></ul></li><li class="css-0"><code class="css-0">chmod a+x ~/.xmonad/build</code> - if the build script is not marked as executable xmonad will not execute it.</li><li class="css-0">In <code class="css-0">~/.xmonad/</code> run <code class="css-0">stack setup</code> to install the version of ghc that stack wants to use. (Stack installs ghc in a sandbox so that it does not conflict with any other ghc installation on your machine.)</li></ul><p class="css-1bkk5q4">Names of any custom modules that you have in <code class="css-0">~/.xmonad/lib</code> need to be listed in the <code class="css-0">other-modules</code> section in <code class="css-0">~/.xmonad/my-xmonad.cabal</code>.
|
||
If you want to add library dependencies beyond <code class="css-0">xmonad</code> and <code class="css-0">xmonad-contrib</code>
|
||
then add them to the <code class="css-0">build-depends</code> section in the same file.
|
||
Stack pulls dependencies from <a href="https://www.stackage.org/" class="css-1od09yo">Stackage</a>,
|
||
which hosts curated sets of packages.
|
||
The <code class="css-0">resolver</code> setting in <code class="css-0">stack.yaml</code> determines the version of each
|
||
dependency that you get,
|
||
and the version of ghc that stack will use to compile xmonad.
|
||
If you want to use libraries that are not hosted on Stackage you will need to
|
||
list package names with exact version numbers in the <code class="css-0">extra-deps</code> section in
|
||
<code class="css-0">stack.yaml</code> according to <a href="https://docs.haskellstack.org/en/stable/GUIDE/#extra-deps" class="css-1od09yo">these instructions</a>.</p><p class="css-1bkk5q4">Test everything by running <code class="css-0">xmonad --recompile</code> from any directory.
|
||
If that works then you are all set!</p><footer></footer></section></main><footer class="css-6x8z6y"><div><p>Copyright © 2007–<!-- -->2020<!-- --> by Jesse Hallett.</p><p>This work is licensed under a<!-- --> <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/" class="css-1od09yo">Creative Commons Attribution-ShareAlike 4.0 International License.<!-- --> <img alt="Creative Commons License" src="./I finally set up XMonad to build with Stack! _ sitr.us_files/80x15.png" class="css-1fk4m44"></a></p></div><div><a aria-label="Link to the theme's GitHub repository" href="https://github.com/LekoArts/gatsby-themes/tree/master/themes/gatsby-theme-minimal-blog" class="css-1od09yo">Theme</a> <!-- -->by<!-- --> <a aria-label="Link to the theme author's website" href="https://www.lekoarts.de/en" class="css-1od09yo">LekoArts</a></div></footer></div></div></div><div id="gatsby-announcer" role="alert" aria-live="assertive" aria-atomic="true" style="position: absolute; width: 1px; height: 1px; padding: 0px; overflow: hidden; clip: rect(0px, 0px, 0px, 0px); white-space: nowrap; border: 0px;"></div></div><script>
|
||
|
||
|
||
if(true) {
|
||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||
}
|
||
if (typeof ga === "function") {
|
||
ga('create', 'UA-327628-1', 'auto', {});
|
||
|
||
|
||
|
||
|
||
|
||
}</script><script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/2018/05/13/build-xmonad-with-stack.html";/*]]>*/</script><script id="gatsby-chunk-mapping">/*<![CDATA[*/window.___chunkMapping={"app":["/app-1d89443379b1055b2f94.js"],"component---src-lekoarts-gatsby-theme-minimal-blog-core-templates-homepage-query-tsx":["/component---src-lekoarts-gatsby-theme-minimal-blog-core-templates-homepage-query-tsx-699cefe8b04da8b3eff9.js"],"component---src-lekoarts-gatsby-theme-minimal-blog-core-templates-blog-query-tsx":["/component---src-lekoarts-gatsby-theme-minimal-blog-core-templates-blog-query-tsx-cff89e6980695b74d021.js"],"component---node-modules-lekoarts-gatsby-theme-minimal-blog-core-src-templates-tags-query-tsx":["/component---node-modules-lekoarts-gatsby-theme-minimal-blog-core-src-templates-tags-query-tsx-561fe71fa12db25c2485.js"],"component---src-lekoarts-gatsby-theme-minimal-blog-core-templates-post-query-tsx":["/component---src-lekoarts-gatsby-theme-minimal-blog-core-templates-post-query-tsx-bb65031b5086bc35ab24.js"],"component---node-modules-lekoarts-gatsby-theme-minimal-blog-core-src-templates-page-query-tsx":["/component---node-modules-lekoarts-gatsby-theme-minimal-blog-core-src-templates-page-query-tsx-b48df875d40e887efb07.js"],"component---node-modules-lekoarts-gatsby-theme-minimal-blog-core-src-templates-tag-query-tsx":["/component---node-modules-lekoarts-gatsby-theme-minimal-blog-core-src-templates-tag-query-tsx-551b07f8097e353b4de7.js"],"component---node-modules-gatsby-plugin-offline-app-shell-js":["/component---node-modules-gatsby-plugin-offline-app-shell-js-cf2fd0f92da7499f18b1.js"]};/*]]>*/</script><script src="./I finally set up XMonad to build with Stack! _ sitr.us_files/webpack-runtime-889e88d4b2c87811c013.js" async=""></script><script src="./I finally set up XMonad to build with Stack! _ sitr.us_files/app-1d89443379b1055b2f94.js" async=""></script><script src="./I finally set up XMonad to build with Stack! _ sitr.us_files/commons-8d1316e99596af343d32.js" async=""></script><script src="./I finally set up XMonad to build with Stack! _ sitr.us_files/component---src-lekoarts-gatsby-theme-minimal-blog-core-templates-post-query-tsx-bb65031b5086bc35ab24.js" async=""></script><script src="./I finally set up XMonad to build with Stack! _ sitr.us_files/styles-2c3ea41ae3281f2424df.js" async=""></script></body></html> |