Compare commits
19 commits
feat/darwi
...
prime
Author | SHA1 | Date | |
---|---|---|---|
e3ad7a2528 | |||
ab627ac919 | |||
e02411d563 | |||
021dadfed8 | |||
084caa727b | |||
d9c41f1c61 | |||
06e7b69f99 | |||
96321d4026 | |||
399e049775 | |||
bee32b5b2b | |||
343f3d481f | |||
79b83cfc70 | |||
f502810dae | |||
fba46e0d0d | |||
ba4f32c4f9 | |||
359707ffee | |||
e72a8a0586 | |||
bebc1ed649 | |||
59fb406eb9 |
28 changed files with 186 additions and 165 deletions
16
flake.lock
generated
16
flake.lock
generated
|
@ -337,6 +337,21 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"manifest": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1752588656,
|
||||||
|
"narHash": "sha256-clKPzQ43eDpukeiGHzXmd1hGb2s4N+MWXAzQ5u5+pHQ=",
|
||||||
|
"owner": "rrvsh",
|
||||||
|
"repo": "manifest",
|
||||||
|
"rev": "365902fba994f30469298dee0c98a5fc0f41ec38",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "rrvsh",
|
||||||
|
"repo": "manifest",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nix-darwin": {
|
"nix-darwin": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
@ -488,6 +503,7 @@
|
||||||
"impermanence": "impermanence",
|
"impermanence": "impermanence",
|
||||||
"import-tree": "import-tree",
|
"import-tree": "import-tree",
|
||||||
"make-shell": "make-shell",
|
"make-shell": "make-shell",
|
||||||
|
"manifest": "manifest",
|
||||||
"nix-darwin": "nix-darwin",
|
"nix-darwin": "nix-darwin",
|
||||||
"nix-index-database": "nix-index-database",
|
"nix-index-database": "nix-index-database",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
|
|
|
@ -71,6 +71,8 @@
|
||||||
files.url = "github:mightyiam/files";
|
files.url = "github:mightyiam/files";
|
||||||
# text.nix lets us easily define markdown text to pass to files
|
# text.nix lets us easily define markdown text to pass to files
|
||||||
text.url = "github:rrvsh/text.nix";
|
text.url = "github:rrvsh/text.nix";
|
||||||
|
# manifest lets us define all hosts in one file
|
||||||
|
manifest.url = "github:rrvsh/manifest";
|
||||||
# make-shells.<name> creates devShells and checks
|
# make-shells.<name> creates devShells and checks
|
||||||
make-shell = {
|
make-shell = {
|
||||||
url = "github:nicknovitski/make-shell";
|
url = "github:nicknovitski/make-shell";
|
||||||
|
|
|
@ -10,18 +10,15 @@ let
|
||||||
inherit (lib.lists) optional;
|
inherit (lib.lists) optional;
|
||||||
inherit (lib.attrsets) mapAttrs;
|
inherit (lib.attrsets) mapAttrs;
|
||||||
inherit (cfg.lib.modules) forAllUsers';
|
inherit (cfg.lib.modules) forAllUsers';
|
||||||
|
inherit (config.manifest) hosts;
|
||||||
cfg = config.flake;
|
cfg = config.flake;
|
||||||
globalCfg = name: hostConfig: {
|
globalCfg = hostName: hostConfig: {
|
||||||
useGlobalPkgs = true;
|
useGlobalPkgs = true;
|
||||||
useUserPackages = true;
|
useUserPackages = true;
|
||||||
extraSpecialArgs = {
|
extraSpecialArgs = { inherit hostName hostConfig; };
|
||||||
inherit hostConfig;
|
|
||||||
hostName = name;
|
|
||||||
};
|
|
||||||
sharedModules = [ cfg.modules.homeManager.default ];
|
sharedModules = [ cfg.modules.homeManager.default ];
|
||||||
users = forAllUsers' (name: _: cfg.modules.homeManager.${name});
|
users = forAllUsers' (name: _: cfg.modules.homeManager.${name});
|
||||||
};
|
};
|
||||||
hosts = cfg.manifest.hosts or { };
|
|
||||||
mkConfigurations =
|
mkConfigurations =
|
||||||
class: hosts:
|
class: hosts:
|
||||||
mapAttrs (
|
mapAttrs (
|
||||||
|
@ -31,6 +28,7 @@ let
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
inherit (config.flake) self;
|
inherit (config.flake) self;
|
||||||
hostName = name;
|
hostName = name;
|
||||||
|
hostConfig = value;
|
||||||
};
|
};
|
||||||
modules = [
|
modules = [
|
||||||
cfg.modules.nixos.default
|
cfg.modules.nixos.default
|
||||||
|
@ -44,6 +42,7 @@ let
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
inherit (config.flake) self;
|
inherit (config.flake) self;
|
||||||
hostName = name;
|
hostName = name;
|
||||||
|
hostConfig = value;
|
||||||
};
|
};
|
||||||
modules = [
|
modules = [
|
||||||
cfg.modules.darwin.default
|
cfg.modules.darwin.default
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
parts."Structure" = # markdown
|
parts."Structure" = # markdown
|
||||||
''
|
''
|
||||||
The system configurations are defined in [`flake.manifest`](nix/manifest.nix).
|
The system configurations are defined in [`flake.manifest`](nix/manifest.nix).
|
||||||
`flake.manifest.owner` provides the attributes for the administrator user, including username and pubkey.
|
`manifest.owner` provides the attributes for the administrator user, including username and pubkey.
|
||||||
`flake.manifest.hosts` provides the specifications for the system configurations that should be exposed by the flake as nixosConfigurations.
|
`manifest.hosts` provides the specifications for the system configurations that should be exposed by the flake as nixosConfigurations.
|
||||||
`flake.modules.nixos.*` provide NixOS options and configurations.
|
`flake.modules.nixos.*` provide NixOS options and configurations.
|
||||||
The attribute `flake.modules.nixos.default` provides options that will be applied to every system of that class.
|
The attribute `flake.modules.nixos.default` provides options that will be applied to every system of that class.
|
||||||
You can use it as seen [here](nix/modules/flake/home-manager.nix):
|
You can use it as seen [here](nix/modules/flake/home-manager.nix):
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
{
|
|
||||||
debug = true;
|
|
||||||
}
|
|
10
nix/flake-parts/flake-parts.nix
Normal file
10
nix/flake-parts/flake-parts.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
debug = true;
|
||||||
|
imports = [
|
||||||
|
inputs.make-shell.flakeModules.default
|
||||||
|
inputs.manifest.flakeModules.default
|
||||||
|
inputs.flake-parts.flakeModules.modules
|
||||||
|
inputs.text.flakeModules.default
|
||||||
|
];
|
||||||
|
}
|
|
@ -1,5 +0,0 @@
|
||||||
{ inputs, ... }:
|
|
||||||
{
|
|
||||||
#TODO: add to readme
|
|
||||||
imports = [ inputs.make-shell.flakeModules.default ];
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
{ inputs, ... }:
|
|
||||||
{
|
|
||||||
imports = [ inputs.flake-parts.flakeModules.modules ];
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
{ inputs, ... }:
|
|
||||||
{
|
|
||||||
imports = [ inputs.text.flakeModules.default ];
|
|
||||||
}
|
|
|
@ -27,6 +27,7 @@
|
||||||
};
|
};
|
||||||
rust.enable = true;
|
rust.enable = true;
|
||||||
rust.crates.enable = true;
|
rust.crates.enable = true;
|
||||||
|
tailwind.enable = true;
|
||||||
ts.enable = true;
|
ts.enable = true;
|
||||||
ts.extensions.ts-error-translator.enable = true;
|
ts.extensions.ts-error-translator.enable = true;
|
||||||
typst.enable = true;
|
typst.enable = true;
|
||||||
|
|
21
nix/homes/rafiq/darwin.nix
Normal file
21
nix/homes/rafiq/darwin.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
let
|
||||||
|
inherit (lib.modules) mkIf;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
flake.modules.homeManager.rafiq =
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
hostName,
|
||||||
|
hostConfig,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
mkIf (pkgs.system == "aarch64-darwin" || pkgs.system == "x86_64-darwin") {
|
||||||
|
home.file."Library/Application Support/aichat/config.yaml".text = ''
|
||||||
|
model: gemini:gemini-2.0-flash
|
||||||
|
clients:
|
||||||
|
- type: gemini
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
|
@ -45,6 +45,7 @@ in
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
programs = {
|
programs = {
|
||||||
|
mise.enable = true;
|
||||||
nvf.enable = true;
|
nvf.enable = true;
|
||||||
nvf.settings.vim = {
|
nvf.settings.vim = {
|
||||||
syntaxHighlighting = true;
|
syntaxHighlighting = true;
|
||||||
|
|
|
@ -1,12 +1,37 @@
|
||||||
{ config, ... }:
|
{ config, ... }:
|
||||||
let
|
let
|
||||||
cfg = config.flake;
|
inherit (config.manifest) admin;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
flake.modules.darwin.graphical.homebrew = {
|
flake.modules.darwin.graphical.homebrew = {
|
||||||
enable = true;
|
enable = true;
|
||||||
user = cfg.admin.username;
|
user = admin.username;
|
||||||
onActivation.cleanup = "uninstall";
|
onActivation.cleanup = "uninstall";
|
||||||
casks = [ "ghostty" ];
|
brews = [
|
||||||
|
"mise"
|
||||||
|
"docker"
|
||||||
|
];
|
||||||
|
casks = [
|
||||||
|
"ghostty"
|
||||||
|
"slack"
|
||||||
|
"gitify"
|
||||||
|
"telegram"
|
||||||
|
"vial"
|
||||||
|
"linear-linear"
|
||||||
|
"chatgpt"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
flake.modules.homeManager.rafiq = {
|
||||||
|
# make sure brew is on the path for M1
|
||||||
|
programs.zsh.initContent = ''
|
||||||
|
if [[ $(uname -m) == 'arm64' ]]; then
|
||||||
|
eval "$(/opt/homebrew/bin/brew shellenv)"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
programs.fish.shellInit = ''
|
||||||
|
if test (uname -m) = "arm64"
|
||||||
|
eval (/opt/homebrew/bin/brew shellenv)
|
||||||
|
end
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{ lib, config, ... }:
|
{ lib, config, ... }:
|
||||||
let
|
let
|
||||||
cfg = config.flake;
|
inherit (config.manifest) admin;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
allowedUnfreePackages = [
|
allowedUnfreePackages = [
|
||||||
|
@ -13,7 +13,7 @@ in
|
||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
{
|
{
|
||||||
fonts.packages = [ pkgs.font-awesome ];
|
fonts.packages = [ pkgs.font-awesome ];
|
||||||
services.getty.autologinUser = cfg.admin.username;
|
services.getty.autologinUser = admin.username;
|
||||||
# Start Hyprland at boot only if not connecting through SSH
|
# Start Hyprland at boot only if not connecting through SSH
|
||||||
environment.loginShellInit = # sh
|
environment.loginShellInit = # sh
|
||||||
''
|
''
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
{ lib, config, ... }:
|
{ lib, config, ... }:
|
||||||
let
|
let
|
||||||
cfg = config.flake;
|
|
||||||
inherit (builtins) foldl' attrNames;
|
inherit (builtins) foldl' attrNames;
|
||||||
inherit (lib.attrsets) mapAttrs;
|
inherit (lib.attrsets) mapAttrs;
|
||||||
in
|
in
|
||||||
|
@ -35,7 +34,7 @@ in
|
||||||
|
|
||||||
:::
|
:::
|
||||||
*/
|
*/
|
||||||
userListToAttrs = f: foldl' (acc: elem: acc // (f elem)) { } (attrNames cfg.manifest.users);
|
userListToAttrs = f: foldl' (acc: elem: acc // (f elem)) { } (attrNames config.manifest.users);
|
||||||
/**
|
/**
|
||||||
Return an attribute set for use with a option that needs to be used for all users.
|
Return an attribute set for use with a option that needs to be used for all users.
|
||||||
|
|
||||||
|
@ -65,7 +64,7 @@ in
|
||||||
|
|
||||||
:::
|
:::
|
||||||
*/
|
*/
|
||||||
forAllUsers = attrset: mapAttrs (_: _: attrset) cfg.manifest.users;
|
forAllUsers = attrset: mapAttrs (_: _: attrset) config.manifest.users;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Like forAllUsers, but passes in the name and value from the manifest.
|
Like forAllUsers, but passes in the name and value from the manifest.
|
||||||
|
@ -96,6 +95,6 @@ in
|
||||||
|
|
||||||
:::
|
:::
|
||||||
*/
|
*/
|
||||||
forAllUsers' = f: mapAttrs f cfg.manifest.users;
|
forAllUsers' = f: mapAttrs f config.manifest.users;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
flake.manifest = {
|
manifest = {
|
||||||
users.rafiq = {
|
users.rafiq = {
|
||||||
primary = true;
|
primary = true;
|
||||||
name = "Mohammad Rafiq";
|
name = "Mohammad Rafiq";
|
||||||
|
@ -33,10 +33,10 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
extraCfg = {
|
extraCfg = {
|
||||||
services.fwupd.enable = true; # FIXME: remove
|
|
||||||
machine = {
|
machine = {
|
||||||
bluetooth.enable = true;
|
bluetooth.enable = true;
|
||||||
usb.automount = true;
|
usb.automount = true;
|
||||||
|
usb.qmk.enable = true;
|
||||||
virtualisation = {
|
virtualisation = {
|
||||||
podman.enable = true;
|
podman.enable = true;
|
||||||
podman.distrobox.enable = true;
|
podman.distrobox.enable = true;
|
||||||
|
|
84
nix/meta.nix
84
nix/meta.nix
|
@ -5,54 +5,10 @@
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (lib.options) mkOption mkEnableOption;
|
inherit (lib.options) mkOption;
|
||||||
inherit (cfg.lib.options) mkStrOption;
|
inherit (lib.types) path lazyAttrsOf raw;
|
||||||
inherit (lib.types)
|
|
||||||
path
|
|
||||||
lazyAttrsOf
|
|
||||||
raw
|
|
||||||
deferredModule
|
|
||||||
submodule
|
|
||||||
;
|
|
||||||
inherit (inputs.flake-parts.lib) mkSubmoduleOptions;
|
inherit (inputs.flake-parts.lib) mkSubmoduleOptions;
|
||||||
inherit (cfg.lib.attrsets) firstAttrNameMatching;
|
|
||||||
cfg = config.flake;
|
cfg = config.flake;
|
||||||
monitorOpts = submodule {
|
|
||||||
options = {
|
|
||||||
id = mkStrOption "";
|
|
||||||
resolution = mkStrOption "";
|
|
||||||
refresh-rate = mkStrOption "";
|
|
||||||
scale = mkStrOption "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
userOpts = submodule {
|
|
||||||
options = {
|
|
||||||
username = mkStrOption "";
|
|
||||||
primary = mkEnableOption "";
|
|
||||||
name = mkStrOption "";
|
|
||||||
email = mkStrOption "";
|
|
||||||
shell = mkStrOption "";
|
|
||||||
pubkey = mkStrOption "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
hostOpts = submodule {
|
|
||||||
options = {
|
|
||||||
graphical = mkEnableOption "";
|
|
||||||
machine = {
|
|
||||||
platform = mkStrOption "";
|
|
||||||
gpu = mkStrOption "";
|
|
||||||
root.drive = mkStrOption "";
|
|
||||||
monitors = mkOption {
|
|
||||||
type = lazyAttrsOf monitorOpts;
|
|
||||||
default = { };
|
|
||||||
};
|
|
||||||
};
|
|
||||||
extraCfg = mkOption {
|
|
||||||
type = deferredModule;
|
|
||||||
default = { };
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.flake = mkSubmoduleOptions {
|
options.flake = mkSubmoduleOptions {
|
||||||
|
@ -68,38 +24,8 @@ in
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
manifest = mkOption {
|
|
||||||
type = submodule {
|
|
||||||
options = {
|
|
||||||
users = mkOption {
|
|
||||||
type = lazyAttrsOf userOpts;
|
|
||||||
default = { };
|
|
||||||
};
|
|
||||||
hosts.nixos = mkOption {
|
|
||||||
type = lazyAttrsOf hostOpts;
|
|
||||||
default = { };
|
|
||||||
};
|
|
||||||
hosts.darwin = mkOption {
|
|
||||||
type = lazyAttrsOf raw;
|
|
||||||
default = { };
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# Helper Option
|
|
||||||
admin = mkOption {
|
|
||||||
type = userOpts;
|
|
||||||
default = { };
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
config.flake =
|
config.flake = {
|
||||||
let
|
paths.secrets = cfg.paths.root + "/secrets";
|
||||||
username = firstAttrNameMatching (_: v: v.primary or false) cfg.manifest.users;
|
};
|
||||||
in
|
|
||||||
{
|
|
||||||
paths.secrets = cfg.paths.root + "/secrets";
|
|
||||||
admin = cfg.manifest.users.${username} // {
|
|
||||||
inherit username;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{ config, ... }:
|
{ config, ... }:
|
||||||
let
|
let
|
||||||
inherit (config.flake) manifest;
|
inherit (config.manifest) users;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
flake.modules.homeManager.default =
|
flake.modules.homeManager.default =
|
||||||
|
@ -9,8 +9,8 @@ in
|
||||||
home.sessionVariables.GIT_CONFIG_GLOBAL = "$HOME/.config/git/config";
|
home.sessionVariables.GIT_CONFIG_GLOBAL = "$HOME/.config/git/config";
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
userName = manifest.users.${config.home.username}.name;
|
userName = users.${config.home.username}.name;
|
||||||
userEmail = manifest.users.${config.home.username}.email;
|
userEmail = users.${config.home.username}.email;
|
||||||
signing.key = "~/.ssh/id_ed25519.pub";
|
signing.key = "~/.ssh/id_ed25519.pub";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
let
|
let
|
||||||
cfg = config.flake;
|
cfg = config.flake;
|
||||||
|
inherit (config.manifest) users;
|
||||||
inherit (cfg.lib.modules) forAllUsers';
|
inherit (cfg.lib.modules) forAllUsers';
|
||||||
inherit (lib.attrsets) mapAttrs';
|
inherit (lib.attrsets) mapAttrs';
|
||||||
in
|
in
|
||||||
|
@ -12,7 +13,7 @@ in
|
||||||
programs = mapAttrs' (name: value: {
|
programs = mapAttrs' (name: value: {
|
||||||
name = value.shell;
|
name = value.shell;
|
||||||
value.enable = true;
|
value.enable = true;
|
||||||
}) cfg.manifest.users;
|
}) users;
|
||||||
users.users = forAllUsers' (_: value: { shell = pkgs.${value.shell}; });
|
users.users = forAllUsers' (_: value: { shell = pkgs.${value.shell}; });
|
||||||
};
|
};
|
||||||
darwin.default =
|
darwin.default =
|
||||||
|
@ -21,14 +22,14 @@ in
|
||||||
programs = mapAttrs' (name: value: {
|
programs = mapAttrs' (name: value: {
|
||||||
name = value.shell;
|
name = value.shell;
|
||||||
value.enable = true;
|
value.enable = true;
|
||||||
}) cfg.manifest.users;
|
}) users;
|
||||||
users.users = forAllUsers' (_: value: { shell = pkgs.${value.shell}; });
|
users.users = forAllUsers' (_: value: { shell = pkgs.${value.shell}; });
|
||||||
environment.shells = [ pkgs.fish ];
|
environment.shells = [ pkgs.fish ];
|
||||||
};
|
};
|
||||||
homeManager.default =
|
homeManager.default =
|
||||||
{ config, ... }:
|
{ config, ... }:
|
||||||
{
|
{
|
||||||
programs.${cfg.manifest.users.${config.home.username}.shell}.enable = true;
|
programs.${users.${config.home.username}.shell}.enable = true;
|
||||||
home.shell.enableShellIntegration = true;
|
home.shell.enableShellIntegration = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,7 +5,12 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
flake.modules.nixos.default =
|
flake.modules.nixos.default =
|
||||||
{ config, modulesPath, ... }:
|
{
|
||||||
|
config,
|
||||||
|
modulesPath,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.machine;
|
cfg = config.machine;
|
||||||
in
|
in
|
||||||
|
@ -14,6 +19,7 @@ in
|
||||||
options.machine = {
|
options.machine = {
|
||||||
bluetooth.enable = mkEnableOption "";
|
bluetooth.enable = mkEnableOption "";
|
||||||
usb.automount = mkEnableOption "";
|
usb.automount = mkEnableOption "";
|
||||||
|
usb.qmk.enable = mkEnableOption "";
|
||||||
};
|
};
|
||||||
config = mkMerge [
|
config = mkMerge [
|
||||||
(mkIf cfg.usb.automount {
|
(mkIf cfg.usb.automount {
|
||||||
|
@ -28,6 +34,18 @@ in
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
|
(mkIf cfg.usb.qmk.enable {
|
||||||
|
hardware.keyboard.qmk.enable = true;
|
||||||
|
services.udev = {
|
||||||
|
packages = with pkgs; [
|
||||||
|
vial
|
||||||
|
qmk
|
||||||
|
qmk-udev-rules
|
||||||
|
qmk_hid
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
})
|
||||||
(mkIf cfg.bluetooth.enable {
|
(mkIf cfg.bluetooth.enable {
|
||||||
persistDirs = [ "/var/lib/bluetooth" ];
|
persistDirs = [ "/var/lib/bluetooth" ];
|
||||||
hardware.bluetooth = {
|
hardware.bluetooth = {
|
||||||
|
|
|
@ -1,7 +1,3 @@
|
||||||
{ config, ... }:
|
|
||||||
let
|
|
||||||
cfg = config.flake;
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
allowedUnfreePackages = [
|
allowedUnfreePackages = [
|
||||||
"nvidia-x11"
|
"nvidia-x11"
|
||||||
|
@ -11,11 +7,11 @@ in
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
hostName,
|
hostConfig,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
gpu = cfg.manifest.hosts.nixos.${hostName}.machine.gpu or "";
|
inherit (hostConfig.machine) gpu;
|
||||||
in
|
in
|
||||||
if gpu == "nvidia" then
|
if gpu == "nvidia" then
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
{ config, ... }:
|
|
||||||
{
|
{
|
||||||
flake.modules.nixos.default =
|
flake.modules.nixos.default =
|
||||||
{ hostName, ... }:
|
{ hostConfig, ... }:
|
||||||
let
|
let
|
||||||
inherit (config.flake.manifest.hosts.nixos.${hostName}.machine) platform;
|
inherit (hostConfig.machine) platform;
|
||||||
arch = if platform == "amd" || platform == "intel" then "x86_64" else "aarch64";
|
arch = if platform == "amd" || platform == "intel" then "x86_64" else "aarch64";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
@ -13,9 +12,9 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
flake.modules.darwin.default =
|
flake.modules.darwin.default =
|
||||||
{ hostName, ... }:
|
{ hostConfig, ... }:
|
||||||
let
|
let
|
||||||
inherit (config.flake.manifest.hosts.darwin.${hostName}.machine) platform;
|
inherit (hostConfig.machine) platform;
|
||||||
arch = if platform == "intel" then "x86_64" else "aarch64";
|
arch = if platform == "intel" then "x86_64" else "aarch64";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,17 +1,12 @@
|
||||||
{
|
{ lib, inputs, ... }:
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
let
|
||||||
inherit (lib.modules) mkMerge mkIf mkAfter;
|
inherit (lib.modules) mkMerge mkIf mkAfter;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
flake.modules.nixos.default =
|
flake.modules.nixos.default =
|
||||||
{ hostName, ... }:
|
{ hostConfig, ... }:
|
||||||
let
|
let
|
||||||
inherit (config.flake.manifest.hosts.nixos.${hostName}.machine) root;
|
inherit (hostConfig.machine) root;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ inputs.disko.nixosModules.disko ];
|
imports = [ inputs.disko.nixosModules.disko ];
|
||||||
|
@ -85,7 +80,7 @@ in
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
# Ephemeral by default - assumes btrfs
|
# Ephemeral by default - assumes btrfs
|
||||||
(mkIf (config.flake.manifest.hosts.nixos.${hostName}.machine.root.ephemeral or true) {
|
(mkIf root.ephemeral {
|
||||||
boot.initrd.postDeviceCommands = mkAfter ''
|
boot.initrd.postDeviceCommands = mkAfter ''
|
||||||
mkdir /btrfs_tmp
|
mkdir /btrfs_tmp
|
||||||
mount /dev/root_vg/root /btrfs_tmp
|
mount /dev/root_vg/root /btrfs_tmp
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
let
|
let
|
||||||
cfg = config.flake;
|
cfg = config.flake;
|
||||||
|
inherit (config.manifest) admin;
|
||||||
inherit (lib.modules) mkMerge;
|
inherit (lib.modules) mkMerge;
|
||||||
inherit (cfg.lib.modules) forAllUsers';
|
inherit (cfg.lib.modules) forAllUsers';
|
||||||
in
|
in
|
||||||
|
@ -16,7 +17,7 @@ in
|
||||||
"/etc/ssh/ssh_host_rsa_key.pub"
|
"/etc/ssh/ssh_host_rsa_key.pub"
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
{ users.users.root.openssh.authorizedKeys.keys = [ cfg.admin.pubkey ]; }
|
{ users.users.root.openssh.authorizedKeys.keys = [ admin.pubkey ]; }
|
||||||
];
|
];
|
||||||
flake.modules.homeManager.default = {
|
flake.modules.homeManager.default = {
|
||||||
persistDirs = [ ".ssh" ];
|
persistDirs = [ ".ssh" ];
|
||||||
|
|
|
@ -4,7 +4,7 @@ let
|
||||||
inherit (config.flake.lib.options) mkStrOption mkPathOption;
|
inherit (config.flake.lib.options) mkStrOption mkPathOption;
|
||||||
inherit (config.flake.lib.services) mkRootDomain;
|
inherit (config.flake.lib.services) mkRootDomain;
|
||||||
inherit (config.flake.paths) secrets;
|
inherit (config.flake.paths) secrets;
|
||||||
inherit (config.flake.admin) email;
|
inherit (config.manifest.admin) email;
|
||||||
inherit (lib.types) listOf submodule attrs;
|
inherit (lib.types) listOf submodule attrs;
|
||||||
inherit (lib.options) mkOption mkEnableOption;
|
inherit (lib.options) mkOption mkEnableOption;
|
||||||
inherit (lib.modules) mkMerge mkIf;
|
inherit (lib.modules) mkMerge mkIf;
|
||||||
|
|
|
@ -6,31 +6,48 @@
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.flake;
|
cfg = config.flake;
|
||||||
|
inherit (cfg.paths) secrets;
|
||||||
inherit (builtins) readFile;
|
inherit (builtins) readFile;
|
||||||
inherit (lib.meta) getExe;
|
inherit (lib.meta) getExe;
|
||||||
inherit (lib.strings) trim;
|
inherit (lib.strings) trim;
|
||||||
inherit (cfg.admin) username pubkey;
|
inherit (config.manifest.admin) username pubkey;
|
||||||
inherit (cfg.paths) secrets;
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
flake.modules.nixos.default =
|
flake.modules = {
|
||||||
{ config, ... }:
|
nixos.default =
|
||||||
{
|
{ config, ... }:
|
||||||
imports = [ inputs.sops-nix.nixosModules.sops ];
|
{
|
||||||
config = {
|
imports = [ inputs.sops-nix.nixosModules.sops ];
|
||||||
sops = {
|
config = {
|
||||||
age.sshKeyPaths = [
|
sops = {
|
||||||
"/persist${config.users.defaultUserHome}/${username}/.ssh/id_ed25519"
|
age.sshKeyPaths = [
|
||||||
];
|
"/persist${config.users.defaultUserHome}/${username}/.ssh/id_ed25519"
|
||||||
secrets."keys/gemini".sopsFile = secrets + "/keys.yaml";
|
];
|
||||||
|
secrets."keys/gemini".sopsFile = secrets + "/keys.yaml";
|
||||||
|
};
|
||||||
|
environment.shellInit = # sh
|
||||||
|
''
|
||||||
|
export GEMINI_API_KEY=$(sudo cat ${config.sops.secrets."keys/gemini".path})
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
environment.shellInit = # sh
|
|
||||||
''
|
|
||||||
export GEMINI_API_KEY=$(sudo cat ${config.sops.secrets."keys/gemini".path})
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
};
|
darwin.default =
|
||||||
flake.modules.homeManager.default.persistDirs = [ ".config/sops/age" ];
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
imports = [ inputs.sops-nix.darwinModules.sops ];
|
||||||
|
config = {
|
||||||
|
sops = {
|
||||||
|
age.sshKeyPaths = [ "${config.users.users.${username}.home}/.ssh/id_ed25519" ];
|
||||||
|
secrets."keys/gemini".sopsFile = secrets + "/keys.yaml";
|
||||||
|
};
|
||||||
|
environment.shellInit = # sh
|
||||||
|
''
|
||||||
|
export GEMINI_API_KEY=$(sudo cat ${config.sops.secrets."keys/gemini".path})
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
homeManager.default.persistDirs = [ ".config/sops/age" ];
|
||||||
|
};
|
||||||
perSystem =
|
perSystem =
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,11 +1,19 @@
|
||||||
{ config, ... }:
|
{ config, ... }:
|
||||||
let
|
let
|
||||||
cfg = config.flake;
|
inherit (config.manifest) admin;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
flake.modules.nixos.default = {
|
flake.modules.nixos.default = {
|
||||||
security.sudo.wheelNeedsPassword = false;
|
security.sudo.wheelNeedsPassword = false;
|
||||||
nix.settings.trusted-users = [ "@wheel" ];
|
nix.settings.trusted-users = [ "@wheel" ];
|
||||||
users.users.${cfg.admin.username}.extraGroups = [ "wheel" ];
|
users.users.${admin.username}.extraGroups = [ "wheel" ];
|
||||||
|
};
|
||||||
|
flake.modules.darwin.default.security = {
|
||||||
|
sudo.extraConfig = "%admin ALL = (ALL) NOPASSWD: ALL";
|
||||||
|
pam.services.sudo_local = {
|
||||||
|
enable = true;
|
||||||
|
reattach = true;
|
||||||
|
touchIdAuth = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
let
|
let
|
||||||
cfg = config.flake;
|
cfg = config.flake;
|
||||||
|
inherit (config.manifest) users admin;
|
||||||
inherit (cfg.lib.modules) userListToAttrs forAllUsers';
|
inherit (cfg.lib.modules) userListToAttrs forAllUsers';
|
||||||
inherit (lib.lists) findFirstIndex;
|
inherit (lib.lists) findFirstIndex;
|
||||||
inherit (builtins) attrNames;
|
inherit (builtins) attrNames;
|
||||||
|
@ -36,11 +37,12 @@ in
|
||||||
flake.modules.darwin.default =
|
flake.modules.darwin.default =
|
||||||
{ config, ... }:
|
{ config, ... }:
|
||||||
{
|
{
|
||||||
users.knownUsers = attrNames cfg.manifest.users;
|
system.primaryUser = admin.username;
|
||||||
|
users.knownUsers = attrNames users;
|
||||||
users.users = forAllUsers' (
|
users.users = forAllUsers' (
|
||||||
name: _: {
|
name: _: {
|
||||||
home = "/Users/${name}";
|
home = "/Users/${name}";
|
||||||
uid = 501 + (findFirstIndex (x: x == name) null (attrNames cfg.manifest.users));
|
uid = 501 + (findFirstIndex (x: x == name) null (attrNames users));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
home-manager.users = forAllUsers' (
|
home-manager.users = forAllUsers' (
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue