Compare commits

...

8 commits

Author SHA1 Message Date
b32f7e3989
properly handle rune module 2024-05-06 15:49:11 -05:00
86bc2bf44f
don't lose error info on oizys dry 2024-05-06 15:34:14 -05:00
bb87af5136
completely rework rune system 2024-05-06 15:30:10 -05:00
ee519f94c9
nixfmt-rfc-style now 2024-05-06 14:32:00 -05:00
9174ac3198
hide helpLine 2024-05-06 14:29:29 -05:00
dca2c93a69
add spinner to oizys 2024-05-06 12:21:45 -05:00
aa91eb9a8f
flake.lock: Update
Flake lock file updates:

• Updated input 'hyprland':
    'git+https://github.com/hyprwm/Hyprland?ref=refs/heads/main&rev=cddeec47a1fc0e70d8598fd10c29cd0e9489999f&submodules=1' (2024-05-05)
  → 'git+https://github.com/hyprwm/Hyprland?ref=refs/heads/main&rev=fa69de8ab6cc17bb763a1586c55847c5d5a82a83&submodules=1' (2024-05-06)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/d32560238207b8e26d88b265207b216ee46b8450?narHash=sha256-hfBmnYFyz9I1mdrC3tX1A%2BdF9cOUcds5PIMPxrT%2BcRk%3D' (2024-05-04)
  → 'github:nixos/nixpkgs/ee4a6e0f566fe5ec79968c57a9c2c3c25f2cf41d?narHash=sha256-clkcOIkg8G4xuJh%2B1onLG4HPMpbtzdLv4rHxFzgsH9c%3D' (2024-05-05)
• Updated input 'nixpkgs-wayland':
    'github:nix-community/nixpkgs-wayland/eb44cc5dcc75c33e7f246c9f38b96f158b3f6e9d?narHash=sha256-LbSVziNYk/nxfYeyxKNhV/ryfbCUUZVlWoG5KG0sOxk%3D' (2024-05-05)
  → 'github:nix-community/nixpkgs-wayland/05dbf637618396834607a9844660e2bf85f3051c?narHash=sha256-4gtiHlHDC9P7/%2BcXNYVVTKLNN7v0ltJ1HIgYhX8c1wk%3D' (2024-05-06)
• Updated input 'zig2nix':
    'github:Cloudef/zig2nix/deb76120bc98822cfa66c33778562214479eb050?narHash=sha256-HDtmvjUjWVq%2BEIvem2rwRrGhR13KYqCQKq5xSm3mP%2B8%3D' (2024-05-05)
  → 'github:Cloudef/zig2nix/362cc6f3fe27d73f3663d8c2c25f23ca75151ed6?narHash=sha256-Xn8hziZWSuNGscMKNdBhrHUhfH3NZC9m0oIKwCcCYtg%3D' (2024-05-06)
2024-05-06 11:58:40 -05:00
227e3a2fe9
update oizys help on README 2024-05-05 17:42:09 -05:00
56 changed files with 506 additions and 364 deletions

View file

