first commit
This commit is contained in:
commit
a63c0c6d0a
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.direnv/
|
||||||
|
.envrc
|
||||||
|
dist-newstyle/
|
3
.stylish-haskell.yaml
Normal file
3
.stylish-haskell.yaml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
steps:
|
||||||
|
- imports:
|
||||||
|
align: file
|
5
CHANGELOG.md
Normal file
5
CHANGELOG.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Revision history for teleios
|
||||||
|
|
||||||
|
## 0.1.0.0 -- YYYY-mm-dd
|
||||||
|
|
||||||
|
* First version. Released on an unsuspecting world.
|
20
LICENSE
Normal file
20
LICENSE
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright (c) 2024 sajenim
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
63
app/Main.hs
Normal file
63
app/Main.hs
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
{-# LANGUAGE MultiWayIf #-}
|
||||||
|
|
||||||
|
import Data.List.Split (splitOn)
|
||||||
|
import System.Directory (setCurrentDirectory)
|
||||||
|
import System.Exit (exitSuccess)
|
||||||
|
import System.IO
|
||||||
|
import System.Process (callCommand)
|
||||||
|
|
||||||
|
prompt :: IO ()
|
||||||
|
prompt = do
|
||||||
|
input <- moshReadLine promptStringOne
|
||||||
|
moshExecute input
|
||||||
|
prompt
|
||||||
|
|
||||||
|
moshReadLine :: String -> IO String
|
||||||
|
moshReadLine ps1 = do
|
||||||
|
putStr ps1
|
||||||
|
hFlush stdout
|
||||||
|
getLine
|
||||||
|
|
||||||
|
moshExecute :: String -> IO ()
|
||||||
|
moshExecute input = do
|
||||||
|
if
|
||||||
|
| command == "exit" -> exitSuccess
|
||||||
|
| command == "help" -> moshHelp
|
||||||
|
| command == "cd" -> changeDirectory path
|
||||||
|
| otherwise -> callCommand input
|
||||||
|
where
|
||||||
|
command = head (splitOn " " input)
|
||||||
|
path = last (splitOn " " input)
|
||||||
|
|
||||||
|
changeDirectory :: FilePath -> IO ()
|
||||||
|
changeDirectory path = do
|
||||||
|
setCurrentDirectory path
|
||||||
|
|
||||||
|
moshHelp :: IO ()
|
||||||
|
moshHelp = do
|
||||||
|
putStrLn "---------------------"
|
||||||
|
putStrLn "MoSH -- Monadic Shell"
|
||||||
|
putStrLn "Author: sajenim"
|
||||||
|
putStrLn "---------------------"
|
||||||
|
putStrLn "Type program names and arguments, and hit enter."
|
||||||
|
putStrLn ""
|
||||||
|
putStrLn "The following are built in:"
|
||||||
|
putStr (unlines (prepend " " builtinCommands))
|
||||||
|
putStrLn ""
|
||||||
|
putStrLn "Use the man command for information on other programs"
|
||||||
|
|
||||||
|
builtinCommands :: [String]
|
||||||
|
builtinCommands = [ "cd"
|
||||||
|
, "help"
|
||||||
|
, "exit"
|
||||||
|
]
|
||||||
|
|
||||||
|
promptStringOne :: String
|
||||||
|
promptStringOne = "> "
|
||||||
|
|
||||||
|
prepend :: String -> [String] -> [String]
|
||||||
|
prepend s = map (s ++)
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
prompt
|
61
flake.lock
Normal file
61
flake.lock
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1710146030,
|
||||||
|
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1723221148,
|
||||||
|
"narHash": "sha256-7pjpeQlZUNQ4eeVntytU3jkw9dFK3k1Htgk2iuXjaD8=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "154bcb95ad51bc257c2ce4043a725de6ca700ef6",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
18
flake.nix
Normal file
18
flake.nix
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
description = "A basic flake with a shell";
|
||||||
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||||
|
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
|
||||||
|
outputs = {
|
||||||
|
nixpkgs,
|
||||||
|
flake-utils,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
flake-utils.lib.eachDefaultSystem (system: let
|
||||||
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
|
in {
|
||||||
|
devShells.default = pkgs.mkShell {
|
||||||
|
packages = with pkgs; [ghc cabal-install haskell-language-server];
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
28
mosh.cabal
Normal file
28
mosh.cabal
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
cabal-version: 3.0
|
||||||
|
name: mosh
|
||||||
|
version: 0.1.0.0
|
||||||
|
-- synopsis:
|
||||||
|
-- description:
|
||||||
|
license: MIT
|
||||||
|
license-file: LICENSE
|
||||||
|
author: sajenim
|
||||||
|
maintainer: its.jassy@pm.me
|
||||||
|
-- copyright:
|
||||||
|
build-type: Simple
|
||||||
|
extra-doc-files: CHANGELOG.md
|
||||||
|
-- extra-source-files:
|
||||||
|
|
||||||
|
common warnings
|
||||||
|
ghc-options: -Wall
|
||||||
|
|
||||||
|
executable teleios
|
||||||
|
import: warnings
|
||||||
|
main-is: Main.hs
|
||||||
|
-- other-modules:
|
||||||
|
-- other-extensions:
|
||||||
|
build-depends: base ^>=4.18.2.1,
|
||||||
|
process,
|
||||||
|
directory,
|
||||||
|
split
|
||||||
|
hs-source-dirs: app
|
||||||
|
default-language: Haskell2010
|
Loading…
Reference in a new issue