Compare commits

..

11 commits

Author SHA1 Message Date
q9i
d3fb14e436 docs(workflow): rename main.yml
Some checks failed
Cache binaries / tests (push) Has been cancelled
2024-08-16 18:25:46 -07:00
Youwen Wu
d99c74776d
Merge pull request #3 from quantum9Innovation/ci
Ci
2024-08-16 17:11:32 -07:00
dde48b1109
fix: accept flake config for nix develop 2024-08-16 14:55:44 -07:00
da93405e5f
deps: add suntheme cachix to flake 2024-08-16 14:52:59 -07:00
4647657666
fix: allow flake binary cache and substituters 2024-08-16 14:52:59 -07:00
Youwen Wu
6aa64ac73b
ci: add cachix tests 2024-08-16 14:52:58 -07:00
q9i
d81ddc5a72 fix: optimize external dependency specifications
remove busybox (pure bloat) and unnecessary documentation
2024-08-16 14:51:58 -07:00
q9i
dd63938643 docs: formalize readme
in preparation for merge
2024-08-16 14:51:58 -07:00
ff8148649a
fix: correctly gitignore nix result 2024-08-16 14:38:35 -07:00
06969ebdf7
deps: add all required dependencies to flake 2024-08-16 14:38:11 -07:00
76ef994924
chore: add .envrc for automatic dev env loading 2024-08-16 14:37:56 -07:00
6 changed files with 37 additions and 14 deletions

1
.envrc Normal file
View file

@ -0,0 +1 @@
use flake

18
.github/workflows/main.yml vendored Normal file
View file

@ -0,0 +1,18 @@
name: "Cache binaries"
on:
pull_request:
push:
jobs:
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v25
with:
nix_path: nixpkgs=channel:nixos-unstable
- uses: cachix/cachix-action@v14
with:
name: suntheme
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
- run: nix build --accept-flake-config
- run: nix develop --accept-flake-config

3
.gitignore vendored
View file

@ -21,4 +21,5 @@ cabal.project.local
cabal.project.local~ cabal.project.local~
.HTF/ .HTF/
.ghc.environment.* .ghc.environment.*
result/ result
.direnv/

View file

@ -1,12 +1,14 @@
# Suntheme # Suntheme
runs a script on sunrise and sunset, written in pure haskell. Runs a script on sunrise and sunset, written in pure Haskell
---
You may be wondering how a program written in Haskell, the purely functional You may be wondering how a program written in Haskell, the purely functional
programming language, could possibly act on the real world by running a so-called "script". programming language, could possibly act on the real world by running a so-called "script."
It's simple. We take in the entire World as an input to a pure function, the IO Monad. It's simple. We take in the entire World as an input to a pure function, the IO Monad.
It then maps the original World to the changed World, with our desired IO actions carefully applied. It then maps the original World to a new (generated) World, with our desired IO actions carefully applied with mathematical precision.
> From the second perspective, an IO action transforms the whole world. IO actions are actually pure, because they receive a unique world as an argument and then return the changed world. > From the second perspective, an IO action transforms the whole world. IO actions are actually pure, because they receive a unique world as an argument and then return the changed world.
@ -14,13 +16,13 @@ See [this](https://lean-lang.org/functional_programming_in_lean/monads/io.html)
## Hacking on suntheme ## Hacking on suntheme
It's trivially easy to get started with suntheme development thanks to [Nix](https://nixos.org/), the purely functional package manager. It's trivial to get started with suntheme development thanks to [Nix](https://nixos.org/), the purely functional package manager.
Naturally, we leverage it as our primary package manager, for both Hackage packages and development tools like language servers and the like. Naturally, we leverage it as our primary package manager, both for Hackage and development tools like language servers and the like.
First, install Nix through your preferred avenue. If unsure, we recommend [the Determinate Nix Installer](https://github.com/DeterminateSystems/nix-installer). First, install Nix through your preferred avenue or local system administrator. If unsure, we recommend [the Determinate Nix Installer](https://github.com/DeterminateSystems/nix-installer).
Make sure flakes and nix-command are enabled (the Determinate Installer will enable them by default). Make sure flakes and nix-command are enabled (the Determinate Installer will enable them by default).
Once you have `nix`, simply type Once you have `nix`, simply type:
```bash ```bash
nix develop nix develop

View file

@ -1,7 +1,5 @@
-- requires 'at' for running a command at a certain time
-- requires 'date' for converting unix time to human readable time
-- run on boot and at noon and midnight -- run on boot and at noon and midnight
-- don't add commands to at while this script is running (monadic purity must be preserved) -- don't add commands to `at` while this script is running (monadic purity must be preserved)
module Main where module Main where

View file

@ -1,5 +1,5 @@
{ {
description = "Flake for suntheme's development environment and builds"; description = "Suntheme's development and build environment";
inputs.haskellNix.url = "github:input-output-hk/haskell.nix"; inputs.haskellNix.url = "github:input-output-hk/haskell.nix";
inputs.nixpkgs.follows = "haskellNix/nixpkgs-unstable"; inputs.nixpkgs.follows = "haskellNix/nixpkgs-unstable";
@ -29,6 +29,9 @@
hlint = {}; hlint = {};
haskell-language-server = {}; haskell-language-server = {};
}; };
shell.buildInputs = with pkgs; [
at
];
}; };
}) })
]; ];
@ -46,8 +49,8 @@
}); });
nixConfig = { nixConfig = {
extra-substituters = ["https://cache.iog.io"]; extra-substituters = ["https://cache.iog.io" "https://suntheme.cachix.org"];
extra-trusted-public-keys = ["hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="]; extra-trusted-public-keys = ["hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" "suntheme.cachix.org-1:fHjlz7YAmMUcLp3tsZis8g9wIsDS6HvECGR3uZETGRo="];
allow-import-from-derivation = "true"; allow-import-from-derivation = "true";
}; };
} }