@ -42,21 +42,26 @@ nix run "github:daylinmorgan/oizys"
```
```
oizys <cmd> [opts]
nix begat oizys
commands:
dry poor man's nix flake check
boot nixos-rebuild boot
switch nixos-rebuild switch
Usage:
oizys [command]
Available Commands:
boot nixos rebuild boot
build A brief description of your command
cache build and push to cachix
build build system flake
dry poor man's nix flake check
help Help about any command
output show nixosConfiguration attr
switch nixos rebuild switch
options:
-h|--help show this help
--host hostname (current host)
-f|--flake path to flake ($FLAKE_PATH or $HOME/oizys)
-c|--cache name of cachix binary cache (daylin)
--no-pinix don't use pinix
Flags:
--flake string path to flake ($OIZYS_DIR or $HOME/oizys)
-h, --help help for oizys
--host string host to build (current host)
Use "oizys [command] --help" for more information about a command.
```
## oizys?

View file

@ -200,11 +200,11 @@
"xdph": "xdph"
},
"locked": {
"lastModified": 1714933694,
"narHash": "sha256-gziEBZF1wmBBw3v0Ang3nN3QwoQWtFmBIORODJt38TE=",
"lastModified": 1715012366,
"narHash": "sha256-+e9u2a92M3CIdnjMxqbJS0ulxkjXaRwHGIJR+fyhZII=",
"ref": "refs/heads/main",
"rev": "cddeec47a1fc0e70d8598fd10c29cd0e9489999f",
"revCount": 4617,
"rev": "fa69de8ab6cc17bb763a1586c55847c5d5a82a83",
"revCount": 4620,
"submodules": true,
"type": "git",
"url": "https://github.com/hyprwm/Hyprland"
@ -443,11 +443,11 @@
"nixpkgs": "nixpkgs_6"
},
"locked": {
"lastModified": 1714926024,
"narHash": "sha256-LbSVziNYk/nxfYeyxKNhV/ryfbCUUZVlWoG5KG0sOxk=",
"lastModified": 1715004883,
"narHash": "sha256-4gtiHlHDC9P7/+cXNYVVTKLNN7v0ltJ1HIgYhX8c1wk=",
"owner": "nix-community",
"repo": "nixpkgs-wayland",
"rev": "eb44cc5dcc75c33e7f246c9f38b96f158b3f6e9d",
"rev": "05dbf637618396834607a9844660e2bf85f3051c",
"type": "github"
},
"original": {
@ -490,11 +490,11 @@
},
"nixpkgs_4": {
"locked": {
"lastModified": 1714809261,
"narHash": "sha256-hfBmnYFyz9I1mdrC3tX1A+dF9cOUcds5PIMPxrT+cRk=",
"lastModified": 1714912032,
"narHash": "sha256-clkcOIkg8G4xuJh+1onLG4HPMpbtzdLv4rHxFzgsH9c=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d32560238207b8e26d88b265207b216ee46b8450",
"rev": "ee4a6e0f566fe5ec79968c57a9c2c3c25f2cf41d",
"type": "github"
},
"original": {
@ -752,11 +752,11 @@
]
},
"locked": {
"lastModified": 1714871906,
"narHash": "sha256-HDtmvjUjWVq+EIvem2rwRrGhR13KYqCQKq5xSm3mP+8=",
"lastModified": 1714958137,
"narHash": "sha256-Xn8hziZWSuNGscMKNdBhrHUhfH3NZC9m0oIKwCcCYtg=",
"owner": "Cloudef",
"repo": "zig2nix",
"rev": "deb76120bc98822cfa66c33778562214479eb050",
"rev": "362cc6f3fe27d73f3663d8c2c25f23ca75151ed6",
"type": "github"
},
"original": {

View file

@ -3,10 +3,9 @@
pkgs,
enabled,
...
}: {
imports = with self.nixosModules; [
restic
];
}:
{
imports = with self.nixosModules; [ restic ];
oizys = {
languages = [
@ -14,6 +13,7 @@
"node" # for docker langservers
"python"
];
rune.motd = enabled;
docker = enabled;
backups = enabled;
@ -31,14 +31,18 @@
rcloneConfigFile = "/home/daylin/.config/rclone/rclone.conf";
repository = "rclone:g:archives/algiz";
passwordFile = "/home/daylin/.config/restic/algiz-pass";
paths = ["/home/daylin/services/git/" "/home/daylin/services/gotosocial/" "home/daylin/services/caddy"];
paths = [
"/home/daylin/services/git/"
"/home/daylin/services/gotosocial/"
"home/daylin/services/caddy"
];
};
security.sudo.wheelNeedsPassword = false;
users.users = {
daylin = {
extraGroups = ["docker"];
extraGroups = [ "docker" ];
};
git = {

View file

@ -1,28 +1,28 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ lib, modulesPath, ... }:
{
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/profiles/qemu-guest.nix")
];
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
boot.initrd.availableKernelModules = ["ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = [];
boot.extraModulePackages = [];
boot.initrd.availableKernelModules = [
"ahci"
"xhci_pci"
"virtio_pci"
"virtio_scsi"
"sd_mod"
"sr_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/70d6dad3-1778-43bf-8f87-76dd7f54c545";
fsType = "ext4";
};
swapDevices = [
{device = "/dev/disk/by-uuid/a4e4cad9-1844-45dd-9bea-eb77bd71c37b";}
];
swapDevices = [ { device = "/dev/disk/by-uuid/a4e4cad9-1844-45dd-9bea-eb77bd71c37b"; } ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's

View file

@ -1,13 +1,5 @@
{ enabled, ... }:
{
lib,
enabled,
...
}: {
users.motd = lib.mkRune {
number = "6";
rune = "algiz";
};
services.resolved = enabled;
services.fail2ban = {
@ -23,15 +15,16 @@
# networking.nameservers = [ "8.8.8.8"];
# allow tcp connections for revsere proxy
networking.firewall =
enabled
// {
allowedTCPPorts = [80 443];
networking.firewall = enabled // {
allowedTCPPorts = [
80
443
];
};
services.openssh =
enabled
// {settings.PasswordAuthentication = false;};
services.openssh = enabled // {
settings.PasswordAuthentication = false;
};
# users.mutableUsers = false;

View file

@ -1,15 +1,11 @@
{ self, enabled, ... }:
{
self,
enabled,
...
}: {
imports = with self.nixosModules; [
nix-ld
];
imports = with self.nixosModules; [ nix-ld ];
oizys = {
desktop = enabled;
nix-ld = enabled;
rune.motd = enabled;
};
# Enable the X11 windowing system.
@ -19,5 +15,5 @@
windowManager.qtile.enable = true;
};
users.users.daylin.extraGroups = ["docker"];
users.users.daylin.extraGroups = [ "docker" ];
}

View file

@ -6,15 +6,24 @@
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
}:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-amd" "wl"];
boot.extraModulePackages = [config.boot.kernelPackages.broadcom_sta];
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"ahci"
"usbhid"
"usb_storage"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [
"kvm-amd"
"wl"
];
boot.extraModulePackages = [ config.boot.kernelPackages.broadcom_sta ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/47108030-bad4-431a-8fe3-0063accca466";
@ -26,9 +35,7 @@
fsType = "vfat";
};
swapDevices = [
{device = "/dev/disk/by-uuid/115bc13a-9b09-4790-986c-ab3b434cde69";}
];
swapDevices = [ { device = "/dev/disk/by-uuid/115bc13a-9b09-4790-986c-ab3b434cde69"; } ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's

View file

@ -2,14 +2,9 @@
config,
pkgs,
enabled,
mkRune,
...
}: {
users.motd = mkRune {
number = "2";
rune = "mannaz";
};
}:
{
# Use the systemd-boot EFI boot loader.
boot.loader = {
systemd-boot = enabled;
@ -27,27 +22,21 @@
}
];
hardware.opengl =
enabled
// {
hardware.opengl = enabled // {
driSupport = true;
driSupport32Bit = true;
extraPackages = with pkgs; [
libGL
];
extraPackages = with pkgs; [ libGL ];
setLdLibraryPath = true;
};
# Load nvidia driver for Xorg and Wayland
services.xserver.videoDrivers = ["nvidia"];
services.xserver.videoDrivers = [ "nvidia" ];
hardware.nvidia = {
# Modesetting is required.
modesetting = enabled;
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
powerManagement =
enabled
// {
powerManagement = enabled // {
# Fine-grained power management. Turns off GPU when not in use.
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
finegrained = false;

View file

@ -1,8 +1,5 @@
{ pkgs, enabled, ... }:
{
pkgs,
enabled,
...
}: {
oizys = {
desktop = enabled;
hyprland = enabled;
@ -31,7 +28,10 @@
user = "daylin";
repository = "rclone:g:archives/othalan";
passwordFile = "/home/daylin/.config/restic/othalan-pass";
paths = ["/home/daylin/stuff/" "/home/daylin/dev/"];
paths = [
"/home/daylin/stuff/"
"/home/daylin/dev/"
];
};
users.users.daylin.extraGroups = [

View file

@ -6,15 +6,20 @@
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
}:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = ["xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
boot.initrd.availableKernelModules = [
"xhci_pci"
"thunderbolt"
"nvme"
"usb_storage"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/00587bf0-9f7f-4d96-9b8b-cf5024157e2c";
@ -26,9 +31,7 @@
fsType = "vfat";
};
swapDevices = [
{device = "/dev/disk/by-uuid/bd64a1ba-f259-4b64-88cd-5585b9345f5a";}
];
swapDevices = [ { device = "/dev/disk/by-uuid/bd64a1ba-f259-4b64-88cd-5585b9345f5a"; } ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's

View file

@ -1,6 +1,8 @@
{pkgs, ...}: let
{ pkgs, ... }:
let
notes-git = ''${pkgs.git}/bin/git -C /home/daylin/stuff/notes'';
in {
in
{
systemd.services.notes-bot = {
description = "auto commit changes to notes";
serviceConfig = {
@ -13,7 +15,7 @@ in {
};
systemd.timers.notes-bot-timer = {
description = "run notes commit service";
wantedBy = ["timers.target"];
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "daily";
Persistent = true;

View file

@ -1,13 +1,11 @@
{ pkgs, enabled, ... }:
{
pkgs,
enabled,
mkRune,
...
}: {
networking.networkmanager = enabled;
services.printing = enabled;
services.fwupd = enabled;
hardware.bluetooth = enabled // {powerOnBoot = true;};
hardware.bluetooth = enabled // {
powerOnBoot = true;
};
# https://github.com/NixOS/nixos-hardware/blob/c478b3d56969006e015e55aaece4931f3600c1b2/lenovo/thinkpad/x1/9th-gen/default.nix
# https://github.com/NixOS/nixos-hardware/blob/c478b3d56969006e015e55aaece4931f3600c1b2/common/pc/ssd/default.nix
@ -15,22 +13,15 @@
# rtkit is optional but recommended
security.rtkit = enabled;
services.pipewire =
enabled
// {
services.pipewire = enabled // {
audio = enabled;
pulse = enabled;
alsa = enabled // {support32Bit = true;};
alsa = enabled // {
support32Bit = true;
};
};
environment.systemPackages = with pkgs; [
pamixer
];
services.getty.greetingLine = mkRune {
rune = "othalan";
runeKind = "ascii";
};
environment.systemPackages = with pkgs; [ pamixer ];
networking.hostName = "othalan";
time.timeZone = "US/Central";
@ -45,9 +36,7 @@
boot.kernelPackages = pkgs.linuxPackagesFor pkgs.linux_latest;
boot.loader = {
systemd-boot =
enabled
// {
systemd-boot = enabled // {
consoleMode = "max";
};
efi.canTouchEfiVariables = true;

View file

@ -1,57 +1,76 @@
inputs: let
inputs:
let
inherit (inputs) nixpkgs self;
lib = nixpkgs.lib.extend (import ./extended.nix);
inherit (builtins) mapAttrs readDir filter listToAttrs;
inherit (lib) nixosSystem genAttrs isNixFile mkDefaultOizysModule mkOizysModule enabled mkRune;
inherit (builtins)
mapAttrs
readDir
filter
listToAttrs
;
inherit (lib)
nixosSystem
genAttrs
isNixFile
mkDefaultOizysModule
mkOizysModule
enabled
;
inherit (lib.filesystem) listFilesRecursive;
inherit (import ./find-modules.nix {inherit lib;}) findModulesList;
inherit (import ./find-modules.nix { inherit lib; }) findModulesList;
#supportedSystems = ["x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"];
supportedSystems = ["x86_64-linux"];
in rec {
forAllSystems = f: genAttrs supportedSystems (system: f (import nixpkgs {inherit system;}));
supportedSystems = [ "x86_64-linux" ];
in
rec {
forAllSystems = f: genAttrs supportedSystems (system: f (import nixpkgs { inherit system; }));
nixosModules = listToAttrs (findModulesList ../modules);
mkSystem = hostname:
mkSystem =
hostname:
nixosSystem {
system = "x86_64-linux";
modules =
[
modules = [
../modules/oizys.nix
../overlays
]
++ filter
isNixFile
(listFilesRecursive (../. + "/hosts/${hostname}"));
] ++ filter isNixFile (listFilesRecursive (../. + "/hosts/${hostname}"));
specialArgs = {inherit inputs lib self mkDefaultOizysModule mkOizysModule enabled mkRune;};
specialArgs = {
inherit
inputs
lib
self
mkDefaultOizysModule
mkOizysModule
enabled
;
};
};
oizysHosts = mapAttrs (name: _: mkSystem name) (readDir ../hosts);
oizysPkg = forAllSystems (
pkgs: rec {
oizys-zig = pkgs.callPackage ../pkgs/oizys/oizys-zig {zig2nix = inputs.zig2nix;};
oizys-nim = pkgs.callPackage ../pkgs/oizys/oizys-nim {};
oizys-rs = pkgs.callPackage ../pkgs/oizys/oizys-rs {};
oizys-go = pkgs.callPackage ../pkgs/oizys/oizys-go {};
oizysPkg = forAllSystems (pkgs: rec {
oizys-zig = pkgs.callPackage ../pkgs/oizys/oizys-zig { zig2nix = inputs.zig2nix; };
oizys-nim = pkgs.callPackage ../pkgs/oizys/oizys-nim { };
oizys-rs = pkgs.callPackage ../pkgs/oizys/oizys-rs { };
oizys-go = pkgs.callPackage ../pkgs/oizys/oizys-go { };
default = oizys-go;
}
);
devShells = forAllSystems (
pkgs: {
});
devShells = forAllSystems (pkgs: {
default = pkgs.mkShell {
packages = with pkgs; [git deadnix];
packages = with pkgs; [
git
deadnix
];
};
}
);
});
oizysFlake = {
nixosModules = nixosModules;
nixosConfigurations = oizysHosts;
packages = oizysPkg;
devShells = devShells;
formatter = forAllSystems (pkgs: pkgs.alejandra);
formatter = forAllSystems (pkgs: pkgs.nixfmt-rfc-style);
};
}

View file

@ -1,33 +1,42 @@
final: prev: let
inherit (final) hasSuffix mkEnableOption mkIf mkOption types;
runes = import ../modules/runes;
in rec {
enabled = {enable = true;};
disabled = {enable = false;};
final: prev:
let
inherit (final)
hasSuffix
mkEnableOption
mkIf
mkOption
types
;
in
rec {
enabled = {
enable = true;
};
disabled = {
enable = false;
};
# ["a" "b"] -> {a.enable = true; b.enable = true;}
enableAttrs = attrs:
builtins.listToAttrs (map (attr: {
enableAttrs =
attrs:
builtins.listToAttrs (
map (attr: {
name = attr;
value = enabled;
})
attrs);
}) attrs
);
# ["a" "b"] -> {a.enable = false; b.enable = false;}
disableAttrs = attrs:
builtins.listToAttrs (map (attr: {
disableAttrs =
attrs:
builtins.listToAttrs (
map (attr: {
name = attr;
value = disabled;
})
attrs);
}) attrs
);
isNixFile = path: hasSuffix ".nix" path;
mkIfIn = name: list: prev.mkIf (builtins.elem name list);
mkRune = {
rune,
number ? "6",
runeKind ? "braille",
}:
"[1;3${number}m\n" + runes.${rune}.${runeKind} + "\n";
mkOizysModule = config: attr: content: {
options.oizys.${attr}.enable = mkEnableOption "enable ${attr} support";

View file

@ -1,25 +1,39 @@
{...}: let
inherit (builtins) concatLists attrValues mapAttrs elemAt match readDir;
in rec {
{ ... }:
let
inherit (builtins)
concatLists
attrValues
mapAttrs
elemAt
match
readDir
;
in
rec {
# https://github.com/balsoft/nixos-config/blob/73cc2c3a8bb62a9c3980a16ae70b2e97af6e1abd/flake.nix#L109-L120
findModulesList = dir:
concatLists (attrValues (mapAttrs
(name: type:
if type == "regular"
then [
findModulesList =
dir:
concatLists (
attrValues (
mapAttrs (
name: type:
if type == "regular" then
[
{
name = elemAt (match "(.*)\\.nix" name) 0;
value = dir + "/${name}";
}
]
else if
(readDir (dir + "/${name}"))
? "default.nix"
then [
else if (readDir (dir + "/${name}")) ? "default.nix" then
[
{
inherit name;
value = dir + "/${name}";
}
]
else findModulesList (dir + "/${name}")) (readDir dir)));
else
findModulesList (dir + "/${name}")
) (readDir dir)
)
);
}

View file

@ -3,13 +3,15 @@
config,
lib,
...
}: let
}:
let
inherit (lib) mkIf;
in {
in
{
config = mkIf config.oizys.desktop.enable {
fonts.fontconfig.enable = true;
fonts.packages = with pkgs; [
(nerdfonts.override {fonts = ["FiraCode"];})
(nerdfonts.override { fonts = [ "FiraCode" ]; })
recursive
];
};

View file

@ -4,9 +4,11 @@
config,
lib,
...
}: let
}:
let
inherit (lib) mkIf;
in {
in
{
config = mkIf config.oizys.desktop.enable {
environment.systemPackages = with pkgs; [
wezterm
@ -23,7 +25,7 @@ in {
hunspell # spell check for libreoffice
(catppuccin-gtk.override {
accents = ["rosewater"];
accents = [ "rosewater" ];
variant = "mocha";
})

View file

@ -3,15 +3,21 @@
config,
lib,
...
}: let
}:
let
inherit (lib) mkIf;
cfg = config.services.xserver.windowManager.qtile;
lock = pkgs.writeShellApplication {
name = "lock";
runtimeInputs = with pkgs; [i3lock-color figlet procps];
runtimeInputs = with pkgs; [
i3lock-color
figlet
procps
];
text = builtins.readFile ./lock.sh;
};
in {
in
{
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
xss-lock
@ -19,9 +25,9 @@ in {
];
systemd.services.i3lock = {
wantedBy = ["sleep.target"];
wantedBy = [ "sleep.target" ];
description = "Lock the screen using a custom lock script";
before = ["suspend.target"];
before = [ "suspend.target" ];
serviceConfig = {
User = "daylin";
Type = "forking";

View file

@ -15,12 +15,10 @@
# '';
# };
mkOizysModule config "hyprland" {
programs.hyprland =
enabled
// {
programs.hyprland = enabled // {
package = inputs.hyprland.packages.${pkgs.system}.default;
};
security.pam.services.swaylock = {};
security.pam.services.swaylock = { };
# Optional, hint electron apps to use wayland:
environment.sessionVariables.NIXOS_OZONE_WL = "1";

View file

@ -3,10 +3,12 @@
config,
lib,
...
}: let
}:
let
inherit (lib) mkIf;
cfg = config.services.xserver.windowManager.qtile;
in {
in
{
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
brightnessctl

View file

@ -1,11 +1,6 @@
{ pkgs, self, ... }:
{
pkgs,
self,
...
}: {
imports = with self.nixosModules; [
git
];
imports = with self.nixosModules; [ git ];
programs.zsh.enable = true;
environment.systemPackages = with pkgs; [
tmux

View file

@ -1,4 +1,5 @@
{pkgs, ...}: {
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
git
git-lfs

View file

@ -1,4 +1,5 @@
{pkgs, ...}: {
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
vim
neovim

View file

@ -3,9 +3,11 @@
lib,
config,
...
}: let
}:
let
inherit (lib) mkIf;
in {
in
{
config = mkIf config.oizys.desktop.enable {
environment.systemPackages = with pkgs; [
# vscode

View file

@ -1,13 +1,27 @@
{lib, ...}: let
inherit (lib) mkOption types literalExpression mdDoc;
in {
imports = [./nim.nix ./tex.nix ./misc.nix ./node.nix ./python.nix ./zig.nix];
{ lib, ... }:
let
inherit (lib)
mkOption
types
literalExpression
mdDoc
;
in
{
imports = [
./nim.nix
./tex.nix
./misc.nix
./node.nix
./python.nix
./zig.nix
];
options.oizys.languages = mkOption {
type = with types; (listOf str);
description = mdDoc ''
List of programming languages to enable.
'';
default = [];
default = [ ];
example = literalExpression ''
[
"python"

View file

@ -3,10 +3,12 @@
lib,
pkgs,
...
}: let
}:
let
inherit (lib) mkIfIn;
cfg = config.oizys.languages;
in {
in
{
config = mkIfIn "misc" cfg {
environment.systemPackages = with pkgs; [
go

View file

@ -3,10 +3,12 @@
lib,
pkgs,
...
}: let
}:
let
inherit (lib) mkIfIn;
cfg = config.oizys.languages;
in {
in
{
config = mkIfIn "nim" cfg {
environment.systemPackages = with pkgs; [
nim

View file

@ -3,10 +3,12 @@
lib,
pkgs,
...
}: let
}:
let
inherit (lib) mkIfIn;
cfg = config.oizys.languages;
in {
in
{
config = mkIfIn "node" cfg {
environment.systemPackages = with pkgs; [
nodejs

View file

@ -3,15 +3,19 @@
lib,
pkgs,
...
}: let
}:
let
inherit (lib) mkIfIn;
cfg = config.oizys.languages;
in {
in
{
config = mkIfIn "python" cfg {
environment.systemPackages = let
python = pkgs.python3.withPackages (ps: with ps; [pip]);
environment.systemPackages =
let
python = pkgs.python3.withPackages (ps: with ps; [ pip ]);
in
with pkgs; [
with pkgs;
[
# https://github.com/Mic92/nix-ld?tab=readme-ov-file#my-pythonnodejsrubyinterpreter-libraries-do-not-find-the-libraries-configured-by-nix-ld
(pkgs.writeShellScriptBin "python" ''
export LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH
@ -23,7 +27,7 @@ in {
exec ${python}/bin/python "$@"
'')
(python3.withPackages (ps: with ps; [pip]))
(python3.withPackages (ps: with ps; [ pip ]))
micromamba
pixi
];

View file

@ -3,13 +3,13 @@
lib,
pkgs,
...
}: let
}:
let
inherit (lib) mkIfIn;
cfg = config.oizys.languages;
in {
in
{
config = mkIfIn "tex" cfg {
environment.systemPackages = with pkgs; [
texlive.combined.scheme-full
];
environment.systemPackages = with pkgs; [ texlive.combined.scheme-full ];
};
}

View file

@ -4,13 +4,18 @@
lib,
pkgs,
...
}: let
}:
let
inherit (lib) mkIfIn;
cfg = config.oizys.languages;
zig = inputs.zig2nix.outputs.packages.${pkgs.system}.zig.master.bin;
zls = inputs.zls.outputs.packages.${pkgs.system}.default;
in {
in
{
config = mkIfIn "zig" cfg {
environment.systemPackages = [zig zls];
environment.systemPackages = [
zig
zls
];
};
}

View file

@ -5,7 +5,10 @@
...
}:
mkOizysModule config "vpn" {
environment.systemPackages = with pkgs; [openconnect openvpn];
environment.systemPackages = with pkgs; [
openconnect
openvpn
];
services.openvpn.servers = {
express-ny = {

View file

@ -3,10 +3,12 @@
lib,
config,
...
}: let
}:
let
inherit (lib) mkEnableOption mkIf;
cfg = config.oizys.nix-ld;
in {
in
{
options.oizys.nix-ld.enable = mkEnableOption "enable nix-ld support";
config = mkIf cfg.enable {
programs.nix-ld.enable = true;

View file

@ -3,10 +3,9 @@
self,
pkgs,
...
}: {
imports = [
inputs.nix-index-database.nixosModules.nix-index
];
}:
{
imports = [ inputs.nix-index-database.nixosModules.nix-index ];
nixpkgs.config.allowUnfree = true;
nix.package = pkgs.nixVersions.latest;
@ -34,7 +33,7 @@
programs.command-not-found.enable = false;
nix.settings = {
trusted-users = ["@wheel"];
trusted-users = [ "@wheel" ];
accept-flake-config = true;
# substituters = [

View file

@ -1,13 +1,13 @@
{
lib,
self,
...
}: let
{ lib, self, ... }:
let
inherit (lib) mkEnableOption;
in {
in
{
imports = with self.nixosModules; [
users
runes
nix
cli
dev
nvim

View file

@ -22,16 +22,8 @@ mkOizysModule config "chrome" {
};
environment.systemPackages = with pkgs; [
(chromium.override {
commandLineArgs = [
"--force-dark-mode"
];
})
(chromium.override { commandLineArgs = [ "--force-dark-mode" ]; })
(google-chrome.override {
commandLineArgs = [
"--force-dark-mode"
];
})
(google-chrome.override { commandLineArgs = [ "--force-dark-mode" ]; })
];
}

View file

@ -1,5 +1,6 @@
{
braille = ''
braille = ''

View file

@ -1,5 +1,71 @@
{
pkgs,
config,
lib,
...
}:
let
inherit (lib)
types
mkMerge
mkOption
mkIf
mkEnableOption
;
runes = {
othalan = import ./othalan.nix;
algiz = import ./algiz.nix;
mannaz = import ./mannaz.nix;
};
mkRune =
{
name,
number ? "6",
kind ? "braille",
}:
"[1;3${number}m\n" + runes.${name}.${kind} + "\n";
cfg = config.oizys.rune;
in
{
options.oizys = {
rune = {
enable = mkOption {
type = types.bool;
default = true;
};
motd.enable = mkEnableOption "set rune for MOTD";
name = mkOption {
default = config.networking.hostName;
type = types.either (types.enum (builtins.attrNames runes)) types.str;
description = "Name of rune (probabaly matches hostname)";
};
kind = mkOption {
type =
with types;
either (enum [
"ascii"
"braille"
]) str;
default = "ascii";
};
};
};
config = mkMerge [
(mkIf cfg.enable {
environment.etc.issue = {
source = pkgs.writeText "issue" (mkRune {
name = cfg.name;
kind = cfg.kind;
});
};
})
(mkIf cfg.motd.enable {
users.motd = mkRune {
number = "2"; # todo: autogenerate based on hostname?
name = cfg.name;
};
})
];
}

View file

@ -1,5 +1,6 @@
{
braille = ''
braille = ''

View file

@ -1,4 +1,5 @@
{...}: {
{ ... }:
{
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;

View file

@ -5,7 +5,7 @@
...
}:
mkOizysModule config "backups" {
environment.systemPackages = with pkgs; [rclone];
environment.systemPackages = with pkgs; [ rclone ];
services.restic.backups.gdrive = {
# BUG: if .conda/environments.txt doesn't exist then this won't work

View file

@ -3,10 +3,12 @@
lib,
pkgs,
...
}: let
}:
let
inherit (lib) mkOption mkIf types;
cfg = config.users.defaultUser;
in {
in
{
options.users.defaultUser = mkOption {
default = true;
type = types.bool;

View file

@ -6,7 +6,5 @@
}:
mkOizysModule config "docker" {
virtualisation.docker.enable = true;
environment.systemPackages = with pkgs; [
lazydocker
];
environment.systemPackages = with pkgs; [ lazydocker ];
}

View file

@ -1,11 +1,7 @@
{
config,
mkOizysModule,
...
}:
{ config, mkOizysModule, ... }:
mkOizysModule config "vbox" {
virtualisation.virtualbox = {
host.enable = true;
};
users.extraGroups.vboxusers.members = ["daylin"];
users.extraGroups.vboxusers.members = [ "daylin" ];
}

View file

@ -1,25 +1,21 @@
{inputs, ...}: let
{ inputs, ... }:
let
defaultOverlays =
# execute and import all overlay files in the current
# directory with the given args
builtins.map
# execute and import the overlay file
(f: (import (./. + "/${f}") {inherit inputs;}))
(f: (import (./. + "/${f}") { inherit inputs; }))
# find all overlay files in the current directory
(builtins.filter
(f: f != "default.nix")
(builtins.attrNames (builtins.readDir ./.)));
in {
nixpkgs.overlays =
defaultOverlays
++ [
(
final: _prev: {
(builtins.filter (f: f != "default.nix") (builtins.attrNames (builtins.readDir ./.)));
in
{
nixpkgs.overlays = defaultOverlays ++ [
(final: _prev: {
stable = import inputs.stable {
system = final.system;
config.allowUnfree = true;
};
}
)
})
];
}

View file

@ -1,4 +1,5 @@
{...}: (final: prev: {
{ ... }:
(final: prev: {
nim-atlas = prev.nim-atlas.overrideNimAttrs {
version = "unstable";
src = final.fetchFromGitHub {

View file

@ -1,8 +1,9 @@
{...}: (final: prev: {
{ ... }:
(final: prev: {
nimble = prev.nimble.overrideNimAttrs {
version = "0.14.2-5e7901760e89108476a4e21976a0ef783403e8fe";
requiredNimVersion = 2;
buildInputs = [prev.pkgs.openssl];
buildInputs = [ prev.pkgs.openssl ];
src = final.fetchFromGitHub {
owner = "nim-lang";

View file

@ -1,4 +1,5 @@
{...}: (final: prev: {
{ ... }:
(final: prev: {
nimlsp = prev.nimlsp.overrideNimAttrs {
requiredNimVersion = 2;
nimFlags = [

View file

@ -11,7 +11,7 @@ var dryCmd = &cobra.Command{
Short: "poor man's nix flake check",
Run: func(cmd *cobra.Command, args []string) {
oizys.CheckFlake(flake)
oizys.NixDryRun(oizys.Output(flake, host))
oizys.NixDryRun(flake, host)
},
}

View file

@ -1,5 +1,4 @@
{
installShellFiles,
buildGoModule,
lib,
@ -10,9 +9,9 @@ buildGoModule {
version = "unstable";
src = lib.cleanSource ./.;
vendorHash = "sha256-kh/7dV49KaQcD9ho8IpBcRc6+05bn4XpMzAI9JXu7+o=";
vendorHash = "sha256-Fcq8p/YItF5lx82PRg1/tksV7iCIS0xZZVWdpE3e7F0=";
nativeBuildInputs = [installShellFiles];
nativeBuildInputs = [ installShellFiles ];
postInstall = ''
installShellCompletion --cmd oizys \

View file

@ -13,6 +13,7 @@ require (
require (
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/briandowns/spinner v1.23.0 // indirect
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
github.com/fatih/color v1.16.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect

View file

@ -1,5 +1,7 @@
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
github.com/briandowns/spinner v1.23.0 h1:alDF2guRWqa/FOZZYWjlMIx2L6H0wyewPxo/CH4Pt2A=
github.com/briandowns/spinner v1.23.0/go.mod h1:rPG4gmXeN3wQV/TsAY4w8lPdIM6RX3yqeBQJSrbXjuE=
github.com/charmbracelet/bubbles v0.18.0 h1:PYv1A036luoBGroX6VWjQIE9Syf2Wby2oOl/39KLfy0=
github.com/charmbracelet/bubbles v0.18.0/go.mod h1:08qhZhtIwzgrtBjAcJnij1t1H0ZRjwHyGsy6AL11PSw=
github.com/charmbracelet/bubbletea v0.26.1 h1:xujcQeF73rh4jwu3+zhfQsvV18x+7zIjlw7/CYbzGJ0=

View file

@ -12,6 +12,9 @@ import (
"github.com/charmbracelet/bubbles/table"
"github.com/muesli/termenv"
"golang.org/x/term"
"github.com/briandowns/spinner"
"time"
)
func TerminalSize() (int, int) {
@ -63,10 +66,19 @@ func ParseDryRunOutput(nixOutput string) {
ShowTable(columns, rows)
}
func NixDryRun(path string) {
func NixDryRun(flake string, host string) {
path := Output(flake, host)
cmd := exec.Command("nix", "build", path, "--dry-run")
s := spinner.New(
spinner.CharSets[14],
100*time.Millisecond,
spinner.WithSuffix(" evaluating derivation for: "+path),
spinner.WithColor("fgHiMagenta"))
s.Start()
output, err := cmd.CombinedOutput()
s.Stop()
if err != nil {
fmt.Println(string(output))
log.Fatal(err)
}
ParseDryRunOutput(string(output))

View file

@ -1,4 +1,4 @@
{buildNimPackage}:
{ buildNimPackage }:
buildNimPackage {
pname = "oizys";
version = "unstable";

View file

@ -11,8 +11,8 @@ rustPlatform.buildRustPackage {
lockFile = ./Cargo.lock;
};
nativeBuildInputs = [installShellFiles];
buildInputs = [nix-output-monitor];
nativeBuildInputs = [ installShellFiles ];
buildInputs = [ nix-output-monitor ];
postInstall = ''
installShellCompletion --cmd oizys \

View file

@ -6,8 +6,8 @@
}:
(zig2nix.outputs.zig-env.${pkgs.system} {
zig = zig2nix.outputs.packages.${pkgs.system}.zig.master.bin;
})
.package {
}).package
{
name = "oizys";
src = lib.cleanSource ./.;
}
}