Change install script to Haskell
This commit is contained in:
parent
8678ee8a67
commit
d0c5d0698e
72
install.hs
Executable file
72
install.hs
Executable file
|
@ -0,0 +1,72 @@
|
|||
#!/usr/bin/env runhaskell
|
||||
{-# Language GADTSyntax, LambdaCase #-}
|
||||
{-# OPTIONS_GHC -Wall #-}
|
||||
|
||||
import Data.Foldable (traverse_)
|
||||
import Data.Functor (void)
|
||||
import GHC.IO.Handle (Handle)
|
||||
import System.Process (createProcess, proc, ProcessHandle)
|
||||
import System.Environment
|
||||
import System.FilePath
|
||||
|
||||
symlink
|
||||
:: FilePath
|
||||
-> FilePath
|
||||
-> Link
|
||||
-> IO (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle)
|
||||
symlink dotfiles config s
|
||||
= createProcess (proc "ln" ["-s", source, target])
|
||||
where
|
||||
(source, target) = spec s
|
||||
spec :: Link -> (FilePath, FilePath)
|
||||
spec = \case
|
||||
Config p -> (dotfiles </> p, config)
|
||||
Absolute trg src -> (trg, src)
|
||||
|
||||
getHome :: IO FilePath
|
||||
getHome = getEnv "HOME"
|
||||
|
||||
-- TODO Make configurable/more portable.
|
||||
getDotfiles :: FilePath -> FilePath
|
||||
getDotfiles home = home </> "git/fredefox/dotfiles"
|
||||
|
||||
getConfig :: FilePath -> FilePath
|
||||
getConfig home = home </> ".config"
|
||||
|
||||
|
||||
data Link where
|
||||
Config :: FilePath -> Link
|
||||
Absolute :: FilePath -> FilePath -> Link
|
||||
|
||||
getLinks :: FilePath -> [] Link
|
||||
getLinks home = std <> absolute
|
||||
where
|
||||
std = Config <$>
|
||||
[ "git"
|
||||
, "i3"
|
||||
, "urxvt"
|
||||
, "xinit"
|
||||
, "Xresources"
|
||||
, "zsh"
|
||||
]
|
||||
absolute =
|
||||
[ ".emacs.d" |> ".config/emacs"
|
||||
, ".gitconfig" |> ".config/git/config"
|
||||
, ".urxvt" |> ".config/urxvt"
|
||||
, ".xinitrc" |> ".config/xinit/xinitrc"
|
||||
, ".xsession" |> ".xinitrc"
|
||||
, ".xsessionrc" |> ".config/xinit/xinitrc"
|
||||
, ".zshrc" |> ".config/zsh/init"
|
||||
]
|
||||
src |> trg = Absolute trg (home </> src)
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
home <- getHome
|
||||
let
|
||||
config = getConfig home
|
||||
dotfiles = getDotfiles home
|
||||
links = getLinks home
|
||||
void $ createProcess (proc "mkdir" [config])
|
||||
traverse_ (symlink dotfiles config) links
|
||||
|
17
install.sh
17
install.sh
|
@ -1,17 +0,0 @@
|
|||
#!/usr/bin/bash
|
||||
# Untested!!
|
||||
|
||||
ln -s ~/.emacs.d ~/.conf/emacs
|
||||
|
||||
tee ~/.xinitrc << EOF
|
||||
#!/usr/bin/env bash
|
||||
|
||||
setxkbmap -option grp:win_space_toggle -layout us,dk
|
||||
xrdb -merge ~/.Xresources
|
||||
EOF
|
||||
|
||||
tee ~/.Xresources << EOF
|
||||
#include ".config/Xresources/general"
|
||||
#include ".config/Xresources/urxvt"
|
||||
#include ".config/Xresources/theme/monokai-dark
|
||||
EOF
|
Loading…
Reference in a new issue