re-order stuffs around
parent
828d7ee2c1
commit
9b0a54e534
|
@ -0,0 +1,6 @@
|
|||
# If nix-shell available, then nix is installed. We're going to use nix-direnv.
|
||||
if command -v nix-shell &> /dev/null
|
||||
then
|
||||
use flake
|
||||
fi
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
# Journal on development
|
||||
|
||||
This contains information dump to record thoughts as I design this repo
|
||||
|
||||
## Nix as first-class citizen instead of native config
|
||||
|
||||
- Nix can export JSON and other object serialization formats
|
||||
|
||||
- Still allows native config, so that Neovim, for example, which uses Turing-complete
|
||||
config language, to make full use of its native LSP.
|
||||
|
||||
## Design pattern emerges from unstructured code
|
||||
|
||||
### Modules
|
||||
|
||||
- Main thing for the first big refactor of codebase
|
||||
|
||||
- nixpkgs and home-manager has their own interface for modules
|
||||
|
||||
- The main benefit is to provide (runtime) type-safety on options, along with
|
||||
documentations and defaults
|
||||
|
||||
## Nitpicky details
|
||||
|
||||
### `nativeBuildInputs` vs `buildInputs`
|
||||
|
||||
- `nativeBuildInputs` is available **before** `buildInputs`.
|
||||
|
||||
- `nativeBuildInputs` is supposed to be built by a deployment machine (not target)
|
||||
|
||||
- `buildInputs` gives you access during runtime
|
||||
|
||||
- `nativeBulidInputs` gives you access to packages during build time
|
||||
|
||||
- `mkShell` doesn't care about `packages`, `nativeBuildInputs`, `buildInputs`
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
description = "My personal configuration in Nix (and some native configurations)";
|
||||
inputs = {
|
||||
nixpkgs.url = "nixpkgs/nixos-unstable";
|
||||
agenix = {
|
||||
url = "github:ryantm/agenix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
nixgl.url = "github:guibou/nixGL";
|
||||
rust-overlay.url = "github:oxalica/rust-overlay";
|
||||
# Allows default.nix to call onto flake.nix. Useful for nix eval and automations
|
||||
flake-compat = {
|
||||
url = "github:edolstra/flake-compat";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
outputs = {
|
||||
nixpkgs, agenix, home-manager, flake-utils, nixgl, rust-overlay, flake-compat
|
||||
,...
|
||||
}@_inputs: let
|
||||
# Context/global stuffs to be passed down
|
||||
# TODO: adapt to different platforms think about different systems later
|
||||
system = "x86_64-linux";
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
# inject nixpkgs.lib onto c_ (calculus)
|
||||
_lib = pkgs.lib;
|
||||
inputs = (lib.recursiveUpdate {inherit system, })
|
||||
inputs_w_pkgs = (_lib.recursiveUpdate {inherit pkgs;} inputs);
|
||||
lib = _lib.recursiveUpdate (import ./lib inputs_w_pkgs) _lib;
|
||||
|
||||
# update inputs with our library and past onto our end configurations
|
||||
inputs_w_lib = (lib.recursiveUpdate lib inputs_w_pkgs);
|
||||
modules = (import ./modules inputs_w_lib);
|
||||
hosts = (import ./hosts inputs_w_lib);
|
||||
users = (import ./users inputs_w_lib);
|
||||
|
||||
final_inputs = inputs_w_lib;
|
||||
in {
|
||||
# inherit (hosts) nixosConfigurations;
|
||||
# inherit (users) homeConfigurations;
|
||||
devShell = import ./shell final_inputs;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
# Native configs
|
||||
|
||||
Contains all configurations that are written in their native language
|
|
@ -1,31 +0,0 @@
|
|||
{
|
||||
my-hydra = { config, pkgs, ... }: {
|
||||
# send email
|
||||
services.postfix = {
|
||||
enable = true;
|
||||
setSendmail = true;
|
||||
};
|
||||
# postgresql as a build queue (optimization possible?)
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
package = pkgs.postgresql;
|
||||
identMap = ''
|
||||
hydra-users hydra hydra
|
||||
hydra-users hydra-queue-runner hydra
|
||||
hydra-users hydra-www hydra
|
||||
hydra-users root postgres
|
||||
hydra-users postgres postgres
|
||||
'';
|
||||
};
|
||||
services.hydra = {
|
||||
enable = true;
|
||||
useSubstitutes = true;
|
||||
# hydraURL =
|
||||
};
|
||||
networking = {
|
||||
firewall = {
|
||||
allowedTCPPorts = [ config.services.hydra.port ];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
# guide: https://qfpl.io/posts/nix/starting-simple-hydra/
|
||||
{
|
||||
my-hydra = { config, pkgs, ... }: {
|
||||
deployment = {
|
||||
targetEnv = "virtualbox";
|
||||
virtualbox.memorySize = 1024; # 1 GB``
|
||||
virtualbox.vcpu = 2; # 2 vcpus :/ very limited on Linode, sorry
|
||||
virtualbox.headless = true; # no gui pls
|
||||
};
|
||||
services = {
|
||||
nixosManual.showManual = false; # save space, just no manual on our nix installation
|
||||
ntp.enable = true; # time daemon
|
||||
openssh = {
|
||||
allowSFTP = false; # Prefer using SCP because connection is less verbose (?)
|
||||
# we are going to generate rsa public key pair to machine
|
||||
passwordAuthentication = false; # client-pubkey/server-prikey or dig yourself
|
||||
};
|
||||
};
|
||||
users = {
|
||||
mutableUsers = false; # Remember Trien's Windows freeze function? this is it.
|
||||
# Yo, allow trusted users through ok?
|
||||
users.root.openssh.authorizedKeys.keyFiles = [ "ssh/authorizedKeys" ];
|
||||
};
|
||||
};
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
let
|
||||
# user-specific (~/.ssh/id_ed25519.pub)
|
||||
users = {
|
||||
"hungtr@bao" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK+1+gps6phbZboIb9fH51VNPUCkhSSOAbkI3tq3Ou0Z";
|
||||
};
|
||||
# System-specific settings (/etc/ssh/ssh_hsot_ed25519_key.pub)
|
||||
systems = {
|
||||
"bao" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIBuAaAE7TiQmMH300VRj/pYCri1qPmHjd+y9aX2J0Fs";
|
||||
};
|
||||
all = users // systems;
|
||||
# stands for calculus
|
||||
c_ = builtins;
|
||||
in {
|
||||
"system/secrets/s3fs.age".publicKeys = c_.attrValues (all);
|
||||
"system/secrets/s3fs.digital-garden.age".publicKeys = c_.attrValues (all);
|
||||
"system/secrets/_nhitrl.age".publicKeys = c_.attrValues (all);
|
||||
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
# Ideally, this should contain the barebone necessary for building/interacting
|
||||
# with tech used in this project
|
||||
|
||||
# Should also incorporate shortcuts like scripts/{hm-switch,conf-sysnix}.sh in here instead
|
||||
|
||||
# It should not contain PDE
|
||||
{pkgs? import <nixpkgs> {}
|
||||
,...}: pkgs.mkShell {
|
||||
# These are the ones that can be built by a remote machine
|
||||
nativeBuildInputs = [];
|
||||
# These are the ones that must be built by the target machine
|
||||
lol="hello world";
|
||||
}
|
||||
|
Loading…
Reference in New Issue