format with alejandra and other things
parent
1537fea0bd
commit
e7efe1a965
10
default.nix
10
default.nix
|
@ -1,11 +1,13 @@
|
||||||
# We use top-level nix-flake, so default.nix is basically just a wrapper around ./flake.nix
|
# We use top-level nix-flake, so default.nix is basically just a wrapper around ./flake.nix
|
||||||
(import
|
(
|
||||||
|
import
|
||||||
(
|
(
|
||||||
let
|
let
|
||||||
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
||||||
c_ = import ./c_.nix;
|
c_ = import ./c_.nix;
|
||||||
in
|
in
|
||||||
c_.fetchTree lock.nodes.flake-compat.locked
|
c_.fetchTree lock.nodes.flake-compat.locked
|
||||||
)
|
)
|
||||||
{ src = ./.; }
|
{src = ./.;}
|
||||||
).defaultNix
|
)
|
||||||
|
.defaultNix
|
||||||
|
|
|
@ -4,10 +4,12 @@
|
||||||
# Should also incorporate shortcuts like scripts/{hm-switch,conf-sysnix}.sh in here instead
|
# Should also incorporate shortcuts like scripts/{hm-switch,conf-sysnix}.sh in here instead
|
||||||
#
|
#
|
||||||
# It should not contain PDE
|
# It should not contain PDE
|
||||||
{ pkgs ? import <nixpkgs> { }
|
{
|
||||||
, lib
|
pkgs ? import <nixpkgs> {},
|
||||||
, ...
|
lib,
|
||||||
}: pkgs.mkShell {
|
...
|
||||||
|
}:
|
||||||
|
pkgs.mkShell {
|
||||||
# mkShell doesn't care about the differences across nativeBuildInputs,
|
# mkShell doesn't care about the differences across nativeBuildInputs,
|
||||||
# buildInputs, or packages
|
# buildInputs, or packages
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
|
@ -20,10 +22,9 @@
|
||||||
];
|
];
|
||||||
|
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
# Since we need late dispatch of ~, we have to put this in shellHook.
|
# Since we need late dispatch of ~, we have to put this in shellHook.
|
||||||
export SOPS_AGE_KEY_FILE=~/.config/sops/age/keys.txt
|
export SOPS_AGE_KEY_FILE=~/.config/sops/age/keys.txt
|
||||||
'';
|
'';
|
||||||
# env vars
|
# env vars
|
||||||
lol = "hello world";
|
lol = "hello world";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -429,11 +429,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_3": {
|
"nixpkgs_3": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1686869522,
|
"lastModified": 1686960236,
|
||||||
"narHash": "sha256-tbJ9B8WLCTnVP/LwESRlg0dII6Zyg2LmUU/mB9Lu98E=",
|
"narHash": "sha256-AYCC9rXNLpUWzD9hm+askOfpliLEC9kwAo7ITJc4HIw=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "7c67f006ea0e7d0265f16d7df07cc076fdffd91f",
|
"rev": "04af42f3b31dba0ef742d254456dc4c14eedac86",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
30
flake.nix
30
flake.nix
|
@ -9,10 +9,11 @@
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
deploy-rs.url = "github:serokell/deploy-rs";
|
deploy-rs.url = "github:serokell/deploy-rs";
|
||||||
std.url = "github:divnix/std";
|
std.url = "github:divnix/std";
|
||||||
hive.url = "github:divnix/hive";
|
rust-overlay = "github:oxalica/rust-overlay.git";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { std, hive, ... }@inputs: std.growOn
|
outputs = {std, ...} @ inputs:
|
||||||
|
std.growOn
|
||||||
{
|
{
|
||||||
# boilerplate
|
# boilerplate
|
||||||
inherit inputs;
|
inherit inputs;
|
||||||
|
@ -21,22 +22,23 @@
|
||||||
cellsFrom = ./nix/cells;
|
cellsFrom = ./nix/cells;
|
||||||
# modules = ./nix/modules;
|
# modules = ./nix/modules;
|
||||||
|
|
||||||
cellBlocks =
|
cellBlocks = let
|
||||||
let
|
inherit (std.blockTypes) devshells functions;
|
||||||
inherit (std.blockTypes) devshells functions;
|
in [
|
||||||
in
|
(devshells "devshells")
|
||||||
[
|
(devshells "userShells")
|
||||||
(devshells "devshells")
|
(functions "home-profiles")
|
||||||
(devshells "userShells")
|
(functions "home-modules")
|
||||||
# (functions "host_profile")
|
];
|
||||||
# (functions "home_profile")
|
|
||||||
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
devShells = std.harvest [ [ "dotfiles" "devshells" ] ];
|
devShells = std.harvest [["dotfiles" "devshells"]];
|
||||||
# nixosConfigurations = std.pick [ [ "dotfiles" "nixos" ] ];
|
# nixosConfigurations = std.pick [ [ "dotfiles" "nixos" ] ];
|
||||||
# homeConfigurations = std.pick [ [ "dotfiles" "home" ] ];
|
# homeConfigurations = std.pick [ [ "dotfiles" "home" ] ];
|
||||||
homeModules = std.pick [["repo" "home-modules"]];
|
homeModules = std.pick [["repo" "home-modules"]];
|
||||||
|
|
||||||
|
# TODO: Debug only
|
||||||
|
homeProfiles = std.pick [["repo" "home-profiles"]];
|
||||||
|
packages = std.harvest [["repo" "home-configs"]];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,19 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [ ];
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ ];
|
boot.initrd.availableKernelModules = [];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
## NOTE: These filesystems are mounted by a wrapper script from nix-wsl
|
## NOTE: These filesystems are mounted by a wrapper script from nix-wsl
|
||||||
|
|
||||||
|
@ -43,25 +47,22 @@
|
||||||
# fsType = "drvfs";
|
# fsType = "drvfs";
|
||||||
# };
|
# };
|
||||||
|
|
||||||
fileSystems."/mnt/c" =
|
fileSystems."/mnt/c" = {
|
||||||
{
|
device = "C:";
|
||||||
device = "C:";
|
fsType = "drvfs";
|
||||||
fsType = "drvfs";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/mnt/d" =
|
fileSystems."/mnt/d" = {
|
||||||
{
|
device = "D:";
|
||||||
device = "D:";
|
fsType = "drvfs";
|
||||||
fsType = "drvfs";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/mnt/f" =
|
fileSystems."/mnt/f" = {
|
||||||
{
|
device = "F:";
|
||||||
device = "F:";
|
fsType = "drvfs";
|
||||||
fsType = "drvfs";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices = [ ];
|
swapDevices = [];
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
{ nixpkgs
|
{
|
||||||
, agenix
|
nixpkgs,
|
||||||
, home-manager
|
agenix,
|
||||||
, flake-utils
|
home-manager,
|
||||||
, nixgl
|
flake-utils,
|
||||||
, rust-overlay
|
nixgl,
|
||||||
, flake-compat
|
rust-overlay,
|
||||||
, pkgs
|
flake-compat,
|
||||||
, lib
|
pkgs,
|
||||||
, proj_root
|
lib,
|
||||||
}: { }
|
proj_root,
|
||||||
|
}: {}
|
||||||
|
|
|
@ -1,20 +1,23 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
config,
|
||||||
[
|
lib,
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
pkgs,
|
||||||
];
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
boot.loader.systemd-boot.enable = true;
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
|
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
|
||||||
# boot.initrd.kernelModules = [ "amdgpu" ];
|
# boot.initrd.kernelModules = [ "amdgpu" ];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelModules = [ "kvm-amd" "coretemp" ];
|
boot.kernelModules = ["kvm-amd" "coretemp"];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" =
|
||||||
# Might be wise to use /dev/nvme0p1 instead
|
# Might be wise to use /dev/nvme0p1 instead
|
||||||
|
@ -30,7 +33,7 @@
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices = [ ];
|
swapDevices = [];
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
{ nixpkgs
|
{
|
||||||
, agenix
|
nixpkgs,
|
||||||
, home-manager
|
agenix,
|
||||||
, flake-utils
|
home-manager,
|
||||||
, nixgl
|
flake-utils,
|
||||||
, rust-overlay
|
nixgl,
|
||||||
, flake-compat
|
rust-overlay,
|
||||||
, pkgs
|
flake-compat,
|
||||||
, lib
|
pkgs,
|
||||||
, proj_root
|
lib,
|
||||||
, nixosDefaultVersion ? "22.05"
|
proj_root,
|
||||||
, defaultSystem ? "x86_64-linux"
|
nixosDefaultVersion ? "22.05",
|
||||||
, ...
|
defaultSystem ? "x86_64-linux",
|
||||||
}@finalInputs:
|
...
|
||||||
let
|
} @ finalInputs: let
|
||||||
config = {
|
config = {
|
||||||
bao.metadata = {
|
bao.metadata = {
|
||||||
# req
|
# req
|
||||||
|
@ -33,54 +33,58 @@ let
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
propagate = hostConfig@{ metadata, nixosConfig }:
|
propagate = hostConfig @ {
|
||||||
let
|
metadata,
|
||||||
# req
|
nixosConfig,
|
||||||
inherit (metadata) hostName;
|
}: let
|
||||||
# opts
|
# req
|
||||||
ssh_pubkey = lib.attrByPath [ "ssh_pubkey" ] null metadata; # metadata.ssh_pubkey??undefined
|
inherit (metadata) hostName;
|
||||||
users = lib.attrByPath [ "users" ] { } metadata;
|
# opts
|
||||||
nixosVersion = lib.attrByPath [ "nixosVersion" ] nixosDefaultVersion metadata;
|
ssh_pubkey = lib.attrByPath ["ssh_pubkey"] null metadata; # metadata.ssh_pubkey??undefined
|
||||||
system = lib.attrByPath [ "system" ] defaultSystem metadata;
|
users = lib.attrByPath ["users"] {} metadata;
|
||||||
preset = lib.attrByPath [ "preset" ] "base" metadata;
|
nixosVersion = lib.attrByPath ["nixosVersion"] nixosDefaultVersion metadata;
|
||||||
# infer
|
system = lib.attrByPath ["system"] defaultSystem metadata;
|
||||||
hardwareConfig = import "${proj_root.hosts.path}/${hostName}/hardware-configuration.nix";
|
preset = lib.attrByPath ["preset"] "base" metadata;
|
||||||
# alias to prevent infinite recursion
|
# infer
|
||||||
_nixosConfig = nixosConfig;
|
hardwareConfig = import "${proj_root.hosts.path}/${hostName}/hardware-configuration.nix";
|
||||||
in
|
# alias to prevent infinite recursion
|
||||||
{
|
_nixosConfig = nixosConfig;
|
||||||
inherit hostName ssh_pubkey users nixosVersion system preset hardwareConfig;
|
in {
|
||||||
nixosConfig = _nixosConfig // {
|
inherit hostName ssh_pubkey users nixosVersion system preset hardwareConfig;
|
||||||
|
nixosConfig =
|
||||||
|
_nixosConfig
|
||||||
|
// {
|
||||||
inherit system;
|
inherit system;
|
||||||
modules = [
|
modules =
|
||||||
{
|
[
|
||||||
config._module.args = {
|
{
|
||||||
inherit proj_root;
|
config._module.args = {
|
||||||
my-lib = finalInputs.lib;
|
inherit proj_root;
|
||||||
};
|
my-lib = finalInputs.lib;
|
||||||
}
|
};
|
||||||
hardwareConfig
|
}
|
||||||
{
|
hardwareConfig
|
||||||
system.stateVersion = nixosVersion;
|
{
|
||||||
networking.hostName = hostName;
|
system.stateVersion = nixosVersion;
|
||||||
users.users = users;
|
networking.hostName = hostName;
|
||||||
}
|
users.users = users;
|
||||||
{
|
}
|
||||||
imports = [ agenix.nixosModule ];
|
{
|
||||||
environment.systemPackages = [ agenix.defaultPackage.x86_64-linux ];
|
imports = [agenix.nixosModule];
|
||||||
}
|
environment.systemPackages = [agenix.defaultPackage.x86_64-linux];
|
||||||
(import "${proj_root.modules.path}/secrets.nix")
|
}
|
||||||
(import "${proj_root.modules.path}/${preset}.sys.nix")
|
(import "${proj_root.modules.path}/secrets.nix")
|
||||||
] ++ _nixosConfig.modules;
|
(import "${proj_root.modules.path}/${preset}.sys.nix")
|
||||||
|
]
|
||||||
|
++ _nixosConfig.modules;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
# we are blessed by the fact that we engulfed nixpkgs.lib.* at top level
|
# we are blessed by the fact that we engulfed nixpkgs.lib.* at top level
|
||||||
mkHostFromPropagated = propagatedHostConfig@{ nixosConfig, ... }: nixpkgs.lib.nixosSystem nixosConfig;
|
mkHostFromPropagated = propagatedHostConfig @ {nixosConfig, ...}: nixpkgs.lib.nixosSystem nixosConfig;
|
||||||
mkHost = hostConfig: (lib.pipe [ propagate mkHostFromPropagated ] hostConfig);
|
mkHost = hostConfig: (lib.pipe [propagate mkHostFromPropagated] hostConfig);
|
||||||
trimNull = lib.filterAttrsRecursive (name: value: value != null);
|
trimNull = lib.filterAttrsRecursive (name: value: value != null);
|
||||||
flattenPubkey = lib.mapAttrs (hostName: meta_config: meta_config.metadata.ssh_pubkey);
|
flattenPubkey = lib.mapAttrs (hostName: meta_config: meta_config.metadata.ssh_pubkey);
|
||||||
in
|
in {
|
||||||
{
|
|
||||||
nixosConfigurations = lib.mapAttrs (name: hostConfig: mkHost hostConfig) config;
|
nixosConfigurations = lib.mapAttrs (name: hostConfig: mkHost hostConfig) config;
|
||||||
# {bao = "ssh-ed25519 ..."; another_host = "ssh-rsa ...";}
|
# {bao = "ssh-ed25519 ..."; another_host = "ssh-rsa ...";}
|
||||||
pubKeys = lib.getPubkey config;
|
pubKeys = lib.getPubkey config;
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
config,
|
||||||
[
|
lib,
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
pkgs,
|
||||||
];
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
|
boot.initrd.availableKernelModules = ["virtio_pci" "virtio_scsi" "ahci" "sd_mod"];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelParams = [ "console=ttyS0,19200n8" ];
|
boot.kernelParams = ["console=ttyS0,19200n8"];
|
||||||
boot.loader.grub.extraConfig = ''
|
boot.loader.grub.extraConfig = ''
|
||||||
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
||||||
terminal_input serial;
|
terminal_input serial;
|
||||||
|
@ -20,17 +23,15 @@
|
||||||
boot.loader.grub.forceInstall = true;
|
boot.loader.grub.forceInstall = true;
|
||||||
boot.loader.grub.device = "nodev";
|
boot.loader.grub.device = "nodev";
|
||||||
boot.loader.timeout = 10;
|
boot.loader.timeout = 10;
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
device = "/dev/sda";
|
||||||
device = "/dev/sda";
|
fsType = "ext4";
|
||||||
fsType = "ext4";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices =
|
swapDevices = [{device = "/dev/sdb";}];
|
||||||
[{ device = "/dev/sdb"; }];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
config,
|
||||||
[
|
lib,
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
pkgs,
|
||||||
];
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
|
boot.initrd.availableKernelModules = ["virtio_pci" "virtio_scsi" "ahci" "sd_mod"];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelParams = [ "console=ttyS0,19200n8" ];
|
boot.kernelParams = ["console=ttyS0,19200n8"];
|
||||||
boot.loader.grub.extraConfig = ''
|
boot.loader.grub.extraConfig = ''
|
||||||
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
||||||
terminal_input serial;
|
terminal_input serial;
|
||||||
|
@ -20,17 +23,15 @@
|
||||||
boot.loader.grub.forceInstall = true;
|
boot.loader.grub.forceInstall = true;
|
||||||
boot.loader.grub.device = "nodev";
|
boot.loader.grub.device = "nodev";
|
||||||
boot.loader.timeout = 10;
|
boot.loader.timeout = 10;
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
device = "/dev/sda";
|
||||||
device = "/dev/sda";
|
fsType = "ext4";
|
||||||
fsType = "ext4";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices =
|
swapDevices = [{device = "/dev/sdb";}];
|
||||||
[{ device = "/dev/sdb"; }];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
{ nixpkgs
|
{
|
||||||
, agenix
|
nixpkgs,
|
||||||
, home-manager
|
agenix,
|
||||||
, flake-utils
|
home-manager,
|
||||||
, nixgl
|
flake-utils,
|
||||||
, rust-overlay
|
nixgl,
|
||||||
, flake-compat
|
rust-overlay,
|
||||||
, pkgs
|
flake-compat,
|
||||||
, lib
|
pkgs,
|
||||||
, proj_root
|
lib,
|
||||||
}: { }
|
proj_root,
|
||||||
|
}: {}
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
config,
|
||||||
[
|
lib,
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
pkgs,
|
||||||
];
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
|
boot.initrd.availableKernelModules = ["virtio_pci" "virtio_scsi" "ahci" "sd_mod"];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelParams = [ "console=ttyS0,19200n8" ];
|
boot.kernelParams = ["console=ttyS0,19200n8"];
|
||||||
boot.loader.grub.extraConfig = ''
|
boot.loader.grub.extraConfig = ''
|
||||||
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
||||||
terminal_input serial;
|
terminal_input serial;
|
||||||
|
@ -20,8 +23,8 @@
|
||||||
boot.loader.grub.forceInstall = true;
|
boot.loader.grub.forceInstall = true;
|
||||||
boot.loader.grub.device = "nodev";
|
boot.loader.grub.device = "nodev";
|
||||||
boot.loader.timeout = 10;
|
boot.loader.timeout = 10;
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
fileSystems = {
|
fileSystems = {
|
||||||
"/" = {
|
"/" = {
|
||||||
|
@ -35,8 +38,7 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices =
|
swapDevices = [{device = "/dev/sdb";}];
|
||||||
[{ device = "/dev/sdb"; }];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -1,20 +1,23 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
config,
|
||||||
[
|
lib,
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
pkgs,
|
||||||
];
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
|
boot.initrd.availableKernelModules = ["virtio_pci" "virtio_scsi" "ahci" "sd_mod"];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
boot.kernelParams = [ "console=ttyS0,19200n8" ];
|
boot.kernelParams = ["console=ttyS0,19200n8"];
|
||||||
boot.loader.grub.extraConfig = ''
|
boot.loader.grub.extraConfig = ''
|
||||||
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
||||||
terminal_input serial;
|
terminal_input serial;
|
||||||
|
@ -23,14 +26,12 @@
|
||||||
boot.loader.grub.forceInstall = true;
|
boot.loader.grub.forceInstall = true;
|
||||||
boot.loader.grub.device = "nodev";
|
boot.loader.grub.device = "nodev";
|
||||||
boot.loader.timeout = 10;
|
boot.loader.timeout = 10;
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
device = "/dev/sda";
|
||||||
device = "/dev/sda";
|
fsType = "ext4";
|
||||||
fsType = "ext4";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices =
|
swapDevices = [{device = "/dev/sdb";}];
|
||||||
[{ device = "/dev/sdb"; }];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
imports = [ ./gpu.sys.nix ];
|
imports = [./gpu.sys.nix];
|
||||||
boot.initrd.kernelModules = [ "amdgpu" ];
|
boot.initrd.kernelModules = ["amdgpu"];
|
||||||
services.xserver.enable = true;
|
services.xserver.enable = true;
|
||||||
services.xserver.videoDrivers = [ "amdgpu" ];
|
services.xserver.videoDrivers = ["amdgpu"];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
{ pkgs
|
{
|
||||||
, lib
|
pkgs,
|
||||||
, proj_root
|
lib,
|
||||||
, ...
|
proj_root,
|
||||||
|
...
|
||||||
}: {
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
./minimal.sys.nix
|
./minimal.sys.nix
|
||||||
|
@ -9,7 +10,6 @@
|
||||||
./tailscale.sys.nix
|
./tailscale.sys.nix
|
||||||
./ssh.sys.nix
|
./ssh.sys.nix
|
||||||
];
|
];
|
||||||
environment.systemPackages = [ pkgs.lm_sensors ];
|
environment.systemPackages = [pkgs.lm_sensors];
|
||||||
time.timeZone = "America/Phoenix";
|
time.timeZone = "America/Phoenix";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
inputs: { }
|
inputs: {}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
{ pkgs, ... }: {
|
{pkgs, ...}: {
|
||||||
environment.systemPackages = [ pkgs.clinfo pkgs.lshw pkgs.glxinfo pkgs.pciutils pkgs.vulkan-tools ];
|
environment.systemPackages = [pkgs.clinfo pkgs.lshw pkgs.glxinfo pkgs.pciutils pkgs.vulkan-tools];
|
||||||
hardware.opengl = {
|
hardware.opengl = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraPackages = [ pkgs.rocm-opencl-icd pkgs.rocm-opencl-runtime ];
|
extraPackages = [pkgs.rocm-opencl-icd pkgs.rocm-opencl-runtime];
|
||||||
# Vulkan
|
# Vulkan
|
||||||
driSupport = true;
|
driSupport = true;
|
||||||
driSupport32Bit = true;
|
driSupport32Bit = true;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{ pkgs
|
{
|
||||||
, my-lib
|
pkgs,
|
||||||
, ...
|
my-lib,
|
||||||
|
...
|
||||||
}: {
|
}: {
|
||||||
environment.noXlibs = my-lib.mkForce false;
|
environment.noXlibs = my-lib.mkForce false;
|
||||||
# TODO: wireless networking
|
# TODO: wireless networking
|
||||||
|
@ -11,15 +12,16 @@
|
||||||
services.xserver.displayManager.sddm.enable = true;
|
services.xserver.displayManager.sddm.enable = true;
|
||||||
services.xserver.desktopManager.plasma5 = {
|
services.xserver.desktopManager.plasma5 = {
|
||||||
enable = true;
|
enable = true;
|
||||||
excludePackages = let plasma5 = pkgs.libsForQt5; in
|
excludePackages = let
|
||||||
[
|
plasma5 = pkgs.libsForQt5;
|
||||||
plasma5.elisa # audio viewer
|
in [
|
||||||
plasma5.konsole # I use alacritty instaed
|
plasma5.elisa # audio viewer
|
||||||
plasma5.plasma-browser-integration
|
plasma5.konsole # I use alacritty instaed
|
||||||
plasma5.print-manager # will enable if I need
|
plasma5.plasma-browser-integration
|
||||||
plasma5.khelpcenter # why not just write manpages instead :(
|
plasma5.print-manager # will enable if I need
|
||||||
# plasma5.ksshaskpass # pls just put prompts on my dear terminal
|
plasma5.khelpcenter # why not just write manpages instead :(
|
||||||
];
|
# plasma5.ksshaskpass # pls just put prompts on my dear terminal
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# disables KDE's setting of askpassword
|
# disables KDE's setting of askpassword
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
{ pkgs
|
{
|
||||||
, lib
|
pkgs,
|
||||||
, proj_root
|
lib,
|
||||||
, modulesPath
|
proj_root,
|
||||||
, ...
|
modulesPath,
|
||||||
|
...
|
||||||
}: {
|
}: {
|
||||||
imports = [ "${modulesPath}/profiles/minimal.nix" ];
|
imports = ["${modulesPath}/profiles/minimal.nix"];
|
||||||
# prune old builds after a while
|
# prune old builds after a while
|
||||||
nix.settings.auto-optimise-store = true;
|
nix.settings.auto-optimise-store = true;
|
||||||
nix.package = pkgs.nixFlakes; # nix flakes
|
nix.package = pkgs.nixFlakes; # nix flakes
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
{ pkgs
|
|
||||||
, lib
|
|
||||||
, config
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let cfg = config.mod.mosh; in
|
|
||||||
{
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.mod.mosh;
|
||||||
|
in {
|
||||||
options.mod.mosh = {
|
options.mod.mosh = {
|
||||||
enable = lib.mkOption {
|
enable = lib.mkOption {
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
|
@ -14,12 +15,14 @@ let cfg = config.mod.mosh; in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
environment.systemPackages = [ pkgs.mosh ];
|
environment.systemPackages = [pkgs.mosh];
|
||||||
networking.firewall = lib.mkIf config.networking.firewall.enable {
|
networking.firewall = lib.mkIf config.networking.firewall.enable {
|
||||||
allowedUDPPortRanges = [
|
allowedUDPPortRanges = [
|
||||||
{ from = 60000; to = 61000; } # mosh
|
{
|
||||||
|
from = 60000;
|
||||||
|
to = 61000;
|
||||||
|
} # mosh
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{ config, ... }: {
|
{config, ...}: {
|
||||||
imports = [ ./gpu.sys.nix ];
|
imports = [./gpu.sys.nix];
|
||||||
nixpkgs.config.allowUnfree = true;
|
nixpkgs.config.allowUnfree = true;
|
||||||
services.xserver.enable = true;
|
services.xserver.enable = true;
|
||||||
services.xserver.videoDrivers = [ "nvidia" ];
|
services.xserver.videoDrivers = ["nvidia"];
|
||||||
hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable;
|
hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
{ config, pkgs, lib }:
|
{
|
||||||
let
|
config,
|
||||||
gpu_pkgs = [ pkgs.clinfo pkgs.lshw pkgs.glxinfo pkgs.pciutils pkgs.vulkan-tools ];
|
pkgs,
|
||||||
|
lib,
|
||||||
|
}: let
|
||||||
|
gpu_pkgs = [pkgs.clinfo pkgs.lshw pkgs.glxinfo pkgs.pciutils pkgs.vulkan-tools];
|
||||||
gpu_conf = {
|
gpu_conf = {
|
||||||
# openCL
|
# openCL
|
||||||
hardware.opengl = {
|
hardware.opengl = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraPackages =
|
extraPackages = let
|
||||||
let
|
inherit (pkgs) rocm-opencl-icd rocm-opencl-runtime;
|
||||||
inherit (pkgs) rocm-opencl-icd rocm-opencl-runtime;
|
in [rocm-opencl-icd rocm-opencl-runtime];
|
||||||
in
|
|
||||||
[ rocm-opencl-icd rocm-opencl-runtime ];
|
|
||||||
# Vulkan
|
# Vulkan
|
||||||
driSupport = true;
|
driSupport = true;
|
||||||
driSupport32Bit = true;
|
driSupport32Bit = true;
|
||||||
|
@ -18,4 +19,5 @@ let
|
||||||
};
|
};
|
||||||
environment.systemPackages = gpu_pkgs;
|
environment.systemPackages = gpu_pkgs;
|
||||||
};
|
};
|
||||||
in gpu_conf
|
in
|
||||||
|
gpu_conf
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
{ proj_root
|
{proj_root, ...}: {
|
||||||
, ...
|
|
||||||
}: {
|
|
||||||
age.secrets.s3fs = {
|
age.secrets.s3fs = {
|
||||||
file = "${proj_root.secrets.path}/s3fs.age";
|
file = "${proj_root.secrets.path}/s3fs.age";
|
||||||
# mode = "600"; # owner + group only
|
# mode = "600"; # owner + group only
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
# Personal configuration on storage solution
|
# Personal configuration on storage solution
|
||||||
{ pkgs, config, lib, ... }: {
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
pkgs.s3fs
|
pkgs.s3fs
|
||||||
pkgs.cifs-utils
|
pkgs.cifs-utils
|
||||||
|
@ -9,87 +14,81 @@
|
||||||
# HACK: need to store secret somewhere so that root can access this
|
# HACK: need to store secret somewhere so that root can access this
|
||||||
# because autofs may run as root for now, we enforce putting the secret in this monorepo
|
# because autofs may run as root for now, we enforce putting the secret in this monorepo
|
||||||
# TODO: make this configuration nix-less to show that it's 100% data
|
# TODO: make this configuration nix-less to show that it's 100% data
|
||||||
services.autofs =
|
services.autofs = let
|
||||||
let
|
# confToBackendArg {lol="what"; empty=""; name_only=null;} -> "lol=what,empty=,name_only"
|
||||||
# confToBackendArg {lol="what"; empty=""; name_only=null;} -> "lol=what,empty=,name_only"
|
# TODO: change null -> true/false. This allows overriding & better self-documentation
|
||||||
# TODO: change null -> true/false. This allows overriding & better self-documentation
|
confToBackendArg = conf: (lib.concatStringsSep ","
|
||||||
confToBackendArg = conf: (lib.concatStringsSep ","
|
(lib.mapAttrsToList (name: value: "${name}${lib.optionalString (value != null) "=${value}"}") conf));
|
||||||
(lib.mapAttrsToList (name: value: "${name}${lib.optionalString (value != null) "=${value}"}") conf));
|
|
||||||
|
|
||||||
# mount_dest: path ("wow")
|
# mount_dest: path ("wow")
|
||||||
# backend_args: nix attrs representing the arguments to be passed to s3fs
|
# backend_args: nix attrs representing the arguments to be passed to s3fs
|
||||||
# ({"-fstype" = "fuse"; "use_cache" = "/tmp";})
|
# ({"-fstype" = "fuse"; "use_cache" = "/tmp";})
|
||||||
# bucket: bucket name (hungtr-hot)
|
# bucket: bucket name (hungtr-hot)
|
||||||
# NOTE: s3 custom provider will be provided inside
|
# NOTE: s3 custom provider will be provided inside
|
||||||
# backend_args, so just put the bucket name here
|
# backend_args, so just put the bucket name here
|
||||||
#
|
#
|
||||||
#-> "${mount_dest} ${formatted_args} ${s3fs-bin}#${bucket}"
|
#-> "${mount_dest} ${formatted_args} ${s3fs-bin}#${bucket}"
|
||||||
autofs-s3fs_entry =
|
autofs-s3fs_entry = {
|
||||||
{ mount_dest
|
mount_dest,
|
||||||
, backend_args ? { "-fstype" = "fuse"; }
|
backend_args ? {"-fstype" = "fuse";},
|
||||||
, bucket
|
bucket,
|
||||||
}@inputs:
|
} @ inputs: let
|
||||||
|
s3fs-exec = "${pkgs.s3fs}/bin/s3fs";
|
||||||
|
in "${mount_dest} ${confToBackendArg backend_args} :${s3fs-exec}\#${bucket}";
|
||||||
|
personalStorage = [
|
||||||
|
(autofs-s3fs_entry {
|
||||||
|
mount_dest = "garden";
|
||||||
|
backend_args = {
|
||||||
|
"-fstype" = "fuse";
|
||||||
|
use_cache = "/tmp";
|
||||||
|
del_cache = null;
|
||||||
|
allow_other = null;
|
||||||
|
url = "https://v5h5.la11.idrivee2-14.com";
|
||||||
|
passwd_file = config.age.secrets."s3fs.digital-garden".path;
|
||||||
|
dbglevel = "debug"; # enable this for better debugging info in journalctl
|
||||||
|
uid = "1000"; # default user
|
||||||
|
gid = "100"; # users
|
||||||
|
umask = "003"; # others read only, fully shared for users group
|
||||||
|
};
|
||||||
|
bucket = "digital-garden";
|
||||||
|
})
|
||||||
|
(
|
||||||
let
|
let
|
||||||
s3fs-exec = "${pkgs.s3fs}/bin/s3fs";
|
args = {
|
||||||
in
|
"-fstype" = "cifs";
|
||||||
"${mount_dest} ${confToBackendArg backend_args} :${s3fs-exec}\#${bucket}";
|
credentials = config.age.secrets._nhitrl_cred.path;
|
||||||
personalStorage = [
|
user = null;
|
||||||
(autofs-s3fs_entry {
|
uid = "1001";
|
||||||
mount_dest = "garden";
|
gid = "100";
|
||||||
backend_args = {
|
dir_mode = "0777";
|
||||||
"-fstype" = "fuse";
|
file_mode = "0777";
|
||||||
use_cache = "/tmp";
|
|
||||||
del_cache = null;
|
|
||||||
allow_other = null;
|
|
||||||
url = "https://v5h5.la11.idrivee2-14.com";
|
|
||||||
passwd_file = config.age.secrets."s3fs.digital-garden".path;
|
|
||||||
dbglevel = "debug"; # enable this for better debugging info in journalctl
|
|
||||||
uid = "1000"; # default user
|
|
||||||
gid = "100"; # users
|
|
||||||
umask = "003"; # others read only, fully shared for users group
|
|
||||||
};
|
};
|
||||||
bucket = "digital-garden";
|
in "felia_d ${confToBackendArg args} ://felia.coati-celsius.ts.net/d"
|
||||||
})
|
)
|
||||||
(
|
(
|
||||||
let
|
let
|
||||||
args = {
|
args = {
|
||||||
"-fstype" = "cifs";
|
"-fstype" = "cifs";
|
||||||
credentials = config.age.secrets._nhitrl_cred.path;
|
credentials = config.age.secrets._nhitrl_cred.path;
|
||||||
user = null;
|
user = null;
|
||||||
uid = "1001";
|
uid = "1001";
|
||||||
gid = "100";
|
gid = "100";
|
||||||
dir_mode = "0777";
|
dir_mode = "0777";
|
||||||
file_mode = "0777";
|
file_mode = "0777";
|
||||||
};
|
};
|
||||||
in
|
in "felia_f ${confToBackendArg args} ://felia.coati-celsius.ts.net/f"
|
||||||
"felia_d ${confToBackendArg args} ://felia.coati-celsius.ts.net/d"
|
)
|
||||||
)
|
];
|
||||||
(
|
persoConf = pkgs.writeText "auto.personal" (builtins.concatStringsSep "\n" personalStorage);
|
||||||
let
|
in {
|
||||||
args = {
|
enable = true;
|
||||||
"-fstype" = "cifs";
|
# Creates /perso directory with every subdirectory declared by ${personalStorage}
|
||||||
credentials = config.age.secrets._nhitrl_cred.path;
|
# as of now (might be stale), /perso/hot is the only mount accessible
|
||||||
user = null;
|
# that is also managed by s3fs
|
||||||
uid = "1001";
|
autoMaster = ''
|
||||||
gid = "100";
|
/perso file:${persoConf}
|
||||||
dir_mode = "0777";
|
'';
|
||||||
file_mode = "0777";
|
timeout = 30; # default: 600, 600 seconds (10 mins) of inactivity => unmount
|
||||||
};
|
# debug = true; # writes to more to journalctl
|
||||||
in
|
};
|
||||||
"felia_f ${confToBackendArg args} ://felia.coati-celsius.ts.net/f"
|
|
||||||
)
|
|
||||||
];
|
|
||||||
persoConf = pkgs.writeText "auto.personal" (builtins.concatStringsSep "\n" personalStorage);
|
|
||||||
in
|
|
||||||
{
|
|
||||||
enable = true;
|
|
||||||
# Creates /perso directory with every subdirectory declared by ${personalStorage}
|
|
||||||
# as of now (might be stale), /perso/hot is the only mount accessible
|
|
||||||
# that is also managed by s3fs
|
|
||||||
autoMaster = ''
|
|
||||||
/perso file:${persoConf}
|
|
||||||
'';
|
|
||||||
timeout = 30; # default: 600, 600 seconds (10 mins) of inactivity => unmount
|
|
||||||
# debug = true; # writes to more to journalctl
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,25 @@
|
||||||
{ pkgs
|
{
|
||||||
, config
|
pkgs,
|
||||||
, lib
|
config,
|
||||||
, ...
|
lib,
|
||||||
}: let cfg = config.mod.tailscale; in {
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.mod.tailscale;
|
||||||
|
in {
|
||||||
options.mod.tailscale = {
|
options.mod.tailscale = {
|
||||||
enable = lib.mkEnableOption "tailscale";
|
enable = lib.mkEnableOption "tailscale";
|
||||||
};
|
};
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
environment.systemPackages = [ pkgs.tailscale ];
|
environment.systemPackages = [pkgs.tailscale];
|
||||||
services.tailscale.enable = true;
|
services.tailscale.enable = true;
|
||||||
|
|
||||||
systemd.services.tailscale-autoconnect = {
|
systemd.services.tailscale-autoconnect = {
|
||||||
description = "Automatically connects to Tailscale";
|
description = "Automatically connects to Tailscale";
|
||||||
|
|
||||||
# make sure tailscale is running before trying to connect to tailscale
|
# make sure tailscale is running before trying to connect to tailscale
|
||||||
after = [ "network-pre.target" "tailscale.service" ];
|
after = ["network-pre.target" "tailscale.service"];
|
||||||
wants = [ "network-pre.target" "tailscale.service" ];
|
wants = ["network-pre.target" "tailscale.service"];
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = ["multi-user.target"];
|
||||||
|
|
||||||
# set this service as a oneshot job
|
# set this service as a oneshot job
|
||||||
serviceConfig.Type = "oneshot";
|
serviceConfig.Type = "oneshot";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ config, ... }: {
|
{config, ...}: {
|
||||||
networking.wireless.enable = true;
|
networking.wireless.enable = true;
|
||||||
networking.wireless.environmentFile = config.age.secrets."wifi.env";
|
networking.wireless.environmentFile = config.age.secrets."wifi.env";
|
||||||
networking.wireless.networks = {
|
networking.wireless.networks = {
|
||||||
|
|
|
@ -5,8 +5,13 @@ Contains all configurations that are written in their native configuration langu
|
||||||
## Why native language?
|
## Why native language?
|
||||||
|
|
||||||
- Easier portability
|
- Easier portability
|
||||||
|
- Syntax highlighting and robust checking without needing to realize derivation
|
||||||
- Nix can read from [JSON](https://nixos.org/manual/nix/stable/language/builtins.html#builtins-fromJSON),
|
- Nix can read from [JSON](https://nixos.org/manual/nix/stable/language/builtins.html#builtins-fromJSON),
|
||||||
[TOML](https://nixos.org/manual/nix/stable/release-notes/rl-2.6.html#release-26-2022-01-24).
|
[TOML](https://nixos.org/manual/nix/stable/release-notes/rl-2.6.html#release-26-2022-01-24).
|
||||||
- We have also managed to hack together a [fromYaml](./../nix-conf/lib/serde/default.nix),
|
- We have also managed to hack together a [fromYaml](./../nix-conf/lib/serde/default.nix),
|
||||||
though it will not work for strictly pure builds or bootstrapping builds.
|
though it will not work for strictly pure builds or bootstrapping builds.
|
||||||
|
|
||||||
|
## When to use Nix to generate config?
|
||||||
|
|
||||||
|
- Original configuraiton language requires too much duplication that can be solved with Nix
|
||||||
|
|
||||||
|
|
|
@ -993,6 +993,29 @@ require('mason-lspconfig').setup_handlers({
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
end,
|
end,
|
||||||
|
["nil_ls"] = function()
|
||||||
|
require('lspconfig').nil_ls.setup {
|
||||||
|
on_attach = on_attach,
|
||||||
|
capabilities = capabilities,
|
||||||
|
--- refer to https://github.com/oxalica/nil/blob/main/docs/configuration.md
|
||||||
|
--- for the list of configurations available for `nil_ls`
|
||||||
|
settings = {
|
||||||
|
["nil"] = {
|
||||||
|
formatting = {
|
||||||
|
command = {"nix", "run", "nixpkgs#alejandra"},
|
||||||
|
},
|
||||||
|
nix = {
|
||||||
|
flake = {
|
||||||
|
-- calls `nix flake archive` to put a flake and its output to store
|
||||||
|
autoArchive = true,
|
||||||
|
-- auto eval flake inputs for improved completion
|
||||||
|
autoEvalInputs = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
require("rust-tools").setup {
|
require("rust-tools").setup {
|
||||||
tools = {
|
tools = {
|
||||||
|
|
|
@ -1,53 +1,51 @@
|
||||||
{ config
|
{
|
||||||
, proj_root
|
config,
|
||||||
, myLib
|
proj_root,
|
||||||
, ...
|
myLib,
|
||||||
}:
|
...
|
||||||
let
|
}: let
|
||||||
inherit (myLib) fromYaml;
|
inherit (myLib) fromYaml;
|
||||||
actualConfig = fromYaml (builtins.readFile "${proj_root.config.path}//alacritty/alacritty.yml");
|
actualConfig = fromYaml (builtins.readFile "${proj_root.config.path}//alacritty/alacritty.yml");
|
||||||
cfg = config.base.alacritty;
|
cfg = config.base.alacritty;
|
||||||
in
|
in {
|
||||||
{
|
options.base.alacritty = {
|
||||||
options.base.alacritty =
|
font.family = myLib.mkOption {
|
||||||
{
|
type = myLib.types.singleLineStr;
|
||||||
font.family = myLib.mkOption {
|
default = actualConfig.font.normal.family;
|
||||||
type = myLib.types.singleLineStr;
|
description = ''
|
||||||
default = actualConfig.font.normal.family;
|
The font family for Alacritty
|
||||||
description = ''
|
'';
|
||||||
The font family for Alacritty
|
example = "DroidSansMono NF";
|
||||||
'';
|
|
||||||
example = "DroidSansMono NF";
|
|
||||||
};
|
|
||||||
font.size = myLib.mkOption {
|
|
||||||
type = myLib.types.number;
|
|
||||||
default = actualConfig.font.size;
|
|
||||||
description = ''
|
|
||||||
The default font size for Alacritty. This is probably measured in px.
|
|
||||||
'';
|
|
||||||
example = 7.0;
|
|
||||||
};
|
|
||||||
enable = myLib.mkOption {
|
|
||||||
type = myLib.types.bool;
|
|
||||||
default = true;
|
|
||||||
description = ''
|
|
||||||
Enables alacritty
|
|
||||||
'';
|
|
||||||
example = true;
|
|
||||||
};
|
|
||||||
_actualConfig = myLib.mkOption {
|
|
||||||
type = myLib.types.attrs;
|
|
||||||
visible = false;
|
|
||||||
default = actualConfig;
|
|
||||||
description = "underlying default config";
|
|
||||||
};
|
|
||||||
additionalConfigPath = myLib.mkOption {
|
|
||||||
type = myLib.types.nullOr myLib.types.path;
|
|
||||||
visible = false;
|
|
||||||
default = null;
|
|
||||||
description = "impurely write our alacritty.yml to this path";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
font.size = myLib.mkOption {
|
||||||
|
type = myLib.types.number;
|
||||||
|
default = actualConfig.font.size;
|
||||||
|
description = ''
|
||||||
|
The default font size for Alacritty. This is probably measured in px.
|
||||||
|
'';
|
||||||
|
example = 7.0;
|
||||||
|
};
|
||||||
|
enable = myLib.mkOption {
|
||||||
|
type = myLib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = ''
|
||||||
|
Enables alacritty
|
||||||
|
'';
|
||||||
|
example = true;
|
||||||
|
};
|
||||||
|
_actualConfig = myLib.mkOption {
|
||||||
|
type = myLib.types.attrs;
|
||||||
|
visible = false;
|
||||||
|
default = actualConfig;
|
||||||
|
description = "underlying default config";
|
||||||
|
};
|
||||||
|
additionalConfigPath = myLib.mkOption {
|
||||||
|
type = myLib.types.nullOr myLib.types.path;
|
||||||
|
visible = false;
|
||||||
|
default = null;
|
||||||
|
description = "impurely write our alacritty.yml to this path";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
config.programs.alacritty = {
|
config.programs.alacritty = {
|
||||||
enable = cfg.enable;
|
enable = cfg.enable;
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
{ lib, pkgs, config, ... }:
|
|
||||||
{
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
# This patch exists since Darwin's search bar requires solid apps and not
|
# This patch exists since Darwin's search bar requires solid apps and not
|
||||||
# symlinked
|
# symlinked
|
||||||
# TODO: QA
|
# TODO: QA
|
||||||
|
@ -11,15 +15,15 @@
|
||||||
# Copy GUI apps to "~/Applications/Home Manager Apps"
|
# Copy GUI apps to "~/Applications/Home Manager Apps"
|
||||||
# Based on this comment: https://github.com/nix-community/home-manager/issues/1341#issuecomment-778820334
|
# Based on this comment: https://github.com/nix-community/home-manager/issues/1341#issuecomment-778820334
|
||||||
home.activation.patch-spotlight =
|
home.activation.patch-spotlight =
|
||||||
if pkgs.stdenv.isDarwin then
|
if pkgs.stdenv.isDarwin
|
||||||
let
|
then let
|
||||||
apps = pkgs.buildEnv {
|
apps = pkgs.buildEnv {
|
||||||
name = "home-manager-applications";
|
name = "home-manager-applications";
|
||||||
paths = config.home.packages;
|
paths = config.home.packages;
|
||||||
pathsToLink = "/Applications";
|
pathsToLink = "/Applications";
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
lib.hm.dag.entryAfter [ "linkGeneration" ] ''
|
lib.hm.dag.entryAfter ["linkGeneration"] ''
|
||||||
# Install MacOS applications to the user environment.
|
# Install MacOS applications to the user environment.
|
||||||
HM_APPS="$HOME/Applications/Home Manager Apps"
|
HM_APPS="$HOME/Applications/Home Manager Apps"
|
||||||
# Reset current state
|
# Reset current state
|
||||||
|
@ -33,19 +37,18 @@
|
||||||
$DRY_RUN_CMD cp --archive -H --dereference ${apps}/Applications/* "$HM_APPS"
|
$DRY_RUN_CMD cp --archive -H --dereference ${apps}/Applications/* "$HM_APPS"
|
||||||
$DRY_RUN_CMD chmod +w -R "$HM_APPS"
|
$DRY_RUN_CMD chmod +w -R "$HM_APPS"
|
||||||
''
|
''
|
||||||
else
|
else "";
|
||||||
"";
|
|
||||||
# We need this in case upstream home-manager changes the behavior of linking
|
# We need this in case upstream home-manager changes the behavior of linking
|
||||||
# applications
|
# applications
|
||||||
home.activation.remove-patch-spotlight =
|
home.activation.remove-patch-spotlight =
|
||||||
if pkgs.stdenv.isDarwin then
|
if pkgs.stdenv.isDarwin
|
||||||
lib.hm.dag.entryBefore [ "checkLinkTargets" ] ''
|
then
|
||||||
|
lib.hm.dag.entryBefore ["checkLinkTargets"] ''
|
||||||
HM_APPS="$HOME/Applications/Home Manager Apps"
|
HM_APPS="$HOME/Applications/Home Manager Apps"
|
||||||
# Reset current state
|
# Reset current state
|
||||||
if [ -e "$HM_APPS" ]; then
|
if [ -e "$HM_APPS" ]; then
|
||||||
$DRY_RUN_CMD mv "$HM_APPS" "$HM_APPS.$(date +%Y%m%d%H%M%S)"
|
$DRY_RUN_CMD mv "$HM_APPS" "$HM_APPS.$(date +%Y%m%d%H%M%S)"
|
||||||
fi
|
fi
|
||||||
''
|
''
|
||||||
else
|
else "";
|
||||||
"";
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
{nix-index-database
|
{nix-index-database, ...} @ inputs: {
|
||||||
,...
|
|
||||||
}@inputs:{
|
|
||||||
mkModuleArgs = import ./mkModuleArgs.nix;
|
mkModuleArgs = import ./mkModuleArgs.nix;
|
||||||
modules = [
|
modules = [
|
||||||
./alacritty.nix
|
./alacritty.nix
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
{ config
|
{
|
||||||
, myLib
|
config,
|
||||||
, ...
|
myLib,
|
||||||
}:
|
...
|
||||||
let
|
}: let
|
||||||
cfg = config.base.git;
|
cfg = config.base.git;
|
||||||
baseAliases = {
|
baseAliases = {
|
||||||
a = "add";
|
a = "add";
|
||||||
|
@ -15,12 +15,11 @@ let
|
||||||
co = "checkout";
|
co = "checkout";
|
||||||
b = "branch";
|
b = "branch";
|
||||||
};
|
};
|
||||||
in
|
in {
|
||||||
{
|
|
||||||
options.base.git = {
|
options.base.git = {
|
||||||
aliases = myLib.mkOption {
|
aliases = myLib.mkOption {
|
||||||
type = myLib.types.attrs;
|
type = myLib.types.attrs;
|
||||||
default = { };
|
default = {};
|
||||||
example = baseAliases;
|
example = baseAliases;
|
||||||
description = ''
|
description = ''
|
||||||
Additional git aliases. This settings comes with base configuration.
|
Additional git aliases. This settings comes with base configuration.
|
||||||
|
@ -50,7 +49,7 @@ in
|
||||||
.gitignore patterns that are applied in every repository.
|
.gitignore patterns that are applied in every repository.
|
||||||
This is useful for IDE-specific settings.
|
This is useful for IDE-specific settings.
|
||||||
'';
|
'';
|
||||||
example = [ ".direnv" "node_modules" ];
|
example = [".direnv" "node_modules"];
|
||||||
};
|
};
|
||||||
enable = myLib.mkOption {
|
enable = myLib.mkOption {
|
||||||
type = myLib.types.bool;
|
type = myLib.types.bool;
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
{ pkgs, config, lib, ... }:
|
{
|
||||||
let
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
cfg = config.base.graphics;
|
cfg = config.base.graphics;
|
||||||
cfgEnable = cfg.enable or (cfg.useNixGL.defaultPackage != null);
|
cfgEnable = cfg.enable or (cfg.useNixGL.defaultPackage != null);
|
||||||
types = lib.types;
|
types = lib.types;
|
||||||
in
|
in {
|
||||||
{
|
imports = [./shells.nix];
|
||||||
imports = [ ./shells.nix ];
|
|
||||||
options.base.graphics = {
|
options.base.graphics = {
|
||||||
enable = lib.mkEnableOption "graphics";
|
enable = lib.mkEnableOption "graphics";
|
||||||
_enable = lib.mkOption {
|
_enable = lib.mkOption {
|
||||||
|
@ -23,7 +26,7 @@ in
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
defaultPackage = lib.mkOption {
|
defaultPackage = lib.mkOption {
|
||||||
type = types.nullOr (types.enum [ "nixGLIntel" "nixGLNvidia" "nixGLNvidiaBumblebee" ]);
|
type = types.nullOr (types.enum ["nixGLIntel" "nixGLNvidia" "nixGLNvidiaBumblebee"]);
|
||||||
description = "Which nixGL package to be aliased as `nixGL` on the shell";
|
description = "Which nixGL package to be aliased as `nixGL` on the shell";
|
||||||
default = null;
|
default = null;
|
||||||
example = "nixGLIntel";
|
example = "nixGLIntel";
|
||||||
|
@ -41,6 +44,6 @@ in
|
||||||
nixGL = cfg.useNixGL.defaultPackage;
|
nixGL = cfg.useNixGL.defaultPackage;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
home.packages = [ cfg.useNixGL.package ];
|
home.packages = [cfg.useNixGL.package];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
{ config, proj_root, pkgs, lib, ... }:
|
{
|
||||||
let
|
config,
|
||||||
|
proj_root,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
cfg = config.base.keepass;
|
cfg = config.base.keepass;
|
||||||
trimNull = lib.filterAttrsRecursive (name: value: value != null);
|
trimNull = lib.filterAttrsRecursive (name: value: value != null);
|
||||||
in
|
in {
|
||||||
{
|
imports = [./graphics.nix];
|
||||||
imports = [ ./graphics.nix ];
|
|
||||||
options.base.keepass = {
|
options.base.keepass = {
|
||||||
enable = lib.mkEnableOption "keepass";
|
enable = lib.mkEnableOption "keepass";
|
||||||
use_gui = lib.mkOption {
|
use_gui = lib.mkOption {
|
||||||
|
@ -42,12 +46,18 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
home.packages = [
|
home.packages =
|
||||||
pkgs.kpcli-py # kp but is in cli
|
[
|
||||||
] ++ (if cfg.use_gui or config.base.graphics._enable then [
|
pkgs.kpcli-py # kp but is in cli
|
||||||
pkgs.keepass # Personal secret management
|
]
|
||||||
] else [ ]);
|
++ (
|
||||||
home.file.".kp/config.ini".text = lib.generators.toINI { } (trimNull {
|
if cfg.use_gui or config.base.graphics._enable
|
||||||
|
then [
|
||||||
|
pkgs.keepass # Personal secret management
|
||||||
|
]
|
||||||
|
else []
|
||||||
|
);
|
||||||
|
home.file.".kp/config.ini".text = lib.generators.toINI {} (trimNull {
|
||||||
default = {
|
default = {
|
||||||
KEEPASSDB = cfg.path;
|
KEEPASSDB = cfg.path;
|
||||||
KEEPASSDB_KEYFILE = cfg.keyfile_path;
|
KEEPASSDB_KEYFILE = cfg.keyfile_path;
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
# Turns given inputs into the standardized shape of the inputs to configure
|
# Turns given inputs into the standardized shape of the inputs to configure
|
||||||
# custom base modules in this directory.
|
# custom base modules in this directory.
|
||||||
{ pkgs
|
{
|
||||||
, lib ? pkgs.lib
|
pkgs,
|
||||||
, ...
|
lib ? pkgs.lib,
|
||||||
}@inputs:
|
...
|
||||||
let
|
} @ inputs: let
|
||||||
recursiveUpdate = lib.recursiveUpdate;
|
recursiveUpdate = lib.recursiveUpdate;
|
||||||
_lib = recursiveUpdate lib (import ../../lib { inherit pkgs lib; });
|
_lib = recursiveUpdate lib (import ../../lib {inherit pkgs lib;});
|
||||||
proj_root = builtins.toString ./../../..;
|
proj_root = builtins.toString ./../../..;
|
||||||
in
|
in
|
||||||
# TODO: Unpollute inputs
|
# TODO: Unpollute inputs
|
||||||
recursiveUpdate inputs {
|
recursiveUpdate inputs {
|
||||||
proj_root = {
|
proj_root = {
|
||||||
path = proj_root;
|
path = proj_root;
|
||||||
config.path = "${proj_root}/native_configs";
|
config.path = "${proj_root}/native_configs";
|
||||||
scripts.path = "${proj_root}/scripts";
|
scripts.path = "${proj_root}/scripts";
|
||||||
};
|
};
|
||||||
myLib = _lib;
|
myLib = _lib;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,68 +2,86 @@
|
||||||
#
|
#
|
||||||
# One thing to consider, though, /nix/store of `nix-shell` or `nix-develop`
|
# One thing to consider, though, /nix/store of `nix-shell` or `nix-develop`
|
||||||
# might be different from `home-manager`'s (~/.nix_profile/bin/jq)
|
# might be different from `home-manager`'s (~/.nix_profile/bin/jq)
|
||||||
{ pkgs, lib, config, proj_root, ... }:
|
{
|
||||||
let
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
proj_root,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
# NOTE: Add packages to nvim_pkgs instead, so that it's available at userspace
|
# NOTE: Add packages to nvim_pkgs instead, so that it's available at userspace
|
||||||
# and is added to the path after wrapping.
|
# and is added to the path after wrapping.
|
||||||
# check: nix repl `homeConfigurations.hungtr.config.programs.neovim.finalPackage.buildCommand`
|
# check: nix repl `homeConfigurations.hungtr.config.programs.neovim.finalPackage.buildCommand`
|
||||||
# see: :/--suffix.*PATH
|
# see: :/--suffix.*PATH
|
||||||
# there should be mentions of additional packages
|
# there should be mentions of additional packages
|
||||||
my_neovim = pkgs.neovim-unwrapped;
|
my_neovim = pkgs.neovim-unwrapped;
|
||||||
rust_pkgs = (pkgs.rust-bin.selectLatestNightlyWith
|
rust_pkgs =
|
||||||
|
pkgs.rust-bin.selectLatestNightlyWith
|
||||||
(
|
(
|
||||||
toolchain:
|
toolchain:
|
||||||
toolchain.default.override {
|
toolchain.default.override {
|
||||||
extensions = [ "rust-src" "rust-analyzer" "rust-docs" "rustfmt" "clippy" "miri" ];
|
extensions = ["rust-src" "rust-analyzer" "rust-docs" "rustfmt" "clippy" "miri"];
|
||||||
}
|
}
|
||||||
));
|
);
|
||||||
nvim_pkgs = [
|
nvim_pkgs =
|
||||||
# pkgs.gccStdenv
|
|
||||||
pkgs.tree-sitter
|
|
||||||
pkgs.fzf # file name fuzzy search
|
|
||||||
pkgs.ripgrep # content fuzzy search
|
|
||||||
pkgs.zk # Zettelkasten (limited support)
|
|
||||||
pkgs.fd # Required by a Telescope plugin (?)
|
|
||||||
pkgs.stdenv.cc.cc.lib
|
|
||||||
pkgs.rnix-lsp # doesn't work, Mason just installs it using cargo
|
|
||||||
pkgs.rust4cargo
|
|
||||||
pkgs.nickel
|
|
||||||
pkgs.nls
|
|
||||||
|
|
||||||
pkgs.go # doesn't work, Mason installs from runtime path
|
|
||||||
|
|
||||||
# Language-specific stuffs
|
|
||||||
pkgs.sumneko-lua-language-server
|
|
||||||
# pkgs.python3Packages.python-lsp-server
|
|
||||||
pkgs.nodePackages.pyright
|
|
||||||
pkgs.python3Packages.pylint
|
|
||||||
pkgs.python3Packages.flake8
|
|
||||||
# FIXME: installing ansible from here just doesn't work :/
|
|
||||||
# pkgs.ansible-lint
|
|
||||||
# pkgs.python38Packages.ansible
|
|
||||||
# pkgs.ansible-language-server
|
|
||||||
# TODO: the devShell should provide rust-analyzer so that
|
|
||||||
# cargo test builds binaries compatible with rust-analyzer
|
|
||||||
|
|
||||||
# pkgs.rust-analyzer
|
|
||||||
# rust_pkgs
|
|
||||||
# pkgs.evcxr # Rust REPL for Conjure!
|
|
||||||
] ++ lib.optionals (pkgs.stdenv.isDarwin) (
|
|
||||||
let
|
|
||||||
inherit (pkgs.darwin.apple_sdk.frameworks) System CoreFoundation; in
|
|
||||||
[
|
[
|
||||||
System
|
# pkgs.gccStdenv
|
||||||
CoreFoundation
|
pkgs.tree-sitter
|
||||||
|
pkgs.fzf # file name fuzzy search
|
||||||
|
pkgs.ripgrep # content fuzzy search
|
||||||
|
pkgs.zk # Zettelkasten (limited support)
|
||||||
|
pkgs.fd # Required by a Telescope plugin (?)
|
||||||
|
pkgs.stdenv.cc.cc.lib
|
||||||
|
pkgs.rnix-lsp # doesn't work, Mason just installs it using cargo
|
||||||
|
pkgs.rust4cargo
|
||||||
|
pkgs.nickel
|
||||||
|
pkgs.nls
|
||||||
|
|
||||||
|
pkgs.go # doesn't work, Mason installs from runtime path
|
||||||
|
|
||||||
|
# Language-specific stuffs
|
||||||
|
pkgs.sumneko-lua-language-server
|
||||||
|
# pkgs.python3Packages.python-lsp-server
|
||||||
|
pkgs.nodePackages.pyright
|
||||||
|
pkgs.python3Packages.pylint
|
||||||
|
pkgs.python3Packages.flake8
|
||||||
|
# FIXME: installing ansible from here just doesn't work :/
|
||||||
|
# pkgs.ansible-lint
|
||||||
|
# pkgs.python38Packages.ansible
|
||||||
|
# pkgs.ansible-language-server
|
||||||
|
# TODO: the devShell should provide rust-analyzer so that
|
||||||
|
# cargo test builds binaries compatible with rust-analyzer
|
||||||
|
|
||||||
|
# pkgs.rust-analyzer
|
||||||
|
# rust_pkgs
|
||||||
|
# pkgs.evcxr # Rust REPL for Conjure!
|
||||||
]
|
]
|
||||||
);
|
++ lib.optionals (pkgs.stdenv.isDarwin) (
|
||||||
in
|
let
|
||||||
{
|
inherit (pkgs.darwin.apple_sdk.frameworks) System CoreFoundation;
|
||||||
|
in [
|
||||||
|
System
|
||||||
|
CoreFoundation
|
||||||
|
]
|
||||||
|
);
|
||||||
|
in {
|
||||||
options.base.neovim = {
|
options.base.neovim = {
|
||||||
enable = lib.mkOption {
|
enable = lib.mkOption {
|
||||||
default = true;
|
default = true;
|
||||||
description = "enable personalized neovim as default editor";
|
description = "enable personalized neovim as default editor";
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
example = false;
|
example = false;
|
||||||
|
f = let
|
||||||
|
adder = {
|
||||||
|
__functor = self: arg:
|
||||||
|
if builtins.isInt arg
|
||||||
|
then self // {x = self.x + arg;}
|
||||||
|
else self.x;
|
||||||
|
x = 0;
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
what = adder 1 2 3 {};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
config = lib.mkIf config.base.neovim.enable {
|
config = lib.mkIf config.base.neovim.enable {
|
||||||
|
@ -76,60 +94,54 @@ in
|
||||||
withPython3 = true;
|
withPython3 = true;
|
||||||
withNodeJs = true;
|
withNodeJs = true;
|
||||||
extraPackages = nvim_pkgs;
|
extraPackages = nvim_pkgs;
|
||||||
extraLuaConfig = (builtins.readFile "${proj_root.config.path}//neovim/init.lua");
|
extraLuaConfig = builtins.readFile "${proj_root.config.path}//neovim/init.lua";
|
||||||
plugins = (let inherit (pkgs.vimPlugins)
|
plugins = let
|
||||||
plenary-nvim
|
inherit
|
||||||
|
(pkgs.vimPlugins)
|
||||||
nvim-treesitter
|
plenary-nvim
|
||||||
nvim-treesitter-textobjects
|
nvim-treesitter
|
||||||
nvim-treesitter-context
|
nvim-treesitter-textobjects
|
||||||
|
nvim-treesitter-context
|
||||||
telescope-fzf-native-nvim
|
telescope-fzf-native-nvim
|
||||||
telescope-file-browser-nvim
|
telescope-file-browser-nvim
|
||||||
telescope-nvim
|
telescope-nvim
|
||||||
|
nvim-lspconfig
|
||||||
nvim-lspconfig
|
gruvbox-community
|
||||||
|
neodev-nvim
|
||||||
gruvbox-community
|
cmp-nvim-lsp
|
||||||
|
cmp-path
|
||||||
neodev-nvim
|
cmp-buffer
|
||||||
|
cmp-cmdline
|
||||||
cmp-nvim-lsp
|
nvim-cmp
|
||||||
cmp-path
|
lspkind-nvim
|
||||||
cmp-buffer
|
nvim-autopairs
|
||||||
cmp-cmdline
|
nvim-ts-autotag
|
||||||
nvim-cmp
|
guess-indent-nvim
|
||||||
|
harpoon
|
||||||
lspkind-nvim
|
zk-nvim
|
||||||
nvim-autopairs
|
luasnip
|
||||||
nvim-ts-autotag
|
fidget-nvim
|
||||||
guess-indent-nvim
|
rust-tools-nvim
|
||||||
harpoon
|
cmp_luasnip
|
||||||
zk-nvim
|
gitsigns-nvim
|
||||||
luasnip
|
indent-blankline-nvim
|
||||||
fidget-nvim
|
lualine-nvim
|
||||||
rust-tools-nvim
|
mason-lspconfig-nvim
|
||||||
|
mason-nvim
|
||||||
cmp_luasnip
|
neogit
|
||||||
gitsigns-nvim
|
nlua-nvim
|
||||||
indent-blankline-nvim
|
nvim-jqx
|
||||||
lualine-nvim
|
nvim-surround
|
||||||
mason-lspconfig-nvim
|
nvim-web-devicons
|
||||||
mason-nvim
|
playground
|
||||||
neogit
|
todo-comments-nvim
|
||||||
nlua-nvim
|
trouble-nvim
|
||||||
nvim-jqx
|
vim-dispatch
|
||||||
nvim-surround
|
vim-dispatch-neovim
|
||||||
nvim-web-devicons
|
vim-fugitive
|
||||||
playground
|
vim-jack-in
|
||||||
todo-comments-nvim
|
;
|
||||||
trouble-nvim
|
in [
|
||||||
vim-dispatch
|
|
||||||
vim-dispatch-neovim
|
|
||||||
vim-fugitive
|
|
||||||
vim-jack-in
|
|
||||||
|
|
||||||
; in [
|
|
||||||
plenary-nvim
|
plenary-nvim
|
||||||
nvim-treesitter.withAllGrammars
|
nvim-treesitter.withAllGrammars
|
||||||
nvim-treesitter-textobjects
|
nvim-treesitter-textobjects
|
||||||
|
@ -173,7 +185,7 @@ in
|
||||||
vim-dispatch-neovim
|
vim-dispatch-neovim
|
||||||
vim-fugitive
|
vim-fugitive
|
||||||
vim-jack-in
|
vim-jack-in
|
||||||
]);
|
];
|
||||||
};
|
};
|
||||||
# home.packages = nvim_pkgs;
|
# home.packages = nvim_pkgs;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
# TODO: maybe throw if base.graphics is not enabled?
|
# TODO: maybe throw if base.graphics is not enabled?
|
||||||
# Though, headless chromium might be possible
|
# Though, headless chromium might be possible
|
||||||
{ config, pkgs, lib, ... }:
|
|
||||||
let cfg = config.base.private_chromium;
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.base.private_chromium;
|
||||||
|
in {
|
||||||
options.base.private_chromium = {
|
options.base.private_chromium = {
|
||||||
enable = lib.mkOption {
|
enable = lib.mkOption {
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
|
@ -19,33 +23,36 @@ in
|
||||||
programs.chromium = {
|
programs.chromium = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.ungoogled-chromium;
|
package = pkgs.ungoogled-chromium;
|
||||||
extensions =
|
extensions = let
|
||||||
let
|
# TODO: how about a chrome extension registry?
|
||||||
# TODO: how about a chrome extension registry?
|
mkChromiumExtForVersion = browserVersion: {
|
||||||
mkChromiumExtForVersion = browserVersion: { id, sha256, extVersion, ... }:
|
id,
|
||||||
{
|
sha256,
|
||||||
inherit id;
|
extVersion,
|
||||||
crxPath = builtins.fetchurl {
|
...
|
||||||
url = "https://clients2.google.com/service/update2/crx" +
|
}: {
|
||||||
"?response=redirect" +
|
inherit id;
|
||||||
"&acceptformat=crx2,crx3" +
|
crxPath = builtins.fetchurl {
|
||||||
"&prodversion=${browserVersion}" +
|
url =
|
||||||
"&x=id%3D${id}%26installsource%3Dondemand%26uc";
|
"https://clients2.google.com/service/update2/crx"
|
||||||
name = "${id}.crx";
|
+ "?response=redirect"
|
||||||
inherit sha256;
|
+ "&acceptformat=crx2,crx3"
|
||||||
};
|
+ "&prodversion=${browserVersion}"
|
||||||
version = extVersion;
|
+ "&x=id%3D${id}%26installsource%3Dondemand%26uc";
|
||||||
};
|
name = "${id}.crx";
|
||||||
mkChromiumExt = mkChromiumExtForVersion (lib.versions.major pkgs.ungoogled-chromium.version);
|
inherit sha256;
|
||||||
in
|
};
|
||||||
[
|
version = extVersion;
|
||||||
# vimium
|
};
|
||||||
(mkChromiumExt {
|
mkChromiumExt = mkChromiumExtForVersion (lib.versions.major pkgs.ungoogled-chromium.version);
|
||||||
id = "dbepggeogbaibhgnhhndojpepiihcmeb";
|
in [
|
||||||
sha256 = "00qhbs41gx71q026xaflgwzzridfw1sx3i9yah45cyawv8q7ziic";
|
# vimium
|
||||||
extVersion = "1.67.4";
|
(mkChromiumExt {
|
||||||
})
|
id = "dbepggeogbaibhgnhhndojpepiihcmeb";
|
||||||
];
|
sha256 = "00qhbs41gx71q026xaflgwzzridfw1sx3i9yah45cyawv8q7ziic";
|
||||||
|
extVersion = "1.67.4";
|
||||||
|
})
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# A module that takes care of a GUI-ful, productive desktop environment
|
# A module that takes care of a GUI-ful, productive desktop environment
|
||||||
inputs@{ pkgs, ... }: {
|
inputs @ {pkgs, ...}: {
|
||||||
imports = [
|
imports = [
|
||||||
# slack
|
# slack
|
||||||
({ pkgs, ... }: {
|
({pkgs, ...}: {
|
||||||
home.packages = [
|
home.packages = [
|
||||||
pkgs.slack
|
pkgs.slack
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
# Configurations for shell stuffs.
|
# Configurations for shell stuffs.
|
||||||
# Should probably be decoupled even more for each feature
|
# Should probably be decoupled even more for each feature
|
||||||
{ config
|
|
||||||
, proj_root
|
|
||||||
, myLib
|
|
||||||
, pkgs
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let cfg = config.base.shells;
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
|
config,
|
||||||
|
proj_root,
|
||||||
|
myLib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.base.shells;
|
||||||
|
in {
|
||||||
options.base.shells = {
|
options.base.shells = {
|
||||||
enable = myLib.mkOption {
|
enable = myLib.mkOption {
|
||||||
type = myLib.types.bool;
|
type = myLib.types.bool;
|
||||||
|
@ -30,7 +30,7 @@ in
|
||||||
shellAliases = myLib.mkOption {
|
shellAliases = myLib.mkOption {
|
||||||
type = myLib.types.attrs;
|
type = myLib.types.attrs;
|
||||||
description = "Shell command aliases";
|
description = "Shell command aliases";
|
||||||
default = { };
|
default = {};
|
||||||
example = {
|
example = {
|
||||||
nixGL = "nixGLIntel";
|
nixGL = "nixGLIntel";
|
||||||
};
|
};
|
||||||
|
@ -52,8 +52,8 @@ in
|
||||||
programs.tmux = {
|
programs.tmux = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# extraConfigBeforePlugin = builtins.readFile "${proj_root.config.path}/tmux/tmux.conf";
|
# extraConfigBeforePlugin = builtins.readFile "${proj_root.config.path}/tmux/tmux.conf";
|
||||||
plugins = let inherit (pkgs.tmuxPlugins) cpu net-speed; in [ cpu net-speed ];
|
plugins = let inherit (pkgs.tmuxPlugins) cpu net-speed; in [cpu net-speed];
|
||||||
extraConfig = (builtins.readFile "${proj_root.config.path}/tmux/tmux.conf");
|
extraConfig = builtins.readFile "${proj_root.config.path}/tmux/tmux.conf";
|
||||||
};
|
};
|
||||||
xdg.configFile."tmux/tmux.conf".text = myLib.mkOrder 600 ''
|
xdg.configFile."tmux/tmux.conf".text = myLib.mkOrder 600 ''
|
||||||
set -g status-right '#{cpu_bg_color} CPU: #{cpu_icon} #{cpu_percentage} | %a %h-%d %H:%M '
|
set -g status-right '#{cpu_bg_color} CPU: #{cpu_icon} #{cpu_percentage} | %a %h-%d %H:%M '
|
||||||
|
@ -69,13 +69,14 @@ in
|
||||||
enableZshIntegration = true;
|
enableZshIntegration = true;
|
||||||
settings = let
|
settings = let
|
||||||
native = builtins.fromTOML (builtins.readFile "${proj_root.config.path}/starship/starship.toml");
|
native = builtins.fromTOML (builtins.readFile "${proj_root.config.path}/starship/starship.toml");
|
||||||
patch-nix = pkgs.lib.recursiveUpdate native ({
|
patch-nix = pkgs.lib.recursiveUpdate native {
|
||||||
c.commands = [
|
c.commands = [
|
||||||
["nix" "run" "nixpkgs#clang" "--" "--version"]
|
["nix" "run" "nixpkgs#clang" "--" "--version"]
|
||||||
["nix" "run" "nixpkgs#gcc" "--" "--version"]
|
["nix" "run" "nixpkgs#gcc" "--" "--version"]
|
||||||
];
|
];
|
||||||
});
|
};
|
||||||
in patch-nix;
|
in
|
||||||
|
patch-nix;
|
||||||
};
|
};
|
||||||
# Fuzzy finder. `fzf` for TUI, `fzf -f '<fuzzy query>'` for UNIX piping
|
# Fuzzy finder. `fzf` for TUI, `fzf -f '<fuzzy query>'` for UNIX piping
|
||||||
programs.fzf.enable = true;
|
programs.fzf.enable = true;
|
||||||
|
@ -88,10 +89,12 @@ in
|
||||||
enable = true;
|
enable = true;
|
||||||
enableCompletion = true;
|
enableCompletion = true;
|
||||||
enableAutosuggestions = true;
|
enableAutosuggestions = true;
|
||||||
shellAliases = {
|
shellAliases =
|
||||||
nix-rebuild = "sudo nixos-rebuild switch";
|
{
|
||||||
hm-switch = "home-manager switch --flake";
|
nix-rebuild = "sudo nixos-rebuild switch";
|
||||||
} // (cfg.shellAliases or { });
|
hm-switch = "home-manager switch --flake";
|
||||||
|
}
|
||||||
|
// (cfg.shellAliases or {});
|
||||||
history = {
|
history = {
|
||||||
size = 10000;
|
size = 10000;
|
||||||
path = "${config.xdg.dataHome}/zsh/history";
|
path = "${config.xdg.dataHome}/zsh/history";
|
||||||
|
@ -119,10 +122,11 @@ in
|
||||||
ZVM_KEYTIMEOUT = 0.004; # 40ms, or subtly around 25 FPS. I'm a gamer :)
|
ZVM_KEYTIMEOUT = 0.004; # 40ms, or subtly around 25 FPS. I'm a gamer :)
|
||||||
ZVM_ESCAPE_KEYTIMEOUT = 0.004; # 40ms, or subtly around 25 FPS. I'm a gamer :)
|
ZVM_ESCAPE_KEYTIMEOUT = 0.004; # 40ms, or subtly around 25 FPS. I'm a gamer :)
|
||||||
};
|
};
|
||||||
initExtra = (cfg.shellInitExtra or "") + ''
|
initExtra =
|
||||||
source ${pkgs.zsh-vi-mode}/share/zsh-vi-mode/zsh-vi-mode.plugin.zsh
|
(cfg.shellInitExtra or "")
|
||||||
'';
|
+ ''
|
||||||
|
source ${pkgs.zsh-vi-mode}/share/zsh-vi-mode/zsh-vi-mode.plugin.zsh
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{ config
|
|
||||||
, proj_root
|
|
||||||
, myLib
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let cfg = config.base.ssh;
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
|
config,
|
||||||
|
proj_root,
|
||||||
|
myLib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.base.ssh;
|
||||||
|
in {
|
||||||
options.base.ssh.enable = myLib.mkOption {
|
options.base.ssh.enable = myLib.mkOption {
|
||||||
type = myLib.types.bool;
|
type = myLib.types.bool;
|
||||||
default = true;
|
default = true;
|
||||||
|
@ -20,4 +20,3 @@ in
|
||||||
includes = ["${proj_root.config.path}/ssh/config"];
|
includes = ["${proj_root.config.path}/ssh/config"];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
# We use top-level nix-flake, so default.nix is basically just a wrapper around ./flake.nix
|
# We use top-level nix-flake, so default.nix is basically just a wrapper around ./flake.nix
|
||||||
(import
|
(
|
||||||
|
import
|
||||||
(
|
(
|
||||||
let
|
let
|
||||||
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
||||||
c_ = import ./../../c_.nix;
|
c_ = import ./../../c_.nix;
|
||||||
in
|
in
|
||||||
c_.fetchTree lock.nodes.flake-compat.locked
|
c_.fetchTree lock.nodes.flake-compat.locked
|
||||||
)
|
)
|
||||||
{ src = ./.; }
|
{src = ./.;}
|
||||||
).defaultNix
|
)
|
||||||
|
.defaultNix
|
||||||
|
|
|
@ -833,11 +833,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs-latest": {
|
"nixpkgs-latest": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1686940302,
|
"lastModified": 1687044368,
|
||||||
"narHash": "sha256-hTBVlV53sfi7ZyTkRKIVZy3V26ixnWGZnYrHvb9rCZU=",
|
"narHash": "sha256-7eBtV3lgfgjeyBDa20Xr4O9mlcAHHFYpvo6m16tgLcY=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "1f5b5df0d309144d10d409d161b50adc94157ef6",
|
"rev": "b621273236ab985db5ff7e91171624f2e07e82a1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -882,11 +882,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_10": {
|
"nixpkgs_10": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1686869522,
|
"lastModified": 1686960236,
|
||||||
"narHash": "sha256-tbJ9B8WLCTnVP/LwESRlg0dII6Zyg2LmUU/mB9Lu98E=",
|
"narHash": "sha256-AYCC9rXNLpUWzD9hm+askOfpliLEC9kwAo7ITJc4HIw=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "7c67f006ea0e7d0265f16d7df07cc076fdffd91f",
|
"rev": "04af42f3b31dba0ef742d254456dc4c14eedac86",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -1327,11 +1327,11 @@
|
||||||
"nixpkgs": "nixpkgs_11"
|
"nixpkgs": "nixpkgs_11"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1686882360,
|
"lastModified": 1686968542,
|
||||||
"narHash": "sha256-6iWVGIdIzmx/CgXPVLPyyxxBhPGYMl8sG09S8hpQ6pc=",
|
"narHash": "sha256-Gjlj7UeHqMFRAYyefeoLnSjLo8V+0XheIamojNEyTbE=",
|
||||||
"owner": "oxalica",
|
"owner": "oxalica",
|
||||||
"repo": "rust-overlay",
|
"repo": "rust-overlay",
|
||||||
"rev": "b519b1d7a31f1bd35423990398adecc6f7dd4dd2",
|
"rev": "01d84cd842e48e89be67e4c2d9dc46aa7709adc5",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
@ -43,82 +43,88 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs = flake_inputs @ {
|
||||||
flake_inputs@{ nixpkgs
|
nixpkgs,
|
||||||
, home-manager
|
home-manager,
|
||||||
, nixgl
|
nixgl,
|
||||||
, rust-overlay
|
rust-overlay,
|
||||||
, flake-utils
|
flake-utils,
|
||||||
, kpcli-py
|
kpcli-py,
|
||||||
, neovim-nightly-overlay
|
neovim-nightly-overlay,
|
||||||
, nix-boost
|
nix-boost,
|
||||||
, nixpkgs-latest
|
nixpkgs-latest,
|
||||||
, ...
|
...
|
||||||
}:
|
}: let
|
||||||
let
|
# config_fn:: system -> config
|
||||||
# config_fn:: system -> config
|
cross_platform = config_fn: {
|
||||||
cross_platform = config_fn: ({
|
packages =
|
||||||
packages = builtins.foldl'
|
builtins.foldl'
|
||||||
(prev: system: prev // {
|
(prev: system:
|
||||||
|
prev
|
||||||
|
// {
|
||||||
"${system}" = config_fn system;
|
"${system}" = config_fn system;
|
||||||
})
|
})
|
||||||
{ }
|
{}
|
||||||
flake-utils.lib.defaultSystems;
|
flake-utils.lib.defaultSystems;
|
||||||
});
|
};
|
||||||
in
|
in
|
||||||
cross_platform (system:
|
cross_platform (system: let
|
||||||
let
|
overlays = import ./overlays.nix (flake_inputs // {inherit system;});
|
||||||
overlays = import ./overlays.nix (flake_inputs // { inherit system; });
|
|
||||||
# pkgs = nixpkgs.legacyPackages.${system}.appendOverlays overlays;
|
# pkgs = nixpkgs.legacyPackages.${system}.appendOverlays overlays;
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
inherit system overlays;
|
inherit system overlays;
|
||||||
config = { allowUnfree = true; };
|
config = {allowUnfree = true;};
|
||||||
};
|
};
|
||||||
# lib = (import ../lib { inherit pkgs; lib = pkgs.lib; });
|
# lib = (import ../lib { inherit pkgs; lib = pkgs.lib; });
|
||||||
base = import ./base flake_inputs;
|
base = import ./base flake_inputs;
|
||||||
inherit (base) mkModuleArgs;
|
inherit (base) mkModuleArgs;
|
||||||
|
|
||||||
nerd_font_module = { config, pkgs, ... }: {
|
nerd_font_module = {
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
fonts.fontconfig.enable = true;
|
fonts.fontconfig.enable = true;
|
||||||
home.packages = [
|
home.packages = [
|
||||||
# list of fonts are available at https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/data/fonts/nerdfonts/shas.nix
|
# list of fonts are available at https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/data/fonts/nerdfonts/shas.nix
|
||||||
(pkgs.nerdfonts.override { fonts = [ "Hack" ]; })
|
(pkgs.nerdfonts.override {fonts = ["Hack"];})
|
||||||
];
|
];
|
||||||
base.alacritty.font.family = "Hack Nerd Font Mono";
|
base.alacritty.font.family = "Hack Nerd Font Mono";
|
||||||
};
|
};
|
||||||
in
|
in {
|
||||||
{
|
|
||||||
debug = {
|
debug = {
|
||||||
inherit overlays pkgs base;
|
inherit overlays pkgs base;
|
||||||
};
|
};
|
||||||
homeConfigurations =
|
homeConfigurations = let
|
||||||
let
|
x11_wsl = ''
|
||||||
x11_wsl = ''
|
# x11 output for WSL
|
||||||
# x11 output for WSL
|
export DISPLAY=$(ip route list default | awk '{print $3}'):0
|
||||||
export DISPLAY=$(ip route list default | awk '{print $3}'):0
|
export LIBGL_ALWAYS_INDIRECT=1
|
||||||
export LIBGL_ALWAYS_INDIRECT=1
|
'';
|
||||||
'';
|
in {
|
||||||
in
|
"hungtr" = home-manager.lib.homeManagerConfiguration {
|
||||||
{
|
inherit pkgs;
|
||||||
"hungtr" = home-manager.lib.homeManagerConfiguration {
|
modules =
|
||||||
inherit pkgs;
|
base.modules
|
||||||
modules = base.modules ++ [
|
++ [
|
||||||
./home.nix
|
./home.nix
|
||||||
];
|
];
|
||||||
# optionally pass inarguments to module
|
# optionally pass inarguments to module
|
||||||
# we migrate this from in-place modules to allow flexibility
|
# we migrate this from in-place modules to allow flexibility
|
||||||
# in this case, we can add "home" to input arglist of home.nix
|
# in this case, we can add "home" to input arglist of home.nix
|
||||||
extraSpecialArgs = mkModuleArgs {
|
extraSpecialArgs = mkModuleArgs {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
myHome = {
|
myHome = {
|
||||||
username = "hungtr";
|
username = "hungtr";
|
||||||
homeDirectory = "/home/hungtr";
|
homeDirectory = "/home/hungtr";
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
"hungtr@bao" = home-manager.lib.homeManagerConfiguration {
|
};
|
||||||
inherit pkgs;
|
"hungtr@bao" = home-manager.lib.homeManagerConfiguration {
|
||||||
modules = base.modules ++ [
|
inherit pkgs;
|
||||||
|
modules =
|
||||||
|
base.modules
|
||||||
|
++ [
|
||||||
./home.nix
|
./home.nix
|
||||||
nerd_font_module
|
nerd_font_module
|
||||||
./base/productive_desktop.nix
|
./base/productive_desktop.nix
|
||||||
|
@ -131,21 +137,23 @@
|
||||||
base.graphics.useNixGL.enable = true;
|
base.graphics.useNixGL.enable = true;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
# optionally pass inarguments to module
|
# optionally pass inarguments to module
|
||||||
# we migrate this from in-place modules to allow flexibility
|
# we migrate this from in-place modules to allow flexibility
|
||||||
# in this case, we can add "home" to input arglist of home.nix
|
# in this case, we can add "home" to input arglist of home.nix
|
||||||
extraSpecialArgs = mkModuleArgs {
|
extraSpecialArgs = mkModuleArgs {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
myHome = {
|
myHome = {
|
||||||
username = "hungtr";
|
username = "hungtr";
|
||||||
homeDirectory = "/home/hungtr";
|
homeDirectory = "/home/hungtr";
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
# Personal darwin, effectively serves as the Darwin edge channel
|
};
|
||||||
"hungtran" = home-manager.lib.homeManagerConfiguration {
|
# Personal darwin, effectively serves as the Darwin edge channel
|
||||||
inherit pkgs;
|
"hungtran" = home-manager.lib.homeManagerConfiguration {
|
||||||
modules = base.modules ++ [
|
inherit pkgs;
|
||||||
|
modules =
|
||||||
|
base.modules
|
||||||
|
++ [
|
||||||
./home.nix
|
./home.nix
|
||||||
{
|
{
|
||||||
base.graphics.enable = false;
|
base.graphics.enable = false;
|
||||||
|
@ -166,18 +174,20 @@
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
extraSpecialArgs = mkModuleArgs {
|
extraSpecialArgs = mkModuleArgs {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
myHome = {
|
myHome = {
|
||||||
username = "hungtran";
|
username = "hungtran";
|
||||||
homeDirectory = "/Users/hungtran";
|
homeDirectory = "/Users/hungtran";
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
# Work darwin
|
};
|
||||||
"htran" = home-manager.lib.homeManagerConfiguration {
|
# Work darwin
|
||||||
inherit pkgs;
|
"htran" = home-manager.lib.homeManagerConfiguration {
|
||||||
modules = base.modules ++ [
|
inherit pkgs;
|
||||||
|
modules =
|
||||||
|
base.modules
|
||||||
|
++ [
|
||||||
./home.nix
|
./home.nix
|
||||||
./base/productive_desktop.nix
|
./base/productive_desktop.nix
|
||||||
./base/darwin-spotlight.nix
|
./base/darwin-spotlight.nix
|
||||||
|
@ -198,42 +208,46 @@
|
||||||
pkgs.postman
|
pkgs.postman
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
{ base.keepass.enable = pkgs.lib.mkForce false; }
|
{base.keepass.enable = pkgs.lib.mkForce false;}
|
||||||
];
|
];
|
||||||
extraSpecialArgs = mkModuleArgs {
|
extraSpecialArgs = mkModuleArgs {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
myHome = {
|
myHome = {
|
||||||
username = "htran";
|
username = "htran";
|
||||||
homeDirectory = "/Users/htran";
|
homeDirectory = "/Users/htran";
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
"nixos@Felia" = home-manager.lib.homeManagerConfiguration {
|
};
|
||||||
inherit pkgs;
|
"nixos@Felia" = home-manager.lib.homeManagerConfiguration {
|
||||||
modules = [
|
inherit pkgs;
|
||||||
./home.nix
|
modules = [
|
||||||
{
|
./home.nix
|
||||||
base.shells = {
|
{
|
||||||
shellInitExtra = ''
|
base.shells = {
|
||||||
'' + x11_wsl;
|
shellInitExtra =
|
||||||
};
|
''
|
||||||
}
|
''
|
||||||
];
|
+ x11_wsl;
|
||||||
# optionally pass inarguments to module
|
|
||||||
# we migrate this from in-place modules to allow flexibility
|
|
||||||
# in this case, we can add "home" to input arglist of home.nix
|
|
||||||
extraSpecialArgs = mkModuleArgs {
|
|
||||||
inherit pkgs;
|
|
||||||
myHome = {
|
|
||||||
username = "nixos";
|
|
||||||
homeDirectory = "/home/nixos";
|
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
# optionally pass inarguments to module
|
||||||
|
# we migrate this from in-place modules to allow flexibility
|
||||||
|
# in this case, we can add "home" to input arglist of home.nix
|
||||||
|
extraSpecialArgs = mkModuleArgs {
|
||||||
|
inherit pkgs;
|
||||||
|
myHome = {
|
||||||
|
username = "nixos";
|
||||||
|
homeDirectory = "/home/nixos";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
# Personal laptop
|
};
|
||||||
hwtr = home-manager.lib.homeManagerConfiguration {
|
# Personal laptop
|
||||||
inherit pkgs;
|
hwtr = home-manager.lib.homeManagerConfiguration {
|
||||||
modules = base.modules ++ [
|
inherit pkgs;
|
||||||
|
modules =
|
||||||
|
base.modules
|
||||||
|
++ [
|
||||||
./home.nix
|
./home.nix
|
||||||
./base/graphics.nix
|
./base/graphics.nix
|
||||||
{
|
{
|
||||||
|
@ -244,17 +258,17 @@
|
||||||
./base/productive_desktop.nix
|
./base/productive_desktop.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
extraSpecialArgs = mkModuleArgs {
|
extraSpecialArgs = mkModuleArgs {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
myHome = {
|
myHome = {
|
||||||
username = "hwtr";
|
username = "hwtr";
|
||||||
homeDirectory = "/home/hwtr";
|
homeDirectory = "/home/hwtr";
|
||||||
packages = [
|
packages = [
|
||||||
pkgs.postman
|
pkgs.postman
|
||||||
];
|
];
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,18 +3,17 @@
|
||||||
# This file represents the base settings for each machine
|
# This file represents the base settings for each machine
|
||||||
# Additional configurations goes to profiles/<user>
|
# Additional configurations goes to profiles/<user>
|
||||||
# or inlined in flake.nix
|
# or inlined in flake.nix
|
||||||
{ config # Represents the realized final configuration
|
|
||||||
, pkgs # This is by default just ``= import <nixpkgs>{}`
|
|
||||||
, myHome
|
|
||||||
, myLib
|
|
||||||
, option # The options we're given, this might be useful for typesafety?
|
|
||||||
, proj_root
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (myLib) fromYaml;
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
|
config, # Represents the realized final configuration
|
||||||
|
pkgs, # This is by default just ``= import <nixpkgs>{}`
|
||||||
|
myHome,
|
||||||
|
myLib,
|
||||||
|
option, # The options we're given, this might be useful for typesafety?
|
||||||
|
proj_root,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (myLib) fromYaml;
|
||||||
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./base/neovim.nix
|
./base/neovim.nix
|
||||||
./base/keepass.nix
|
./base/keepass.nix
|
||||||
|
@ -24,31 +23,38 @@ in
|
||||||
homeDirectory = myHome.homeDirectory;
|
homeDirectory = myHome.homeDirectory;
|
||||||
stateVersion = myHome.stateVersion or "22.05";
|
stateVersion = myHome.stateVersion or "22.05";
|
||||||
};
|
};
|
||||||
home.packages = pkgs.lib.unique ([
|
home.packages = pkgs.lib.unique (
|
||||||
# pkgs.ncdu
|
[
|
||||||
pkgs.rclone # cloud file operations
|
# pkgs.ncdu
|
||||||
pkgs.htop # system diagnostics in CLI
|
pkgs.rclone # cloud file operations
|
||||||
pkgs.ripgrep # content fuzzy search
|
pkgs.htop # system diagnostics in CLI
|
||||||
pkgs.unzip # compression
|
pkgs.ripgrep # content fuzzy search
|
||||||
pkgs.zip # compression
|
pkgs.unzip # compression
|
||||||
|
pkgs.zip # compression
|
||||||
|
|
||||||
# cool utilities
|
# cool utilities
|
||||||
pkgs.yq-go # Yaml adaptor for jq (only pretty print, little query)
|
pkgs.yq-go # Yaml adaptor for jq (only pretty print, little query)
|
||||||
# pkgs.xorg.xclock # TODO: only include if have gui # For testing GL installation
|
# pkgs.xorg.xclock # TODO: only include if have gui # For testing GL installation
|
||||||
# pkgs.logseq # TODO: only include if have GL # Obsidian alt
|
# pkgs.logseq # TODO: only include if have GL # Obsidian alt
|
||||||
pkgs.mosh # Parsec for SSH
|
pkgs.mosh # Parsec for SSH
|
||||||
# pkgs.nixops_unstable # nixops v2 # insecure for now
|
# pkgs.nixops_unstable # nixops v2 # insecure for now
|
||||||
pkgs.lynx # Web browser at your local terminal
|
pkgs.lynx # Web browser at your local terminal
|
||||||
pkgs.zk
|
pkgs.zk
|
||||||
|
|
||||||
# pkgs.tailscale # VPC;; This should be installed in system-nix
|
# pkgs.tailscale # VPC;; This should be installed in system-nix
|
||||||
pkgs.python310 # dev packages should be in project
|
pkgs.python310 # dev packages should be in project
|
||||||
# pkgs.python310.numpy
|
# pkgs.python310.numpy
|
||||||
# pkgs.python310Packages.tensorflow
|
# pkgs.python310Packages.tensorflow
|
||||||
# pkgs.python310Packages.scikit-learn
|
# pkgs.python310Packages.scikit-learn
|
||||||
] ++ (myHome.packages or [ ]) ++ (if pkgs.system == "x86_64-linux" then [
|
]
|
||||||
pkgs.logseq
|
++ (myHome.packages or [])
|
||||||
] else [ ])
|
++ (
|
||||||
|
if pkgs.system == "x86_64-linux"
|
||||||
|
then [
|
||||||
|
pkgs.logseq
|
||||||
|
]
|
||||||
|
else []
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
## Configs ##
|
## Configs ##
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
flake_input@{ kpcli-py
|
flake_input @ {
|
||||||
, nixgl
|
kpcli-py,
|
||||||
, rust-overlay
|
nixgl,
|
||||||
, neovim-nightly-overlay
|
rust-overlay,
|
||||||
, system
|
neovim-nightly-overlay,
|
||||||
, nix-boost
|
system,
|
||||||
, nixpkgs-latest
|
nix-boost,
|
||||||
, ...
|
nixpkgs-latest,
|
||||||
}:
|
...
|
||||||
let
|
}: let
|
||||||
kpcli-py = (final: prev: {
|
kpcli-py = final: prev: {
|
||||||
# use python3.9, which works because of cython somehow?
|
# use python3.9, which works because of cython somehow?
|
||||||
kpcli-py = final.poetry2nix.mkPoetryApplication {
|
kpcli-py = final.poetry2nix.mkPoetryApplication {
|
||||||
projectDir = flake_input.kpcli-py;
|
projectDir = flake_input.kpcli-py;
|
||||||
|
@ -16,12 +16,12 @@ let
|
||||||
# tableformatter requires setuptools
|
# tableformatter requires setuptools
|
||||||
tableformatter = super.tableformatter.overridePythonAttrs (
|
tableformatter = super.tableformatter.overridePythonAttrs (
|
||||||
old: {
|
old: {
|
||||||
buildInputs = (old.buildInputs or [ ]) ++ [ self.setuptools self.cython_3 ];
|
buildInputs = (old.buildInputs or []) ++ [self.setuptools self.cython_3];
|
||||||
src = old.src;
|
src = old.src;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
kpcli = super.kpcli.overridePythonAttrs (old: {
|
kpcli = super.kpcli.overridePythonAttrs (old: {
|
||||||
buildInputs = (old.buildInputs or [ ]) ++ [ self.setuptools ];
|
buildInputs = (old.buildInputs or []) ++ [self.setuptools];
|
||||||
});
|
});
|
||||||
|
|
||||||
# ubersmith = super.ubersmith.overridePythonAttrs (old: {
|
# ubersmith = super.ubersmith.overridePythonAttrs (old: {
|
||||||
|
@ -37,34 +37,30 @@ let
|
||||||
# sha256 = "sha256-Dystt7CBtjpLkgzCsAif8WkkYYeLyh7VMehAtwoDGuM=";
|
# sha256 = "sha256-Dystt7CBtjpLkgzCsAif8WkkYYeLyh7VMehAtwoDGuM=";
|
||||||
# };
|
# };
|
||||||
# });
|
# });
|
||||||
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
});
|
};
|
||||||
|
|
||||||
rust = (final: prev:
|
rust = final: prev: let
|
||||||
let
|
nightlyRustWithExts = exts:
|
||||||
nightlyRustWithExts = exts: final.rust-bin.selectLatestNightlyWith (
|
final.rust-bin.selectLatestNightlyWith (
|
||||||
toolchain: (toolchain.minimal.override {
|
toolchain: (toolchain.minimal.override {
|
||||||
extensions = exts;
|
extensions = exts;
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
# https://rust-lang.github.io/rustup/concepts/profiles.html
|
# https://rust-lang.github.io/rustup/concepts/profiles.html
|
||||||
rust-default-components = [ "rust-docs" "rustfmt" "clippy" ];
|
rust-default-components = ["rust-docs" "rustfmt" "clippy"];
|
||||||
rust-dev-components = rust-default-components ++ [ "rust-src" "rust-analyzer" "miri" ];
|
rust-dev-components = rust-default-components ++ ["rust-src" "rust-analyzer" "miri"];
|
||||||
in
|
in {
|
||||||
{
|
rust4devs = nightlyRustWithExts rust-dev-components;
|
||||||
rust4devs = nightlyRustWithExts rust-dev-components;
|
rust4cargo = nightlyRustWithExts [];
|
||||||
rust4cargo = nightlyRustWithExts [ ];
|
rust4normi = nightlyRustWithExts rust-default-components;
|
||||||
rust4normi = nightlyRustWithExts rust-default-components;
|
};
|
||||||
});
|
|
||||||
|
|
||||||
|
vimPlugins = final: prev: {
|
||||||
vimPlugins = (final: prev: {
|
|
||||||
inherit (nixpkgs-latest.legacyPackages.${system}) vimPlugins;
|
inherit (nixpkgs-latest.legacyPackages.${system}) vimPlugins;
|
||||||
});
|
};
|
||||||
in
|
in [
|
||||||
[
|
|
||||||
nix-boost.overlays.default
|
nix-boost.overlays.default
|
||||||
nixgl.overlays.default
|
nixgl.overlays.default
|
||||||
rust-overlay.overlays.default
|
rust-overlay.overlays.default
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
# main module exporter for different configuration profiles
|
# main module exporter for different configuration profiles
|
||||||
{ pkgs, libs, ... } @ inputs:
|
|
||||||
{
|
{
|
||||||
|
pkgs,
|
||||||
|
libs,
|
||||||
|
...
|
||||||
|
} @ inputs: {
|
||||||
hwtr = import ./hwtr.nix;
|
hwtr = import ./hwtr.nix;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
{ pkgs
|
{
|
||||||
, lib ? pkgs.lib
|
pkgs,
|
||||||
, ...
|
lib ? pkgs.lib,
|
||||||
}@flake_import:
|
...
|
||||||
let
|
} @ flake_import: let
|
||||||
serde = import ./serde { inherit pkgs lib; };
|
serde = import ./serde {inherit pkgs lib;};
|
||||||
recursiveUpdate = lib.recursiveUpdate;
|
recursiveUpdate = lib.recursiveUpdate;
|
||||||
in
|
in
|
||||||
recursiveUpdate (recursiveUpdate pkgs.lib lib) {
|
recursiveUpdate (recursiveUpdate pkgs.lib lib) {
|
||||||
fromYaml = serde.fromYaml;
|
fromYaml = serde.fromYaml;
|
||||||
fromYamlPath = serde.fromYamlPath;
|
fromYamlPath = serde.fromYamlPath;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,31 +1,38 @@
|
||||||
# Takes care of serializing and deserializing to some formats
|
# Takes care of serializing and deserializing to some formats
|
||||||
# Blame: Pegasust<pegasucksgg@gmail.com>
|
# Blame: Pegasust<pegasucksgg@gmail.com>
|
||||||
# TODO: Add to* formats from pkgs.formats.*
|
# TODO: Add to* formats from pkgs.formats.*
|
||||||
{ pkgs
|
{
|
||||||
, lib
|
pkgs,
|
||||||
} @ inputs:
|
lib,
|
||||||
let
|
} @ inputs: let
|
||||||
yamlToJsonDrv = yamlContent: outputPath: pkgs.callPackage
|
yamlToJsonDrv = yamlContent: outputPath:
|
||||||
({ runCommand }:
|
pkgs.callPackage
|
||||||
|
({runCommand}:
|
||||||
# runCommand source: https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/trivial-builders.nix#L33
|
# runCommand source: https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/trivial-builders.nix#L33
|
||||||
runCommand outputPath { inherit yamlContent; nativeBuildInputs = [ pkgs.yq ]; }
|
runCommand outputPath {
|
||||||
|
inherit yamlContent;
|
||||||
|
nativeBuildInputs = [pkgs.yq];
|
||||||
|
}
|
||||||
# run yq which outputs '.' (no filter) on file at yamlPath
|
# run yq which outputs '.' (no filter) on file at yamlPath
|
||||||
# note that $out is passed onto the bash/sh script for execution
|
# note that $out is passed onto the bash/sh script for execution
|
||||||
''
|
''
|
||||||
echo "$yamlContent" | yq >$out
|
echo "$yamlContent" | yq >$out
|
||||||
'')
|
'')
|
||||||
{ };
|
{};
|
||||||
in
|
in {
|
||||||
{
|
|
||||||
# Takes in a yaml string and produces a derivation with translated JSON at $outputPath
|
# Takes in a yaml string and produces a derivation with translated JSON at $outputPath
|
||||||
# similar to builtins.fromJSON, turns a YAML string to nix attrset
|
# similar to builtins.fromJSON, turns a YAML string to nix attrset
|
||||||
fromYaml = yamlContent: builtins.fromJSON (builtins.readFile (yamlToJsonDrv yamlContent "any_output.json"));
|
fromYaml = yamlContent: builtins.fromJSON (builtins.readFile (yamlToJsonDrv yamlContent "any_output.json"));
|
||||||
fromYamlPath = yamlPath: builtins.fromJSON (
|
fromYamlPath = yamlPath:
|
||||||
builtins.readFile (
|
builtins.fromJSON (
|
||||||
yamlToJsonDrv
|
builtins.readFile (
|
||||||
|
yamlToJsonDrv
|
||||||
(
|
(
|
||||||
builtins.readFile yamlPath)
|
builtins.readFile yamlPath
|
||||||
"any-output.json"));
|
)
|
||||||
|
"any-output.json"
|
||||||
|
)
|
||||||
|
);
|
||||||
fromTOML = builtins.fromTOML;
|
fromTOML = builtins.fromTOML;
|
||||||
fromJSON = builtins.fromJSON;
|
fromJSON = builtins.fromJSON;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
# This module aims to be merge (not inject/override) with top-level pkgs to provide
|
# This module aims to be merge (not inject/override) with top-level pkgs to provide
|
||||||
# personalized/custom packages
|
# personalized/custom packages
|
||||||
{ pkgs
|
{
|
||||||
, lib
|
pkgs,
|
||||||
, naersk # rust packages
|
lib,
|
||||||
, ...
|
naersk, # rust packages
|
||||||
}@pkgs_input: {
|
...
|
||||||
|
} @ pkgs_input: {
|
||||||
# dot-hwtr = import "./dot-hwtr" pkgs_input;
|
# dot-hwtr = import "./dot-hwtr" pkgs_input;
|
||||||
cargo-bacon = pkgs.rustPlatform.buildRustPackage rec {
|
cargo-bacon = pkgs.rustPlatform.buildRustPackage rec {
|
||||||
pname = "bacon";
|
pname = "bacon";
|
||||||
|
|
|
@ -4,10 +4,12 @@
|
||||||
rust-overlay.url = "github:oxalica/rust-overlay";
|
rust-overlay.url = "github:oxalica/rust-overlay";
|
||||||
naersk.url = "gihub:nix-community/naersk";
|
naersk.url = "gihub:nix-community/naersk";
|
||||||
};
|
};
|
||||||
outputs = { nixpkgs, rust-overlay, naersk }:
|
outputs = {
|
||||||
let
|
nixpkgs,
|
||||||
pkgs = import nixpkgs { overlays = [ rust-overlay.overlays.default ]; };
|
rust-overlay,
|
||||||
lib = pkgs.lib;
|
naersk,
|
||||||
in
|
}: let
|
||||||
(import ./default.nix { inherit pkgs lib naersk; });
|
pkgs = import nixpkgs {overlays = [rust-overlay.overlays.default];};
|
||||||
|
lib = pkgs.lib;
|
||||||
|
in (import ./default.nix {inherit pkgs lib naersk;});
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,8 @@ let
|
||||||
all = users // systems;
|
all = users // systems;
|
||||||
# stands for calculus
|
# stands for calculus
|
||||||
c_ = builtins;
|
c_ = builtins;
|
||||||
in
|
in {
|
||||||
{
|
"system/secrets/s3fs.age".publicKeys = c_.attrValues all;
|
||||||
"system/secrets/s3fs.age".publicKeys = c_.attrValues (all);
|
"system/secrets/s3fs.digital-garden.age".publicKeys = c_.attrValues all;
|
||||||
"system/secrets/s3fs.digital-garden.age".publicKeys = c_.attrValues (all);
|
"system/secrets/_nhitrl.age".publicKeys = c_.attrValues all;
|
||||||
"system/secrets/_nhitrl.age".publicKeys = c_.attrValues (all);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,61 +1,71 @@
|
||||||
{ lib, pkgs, config, modulesPath, specialArgs, ... }:
|
{
|
||||||
let
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
modulesPath,
|
||||||
|
specialArgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
hostname = specialArgs.hostname;
|
hostname = specialArgs.hostname;
|
||||||
enableSSH = specialArgs.enableSSH or true;
|
enableSSH = specialArgs.enableSSH or true;
|
||||||
_networking = lib.recursiveUpdate { hostName = hostname; } (specialArgs._networking or { });
|
_networking = lib.recursiveUpdate {hostName = hostname;} (specialArgs._networking or {});
|
||||||
_boot = specialArgs._boot or { };
|
_boot = specialArgs._boot or {};
|
||||||
_services = specialArgs._services or { };
|
_services = specialArgs._services or {};
|
||||||
includeHardware = specialArgs.includeHardware or true;
|
includeHardware = specialArgs.includeHardware or true;
|
||||||
proj_root = builtins.toString ./../..;
|
proj_root = builtins.toString ./../..;
|
||||||
in
|
in
|
||||||
with lib;
|
with lib; {
|
||||||
{
|
imports =
|
||||||
imports = (if includeHardware then [
|
(
|
||||||
"${proj_root}/hosts/${hostname}/hardware-configuration.nix"
|
if includeHardware
|
||||||
] else [ ]) ++ [
|
then [
|
||||||
"${modulesPath}/profiles/minimal.nix"
|
"${proj_root}/hosts/${hostname}/hardware-configuration.nix"
|
||||||
"${proj_root}/modules/tailscale.sys.nix"
|
]
|
||||||
"${proj_root}/modules/mosh.sys.nix"
|
else []
|
||||||
];
|
)
|
||||||
boot = _boot;
|
++ [
|
||||||
|
"${modulesPath}/profiles/minimal.nix"
|
||||||
|
"${proj_root}/modules/tailscale.sys.nix"
|
||||||
|
"${proj_root}/modules/mosh.sys.nix"
|
||||||
|
];
|
||||||
|
boot = _boot;
|
||||||
|
|
||||||
# prune old builds
|
# prune old builds
|
||||||
nix.settings.auto-optimise-store = true;
|
nix.settings.auto-optimise-store = true;
|
||||||
|
|
||||||
# Enable nix flakes
|
# Enable nix flakes
|
||||||
nix.package = pkgs.nixFlakes;
|
nix.package = pkgs.nixFlakes;
|
||||||
nix.extraOptions = ''
|
nix.extraOptions = ''
|
||||||
experimental-features = nix-command flakes
|
experimental-features = nix-command flakes
|
||||||
'';
|
'';
|
||||||
users.users.hungtr = {
|
users.users.hungtr = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
home = "/home/hungtr";
|
home = "/home/hungtr";
|
||||||
description = "pegasust/hungtr";
|
description = "pegasust/hungtr";
|
||||||
extraGroups = [ "wheel" "networkmanager" "audio" ];
|
extraGroups = ["wheel" "networkmanager" "audio"];
|
||||||
};
|
};
|
||||||
users.users.root = {
|
users.users.root = {
|
||||||
# openssh runs in root, no? This is because port < 1024 requires root.
|
# openssh runs in root, no? This is because port < 1024 requires root.
|
||||||
openssh.authorizedKeys.keys = lib.strings.splitString "\n" (builtins.readFile "${proj_root}/native_configs/ssh/authorized_keys");
|
openssh.authorizedKeys.keys = lib.strings.splitString "\n" (builtins.readFile "${proj_root}/native_configs/ssh/authorized_keys");
|
||||||
};
|
};
|
||||||
|
|
||||||
# Some basic programs
|
# Some basic programs
|
||||||
programs.neovim = {
|
programs.neovim = {
|
||||||
enable = true;
|
enable = true;
|
||||||
defaultEditor = true;
|
defaultEditor = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# more information should be configured under user level
|
# more information should be configured under user level
|
||||||
# See other config at @/home-nix
|
# See other config at @/home-nix
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = [
|
|
||||||
pkgs.gnumake
|
|
||||||
pkgs.wget
|
|
||||||
pkgs.inetutils # network diag
|
|
||||||
pkgs.mtr # network diag
|
|
||||||
pkgs.sysstat # sys diag
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.gnumake
|
||||||
|
pkgs.wget
|
||||||
|
pkgs.inetutils # network diag
|
||||||
|
pkgs.mtr # network diag
|
||||||
|
pkgs.sysstat # sys diag
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
|
@ -7,208 +7,227 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, agenix, ... }:
|
outputs = {
|
||||||
let
|
self,
|
||||||
lib = nixpkgs.lib;
|
nixpkgs,
|
||||||
proj_root = ./../..;
|
agenix,
|
||||||
# TODO: Change respectively to the system or make a nix shell to alias `nix run github:ryantm/agenix -- `
|
...
|
||||||
base_modules = [
|
}: let
|
||||||
agenix.nixosModule
|
lib = nixpkgs.lib;
|
||||||
{
|
proj_root = ./../..;
|
||||||
age.secrets.s3fs = {
|
# TODO: Change respectively to the system or make a nix shell to alias `nix run github:ryantm/agenix -- `
|
||||||
file = ../../secrets/s3fs.age;
|
base_modules = [
|
||||||
# mode = "600"; # owner + group only
|
agenix.nixosModule
|
||||||
# owner = "hungtr";
|
{
|
||||||
# group = "users";
|
age.secrets.s3fs = {
|
||||||
};
|
file = ../../secrets/s3fs.age;
|
||||||
age.secrets."s3fs.digital-garden" = {
|
# mode = "600"; # owner + group only
|
||||||
file = ../../secrets/s3fs.digital-garden.age;
|
# owner = "hungtr";
|
||||||
};
|
# group = "users";
|
||||||
age.secrets._nhitrl_cred = {
|
};
|
||||||
file = ../../secrets/_nhitrl.age;
|
age.secrets."s3fs.digital-garden" = {
|
||||||
};
|
file = ../../secrets/s3fs.digital-garden.age;
|
||||||
environment.systemPackages = [ agenix.defaultPackage.x86_64-linux ];
|
};
|
||||||
}
|
age.secrets._nhitrl_cred = {
|
||||||
];
|
file = ../../secrets/_nhitrl.age;
|
||||||
in
|
};
|
||||||
{
|
environment.systemPackages = [agenix.defaultPackage.x86_64-linux];
|
||||||
# Windows with NixOS WSL
|
}
|
||||||
nixosConfigurations.Felia = nixpkgs.lib.nixosSystem {
|
];
|
||||||
system = "x86_64-linux";
|
in {
|
||||||
modules = base_modules ++ [
|
# Windows with NixOS WSL
|
||||||
|
nixosConfigurations.Felia = nixpkgs.lib.nixosSystem {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
modules =
|
||||||
|
base_modules
|
||||||
|
++ [
|
||||||
./wsl-configuration.nix
|
./wsl-configuration.nix
|
||||||
{
|
{
|
||||||
system.stateVersion = "22.05";
|
system.stateVersion = "22.05";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
# includeHardware = false;
|
# includeHardware = false;
|
||||||
hostname = "Felia";
|
hostname = "Felia";
|
||||||
_services.openssh = {
|
_services.openssh = {
|
||||||
permitRootLogin = "no";
|
permitRootLogin = "no";
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
nixosConfigurations.lizzi = nixpkgs.lib.nixosSystem {
|
};
|
||||||
system = "x86_64-linux";
|
nixosConfigurations.lizzi = nixpkgs.lib.nixosSystem {
|
||||||
modules = base_modules ++ [
|
system = "x86_64-linux";
|
||||||
|
modules =
|
||||||
|
base_modules
|
||||||
|
++ [
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
{
|
{
|
||||||
system.stateVersion = "22.05";
|
system.stateVersion = "22.05";
|
||||||
mod.tailscale.enable = true;
|
mod.tailscale.enable = true;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
hostname = "lizzi";
|
hostname = "lizzi";
|
||||||
_networking = {
|
_networking = {
|
||||||
interfaces.eth1.ipv4.addresses = [{
|
interfaces.eth1.ipv4.addresses = [
|
||||||
|
{
|
||||||
address = "71.0.0.1";
|
address = "71.0.0.1";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
}];
|
}
|
||||||
firewall = {
|
];
|
||||||
enable = true;
|
firewall = {
|
||||||
allowedTCPPorts = [ 80 443 22 ];
|
|
||||||
};
|
|
||||||
useDHCP = false;
|
|
||||||
# required so that we get IP address from linode
|
|
||||||
interfaces.eth0.useDHCP = true;
|
|
||||||
};
|
|
||||||
_boot.loader.grub.enable = true;
|
|
||||||
_boot.loader.grub.version = 2;
|
|
||||||
_services.openssh = {
|
|
||||||
permitRootLogin = "no";
|
|
||||||
enable = true;
|
enable = true;
|
||||||
|
allowedTCPPorts = [80 443 22];
|
||||||
};
|
};
|
||||||
_services.gitea = {
|
useDHCP = false;
|
||||||
enable = true;
|
# required so that we get IP address from linode
|
||||||
stateDir = "/gitea";
|
interfaces.eth0.useDHCP = true;
|
||||||
rootUrl = "https://git.pegasust.com";
|
};
|
||||||
settings = {
|
_boot.loader.grub.enable = true;
|
||||||
repository = {
|
_boot.loader.grub.version = 2;
|
||||||
"ENABLE_PUSH_CREATE_USER" = true;
|
_services.openssh = {
|
||||||
"ENABLE_PUSH_CREATE_ORG" = true;
|
permitRootLogin = "no";
|
||||||
};
|
enable = true;
|
||||||
};
|
};
|
||||||
};
|
_services.gitea = {
|
||||||
# Highly suspect that thanks to nginx, ipv6 is disabled?
|
enable = true;
|
||||||
_services.nginx = {
|
stateDir = "/gitea";
|
||||||
enable = true;
|
rootUrl = "https://git.pegasust.com";
|
||||||
clientMaxBodySize = "100m"; # Allow big file transfers over git :^)
|
settings = {
|
||||||
recommendedGzipSettings = true;
|
repository = {
|
||||||
recommendedOptimisation = true;
|
"ENABLE_PUSH_CREATE_USER" = true;
|
||||||
recommendedProxySettings = true;
|
"ENABLE_PUSH_CREATE_ORG" = true;
|
||||||
recommendedTlsSettings = true;
|
|
||||||
virtualHosts."git.pegasust.com" = {
|
|
||||||
# Gitea hostname
|
|
||||||
sslCertificate = "/var/lib/acme/git.pegasust.com/fullchain.pem";
|
|
||||||
sslCertificateKey = "/var/lib/acme/git.pegasust.com/key.pem";
|
|
||||||
forceSSL = true; # Runs on port 80 and 443
|
|
||||||
locations."/".proxyPass = "http://localhost:3000/"; # Proxy to Gitea
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
# Highly suspect that thanks to nginx, ipv6 is disabled?
|
||||||
|
_services.nginx = {
|
||||||
|
enable = true;
|
||||||
|
clientMaxBodySize = "100m"; # Allow big file transfers over git :^)
|
||||||
|
recommendedGzipSettings = true;
|
||||||
|
recommendedOptimisation = true;
|
||||||
|
recommendedProxySettings = true;
|
||||||
|
recommendedTlsSettings = true;
|
||||||
|
virtualHosts."git.pegasust.com" = {
|
||||||
|
# Gitea hostname
|
||||||
|
sslCertificate = "/var/lib/acme/git.pegasust.com/fullchain.pem";
|
||||||
|
sslCertificateKey = "/var/lib/acme/git.pegasust.com/key.pem";
|
||||||
|
forceSSL = true; # Runs on port 80 and 443
|
||||||
|
locations."/".proxyPass = "http://localhost:3000/"; # Proxy to Gitea
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
# Generic machine
|
};
|
||||||
nixosConfigurations.pixi = nixpkgs.lib.nixosSystem {
|
# Generic machine
|
||||||
system = "x86_64-linux";
|
nixosConfigurations.pixi = nixpkgs.lib.nixosSystem {
|
||||||
modules = base_modules ++ [
|
system = "x86_64-linux";
|
||||||
|
modules =
|
||||||
|
base_modules
|
||||||
|
++ [
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
{
|
{
|
||||||
system.stateVersion = "22.05";
|
system.stateVersion = "22.05";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
hostname = "pixi";
|
hostname = "pixi";
|
||||||
_networking = {
|
_networking = {
|
||||||
# interfaces.eth1.ipv4.addresses = [{
|
# interfaces.eth1.ipv4.addresses = [{
|
||||||
# address = "71.0.0.1";
|
# address = "71.0.0.1";
|
||||||
# prefixLength = 24;
|
# prefixLength = 24;
|
||||||
# }];
|
# }];
|
||||||
firewall = {
|
firewall = {
|
||||||
enable = false;
|
enable = false;
|
||||||
allowedTCPPorts = [ 80 443 22 ];
|
allowedTCPPorts = [80 443 22];
|
||||||
};
|
|
||||||
useDHCP = false;
|
|
||||||
# interfaces.eth0.useDHCP = true;
|
|
||||||
};
|
};
|
||||||
_boot.loader.grub.enable = true;
|
useDHCP = false;
|
||||||
_boot.loader.grub.version = 2;
|
# interfaces.eth0.useDHCP = true;
|
||||||
_services.openssh = {
|
};
|
||||||
permitRootLogin = "no";
|
_boot.loader.grub.enable = true;
|
||||||
enable = true;
|
_boot.loader.grub.version = 2;
|
||||||
};
|
_services.openssh = {
|
||||||
_services.gitea = {
|
permitRootLogin = "no";
|
||||||
enable = true;
|
enable = true;
|
||||||
stateDir = "/gitea";
|
};
|
||||||
rootUrl = "https://git.pegasust.com";
|
_services.gitea = {
|
||||||
settings = {
|
enable = true;
|
||||||
repository = {
|
stateDir = "/gitea";
|
||||||
"ENABLE_PUSH_CREATE_USER" = true;
|
rootUrl = "https://git.pegasust.com";
|
||||||
"ENABLE_PUSH_CREATE_ORG" = true;
|
settings = {
|
||||||
};
|
repository = {
|
||||||
};
|
"ENABLE_PUSH_CREATE_USER" = true;
|
||||||
};
|
"ENABLE_PUSH_CREATE_ORG" = true;
|
||||||
_services.nginx = {
|
|
||||||
enable = true;
|
|
||||||
clientMaxBodySize = "100m"; # Allow big file transfers over git :^)
|
|
||||||
recommendedGzipSettings = true;
|
|
||||||
recommendedOptimisation = true;
|
|
||||||
recommendedProxySettings = true;
|
|
||||||
recommendedTlsSettings = true;
|
|
||||||
virtualHosts."git.pegasust.com" = {
|
|
||||||
# Gitea hostname
|
|
||||||
sslCertificate = "/var/lib/acme/git.pegasust.com/fullchain.pem";
|
|
||||||
sslCertificateKey = "/var/lib/acme/git.pegasust.com/key.pem";
|
|
||||||
forceSSL = true; # Runs on port 80 and 443
|
|
||||||
locations."/".proxyPass = "http://localhost:3000/"; # Proxy to Gitea
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
_services.nginx = {
|
||||||
|
enable = true;
|
||||||
|
clientMaxBodySize = "100m"; # Allow big file transfers over git :^)
|
||||||
|
recommendedGzipSettings = true;
|
||||||
|
recommendedOptimisation = true;
|
||||||
|
recommendedProxySettings = true;
|
||||||
|
recommendedTlsSettings = true;
|
||||||
|
virtualHosts."git.pegasust.com" = {
|
||||||
|
# Gitea hostname
|
||||||
|
sslCertificate = "/var/lib/acme/git.pegasust.com/fullchain.pem";
|
||||||
|
sslCertificateKey = "/var/lib/acme/git.pegasust.com/key.pem";
|
||||||
|
forceSSL = true; # Runs on port 80 and 443
|
||||||
|
locations."/".proxyPass = "http://localhost:3000/"; # Proxy to Gitea
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
nixosConfigurations.nyx = nixpkgs.lib.nixosSystem {
|
};
|
||||||
system = "x86_64-linux";
|
nixosConfigurations.nyx = nixpkgs.lib.nixosSystem {
|
||||||
modules = base_modules ++ [
|
system = "x86_64-linux";
|
||||||
|
modules =
|
||||||
|
base_modules
|
||||||
|
++ [
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
{
|
{
|
||||||
system.stateVersion = "22.05";
|
system.stateVersion = "22.05";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
hostname = "nyx";
|
hostname = "nyx";
|
||||||
_networking = {
|
_networking = {
|
||||||
enableIPv6 = false;
|
enableIPv6 = false;
|
||||||
interfaces.eth1.ipv4.addresses = [{
|
interfaces.eth1.ipv4.addresses = [
|
||||||
|
{
|
||||||
address = "71.0.0.2";
|
address = "71.0.0.2";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
}];
|
}
|
||||||
firewall.enable = true;
|
];
|
||||||
useDHCP = false;
|
firewall.enable = true;
|
||||||
interfaces.eth0.useDHCP = true;
|
useDHCP = false;
|
||||||
};
|
interfaces.eth0.useDHCP = true;
|
||||||
_boot.loader.grub.enable = true;
|
};
|
||||||
_boot.loader.grub.version = 2;
|
_boot.loader.grub.enable = true;
|
||||||
_services.openssh = {
|
_boot.loader.grub.version = 2;
|
||||||
permitRootLogin = "no";
|
_services.openssh = {
|
||||||
enable = true;
|
permitRootLogin = "no";
|
||||||
};
|
enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
|
};
|
||||||
system = "x86_64-linux";
|
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
|
||||||
modules = base_modules ++ [
|
system = "x86_64-linux";
|
||||||
|
modules =
|
||||||
|
base_modules
|
||||||
|
++ [
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
{
|
{
|
||||||
system.stateVersion = "22.05";
|
system.stateVersion = "22.05";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
hostname = "nixos";
|
hostname = "nixos";
|
||||||
};
|
|
||||||
};
|
};
|
||||||
nixosConfigurations.htran-dev = nixpkgs.lib.nixosSystem {
|
};
|
||||||
system = "x86_64-linux";
|
nixosConfigurations.htran-dev = nixpkgs.lib.nixosSystem {
|
||||||
modules = base_modules ++ [
|
system = "x86_64-linux";
|
||||||
|
modules =
|
||||||
|
base_modules
|
||||||
|
++ [
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
{
|
{
|
||||||
system.stateVersion = "22.11";
|
system.stateVersion = "22.11";
|
||||||
|
@ -218,29 +237,34 @@
|
||||||
# interface = "ens32";
|
# interface = "ens32";
|
||||||
};
|
};
|
||||||
networking.interfaces.ens32.ipv4.addresses = [
|
networking.interfaces.ens32.ipv4.addresses = [
|
||||||
{ address = "10.100.200.230"; prefixLength = 24; }
|
{
|
||||||
|
address = "10.100.200.230";
|
||||||
|
prefixLength = 24;
|
||||||
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
hostname = "htran-dev";
|
hostname = "htran-dev";
|
||||||
_networking = {
|
_networking = {
|
||||||
firewall.enable = true;
|
firewall.enable = true;
|
||||||
useDHCP = false;
|
useDHCP = false;
|
||||||
interfaces.eth0.useDHCP = true;
|
interfaces.eth0.useDHCP = true;
|
||||||
};
|
};
|
||||||
_boot.loader.grub.enable = true;
|
_boot.loader.grub.enable = true;
|
||||||
_boot.loader.grub.version = 2;
|
_boot.loader.grub.version = 2;
|
||||||
_services.openssh = {
|
_services.openssh = {
|
||||||
permitRootLogin = "no";
|
permitRootLogin = "no";
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
nixosConfigurations.bao = nixpkgs.lib.nixosSystem {
|
};
|
||||||
system = "x86_64-linux";
|
nixosConfigurations.bao = nixpkgs.lib.nixosSystem {
|
||||||
specialArgs.hostname = "bao";
|
system = "x86_64-linux";
|
||||||
modules = base_modules ++ [
|
specialArgs.hostname = "bao";
|
||||||
|
modules =
|
||||||
|
base_modules
|
||||||
|
++ [
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
./../../modules/storage.perso.sys.nix
|
./../../modules/storage.perso.sys.nix
|
||||||
./../../modules/kde.sys.nix
|
./../../modules/kde.sys.nix
|
||||||
|
@ -248,59 +272,63 @@
|
||||||
./../../modules/pulseaudio.sys.nix
|
./../../modules/pulseaudio.sys.nix
|
||||||
./../../modules/opengl.sys.nix
|
./../../modules/opengl.sys.nix
|
||||||
./../../modules/nvgpu.sys.nix
|
./../../modules/nvgpu.sys.nix
|
||||||
({ config, pkgs, lib, ... }:
|
({
|
||||||
{
|
config,
|
||||||
mod.tailscale.enable = true;
|
pkgs,
|
||||||
# Use UEFI
|
lib,
|
||||||
boot.loader.systemd-boot.enable = true;
|
...
|
||||||
|
}: {
|
||||||
|
mod.tailscale.enable = true;
|
||||||
|
# Use UEFI
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
|
||||||
networking.hostName = "bao"; # Define your hostname.
|
networking.hostName = "bao"; # Define your hostname.
|
||||||
# Pick only one of the below networking options.
|
# Pick only one of the below networking options.
|
||||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||||
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
|
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
|
||||||
|
|
||||||
time.timeZone = "America/Phoenix";
|
time.timeZone = "America/Phoenix";
|
||||||
# Configure keymap in X11
|
# Configure keymap in X11
|
||||||
services.xserver.layout = "us";
|
services.xserver.layout = "us";
|
||||||
# services.xserver.xkbOptions = {
|
# services.xserver.xkbOptions = {
|
||||||
# "eurosign:e";
|
# "eurosign:e";
|
||||||
# "caps:escape" # map caps to escape.
|
# "caps:escape" # map caps to escape.
|
||||||
# };
|
# };
|
||||||
|
|
||||||
# Enable CUPS to print documents.
|
# Enable CUPS to print documents.
|
||||||
# services.printing.enable = true;
|
# services.printing.enable = true;
|
||||||
|
|
||||||
# Enable touchpad support (enabled default in most desktopManager).
|
# Enable touchpad support (enabled default in most desktopManager).
|
||||||
# services.xserver.libinput.enable = true;
|
# services.xserver.libinput.enable = true;
|
||||||
# Just an initial user to get this started lol
|
# Just an initial user to get this started lol
|
||||||
users.users.user = {
|
users.users.user = {
|
||||||
initialPassword = "pw123";
|
initialPassword = "pw123";
|
||||||
extraGroups = [ "wheel" "networkmanager" "audio" ];
|
extraGroups = ["wheel" "networkmanager" "audio"];
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Some programs need SUID wrappers, can be configured further or are
|
# Some programs need SUID wrappers, can be configured further or are
|
||||||
# started in user sessions.
|
# started in user sessions.
|
||||||
# programs.mtr.enable = true;
|
# programs.mtr.enable = true;
|
||||||
# programs.gnupg.agent = {
|
# programs.gnupg.agent = {
|
||||||
# enable = true;
|
# enable = true;
|
||||||
# enableSSHSupport = true;
|
# enableSSHSupport = true;
|
||||||
# };
|
# };
|
||||||
|
|
||||||
# List services that you want to enable:
|
# List services that you want to enable:
|
||||||
|
|
||||||
# Enable the OpenSSH daemon.
|
# Enable the OpenSSH daemon.
|
||||||
services.openssh.enable = true;
|
services.openssh.enable = true;
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
# This value determines the NixOS release from which the default
|
||||||
# settings for stateful data, like file locations and database versions
|
# settings for stateful data, like file locations and database versions
|
||||||
# on your system were taken. It‘s perfectly fine and recommended to leave
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
# this value at the release version of the first install of this system.
|
# this value at the release version of the first install of this system.
|
||||||
# Before changing this value read the documentation for this option
|
# Before changing this value read the documentation for this option
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
system.stateVersion = "22.11"; # Did you read the comment?
|
system.stateVersion = "22.11"; # Did you read the comment?
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
config,
|
||||||
[
|
lib,
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
pkgs,
|
||||||
];
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
|
boot.initrd.availableKernelModules = ["virtio_pci" "virtio_scsi" "ahci" "sd_mod"];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelParams = [ "console=ttyS0,19200n8" ];
|
boot.kernelParams = ["console=ttyS0,19200n8"];
|
||||||
boot.loader.grub.extraConfig = ''
|
boot.loader.grub.extraConfig = ''
|
||||||
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
||||||
terminal_input serial;
|
terminal_input serial;
|
||||||
|
@ -20,17 +23,15 @@
|
||||||
boot.loader.grub.forceInstall = true;
|
boot.loader.grub.forceInstall = true;
|
||||||
boot.loader.grub.device = "nodev";
|
boot.loader.grub.device = "nodev";
|
||||||
boot.loader.timeout = 10;
|
boot.loader.timeout = 10;
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
device = "/dev/sda";
|
||||||
device = "/dev/sda";
|
fsType = "ext4";
|
||||||
fsType = "ext4";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices =
|
swapDevices = [{device = "/dev/sdb";}];
|
||||||
[{ device = "/dev/sdb"; }];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -3,11 +3,12 @@
|
||||||
let
|
let
|
||||||
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
||||||
in
|
in
|
||||||
fetchTarball {
|
fetchTarball {
|
||||||
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
|
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
|
||||||
sha256 = lock.nodes.flake-compat.locked.narHash;
|
sha256 = lock.nodes.flake-compat.locked.narHash;
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
src = ./.;
|
src = ./.;
|
||||||
}).defaultNix
|
})
|
||||||
|
.defaultNix
|
||||||
|
|
|
@ -11,9 +11,13 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, flake-utils, ... }:
|
outputs = {
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
flake-utils,
|
||||||
|
...
|
||||||
|
}:
|
||||||
{
|
{
|
||||||
|
|
||||||
nixosModules.wsl = {
|
nixosModules.wsl = {
|
||||||
imports = [
|
imports = [
|
||||||
./modules/build-tarball.nix
|
./modules/build-tarball.nix
|
||||||
|
@ -31,26 +35,25 @@
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
}
|
||||||
} //
|
// flake-utils.lib.eachSystem
|
||||||
flake-utils.lib.eachSystem
|
(with flake-utils.lib.system; ["x86_64-linux" "aarch64-linux"])
|
||||||
(with flake-utils.lib.system; [ "x86_64-linux" "aarch64-linux" ])
|
(
|
||||||
(system:
|
system: let
|
||||||
let
|
pkgs = import nixpkgs {inherit system;};
|
||||||
pkgs = import nixpkgs { inherit system; };
|
in {
|
||||||
in
|
checks.check-format =
|
||||||
{
|
pkgs.runCommand "check-format"
|
||||||
checks.check-format = pkgs.runCommand "check-format"
|
{
|
||||||
{
|
buildInputs = with pkgs; [nixpkgs-fmt];
|
||||||
buildInputs = with pkgs; [ nixpkgs-fmt ];
|
} ''
|
||||||
} ''
|
|
||||||
nixpkgs-fmt --check ${./.}
|
nixpkgs-fmt --check ${./.}
|
||||||
mkdir $out # success
|
mkdir $out # success
|
||||||
'';
|
'';
|
||||||
|
|
||||||
devShell = pkgs.mkShell {
|
devShell = pkgs.mkShell {
|
||||||
nativeBuildInputs = with pkgs; [ nixpkgs-fmt ];
|
nativeBuildInputs = with pkgs; [nixpkgs-fmt];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,22 @@
|
||||||
{ config, pkgs, lib, ... }:
|
{
|
||||||
with builtins; with lib;
|
config,
|
||||||
let
|
pkgs,
|
||||||
pkgs2storeContents = l: map (x: { object = x; symlink = "none"; }) l;
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with builtins; with lib; let
|
||||||
|
pkgs2storeContents = l:
|
||||||
|
map (x: {
|
||||||
|
object = x;
|
||||||
|
symlink = "none";
|
||||||
|
})
|
||||||
|
l;
|
||||||
|
|
||||||
nixpkgs = lib.cleanSource pkgs.path;
|
nixpkgs = lib.cleanSource pkgs.path;
|
||||||
|
|
||||||
channelSources = pkgs.runCommand "nixos-${config.system.nixos.version}"
|
channelSources =
|
||||||
{ preferLocalBuild = true; }
|
pkgs.runCommand "nixos-${config.system.nixos.version}"
|
||||||
|
{preferLocalBuild = true;}
|
||||||
''
|
''
|
||||||
mkdir -p $out
|
mkdir -p $out
|
||||||
cp -prd ${nixpkgs.outPath} $out/nixos
|
cp -prd ${nixpkgs.outPath} $out/nixos
|
||||||
|
@ -58,10 +68,7 @@ let
|
||||||
sed -i 's|import \./default\.nix|import \./nixos-wsl|' ./etc/nixos/configuration.nix
|
sed -i 's|import \./default\.nix|import \./nixos-wsl|' ./etc/nixos/configuration.nix
|
||||||
''}
|
''}
|
||||||
'';
|
'';
|
||||||
|
in {
|
||||||
in
|
|
||||||
{
|
|
||||||
|
|
||||||
options.wsl.tarball = {
|
options.wsl.tarball = {
|
||||||
includeConfig = mkOption {
|
includeConfig = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
|
@ -70,13 +77,12 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
config = mkIf config.wsl.enable {
|
config = mkIf config.wsl.enable {
|
||||||
# These options make no sense without the wsl-distro module anyway
|
# These options make no sense without the wsl-distro module anyway
|
||||||
|
|
||||||
system.build.tarball = pkgs.callPackage "${nixpkgs}/nixos/lib/make-system-tarball.nix" {
|
system.build.tarball = pkgs.callPackage "${nixpkgs}/nixos/lib/make-system-tarball.nix" {
|
||||||
# No contents, structure will be added by prepare script
|
# No contents, structure will be added by prepare script
|
||||||
contents = [ ];
|
contents = [];
|
||||||
|
|
||||||
fileName = "nixos-wsl-${pkgs.hostPlatform.system}";
|
fileName = "nixos-wsl-${pkgs.hostPlatform.system}";
|
||||||
|
|
||||||
|
@ -92,6 +98,5 @@ in
|
||||||
compressCommand = "gzip";
|
compressCommand = "gzip";
|
||||||
compressionExtension = ".gz";
|
compressionExtension = ".gz";
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,23 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
with builtins; with lib; {
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with builtins;
|
||||||
|
with lib; {
|
||||||
imports = [
|
imports = [
|
||||||
(mkRenamedOptionModule [ "wsl" "docker" ] [ "wsl" "docker-desktop" ])
|
(mkRenamedOptionModule ["wsl" "docker"] ["wsl" "docker-desktop"])
|
||||||
];
|
];
|
||||||
|
|
||||||
options.wsl.docker-desktop = with types; {
|
options.wsl.docker-desktop = with types; {
|
||||||
enable = mkEnableOption "Docker Desktop integration";
|
enable = mkEnableOption "Docker Desktop integration";
|
||||||
};
|
};
|
||||||
|
|
||||||
config =
|
config = let
|
||||||
let
|
cfg = config.wsl.docker-desktop;
|
||||||
cfg = config.wsl.docker-desktop;
|
in
|
||||||
in
|
|
||||||
mkIf (config.wsl.enable && cfg.enable) {
|
mkIf (config.wsl.enable && cfg.enable) {
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
docker
|
docker
|
||||||
docker-compose
|
docker-compose
|
||||||
|
@ -25,7 +28,7 @@ with builtins; with lib; {
|
||||||
script = ''
|
script = ''
|
||||||
${config.wsl.automountPath}/wsl/docker-desktop/docker-desktop-user-distro proxy --docker-desktop-root ${config.wsl.automountPath}/wsl/docker-desktop
|
${config.wsl.automountPath}/wsl/docker-desktop/docker-desktop-user-distro proxy --docker-desktop-root ${config.wsl.automountPath}/wsl/docker-desktop
|
||||||
'';
|
'';
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = ["multi-user.target"];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Restart = "on-failure";
|
Restart = "on-failure";
|
||||||
RestartSec = "30s";
|
RestartSec = "30s";
|
||||||
|
@ -35,7 +38,5 @@ with builtins; with lib; {
|
||||||
users.groups.docker.members = [
|
users.groups.docker.members = [
|
||||||
config.wsl.defaultUser
|
config.wsl.defaultUser
|
||||||
];
|
];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
with builtins; with lib; {
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with builtins;
|
||||||
|
with lib; {
|
||||||
options.wsl.docker-native = with types; {
|
options.wsl.docker-native = with types; {
|
||||||
enable = mkEnableOption "Native Docker integration in NixOS.";
|
enable = mkEnableOption "Native Docker integration in NixOS.";
|
||||||
|
|
||||||
|
@ -15,14 +20,13 @@ with builtins; with lib; {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config =
|
config = let
|
||||||
let
|
cfg = config.wsl.docker-native;
|
||||||
cfg = config.wsl.docker-native;
|
in
|
||||||
in
|
|
||||||
mkIf (config.wsl.enable && cfg.enable) {
|
mkIf (config.wsl.enable && cfg.enable) {
|
||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [
|
||||||
(self: super: {
|
(self: super: {
|
||||||
docker = super.docker.override { iptables = pkgs.iptables-legacy; };
|
docker = super.docker.override {iptables = pkgs.iptables-legacy;};
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,19 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
with builtins; with lib; {
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with builtins;
|
||||||
|
with lib; {
|
||||||
config = mkIf config.wsl.enable (
|
config = mkIf config.wsl.enable (
|
||||||
let
|
let
|
||||||
mkTarball = pkgs.callPackage "${lib.cleanSource pkgs.path}/nixos/lib/make-system-tarball.nix";
|
mkTarball = pkgs.callPackage "${lib.cleanSource pkgs.path}/nixos/lib/make-system-tarball.nix";
|
||||||
|
|
||||||
pkgs2storeContents = map (x: { object = x; symlink = "none"; });
|
pkgs2storeContents = map (x: {
|
||||||
|
object = x;
|
||||||
|
symlink = "none";
|
||||||
|
});
|
||||||
|
|
||||||
rootfs = let tarball = config.system.build.tarball; in "${tarball}/tarball/${tarball.fileName}.tar${tarball.extension}";
|
rootfs = let tarball = config.system.build.tarball; in "${tarball}/tarball/${tarball.fileName}.tar${tarball.extension}";
|
||||||
|
|
||||||
|
@ -39,25 +47,39 @@ with builtins; with lib; {
|
||||||
passwd = pkgs.writeText "passwd" ''
|
passwd = pkgs.writeText "passwd" ''
|
||||||
root:x:0:0:System administrator:/root:${installer}
|
root:x:0:0:System administrator:/root:${installer}
|
||||||
'';
|
'';
|
||||||
in
|
in {
|
||||||
{
|
|
||||||
|
|
||||||
system.build.installer = mkTarball {
|
system.build.installer = mkTarball {
|
||||||
fileName = "nixos-wsl-installer";
|
fileName = "nixos-wsl-installer";
|
||||||
compressCommand = "gzip";
|
compressCommand = "gzip";
|
||||||
compressionExtension = ".gz";
|
compressionExtension = ".gz";
|
||||||
extraArgs = "--hard-dereference";
|
extraArgs = "--hard-dereference";
|
||||||
|
|
||||||
storeContents = with pkgs; pkgs2storeContents [
|
storeContents = with pkgs;
|
||||||
installer
|
pkgs2storeContents [
|
||||||
];
|
installer
|
||||||
|
];
|
||||||
|
|
||||||
contents = [
|
contents = [
|
||||||
{ source = config.environment.etc."wsl.conf".source; target = "/etc/wsl.conf"; }
|
{
|
||||||
{ source = config.environment.etc."fstab".source; target = "/etc/fstab"; }
|
source = config.environment.etc."wsl.conf".source;
|
||||||
{ source = passwd; target = "/etc/passwd"; }
|
target = "/etc/wsl.conf";
|
||||||
{ source = "${pkgs.busybox}/bin/busybox"; target = "/bin/sh"; }
|
}
|
||||||
{ source = "${pkgs.busybox}/bin/busybox"; target = "/bin/mount"; }
|
{
|
||||||
|
source = config.environment.etc."fstab".source;
|
||||||
|
target = "/etc/fstab";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
source = passwd;
|
||||||
|
target = "/etc/passwd";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
source = "${pkgs.busybox}/bin/busybox";
|
||||||
|
target = "/bin/sh";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
source = "${pkgs.busybox}/bin/busybox";
|
||||||
|
target = "/bin/mount";
|
||||||
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
extraCommands = pkgs.writeShellScript "prepare" ''
|
extraCommands = pkgs.writeShellScript "prepare" ''
|
||||||
|
@ -66,8 +88,6 @@ with builtins; with lib; {
|
||||||
ln -s /init bin/wslpath
|
ln -s /init bin/wslpath
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
{ lib, pkgs, config, ... }:
|
|
||||||
|
|
||||||
with builtins; with lib;
|
|
||||||
{
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with builtins; with lib; {
|
||||||
imports = [
|
imports = [
|
||||||
(mkRenamedOptionModule [ "wsl" "compatibility" "interopPreserveArgvZero" ] [ "wsl" "interop" "preserveArgvZero" ])
|
(mkRenamedOptionModule ["wsl" "compatibility" "interopPreserveArgvZero"] ["wsl" "interop" "preserveArgvZero"])
|
||||||
];
|
];
|
||||||
|
|
||||||
options.wsl.interop = with types; {
|
options.wsl.interop = with types; {
|
||||||
|
@ -32,57 +35,56 @@ with builtins; with lib;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config =
|
config = let
|
||||||
let
|
cfg = config.wsl.interop;
|
||||||
cfg = config.wsl.interop;
|
in
|
||||||
in
|
|
||||||
mkIf config.wsl.enable {
|
mkIf config.wsl.enable {
|
||||||
|
|
||||||
boot.binfmt.registrations = mkIf cfg.register {
|
boot.binfmt.registrations = mkIf cfg.register {
|
||||||
WSLInterop =
|
WSLInterop = let
|
||||||
let
|
compat = cfg.preserveArgvZero;
|
||||||
compat = cfg.preserveArgvZero;
|
|
||||||
|
|
||||||
# WSL Preview 0.58 and up registers the /init binfmt interp for Windows executable
|
# WSL Preview 0.58 and up registers the /init binfmt interp for Windows executable
|
||||||
# with the "preserve argv[0]" flag, so if you run `./foo.exe`, the interp gets invoked
|
# with the "preserve argv[0]" flag, so if you run `./foo.exe`, the interp gets invoked
|
||||||
# as `/init foo.exe ./foo.exe`.
|
# as `/init foo.exe ./foo.exe`.
|
||||||
# argv[0] --^ ^-- actual path
|
# argv[0] --^ ^-- actual path
|
||||||
#
|
#
|
||||||
# Older versions expect to be called without the argv[0] bit, simply as `/init ./foo.exe`.
|
# Older versions expect to be called without the argv[0] bit, simply as `/init ./foo.exe`.
|
||||||
#
|
#
|
||||||
# We detect that by running `/init /known-not-existing-path.exe` and checking the exit code:
|
# We detect that by running `/init /known-not-existing-path.exe` and checking the exit code:
|
||||||
# the new style interp expects at least two arguments, so exits with exit code 1,
|
# the new style interp expects at least two arguments, so exits with exit code 1,
|
||||||
# presumably meaning "parsing error"; the old style interp attempts to actually run
|
# presumably meaning "parsing error"; the old style interp attempts to actually run
|
||||||
# the executable, fails to find it, and exits with 255.
|
# the executable, fails to find it, and exits with 255.
|
||||||
compatWrapper = pkgs.writeShellScript "nixos-wsl-binfmt-hack" ''
|
compatWrapper = pkgs.writeShellScript "nixos-wsl-binfmt-hack" ''
|
||||||
/init /nixos-wsl-does-not-exist.exe
|
/init /nixos-wsl-does-not-exist.exe
|
||||||
[ $? -eq 255 ] && shift
|
[ $? -eq 255 ] && shift
|
||||||
exec /init "$@"
|
exec /init "$@"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# use the autodetect hack if unset, otherwise call /init directly
|
# use the autodetect hack if unset, otherwise call /init directly
|
||||||
interpreter = if compat == null then compatWrapper else "/init";
|
interpreter =
|
||||||
|
if compat == null
|
||||||
|
then compatWrapper
|
||||||
|
else "/init";
|
||||||
|
|
||||||
# enable for the wrapper and autodetect hack
|
# enable for the wrapper and autodetect hack
|
||||||
preserveArgvZero = if compat == false then false else true;
|
preserveArgvZero =
|
||||||
in
|
if compat == false
|
||||||
{
|
then false
|
||||||
magicOrExtension = "MZ";
|
else true;
|
||||||
fixBinary = true;
|
in {
|
||||||
wrapInterpreterInShell = false;
|
magicOrExtension = "MZ";
|
||||||
inherit interpreter preserveArgvZero;
|
fixBinary = true;
|
||||||
};
|
wrapInterpreterInShell = false;
|
||||||
|
inherit interpreter preserveArgvZero;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Include Windows %PATH% in Linux $PATH.
|
# Include Windows %PATH% in Linux $PATH.
|
||||||
environment.extraInit = mkIf cfg.includePath ''PATH="$PATH:$WSLPATH"'';
|
environment.extraInit = mkIf cfg.includePath ''PATH="$PATH:$WSLPATH"'';
|
||||||
|
|
||||||
warnings =
|
warnings = let
|
||||||
let
|
registrations = config.boot.binfmt.registrations;
|
||||||
registrations = config.boot.binfmt.registrations;
|
in
|
||||||
in
|
|
||||||
optional (!(registrations ? WSLInterop) && (length (attrNames config.boot.binfmt.registrations)) != 0) "Having any binfmt registrations without re-registering WSLInterop (wsl.interop.register) will break running .exe files from WSL2";
|
optional (!(registrations ? WSLInterop) && (length (attrNames config.boot.binfmt.registrations)) != 0) "Having any binfmt registrations without re-registering WSLInterop (wsl.interop.register) will break running .exe files from WSL2";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,42 +1,45 @@
|
||||||
{ lib, pkgs, config, ... }:
|
|
||||||
|
|
||||||
with builtins; with lib;
|
|
||||||
{
|
{
|
||||||
options.wsl = with types;
|
lib,
|
||||||
let
|
pkgs,
|
||||||
coercedToStr = coercedTo (oneOf [ bool path int ]) (toString) str;
|
config,
|
||||||
in
|
...
|
||||||
{
|
}:
|
||||||
enable = mkEnableOption "support for running NixOS as a WSL distribution";
|
with builtins; with lib; {
|
||||||
automountPath = mkOption {
|
options.wsl = with types; let
|
||||||
type = str;
|
coercedToStr = coercedTo (oneOf [bool path int]) toString str;
|
||||||
default = "/mnt";
|
in {
|
||||||
description = "The path where windows drives are mounted (e.g. /mnt/c)";
|
enable = mkEnableOption "support for running NixOS as a WSL distribution";
|
||||||
};
|
automountPath = mkOption {
|
||||||
automountOptions = mkOption {
|
type = str;
|
||||||
type = str;
|
default = "/mnt";
|
||||||
default = "metadata,uid=1000,gid=100";
|
description = "The path where windows drives are mounted (e.g. /mnt/c)";
|
||||||
description = "Options to use when mounting windows drives";
|
|
||||||
};
|
|
||||||
defaultUser = mkOption {
|
|
||||||
type = str;
|
|
||||||
default = "nixos";
|
|
||||||
description = "The name of the default user";
|
|
||||||
};
|
|
||||||
startMenuLaunchers = mkEnableOption "shortcuts for GUI applications in the windows start menu";
|
|
||||||
wslConf = mkOption {
|
|
||||||
type = attrsOf (attrsOf (oneOf [ string int bool ]));
|
|
||||||
description = "Entries that are added to /etc/wsl.conf";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
automountOptions = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = "metadata,uid=1000,gid=100";
|
||||||
|
description = "Options to use when mounting windows drives";
|
||||||
|
};
|
||||||
|
defaultUser = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = "nixos";
|
||||||
|
description = "The name of the default user";
|
||||||
|
};
|
||||||
|
startMenuLaunchers = mkEnableOption "shortcuts for GUI applications in the windows start menu";
|
||||||
|
wslConf = mkOption {
|
||||||
|
type = attrsOf (attrsOf (oneOf [string int bool]));
|
||||||
|
description = "Entries that are added to /etc/wsl.conf";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
config =
|
config = let
|
||||||
let
|
cfg = config.wsl;
|
||||||
cfg = config.wsl;
|
syschdemd = import ../syschdemd.nix {
|
||||||
syschdemd = import ../syschdemd.nix { inherit lib pkgs config; inherit (cfg) automountPath defaultUser; defaultUserHome = config.users.users.${cfg.defaultUser}.home; };
|
inherit lib pkgs config;
|
||||||
in
|
inherit (cfg) automountPath defaultUser;
|
||||||
|
defaultUserHome = config.users.users.${cfg.defaultUser}.home;
|
||||||
|
};
|
||||||
|
in
|
||||||
mkIf cfg.enable {
|
mkIf cfg.enable {
|
||||||
|
|
||||||
wsl.wslConf = {
|
wsl.wslConf = {
|
||||||
automount = {
|
automount = {
|
||||||
enabled = true;
|
enabled = true;
|
||||||
|
@ -57,9 +60,8 @@ with builtins; with lib;
|
||||||
hardware.opengl.enable = true; # Enable GPU acceleration
|
hardware.opengl.enable = true; # Enable GPU acceleration
|
||||||
|
|
||||||
environment = {
|
environment = {
|
||||||
|
|
||||||
etc = {
|
etc = {
|
||||||
"wsl.conf".text = generators.toINI { } cfg.wslConf;
|
"wsl.conf".text = generators.toINI {} cfg.wslConf;
|
||||||
|
|
||||||
# DNS settings are managed by WSL
|
# DNS settings are managed by WSL
|
||||||
hosts.enable = !config.wsl.wslConf.network.generateHosts;
|
hosts.enable = !config.wsl.wslConf.network.generateHosts;
|
||||||
|
@ -67,7 +69,7 @@ with builtins; with lib;
|
||||||
};
|
};
|
||||||
|
|
||||||
systemPackages = [
|
systemPackages = [
|
||||||
(pkgs.runCommand "wslpath" { } ''
|
(pkgs.runCommand "wslpath" {} ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
ln -s /init $out/bin/wslpath
|
ln -s /init $out/bin/wslpath
|
||||||
'')
|
'')
|
||||||
|
@ -79,13 +81,13 @@ with builtins; with lib;
|
||||||
users.users.${cfg.defaultUser} = {
|
users.users.${cfg.defaultUser} = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
uid = 1000;
|
uid = 1000;
|
||||||
extraGroups = [ "wheel" ]; # Allow the default user to use sudo
|
extraGroups = ["wheel"]; # Allow the default user to use sudo
|
||||||
};
|
};
|
||||||
|
|
||||||
users.users.root = {
|
users.users.root = {
|
||||||
shell = "${syschdemd}/bin/syschdemd";
|
shell = "${syschdemd}/bin/syschdemd";
|
||||||
# Otherwise WSL fails to login as root with "initgroups failed 5"
|
# Otherwise WSL fails to login as root with "initgroups failed 5"
|
||||||
extraGroups = [ "root" ];
|
extraGroups = ["root"];
|
||||||
};
|
};
|
||||||
|
|
||||||
security.sudo = {
|
security.sudo = {
|
||||||
|
@ -97,7 +99,7 @@ with builtins; with lib;
|
||||||
|
|
||||||
system.activationScripts = {
|
system.activationScripts = {
|
||||||
copy-launchers = mkIf cfg.startMenuLaunchers (
|
copy-launchers = mkIf cfg.startMenuLaunchers (
|
||||||
stringAfter [ ] ''
|
stringAfter [] ''
|
||||||
for x in applications icons; do
|
for x in applications icons; do
|
||||||
echo "Copying /usr/share/$x"
|
echo "Copying /usr/share/$x"
|
||||||
mkdir -p /usr/share/$x
|
mkdir -p /usr/share/$x
|
||||||
|
@ -105,7 +107,7 @@ with builtins; with lib;
|
||||||
done
|
done
|
||||||
''
|
''
|
||||||
);
|
);
|
||||||
populateBin = stringAfter [ ] ''
|
populateBin = stringAfter [] ''
|
||||||
echo "setting up /bin..."
|
echo "setting up /bin..."
|
||||||
ln -sf /init /bin/wslpath
|
ln -sf /init /bin/wslpath
|
||||||
ln -sf ${pkgs.bashInteractive}/bin/bash /bin/sh
|
ln -sf ${pkgs.bashInteractive}/bin/bash /bin/sh
|
||||||
|
@ -134,6 +136,6 @@ with builtins; with lib;
|
||||||
enableEmergencyMode = false;
|
enableEmergencyMode = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
warnings = (optional (config.systemd.services.systemd-resolved.enable && config.wsl.wslConf.network.generateResolvConf) "systemd-resolved is enabled, but resolv.conf is managed by WSL");
|
warnings = optional (config.systemd.services.systemd-resolved.enable && config.wsl.wslConf.network.generateResolvConf) "systemd-resolved is enabled, but resolv.conf is managed by WSL";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
{ lib
|
{
|
||||||
, pkgs
|
lib,
|
||||||
, config
|
pkgs,
|
||||||
, automountPath
|
config,
|
||||||
, defaultUser
|
automountPath,
|
||||||
, defaultUserHome ? "/home/${defaultUser}"
|
defaultUser,
|
||||||
, ...
|
defaultUserHome ? "/home/${defaultUser}",
|
||||||
|
...
|
||||||
}:
|
}:
|
||||||
|
|
||||||
pkgs.substituteAll {
|
pkgs.substituteAll {
|
||||||
name = "syschdemd";
|
name = "syschdemd";
|
||||||
src = ./syschdemd.sh;
|
src = ./syschdemd.sh;
|
||||||
dir = "bin";
|
dir = "bin";
|
||||||
isExecutable = true;
|
isExecutable = true;
|
||||||
|
|
||||||
buildInputs = with pkgs; [ daemonize ];
|
buildInputs = with pkgs; [daemonize];
|
||||||
|
|
||||||
inherit defaultUser defaultUserHome;
|
inherit defaultUser defaultUserHome;
|
||||||
inherit (pkgs) daemonize;
|
inherit (pkgs) daemonize;
|
||||||
|
|
|
@ -1,15 +1,19 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [ ];
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ ];
|
boot.initrd.availableKernelModules = [];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
## NOTE: These filesystems are mounted by a wrapper script from nix-wsl
|
## NOTE: These filesystems are mounted by a wrapper script from nix-wsl
|
||||||
|
|
||||||
|
@ -43,25 +47,22 @@
|
||||||
# fsType = "drvfs";
|
# fsType = "drvfs";
|
||||||
# };
|
# };
|
||||||
|
|
||||||
fileSystems."/mnt/c" =
|
fileSystems."/mnt/c" = {
|
||||||
{
|
device = "C:";
|
||||||
device = "C:";
|
fsType = "drvfs";
|
||||||
fsType = "drvfs";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/mnt/d" =
|
fileSystems."/mnt/d" = {
|
||||||
{
|
device = "D:";
|
||||||
device = "D:";
|
fsType = "drvfs";
|
||||||
fsType = "drvfs";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/mnt/f" =
|
fileSystems."/mnt/f" = {
|
||||||
{
|
device = "F:";
|
||||||
device = "F:";
|
fsType = "drvfs";
|
||||||
fsType = "drvfs";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices = [ ];
|
swapDevices = [];
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -1,19 +1,22 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
config,
|
||||||
[
|
lib,
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
pkgs,
|
||||||
];
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
|
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
|
||||||
# boot.initrd.kernelModules = [ "amdgpu" ];
|
# boot.initrd.kernelModules = [ "amdgpu" ];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelModules = [ "kvm-amd" "coretemp" ];
|
boot.kernelModules = ["kvm-amd" "coretemp"];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" =
|
||||||
# Might be wise to use /dev/nvme0p1 instead
|
# Might be wise to use /dev/nvme0p1 instead
|
||||||
|
@ -29,7 +32,7 @@
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices = [ ];
|
swapDevices = [];
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
config,
|
||||||
[
|
lib,
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
pkgs,
|
||||||
];
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
|
boot.initrd.availableKernelModules = ["virtio_pci" "virtio_scsi" "ahci" "sd_mod"];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelParams = [ "console=ttyS0,19200n8" ];
|
boot.kernelParams = ["console=ttyS0,19200n8"];
|
||||||
boot.loader.grub.extraConfig = ''
|
boot.loader.grub.extraConfig = ''
|
||||||
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
||||||
terminal_input serial;
|
terminal_input serial;
|
||||||
|
@ -20,17 +23,15 @@
|
||||||
boot.loader.grub.forceInstall = true;
|
boot.loader.grub.forceInstall = true;
|
||||||
boot.loader.grub.device = "nodev";
|
boot.loader.grub.device = "nodev";
|
||||||
boot.loader.timeout = 10;
|
boot.loader.timeout = 10;
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
device = "/dev/sda";
|
||||||
device = "/dev/sda";
|
fsType = "ext4";
|
||||||
fsType = "ext4";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices =
|
swapDevices = [{device = "/dev/sdb";}];
|
||||||
[{ device = "/dev/sdb"; }];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
config,
|
||||||
[
|
lib,
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
pkgs,
|
||||||
];
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
|
boot.initrd.availableKernelModules = ["virtio_pci" "virtio_scsi" "ahci" "sd_mod"];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelParams = [ "console=ttyS0,19200n8" ];
|
boot.kernelParams = ["console=ttyS0,19200n8"];
|
||||||
boot.loader.grub.extraConfig = ''
|
boot.loader.grub.extraConfig = ''
|
||||||
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
||||||
terminal_input serial;
|
terminal_input serial;
|
||||||
|
@ -20,17 +23,15 @@
|
||||||
boot.loader.grub.forceInstall = true;
|
boot.loader.grub.forceInstall = true;
|
||||||
boot.loader.grub.device = "nodev";
|
boot.loader.grub.device = "nodev";
|
||||||
boot.loader.timeout = 10;
|
boot.loader.timeout = 10;
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
device = "/dev/sda";
|
||||||
device = "/dev/sda";
|
fsType = "ext4";
|
||||||
fsType = "ext4";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices =
|
swapDevices = [{device = "/dev/sdb";}];
|
||||||
[{ device = "/dev/sdb"; }];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
config,
|
||||||
[
|
lib,
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
pkgs,
|
||||||
];
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
|
boot.initrd.availableKernelModules = ["virtio_pci" "virtio_scsi" "ahci" "sd_mod"];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelParams = [ "console=ttyS0,19200n8" ];
|
boot.kernelParams = ["console=ttyS0,19200n8"];
|
||||||
boot.loader.grub.extraConfig = ''
|
boot.loader.grub.extraConfig = ''
|
||||||
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
||||||
terminal_input serial;
|
terminal_input serial;
|
||||||
|
@ -20,8 +23,8 @@
|
||||||
boot.loader.grub.forceInstall = true;
|
boot.loader.grub.forceInstall = true;
|
||||||
boot.loader.grub.device = "nodev";
|
boot.loader.grub.device = "nodev";
|
||||||
boot.loader.timeout = 10;
|
boot.loader.timeout = 10;
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
fileSystems = {
|
fileSystems = {
|
||||||
"/" = {
|
"/" = {
|
||||||
|
@ -35,8 +38,7 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices =
|
swapDevices = [{device = "/dev/sdb";}];
|
||||||
[{ device = "/dev/sdb"; }];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -1,20 +1,23 @@
|
||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
config,
|
||||||
[
|
lib,
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
pkgs,
|
||||||
];
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
|
boot.initrd.availableKernelModules = ["virtio_pci" "virtio_scsi" "ahci" "sd_mod"];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelModules = [ ];
|
boot.kernelModules = [];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
boot.kernelParams = [ "console=ttyS0,19200n8" ];
|
boot.kernelParams = ["console=ttyS0,19200n8"];
|
||||||
boot.loader.grub.extraConfig = ''
|
boot.loader.grub.extraConfig = ''
|
||||||
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1
|
||||||
terminal_input serial;
|
terminal_input serial;
|
||||||
|
@ -23,14 +26,12 @@
|
||||||
boot.loader.grub.forceInstall = true;
|
boot.loader.grub.forceInstall = true;
|
||||||
boot.loader.grub.device = "nodev";
|
boot.loader.grub.device = "nodev";
|
||||||
boot.loader.timeout = 10;
|
boot.loader.timeout = 10;
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
device = "/dev/sda";
|
||||||
device = "/dev/sda";
|
fsType = "ext4";
|
||||||
fsType = "ext4";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices =
|
swapDevices = [{device = "/dev/sdb";}];
|
||||||
[{ device = "/dev/sdb"; }];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# 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
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
{ lib, ... }:
|
{lib, ...}:
|
||||||
|
with lib; let
|
||||||
with lib;
|
|
||||||
let
|
|
||||||
nixos-wsl = import ./nixos-wsl;
|
nixos-wsl = import ./nixos-wsl;
|
||||||
in
|
in {
|
||||||
{
|
|
||||||
imports = [
|
imports = [
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
nixos-wsl.nixosModules.wsl
|
nixos-wsl.nixosModules.wsl
|
||||||
|
@ -21,9 +18,7 @@ in
|
||||||
|
|
||||||
# Enable integration with Docker Desktop (needs to be installed)
|
# Enable integration with Docker Desktop (needs to be installed)
|
||||||
docker-desktop.enable = true;
|
docker-desktop.enable = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
# users.users.<defaultUser>.uid = 1000;
|
# users.users.<defaultUser>.uid = 1000;
|
||||||
# networking.hostName = "nixos";
|
# networking.hostName = "nixos";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{inputs, cell}: let
|
{
|
||||||
|
inputs,
|
||||||
|
cell,
|
||||||
|
}: let
|
||||||
inherit (inputs) std nixpkgs;
|
inherit (inputs) std nixpkgs;
|
||||||
|
|
||||||
in {
|
in {
|
||||||
default = std.lib.dev.mkShell {
|
default = std.lib.dev.mkShell {
|
||||||
name = "default";
|
name = "default";
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
cell,
|
||||||
|
}: let
|
||||||
|
in {
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
cell,
|
||||||
|
}: {
|
||||||
|
}
|
|
@ -102,7 +102,7 @@ in {
|
||||||
};
|
};
|
||||||
font.size = lib.mkOption {
|
font.size = lib.mkOption {
|
||||||
type = lib.types.nullOr lib.types.number;
|
type = lib.types.nullOr lib.types.number;
|
||||||
default = null;
|
default = 11.0;
|
||||||
description = ''
|
description = ''
|
||||||
The default font size for Alacritty. This is probably measured in px.
|
The default font size for Alacritty. This is probably measured in px.
|
||||||
'';
|
'';
|
||||||
|
@ -116,7 +116,7 @@ in {
|
||||||
'';
|
'';
|
||||||
example = true;
|
example = true;
|
||||||
};
|
};
|
||||||
config-file = lib.mkOption {
|
config-path = lib.mkOption {
|
||||||
type = lib.types.path;
|
type = lib.types.path;
|
||||||
description = "Path to alacritty yaml";
|
description = "Path to alacritty yaml";
|
||||||
default = null;
|
default = null;
|
||||||
|
@ -126,12 +126,10 @@ in {
|
||||||
config.programs.alacritty = {
|
config.programs.alacritty = {
|
||||||
enable = cfg.enable;
|
enable = cfg.enable;
|
||||||
settings = let ;
|
settings = let ;
|
||||||
actualConfig = if cfg.config-file != null then fromYAML (builtins.readFile cfg.config-file) else {};
|
actualConfig = if cfg.config-path != null then fromYAML (builtins.readFile cfg.config-path) else {};
|
||||||
in lib.recursiveUpdate actualConfig {
|
in lib.recursiveUpdate actualConfig {
|
||||||
font.normal.family = opt-toNullable(opt-leftmostSome (builtins.map opt-fromNullable [
|
font.normal.family = lib.mkIf (font.family != null) font.family;
|
||||||
cfg.font.family actualConfig.font.family actualConfig.font.normal.family
|
font.size = lib.mkIf (font.size != null) font.size;
|
||||||
]));
|
|
||||||
font.size = cfg.font.size or actualConfig.font.size or 7.0;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,11 +1,18 @@
|
||||||
{inputs, cell, namespace}: { pkgs, config, lib, ... }:
|
{
|
||||||
let
|
inputs,
|
||||||
|
cell,
|
||||||
|
namespace,
|
||||||
|
}: {
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
cfg = config."${namespace}".graphics;
|
cfg = config."${namespace}".graphics;
|
||||||
cfgEnable = cfg.enable or (cfg.useNixGL.defaultPackage != null);
|
cfgEnable = cfg.enable or (cfg.useNixGL.defaultPackage != null);
|
||||||
types = lib.types;
|
types = lib.types;
|
||||||
in
|
in {
|
||||||
{
|
imports = [./shells.nix];
|
||||||
imports = [ ./shells.nix ];
|
|
||||||
options."${namespace}".nixgl = {
|
options."${namespace}".nixgl = {
|
||||||
enable = lib.mkEnableOption "nixgl";
|
enable = lib.mkEnableOption "nixgl";
|
||||||
useNixGL = {
|
useNixGL = {
|
||||||
|
@ -17,7 +24,7 @@ in
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
defaultPackage = lib.mkOption {
|
defaultPackage = lib.mkOption {
|
||||||
type = types.nullOr (types.enum [ "nixGLIntel" "nixGLNvidia" "nixGLNvidiaBumblebee" ]);
|
type = types.nullOr (types.enum ["nixGLIntel" "nixGLNvidia" "nixGLNvidiaBumblebee"]);
|
||||||
description = "Which nixGL package to be aliased as `nixGL` on the shell";
|
description = "Which nixGL package to be aliased as `nixGL` on the shell";
|
||||||
default = null;
|
default = null;
|
||||||
example = "nixGLIntel";
|
example = "nixGLIntel";
|
||||||
|
@ -35,6 +42,6 @@ in
|
||||||
nixGL = cfg.useNixGL.defaultPackage;
|
nixGL = cfg.useNixGL.defaultPackage;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
home.packages = [ cfg.useNixGL.package ];
|
home.packages = [cfg.useNixGL.package];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,27 @@
|
||||||
_imports@{inputs, cell}: let
|
# This creates a layer that is specific to some profiles, but may require
|
||||||
|
# some variants in environment like username/email, work-oriented or personal
|
||||||
|
# and many more
|
||||||
|
_imports @ {
|
||||||
|
inputs,
|
||||||
|
cell,
|
||||||
|
}: let
|
||||||
|
# TODO: I don't think abstracting namespace away is a good idea in this case
|
||||||
namespace = "repo";
|
namespace = "repo";
|
||||||
imports = _imports // {inherit namespace;};
|
imports = _imports // {inherit namespace;};
|
||||||
in {
|
in {
|
||||||
neovim = import ./neovim.nix imports;
|
neovim = import ./neovim.nix imports;
|
||||||
nerd_font_module = {config, pkgs, ...}: {
|
nerd_font_module = {
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
import inputs.cells."${namespace}"
|
import
|
||||||
|
inputs.cells."${namespace}"
|
||||||
];
|
];
|
||||||
fonts.fontconfig.enable = true;
|
fonts.fontconfig.enable = true;
|
||||||
home.packages = [
|
home.packages = [
|
||||||
(pkgs.nerdfonts.override { fonts = [ "Hack" ]; })
|
(pkgs.nerdfonts.override {fonts = ["Hack"];})
|
||||||
];
|
];
|
||||||
"${namespace}".alacritty.font.family = "Hack Nerd Font Mono";
|
"${namespace}".alacritty.font.family = "Hack Nerd Font Mono";
|
||||||
};
|
};
|
||||||
|
@ -32,7 +44,13 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
ssh = {config, lib, ...}: let cfg = config."${namespace}".ssh; in {
|
ssh = {
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config."${namespace}".ssh;
|
||||||
|
in {
|
||||||
options."${namespace}".ssh.enable = lib.mkOption {
|
options."${namespace}".ssh.enable = lib.mkOption {
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
default = true;
|
default = true;
|
||||||
|
@ -48,13 +66,79 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
alacritty = {config, lib,...}: let cfg = config."${namespace}".alacritty; in {
|
alacritty = {
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config."${namespace}".alacritty;
|
||||||
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
import "${inputs.cells.repo.home-modules.alacritty}"
|
import
|
||||||
|
"${inputs.cells.repo.home-modules.alacritty}"
|
||||||
];
|
];
|
||||||
configs."${namespace}".alacritty = {
|
configs."${namespace}".alacritty = {
|
||||||
enable = true;
|
enable = true;
|
||||||
config-file = "${inputs.self}//native-configs/alacritty/alacritty.yml";
|
config-path = "${inputs.self}//native-configs/alacritty/alacritty.yml";
|
||||||
|
font.size = 11.0;
|
||||||
|
font.family = "Hack Nerd Font Mono";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
shells = import ./shells.nix imports;
|
||||||
|
|
||||||
|
git = {
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
baseAliases = {
|
||||||
|
a = "add";
|
||||||
|
c = "commit";
|
||||||
|
ca = "commit --amend";
|
||||||
|
cm = "commit -m";
|
||||||
|
lol = "log --graph --decorate --pretty=oneline --abbrev-commit";
|
||||||
|
lola = "log --graph --decorate --pretty=oneline --abbrev-commit --all";
|
||||||
|
sts = "status";
|
||||||
|
co = "checkout";
|
||||||
|
b = "branch";
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
options."${namespace}".git = {
|
||||||
|
aliases = lib.mkOption {
|
||||||
|
type = lib.types.attrs;
|
||||||
|
default = {};
|
||||||
|
example = baseAliases;
|
||||||
|
description = ''
|
||||||
|
Additional git aliases. This config is merged on top of base aliases.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
name = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "Pegasust";
|
||||||
|
description = "Git username that appears on commits";
|
||||||
|
example = "Pegasust";
|
||||||
|
};
|
||||||
|
email = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "pegasucksgg@gmail.com";
|
||||||
|
example = "peagsucksgg@gmail.com";
|
||||||
|
description = "Git email that appears on commits";
|
||||||
|
};
|
||||||
|
ignores = lib.mkOption {
|
||||||
|
type = lib.types.listOf lib.types.str;
|
||||||
|
default = [
|
||||||
|
".vscode" # vscode settings
|
||||||
|
".direnv" # .envrc cached outputs
|
||||||
|
".DS_Store" # MacOS users, amrite
|
||||||
|
];
|
||||||
|
description = ''
|
||||||
|
.gitignore patterns that are applied in every repository.
|
||||||
|
This is useful for IDE-specific or environment-specific settings.
|
||||||
|
'';
|
||||||
|
example = [".direnv" "node_modules"];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,62 +2,72 @@
|
||||||
#
|
#
|
||||||
# One thing to consider, though, /nix/store of `nix-shell` or `nix-develop`
|
# One thing to consider, though, /nix/store of `nix-shell` or `nix-develop`
|
||||||
# might be different from `home-manager`'s (~/.nix_profile/bin/jq)
|
# might be different from `home-manager`'s (~/.nix_profile/bin/jq)
|
||||||
{inputs, cell, namespace}: { pkgs, lib, config, ... }:
|
{
|
||||||
let
|
inputs,
|
||||||
|
cell,
|
||||||
|
namespace,
|
||||||
|
}: {
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
# NOTE: Add packages to nvim_pkgs instead, so that it's available at userspace
|
# NOTE: Add packages to nvim_pkgs instead, so that it's available at userspace
|
||||||
# and is added to the path after wrapping.
|
# and is added to the path after wrapping.
|
||||||
# check: nix repl `homeConfigurations.hungtr.config.programs.neovim.finalPackage.buildCommand`
|
# check: nix repl `homeConfigurations.hungtr.config.programs.neovim.finalPackage.buildCommand`
|
||||||
# see: :/--suffix.*PATH
|
# see: :/--suffix.*PATH
|
||||||
# there should be mentions of additional packages
|
# there should be mentions of additional packages
|
||||||
my_neovim = pkgs.neovim-unwrapped;
|
my_neovim = pkgs.neovim-unwrapped;
|
||||||
rust_pkgs = (pkgs.rust-bin.selectLatestNightlyWith
|
rust_pkgs =
|
||||||
|
pkgs.rust-bin.selectLatestNightlyWith
|
||||||
(
|
(
|
||||||
toolchain:
|
toolchain:
|
||||||
toolchain.default.override {
|
toolchain.default.override {
|
||||||
extensions = [ "rust-src" "rust-analyzer" "rust-docs" "rustfmt" "clippy" "miri" ];
|
extensions = ["rust-src" "rust-analyzer" "rust-docs" "rustfmt" "clippy" "miri"];
|
||||||
}
|
}
|
||||||
));
|
);
|
||||||
nvim_pkgs = [
|
nvim_pkgs =
|
||||||
# pkgs.gccStdenv
|
|
||||||
pkgs.tree-sitter
|
|
||||||
pkgs.fzf # file name fuzzy search
|
|
||||||
pkgs.ripgrep # content fuzzy search
|
|
||||||
pkgs.zk # Zettelkasten (limited support)
|
|
||||||
pkgs.fd # Required by a Telescope plugin (?)
|
|
||||||
pkgs.stdenv.cc.cc.lib
|
|
||||||
pkgs.rnix-lsp # doesn't work, Mason just installs it using cargo
|
|
||||||
pkgs.rust4cargo
|
|
||||||
pkgs.nickel
|
|
||||||
pkgs.nls
|
|
||||||
|
|
||||||
pkgs.go # doesn't work, Mason installs from runtime path
|
|
||||||
|
|
||||||
# Language-specific stuffs
|
|
||||||
pkgs.sumneko-lua-language-server
|
|
||||||
# pkgs.python3Packages.python-lsp-server
|
|
||||||
pkgs.nodePackages.pyright
|
|
||||||
pkgs.python3Packages.pylint
|
|
||||||
pkgs.python3Packages.flake8
|
|
||||||
# FIXME: installing ansible from here just doesn't work :/
|
|
||||||
# pkgs.ansible-lint
|
|
||||||
# pkgs.python38Packages.ansible
|
|
||||||
# pkgs.ansible-language-server
|
|
||||||
# TODO: the devShell should provide rust-analyzer so that
|
|
||||||
# cargo test builds binaries compatible with rust-analyzer
|
|
||||||
|
|
||||||
# pkgs.rust-analyzer
|
|
||||||
# rust_pkgs
|
|
||||||
# pkgs.evcxr # Rust REPL for Conjure!
|
|
||||||
] ++ lib.optionals (pkgs.stdenv.isDarwin) (
|
|
||||||
let
|
|
||||||
inherit (pkgs.darwin.apple_sdk.frameworks) System CoreFoundation; in
|
|
||||||
[
|
[
|
||||||
System
|
# pkgs.gccStdenv
|
||||||
CoreFoundation
|
pkgs.tree-sitter
|
||||||
|
pkgs.fzf # file name fuzzy search
|
||||||
|
pkgs.ripgrep # content fuzzy search
|
||||||
|
pkgs.zk # Zettelkasten (limited support)
|
||||||
|
pkgs.fd # Required by a Telescope plugin (?)
|
||||||
|
pkgs.stdenv.cc.cc.lib
|
||||||
|
pkgs.rnix-lsp # doesn't work, Mason just installs it using cargo
|
||||||
|
pkgs.rust4cargo
|
||||||
|
pkgs.nickel
|
||||||
|
pkgs.nls
|
||||||
|
|
||||||
|
pkgs.go # doesn't work, Mason installs from runtime path
|
||||||
|
|
||||||
|
# Language-specific stuffs
|
||||||
|
pkgs.sumneko-lua-language-server
|
||||||
|
# pkgs.python3Packages.python-lsp-server
|
||||||
|
pkgs.nodePackages.pyright
|
||||||
|
pkgs.python3Packages.pylint
|
||||||
|
pkgs.python3Packages.flake8
|
||||||
|
# FIXME: installing ansible from here just doesn't work :/
|
||||||
|
# pkgs.ansible-lint
|
||||||
|
# pkgs.python38Packages.ansible
|
||||||
|
# pkgs.ansible-language-server
|
||||||
|
# TODO: the devShell should provide rust-analyzer so that
|
||||||
|
# cargo test builds binaries compatible with rust-analyzer
|
||||||
|
|
||||||
|
# pkgs.rust-analyzer
|
||||||
|
# rust_pkgs
|
||||||
|
# pkgs.evcxr # Rust REPL for Conjure!
|
||||||
]
|
]
|
||||||
);
|
++ lib.optionals (pkgs.stdenv.isDarwin) (
|
||||||
in
|
let
|
||||||
{
|
inherit (pkgs.darwin.apple_sdk.frameworks) System CoreFoundation;
|
||||||
|
in [
|
||||||
|
System
|
||||||
|
CoreFoundation
|
||||||
|
]
|
||||||
|
);
|
||||||
|
in {
|
||||||
options.base.neovim = {
|
options.base.neovim = {
|
||||||
enable = lib.mkOption {
|
enable = lib.mkOption {
|
||||||
default = true;
|
default = true;
|
||||||
|
@ -77,60 +87,54 @@ in
|
||||||
withNodeJs = true;
|
withNodeJs = true;
|
||||||
# NOTE: this adds path to the wrapped version of neovim
|
# NOTE: this adds path to the wrapped version of neovim
|
||||||
extraPackages = nvim_pkgs;
|
extraPackages = nvim_pkgs;
|
||||||
extraLuaConfig = (builtins.readFile "${inputs.self}/native_configs/neovim/init.lua");
|
extraLuaConfig = builtins.readFile "${inputs.self}/native_configs/neovim/init.lua";
|
||||||
plugins = (let inherit (pkgs.vimPlugins)
|
plugins = let
|
||||||
plenary-nvim
|
inherit
|
||||||
|
(pkgs.vimPlugins)
|
||||||
nvim-treesitter
|
plenary-nvim
|
||||||
nvim-treesitter-textobjects
|
nvim-treesitter
|
||||||
nvim-treesitter-context
|
nvim-treesitter-textobjects
|
||||||
|
nvim-treesitter-context
|
||||||
telescope-fzf-native-nvim
|
telescope-fzf-native-nvim
|
||||||
telescope-file-browser-nvim
|
telescope-file-browser-nvim
|
||||||
telescope-nvim
|
telescope-nvim
|
||||||
|
nvim-lspconfig
|
||||||
nvim-lspconfig
|
gruvbox-community
|
||||||
|
neodev-nvim
|
||||||
gruvbox-community
|
cmp-nvim-lsp
|
||||||
|
cmp-path
|
||||||
neodev-nvim
|
cmp-buffer
|
||||||
|
cmp-cmdline
|
||||||
cmp-nvim-lsp
|
nvim-cmp
|
||||||
cmp-path
|
lspkind-nvim
|
||||||
cmp-buffer
|
nvim-autopairs
|
||||||
cmp-cmdline
|
nvim-ts-autotag
|
||||||
nvim-cmp
|
guess-indent-nvim
|
||||||
|
harpoon
|
||||||
lspkind-nvim
|
zk-nvim
|
||||||
nvim-autopairs
|
luasnip
|
||||||
nvim-ts-autotag
|
fidget-nvim
|
||||||
guess-indent-nvim
|
rust-tools-nvim
|
||||||
harpoon
|
cmp_luasnip
|
||||||
zk-nvim
|
gitsigns-nvim
|
||||||
luasnip
|
indent-blankline-nvim
|
||||||
fidget-nvim
|
lualine-nvim
|
||||||
rust-tools-nvim
|
mason-lspconfig-nvim
|
||||||
|
mason-nvim
|
||||||
cmp_luasnip
|
neogit
|
||||||
gitsigns-nvim
|
nlua-nvim
|
||||||
indent-blankline-nvim
|
nvim-jqx
|
||||||
lualine-nvim
|
nvim-surround
|
||||||
mason-lspconfig-nvim
|
nvim-web-devicons
|
||||||
mason-nvim
|
playground
|
||||||
neogit
|
todo-comments-nvim
|
||||||
nlua-nvim
|
trouble-nvim
|
||||||
nvim-jqx
|
vim-dispatch
|
||||||
nvim-surround
|
vim-dispatch-neovim
|
||||||
nvim-web-devicons
|
vim-fugitive
|
||||||
playground
|
vim-jack-in
|
||||||
todo-comments-nvim
|
;
|
||||||
trouble-nvim
|
in [
|
||||||
vim-dispatch
|
|
||||||
vim-dispatch-neovim
|
|
||||||
vim-fugitive
|
|
||||||
vim-jack-in
|
|
||||||
|
|
||||||
; in [
|
|
||||||
plenary-nvim
|
plenary-nvim
|
||||||
nvim-treesitter.withAllGrammars
|
nvim-treesitter.withAllGrammars
|
||||||
nvim-treesitter-textobjects
|
nvim-treesitter-textobjects
|
||||||
|
@ -174,7 +178,7 @@ in
|
||||||
vim-dispatch-neovim
|
vim-dispatch-neovim
|
||||||
vim-fugitive
|
vim-fugitive
|
||||||
vim-jack-in
|
vim-jack-in
|
||||||
]);
|
];
|
||||||
};
|
};
|
||||||
# home.packages = nvim_pkgs;
|
# home.packages = nvim_pkgs;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
{inputs, cell, namespace}: { config
|
|
||||||
, lib
|
|
||||||
, pkgs
|
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
let cfg = config."${namespace}".shells;
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
|
inputs,
|
||||||
|
cell,
|
||||||
|
namespace,
|
||||||
|
}: {
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config."${namespace}".shells;
|
||||||
|
in {
|
||||||
options."${namespace}".shells = {
|
options."${namespace}".shells = {
|
||||||
enable = lib.mkOption {
|
enable = lib.mkOption {
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
|
@ -26,7 +30,7 @@ in
|
||||||
shellAliases = lib.mkOption {
|
shellAliases = lib.mkOption {
|
||||||
type = lib.types.attrs;
|
type = lib.types.attrs;
|
||||||
description = "Shell command aliases";
|
description = "Shell command aliases";
|
||||||
default = { };
|
default = {};
|
||||||
example = {
|
example = {
|
||||||
nixGL = "nixGLIntel";
|
nixGL = "nixGLIntel";
|
||||||
};
|
};
|
||||||
|
@ -47,9 +51,8 @@ in
|
||||||
};
|
};
|
||||||
programs.tmux = {
|
programs.tmux = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# extraConfigBeforePlugin = builtins.readFile "${proj_root.config.path}/tmux/tmux.conf";
|
plugins = let inherit (pkgs.tmuxPlugins) cpu net-speed; in [cpu net-speed];
|
||||||
plugins = let inherit (pkgs.tmuxPlugins) cpu net-speed; in [ cpu net-speed ];
|
extraConfig = builtins.readFile "${innputs.self}/native_configs/tmux/tmux.conf";
|
||||||
extraConfig = (builtins.readFile "${proj_root.config.path}/tmux/tmux.conf");
|
|
||||||
};
|
};
|
||||||
xdg.configFile."tmux/tmux.conf".text = lib.mkOrder 600 ''
|
xdg.configFile."tmux/tmux.conf".text = lib.mkOrder 600 ''
|
||||||
set -g status-right '#{cpu_bg_color} CPU: #{cpu_icon} #{cpu_percentage} | %a %h-%d %H:%M '
|
set -g status-right '#{cpu_bg_color} CPU: #{cpu_icon} #{cpu_percentage} | %a %h-%d %H:%M '
|
||||||
|
@ -64,14 +67,15 @@ in
|
||||||
enable = true;
|
enable = true;
|
||||||
enableZshIntegration = true;
|
enableZshIntegration = true;
|
||||||
settings = let
|
settings = let
|
||||||
native = builtins.fromTOML (builtins.readFile "${proj_root.config.path}/starship/starship.toml");
|
native = builtins.fromTOML (builtins.readFile "${inputs.self}/native_configs/starship/starship.toml");
|
||||||
patch-nix = pkgs.lib.recursiveUpdate native ({
|
patch-nix = pkgs.lib.recursiveUpdate native {
|
||||||
c.commands = [
|
c.commands = [
|
||||||
["nix" "run" "nixpkgs#clang" "--" "--version"]
|
["nix" "run" "nixpkgs#clang" "--" "--version"]
|
||||||
["nix" "run" "nixpkgs#gcc" "--" "--version"]
|
["nix" "run" "nixpkgs#gcc" "--" "--version"]
|
||||||
];
|
];
|
||||||
});
|
};
|
||||||
in patch-nix;
|
in
|
||||||
|
patch-nix;
|
||||||
};
|
};
|
||||||
# Fuzzy finder. `fzf` for TUI, `fzf -f '<fuzzy query>'` for UNIX piping
|
# Fuzzy finder. `fzf` for TUI, `fzf -f '<fuzzy query>'` for UNIX piping
|
||||||
programs.fzf.enable = true;
|
programs.fzf.enable = true;
|
||||||
|
@ -84,10 +88,12 @@ in
|
||||||
enable = true;
|
enable = true;
|
||||||
enableCompletion = true;
|
enableCompletion = true;
|
||||||
enableAutosuggestions = true;
|
enableAutosuggestions = true;
|
||||||
shellAliases = {
|
shellAliases =
|
||||||
nix-rebuild = "sudo nixos-rebuild switch";
|
{
|
||||||
hm-switch = "home-manager switch --flake";
|
nix-rebuild = "sudo nixos-rebuild switch";
|
||||||
} // (cfg.shellAliases or { });
|
hm-switch = "home-manager switch --flake";
|
||||||
|
}
|
||||||
|
// (cfg.shellAliases or {});
|
||||||
history = {
|
history = {
|
||||||
size = 10000;
|
size = 10000;
|
||||||
path = "${config.xdg.dataHome}/zsh/history";
|
path = "${config.xdg.dataHome}/zsh/history";
|
||||||
|
@ -112,10 +118,11 @@ in
|
||||||
ZVM_KEYTIMEOUT = 0.004; # 40ms, or subtly around 25 FPS. I'm a gamer :)
|
ZVM_KEYTIMEOUT = 0.004; # 40ms, or subtly around 25 FPS. I'm a gamer :)
|
||||||
ZVM_ESCAPE_KEYTIMEOUT = 0.004; # 40ms, or subtly around 25 FPS. I'm a gamer :)
|
ZVM_ESCAPE_KEYTIMEOUT = 0.004; # 40ms, or subtly around 25 FPS. I'm a gamer :)
|
||||||
};
|
};
|
||||||
initExtra = (cfg.shellInitExtra or "") + ''
|
initExtra =
|
||||||
source ${pkgs.zsh-vi-mode}/share/zsh-vi-mode/zsh-vi-mode.plugin.zsh
|
(cfg.shellInitExtra or "")
|
||||||
'';
|
+ ''
|
||||||
|
source ${pkgs.zsh-vi-mode}/share/zsh-vi-mode/zsh-vi-mode.plugin.zsh
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -13,6 +13,7 @@
|
||||||
in {
|
in {
|
||||||
fromYAML = yamlContent: bulitins.fromJSON (builtins.readFile (yamlToJsonDrv inputs.nixpkgs yamlContent "fromYaml.json"));
|
fromYAML = yamlContent: bulitins.fromJSON (builtins.readFile (yamlToJsonDrv inputs.nixpkgs yamlContent "fromYaml.json"));
|
||||||
|
|
||||||
|
# NOTE: Deprecate
|
||||||
# ctor
|
# ctor
|
||||||
opt-some = a: [a];
|
opt-some = a: [a];
|
||||||
opt-none = [];
|
opt-none = [];
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
{inputs, cell}: {
|
{
|
||||||
|
inputs,
|
||||||
|
cell,
|
||||||
|
}: {
|
||||||
htran = inputs.cells.dotfiles.devshells.default;
|
htran = inputs.cells.dotfiles.devshells.default;
|
||||||
hungtran = inputs.cells.dotfiles.devshells.default;
|
hungtran = inputs.cells.dotfiles.devshells.default;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,182 +4,264 @@
|
||||||
# calls the flake's 'outputs' function. It then returns an attrset
|
# calls the flake's 'outputs' function. It then returns an attrset
|
||||||
# containing 'defaultNix' (to be used in 'default.nix'), 'shellNix'
|
# containing 'defaultNix' (to be used in 'default.nix'), 'shellNix'
|
||||||
# (to be used in 'shell.nix').
|
# (to be used in 'shell.nix').
|
||||||
|
{
|
||||||
{ src, system ? builtins.currentSystem or "unknown-system" }:
|
src,
|
||||||
|
system ? builtins.currentSystem or "unknown-system",
|
||||||
let
|
}: let
|
||||||
|
|
||||||
lockFilePath = src + "/flake.lock";
|
lockFilePath = src + "/flake.lock";
|
||||||
|
|
||||||
lockFile = builtins.fromJSON (builtins.readFile lockFilePath);
|
lockFile = builtins.fromJSON (builtins.readFile lockFilePath);
|
||||||
|
|
||||||
fetchTree =
|
fetchTree = info:
|
||||||
info:
|
if info.type == "github"
|
||||||
if info.type == "github" then
|
then {
|
||||||
{ outPath =
|
outPath =
|
||||||
fetchTarball
|
fetchTarball
|
||||||
({ url = "https://api.${info.host or "github.com"}/repos/${info.owner}/${info.repo}/tarball/${info.rev}"; }
|
(
|
||||||
// (if info ? narHash then { sha256 = info.narHash; } else {})
|
{url = "https://api.${info.host or "github.com"}/repos/${info.owner}/${info.repo}/tarball/${info.rev}";}
|
||||||
);
|
// (
|
||||||
rev = info.rev;
|
if info ? narHash
|
||||||
shortRev = builtins.substring 0 7 info.rev;
|
then {sha256 = info.narHash;}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
rev = info.rev;
|
||||||
|
shortRev = builtins.substring 0 7 info.rev;
|
||||||
|
lastModified = info.lastModified;
|
||||||
|
lastModifiedDate = formatSecondsSinceEpoch info.lastModified;
|
||||||
|
narHash = info.narHash;
|
||||||
|
}
|
||||||
|
else if info.type == "git"
|
||||||
|
then
|
||||||
|
{
|
||||||
|
outPath =
|
||||||
|
builtins.fetchGit
|
||||||
|
(
|
||||||
|
{url = info.url;}
|
||||||
|
// (
|
||||||
|
if info ? rev
|
||||||
|
then {inherit (info) rev;}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
// (
|
||||||
|
if info ? ref
|
||||||
|
then {inherit (info) ref;}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
// (
|
||||||
|
if info ? submodules
|
||||||
|
then {inherit (info) submodules;}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
);
|
||||||
lastModified = info.lastModified;
|
lastModified = info.lastModified;
|
||||||
lastModifiedDate = formatSecondsSinceEpoch info.lastModified;
|
lastModifiedDate = formatSecondsSinceEpoch info.lastModified;
|
||||||
narHash = info.narHash;
|
narHash = info.narHash;
|
||||||
}
|
}
|
||||||
else if info.type == "git" then
|
// (
|
||||||
{ outPath =
|
if info ? rev
|
||||||
builtins.fetchGit
|
then {
|
||||||
({ url = info.url; }
|
rev = info.rev;
|
||||||
// (if info ? rev then { inherit (info) rev; } else {})
|
shortRev = builtins.substring 0 7 info.rev;
|
||||||
// (if info ? ref then { inherit (info) ref; } else {})
|
}
|
||||||
// (if info ? submodules then { inherit (info) submodules; } else {})
|
else {
|
||||||
);
|
}
|
||||||
lastModified = info.lastModified;
|
)
|
||||||
lastModifiedDate = formatSecondsSinceEpoch info.lastModified;
|
else if info.type == "path"
|
||||||
narHash = info.narHash;
|
then {
|
||||||
} // (if info ? rev then {
|
outPath = builtins.path {
|
||||||
rev = info.rev;
|
path =
|
||||||
shortRev = builtins.substring 0 7 info.rev;
|
if builtins.substring 0 1 info.path != "/"
|
||||||
} else {
|
then src + ("/" + info.path) # make this absolute path by prepending ./
|
||||||
})
|
|
||||||
else if info.type == "path" then
|
|
||||||
{ outPath = builtins.path {
|
|
||||||
path = if builtins.substring 0 1 info.path != "/"
|
|
||||||
then src + ("/" + info.path) # make this absolute path by prepending ./
|
|
||||||
else info.path; # it's already an absolute path
|
else info.path; # it's already an absolute path
|
||||||
};
|
};
|
||||||
narHash = info.narHash;
|
narHash = info.narHash;
|
||||||
}
|
}
|
||||||
else if info.type == "tarball" then
|
else if info.type == "tarball"
|
||||||
{ outPath =
|
then {
|
||||||
fetchTarball
|
outPath =
|
||||||
({ inherit (info) url; }
|
fetchTarball
|
||||||
// (if info ? narHash then { sha256 = info.narHash; } else {})
|
(
|
||||||
);
|
{inherit (info) url;}
|
||||||
}
|
// (
|
||||||
else if info.type == "gitlab" then
|
if info ? narHash
|
||||||
{ inherit (info) rev narHash lastModified;
|
then {sha256 = info.narHash;}
|
||||||
outPath =
|
else {}
|
||||||
fetchTarball
|
)
|
||||||
({ url = "https://${info.host or "gitlab.com"}/api/v4/projects/${info.owner}%2F${info.repo}/repository/archive.tar.gz?sha=${info.rev}"; }
|
);
|
||||||
// (if info ? narHash then { sha256 = info.narHash; } else {})
|
}
|
||||||
);
|
else if info.type == "gitlab"
|
||||||
shortRev = builtins.substring 0 7 info.rev;
|
then {
|
||||||
}
|
inherit (info) rev narHash lastModified;
|
||||||
|
outPath =
|
||||||
|
fetchTarball
|
||||||
|
(
|
||||||
|
{url = "https://${info.host or "gitlab.com"}/api/v4/projects/${info.owner}%2F${info.repo}/repository/archive.tar.gz?sha=${info.rev}";}
|
||||||
|
// (
|
||||||
|
if info ? narHash
|
||||||
|
then {sha256 = info.narHash;}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
shortRev = builtins.substring 0 7 info.rev;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
# FIXME: add Mercurial, tarball inputs.
|
# FIXME: add Mercurial, tarball inputs.
|
||||||
throw "flake input has unsupported input type '${info.type}'";
|
throw "flake input has unsupported input type '${info.type}'";
|
||||||
|
|
||||||
callFlake4 = flakeSrc: locks:
|
callFlake4 = flakeSrc: locks: let
|
||||||
let
|
flake = import (flakeSrc + "/flake.nix");
|
||||||
flake = import (flakeSrc + "/flake.nix");
|
|
||||||
|
|
||||||
inputs = builtins.mapAttrs (n: v:
|
inputs = builtins.mapAttrs (n: v:
|
||||||
if v.flake or true
|
if v.flake or true
|
||||||
then callFlake4 (fetchTree (v.locked // v.info)) v.inputs
|
then callFlake4 (fetchTree (v.locked // v.info)) v.inputs
|
||||||
else fetchTree (v.locked // v.info)) locks;
|
else fetchTree (v.locked // v.info))
|
||||||
|
locks;
|
||||||
|
|
||||||
outputs = flakeSrc // (flake.outputs (inputs // {self = outputs;}));
|
outputs = flakeSrc // (flake.outputs (inputs // {self = outputs;}));
|
||||||
in
|
in
|
||||||
assert flake.edition == 201909;
|
assert flake.edition == 201909; outputs;
|
||||||
outputs;
|
|
||||||
|
|
||||||
callLocklessFlake = flakeSrc:
|
callLocklessFlake = flakeSrc: let
|
||||||
let
|
flake = import (flakeSrc + "/flake.nix");
|
||||||
flake = import (flakeSrc + "/flake.nix");
|
outputs = flakeSrc // (flake.outputs {self = outputs;});
|
||||||
outputs = flakeSrc // (flake.outputs ({ self = outputs; }));
|
in
|
||||||
in outputs;
|
outputs;
|
||||||
|
|
||||||
rootSrc = let
|
rootSrc = let
|
||||||
# Try to clean the source tree by using fetchGit, if this source
|
# Try to clean the source tree by using fetchGit, if this source
|
||||||
# tree is a valid git repository.
|
# tree is a valid git repository.
|
||||||
tryFetchGit = src:
|
tryFetchGit = src:
|
||||||
if isGit && !isShallow
|
if isGit && !isShallow
|
||||||
then
|
then let
|
||||||
let res = builtins.fetchGit src;
|
res = builtins.fetchGit src;
|
||||||
in if res.rev == "0000000000000000000000000000000000000000" then removeAttrs res ["rev" "shortRev"] else res
|
in
|
||||||
else { outPath = src; };
|
if res.rev == "0000000000000000000000000000000000000000"
|
||||||
|
then removeAttrs res ["rev" "shortRev"]
|
||||||
|
else res
|
||||||
|
else {outPath = src;};
|
||||||
# NB git worktrees have a file for .git, so we don't check the type of .git
|
# NB git worktrees have a file for .git, so we don't check the type of .git
|
||||||
isGit = builtins.pathExists (src + "/.git");
|
isGit = builtins.pathExists (src + "/.git");
|
||||||
isShallow = builtins.pathExists (src + "/.git/shallow");
|
isShallow = builtins.pathExists (src + "/.git/shallow");
|
||||||
|
|
||||||
in
|
in
|
||||||
{ lastModified = 0; lastModifiedDate = formatSecondsSinceEpoch 0; }
|
{
|
||||||
// (if src ? outPath then src else tryFetchGit src);
|
lastModified = 0;
|
||||||
|
lastModifiedDate = formatSecondsSinceEpoch 0;
|
||||||
|
}
|
||||||
|
// (
|
||||||
|
if src ? outPath
|
||||||
|
then src
|
||||||
|
else tryFetchGit src
|
||||||
|
);
|
||||||
|
|
||||||
# Format number of seconds in the Unix epoch as %Y%m%d%H%M%S.
|
# Format number of seconds in the Unix epoch as %Y%m%d%H%M%S.
|
||||||
formatSecondsSinceEpoch = t:
|
formatSecondsSinceEpoch = t: let
|
||||||
let
|
rem = x: y: x - x / y * y;
|
||||||
rem = x: y: x - x / y * y;
|
days = t / 86400;
|
||||||
days = t / 86400;
|
secondsInDay = rem t 86400;
|
||||||
secondsInDay = rem t 86400;
|
hours = secondsInDay / 3600;
|
||||||
hours = secondsInDay / 3600;
|
minutes = (rem secondsInDay 3600) / 60;
|
||||||
minutes = (rem secondsInDay 3600) / 60;
|
seconds = rem t 60;
|
||||||
seconds = rem t 60;
|
|
||||||
|
|
||||||
# Courtesy of https://stackoverflow.com/a/32158604.
|
# Courtesy of https://stackoverflow.com/a/32158604.
|
||||||
z = days + 719468;
|
z = days + 719468;
|
||||||
era = (if z >= 0 then z else z - 146096) / 146097;
|
era =
|
||||||
doe = z - era * 146097;
|
(
|
||||||
yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365;
|
if z >= 0
|
||||||
y = yoe + era * 400;
|
then z
|
||||||
doy = doe - (365 * yoe + yoe / 4 - yoe / 100);
|
else z - 146096
|
||||||
mp = (5 * doy + 2) / 153;
|
)
|
||||||
d = doy - (153 * mp + 2) / 5 + 1;
|
/ 146097;
|
||||||
m = mp + (if mp < 10 then 3 else -9);
|
doe = z - era * 146097;
|
||||||
y' = y + (if m <= 2 then 1 else 0);
|
yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365;
|
||||||
|
y = yoe + era * 400;
|
||||||
|
doy = doe - (365 * yoe + yoe / 4 - yoe / 100);
|
||||||
|
mp = (5 * doy + 2) / 153;
|
||||||
|
d = doy - (153 * mp + 2) / 5 + 1;
|
||||||
|
m =
|
||||||
|
mp
|
||||||
|
+ (
|
||||||
|
if mp < 10
|
||||||
|
then 3
|
||||||
|
else -9
|
||||||
|
);
|
||||||
|
y' =
|
||||||
|
y
|
||||||
|
+ (
|
||||||
|
if m <= 2
|
||||||
|
then 1
|
||||||
|
else 0
|
||||||
|
);
|
||||||
|
|
||||||
pad = s: if builtins.stringLength s < 2 then "0" + s else s;
|
pad = s:
|
||||||
in "${toString y'}${pad (toString m)}${pad (toString d)}${pad (toString hours)}${pad (toString minutes)}${pad (toString seconds)}";
|
if builtins.stringLength s < 2
|
||||||
|
then "0" + s
|
||||||
|
else s;
|
||||||
|
in "${toString y'}${pad (toString m)}${pad (toString d)}${pad (toString hours)}${pad (toString minutes)}${pad (toString seconds)}";
|
||||||
|
|
||||||
allNodes =
|
allNodes =
|
||||||
builtins.mapAttrs
|
builtins.mapAttrs
|
||||||
(key: node:
|
(
|
||||||
let
|
key: node: let
|
||||||
sourceInfo =
|
sourceInfo =
|
||||||
if key == lockFile.root
|
if key == lockFile.root
|
||||||
then rootSrc
|
then rootSrc
|
||||||
else fetchTree (node.info or {} // removeAttrs node.locked ["dir"]);
|
else fetchTree (node.info or {} // removeAttrs node.locked ["dir"]);
|
||||||
|
|
||||||
subdir = if key == lockFile.root then "" else node.locked.dir or "";
|
subdir =
|
||||||
|
if key == lockFile.root
|
||||||
|
then ""
|
||||||
|
else node.locked.dir or "";
|
||||||
|
|
||||||
flake = import (sourceInfo + (if subdir != "" then "/" else "") + subdir + "/flake.nix");
|
flake = import (sourceInfo
|
||||||
|
+ (
|
||||||
|
if subdir != ""
|
||||||
|
then "/"
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
+ subdir
|
||||||
|
+ "/flake.nix");
|
||||||
|
|
||||||
inputs = builtins.mapAttrs
|
inputs =
|
||||||
(inputName: inputSpec: allNodes.${resolveInput inputSpec})
|
builtins.mapAttrs
|
||||||
(node.inputs or {});
|
(inputName: inputSpec: allNodes.${resolveInput inputSpec})
|
||||||
|
(node.inputs or {});
|
||||||
|
|
||||||
# Resolve a input spec into a node name. An input spec is
|
# Resolve a input spec into a node name. An input spec is
|
||||||
# either a node name, or a 'follows' path from the root
|
# either a node name, or a 'follows' path from the root
|
||||||
# node.
|
# node.
|
||||||
resolveInput = inputSpec:
|
resolveInput = inputSpec:
|
||||||
if builtins.isList inputSpec
|
if builtins.isList inputSpec
|
||||||
then getInputByPath lockFile.root inputSpec
|
then getInputByPath lockFile.root inputSpec
|
||||||
else inputSpec;
|
else inputSpec;
|
||||||
|
|
||||||
# Follow an input path (e.g. ["dwarffs" "nixpkgs"]) from the
|
# Follow an input path (e.g. ["dwarffs" "nixpkgs"]) from the
|
||||||
# root node, returning the final node.
|
# root node, returning the final node.
|
||||||
getInputByPath = nodeName: path:
|
getInputByPath = nodeName: path:
|
||||||
if path == []
|
if path == []
|
||||||
then nodeName
|
then nodeName
|
||||||
else
|
|
||||||
getInputByPath
|
|
||||||
# Since this could be a 'follows' input, call resolveInput.
|
|
||||||
(resolveInput lockFile.nodes.${nodeName}.inputs.${builtins.head path})
|
|
||||||
(builtins.tail path);
|
|
||||||
|
|
||||||
outputs = flake.outputs (inputs // { self = result; });
|
|
||||||
|
|
||||||
result = outputs // sourceInfo // { inherit inputs; inherit outputs; inherit sourceInfo; };
|
|
||||||
in
|
|
||||||
if node.flake or true then
|
|
||||||
assert builtins.isFunction flake.outputs;
|
|
||||||
result
|
|
||||||
else
|
else
|
||||||
sourceInfo
|
getInputByPath
|
||||||
)
|
# Since this could be a 'follows' input, call resolveInput.
|
||||||
lockFile.nodes;
|
(resolveInput lockFile.nodes.${nodeName}.inputs.${builtins.head path})
|
||||||
|
(builtins.tail path);
|
||||||
|
|
||||||
|
outputs = flake.outputs (inputs // {self = result;});
|
||||||
|
|
||||||
|
result =
|
||||||
|
outputs
|
||||||
|
// sourceInfo
|
||||||
|
// {
|
||||||
|
inherit inputs;
|
||||||
|
inherit outputs;
|
||||||
|
inherit sourceInfo;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
if node.flake or true
|
||||||
|
then assert builtins.isFunction flake.outputs; result
|
||||||
|
else sourceInfo
|
||||||
|
)
|
||||||
|
lockFile.nodes;
|
||||||
|
|
||||||
result =
|
result =
|
||||||
if !(builtins.pathExists lockFilePath)
|
if !(builtins.pathExists lockFilePath)
|
||||||
|
@ -189,16 +271,30 @@ let
|
||||||
else if lockFile.version >= 5 && lockFile.version <= 7
|
else if lockFile.version >= 5 && lockFile.version <= 7
|
||||||
then allNodes.${lockFile.root}
|
then allNodes.${lockFile.root}
|
||||||
else throw "lock file '${lockFilePath}' has unsupported version ${toString lockFile.version}";
|
else throw "lock file '${lockFilePath}' has unsupported version ${toString lockFile.version}";
|
||||||
|
in rec {
|
||||||
|
defaultNix =
|
||||||
|
(builtins.removeAttrs result ["__functor"])
|
||||||
|
// (
|
||||||
|
if result ? defaultPackage.${system}
|
||||||
|
then {default = result.defaultPackage.${system};}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
// (
|
||||||
|
if result ? packages.${system}.default
|
||||||
|
then {default = result.packages.${system}.default;}
|
||||||
|
else {}
|
||||||
|
);
|
||||||
|
|
||||||
in
|
shellNix =
|
||||||
rec {
|
defaultNix
|
||||||
defaultNix =
|
// (
|
||||||
(builtins.removeAttrs result ["__functor"])
|
if result ? devShell.${system}
|
||||||
// (if result ? defaultPackage.${system} then { default = result.defaultPackage.${system}; } else {})
|
then {default = result.devShell.${system};}
|
||||||
// (if result ? packages.${system}.default then { default = result.packages.${system}.default; } else {});
|
else {}
|
||||||
|
)
|
||||||
shellNix =
|
// (
|
||||||
defaultNix
|
if result ? devShells.${system}.default
|
||||||
// (if result ? devShell.${system} then { default = result.devShell.${system}; } else {})
|
then {default = result.devShells.${system}.default;}
|
||||||
// (if result ? devShells.${system}.default then { default = result.devShells.${system}.default; } else {});
|
else {}
|
||||||
}
|
);
|
||||||
|
}
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
let
|
let
|
||||||
pkgs = import ./nixpkgs.nix { config = { allowUnfree = true; }; };
|
pkgs = import ./nixpkgs.nix {config = {allowUnfree = true;};};
|
||||||
|
|
||||||
pure = pkgs.recurseIntoAttrs (pkgs.callPackage ./nixGL.nix {
|
pure = pkgs.recurseIntoAttrs (pkgs.callPackage ./nixGL.nix {
|
||||||
nvidiaVersion = "440.82";
|
nvidiaVersion = "440.82";
|
||||||
nvidiaHash = "edd415acf2f75a659e0f3b4f27c1fab770cf21614e84a18152d94f0d004a758e";
|
nvidiaHash = "edd415acf2f75a659e0f3b4f27c1fab770cf21614e84a18152d94f0d004a758e";
|
||||||
});
|
});
|
||||||
|
|
||||||
versionFile440 = (pkgs.callPackage ./nixGL.nix {
|
versionFile440 = pkgs.callPackage ./nixGL.nix {
|
||||||
nvidiaVersionFile = pkgs.writeText "nvidia-version-440.82" ''
|
nvidiaVersionFile = pkgs.writeText "nvidia-version-440.82" ''
|
||||||
NVRM version: NVIDIA UNIX x86_64 Kernel Module 440.82 Wed Apr 1 20:04:33 UTC 2020
|
NVRM version: NVIDIA UNIX x86_64 Kernel Module 440.82 Wed Apr 1 20:04:33 UTC 2020
|
||||||
GCC version: gcc version 9.3.0 (Arch Linux 9.3.0-1)
|
GCC version: gcc version 9.3.0 (Arch Linux 9.3.0-1)
|
||||||
'';
|
'';
|
||||||
});
|
};
|
||||||
|
|
||||||
versionFile510 = (pkgs.callPackage ./nixGL.nix {
|
versionFile510 = pkgs.callPackage ./nixGL.nix {
|
||||||
nvidiaVersionFile = pkgs.writeText "nvidia-version-510.54" ''
|
nvidiaVersionFile = pkgs.writeText "nvidia-version-510.54" ''
|
||||||
NVRM version: NVIDIA UNIX x86_64 Kernel Module 510.54 Wed Apr 1 20:04:33 UTC 2020
|
NVRM version: NVIDIA UNIX x86_64 Kernel Module 510.54 Wed Apr 1 20:04:33 UTC 2020
|
||||||
GCC version: gcc version 9.3.0 (Arch Linux 9.3.0-1)
|
GCC version: gcc version 9.3.0 (Arch Linux 9.3.0-1)
|
||||||
'';
|
'';
|
||||||
});
|
};
|
||||||
in
|
in
|
||||||
(with pure; [ nixGLIntel nixVulkanNvidia nixGLNvidia nixVulkanIntel ])
|
(with pure; [nixGLIntel nixVulkanNvidia nixGLNvidia nixVulkanIntel])
|
||||||
++ (with versionFile440.auto; [ nixGLNvidia nixGLDefault nixVulkanNvidia ])
|
++ (with versionFile440.auto; [nixGLNvidia nixGLDefault nixVulkanNvidia])
|
||||||
++ (with versionFile510.auto; [ nixGLNvidia nixGLDefault nixVulkanNvidia ])
|
++ (with versionFile510.auto; [nixGLNvidia nixGLDefault nixVulkanNvidia])
|
||||||
|
|
|
@ -1,36 +1,41 @@
|
||||||
{
|
{
|
||||||
## Nvidia informations.
|
## Nvidia informations.
|
||||||
# Version of the system kernel module. Let it to null to enable auto-detection.
|
# Version of the system kernel module. Let it to null to enable auto-detection.
|
||||||
nvidiaVersion ? null
|
nvidiaVersion ? null,
|
||||||
, # Hash of the Nvidia driver .run file. null is fine, but fixing a value here
|
# Hash of the Nvidia driver .run file. null is fine, but fixing a value here
|
||||||
# will be more reproducible and more efficient.
|
# will be more reproducible and more efficient.
|
||||||
nvidiaHash ? null
|
nvidiaHash ? null,
|
||||||
, # Alternatively, you can pass a path that points to a nvidia version file
|
# Alternatively, you can pass a path that points to a nvidia version file
|
||||||
# and let nixGL extract the version from it. That file must be a copy of
|
# and let nixGL extract the version from it. That file must be a copy of
|
||||||
# /proc/driver/nvidia/version. Nix doesn't like zero-sized files (see
|
# /proc/driver/nvidia/version. Nix doesn't like zero-sized files (see
|
||||||
# https://github.com/NixOS/nix/issues/3539 ).
|
# https://github.com/NixOS/nix/issues/3539 ).
|
||||||
nvidiaVersionFile ? null
|
nvidiaVersionFile ? null,
|
||||||
, # Enable 32 bits driver
|
# Enable 32 bits driver
|
||||||
# This is on by default, you can switch it to off if you want to reduce a
|
# This is on by default, you can switch it to off if you want to reduce a
|
||||||
# bit the size of nixGL closure.
|
# bit the size of nixGL closure.
|
||||||
enable32bits ? true
|
enable32bits ? true,
|
||||||
, # Make sure to enable config.allowUnfree to the instance of nixpkgs to be
|
# Make sure to enable config.allowUnfree to the instance of nixpkgs to be
|
||||||
# able to access the nvidia drivers.
|
# able to access the nvidia drivers.
|
||||||
pkgs ? import <nixpkgs> {
|
pkgs ?
|
||||||
config = { allowUnfree = true; };
|
import <nixpkgs> {
|
||||||
}
|
config = {allowUnfree = true;};
|
||||||
, # Enable all Intel specific extensions which only works on x86_64
|
},
|
||||||
enableIntelX86Extensions ? true
|
# Enable all Intel specific extensions which only works on x86_64
|
||||||
|
enableIntelX86Extensions ? true,
|
||||||
}:
|
}:
|
||||||
pkgs.callPackage ./nixGL.nix ({
|
pkgs.callPackage ./nixGL.nix ({
|
||||||
inherit
|
inherit
|
||||||
nvidiaVersion
|
nvidiaVersion
|
||||||
nvidiaVersionFile
|
nvidiaVersionFile
|
||||||
nvidiaHash
|
nvidiaHash
|
||||||
enable32bits
|
enable32bits
|
||||||
;
|
;
|
||||||
} // (if enableIntelX86Extensions then { }
|
}
|
||||||
else {
|
// (
|
||||||
intel-media-driver = null;
|
if enableIntelX86Extensions
|
||||||
vaapiIntel = null;
|
then {}
|
||||||
}))
|
else {
|
||||||
|
intel-media-driver = null;
|
||||||
|
vaapiIntel = null;
|
||||||
|
}
|
||||||
|
))
|
||||||
|
|
|
@ -4,45 +4,46 @@
|
||||||
inputs.flake-utils.url = "github:numtide/flake-utils";
|
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||||
inputs.nixpkgs.url = "github:nixos/nixpkgs";
|
inputs.nixpkgs.url = "github:nixos/nixpkgs";
|
||||||
|
|
||||||
outputs = { self, nixpkgs, flake-utils }:
|
outputs = {
|
||||||
(flake-utils.lib.eachDefaultSystem (system:
|
self,
|
||||||
let
|
nixpkgs,
|
||||||
isIntelX86Platform = system == "x86_64-linux";
|
flake-utils,
|
||||||
nix_pkgs = import nixpkgs { inherit system; };
|
}:
|
||||||
pkgs = import ./default.nix {
|
(flake-utils.lib.eachDefaultSystem (system: let
|
||||||
pkgs = nix_pkgs;
|
isIntelX86Platform = system == "x86_64-linux";
|
||||||
|
nix_pkgs = import nixpkgs {inherit system;};
|
||||||
|
pkgs = import ./default.nix {
|
||||||
|
pkgs = nix_pkgs;
|
||||||
|
enable32bits = isIntelX86Platform;
|
||||||
|
enableIntelX86Extensions = isIntelX86Platform;
|
||||||
|
};
|
||||||
|
in rec {
|
||||||
|
packages = {
|
||||||
|
# makes it easy to use "nix run nixGL --impure -- program"
|
||||||
|
default = pkgs.auto.nixGLDefault;
|
||||||
|
|
||||||
|
nixGLDefault = pkgs.auto.nixGLDefault;
|
||||||
|
nixGLNvidia = pkgs.auto.nixGLNvidia;
|
||||||
|
nixGLNvidiaBumblebee = pkgs.auto.nixGLNvidiaBumblebee;
|
||||||
|
nixGLIntel = pkgs.nixGLIntel;
|
||||||
|
nixVulkanNvidia = pkgs.auto.nixVulkanNvidia;
|
||||||
|
nixVulkanIntel = pkgs.nixVulkanIntel;
|
||||||
|
};
|
||||||
|
|
||||||
|
# deprecated attributes for retro compatibility
|
||||||
|
defaultPackage = packages;
|
||||||
|
}))
|
||||||
|
// rec {
|
||||||
|
# deprecated attributes for retro compatibility
|
||||||
|
overlay = overlays.default;
|
||||||
|
overlays.default = final: _: let
|
||||||
|
isIntelX86Platform = final.system == "x86_64-linux";
|
||||||
|
in {
|
||||||
|
nixgl = import ./default.nix {
|
||||||
|
pkgs = final;
|
||||||
enable32bits = isIntelX86Platform;
|
enable32bits = isIntelX86Platform;
|
||||||
enableIntelX86Extensions = isIntelX86Platform;
|
enableIntelX86Extensions = isIntelX86Platform;
|
||||||
};
|
};
|
||||||
in
|
};
|
||||||
rec {
|
|
||||||
|
|
||||||
packages = {
|
|
||||||
# makes it easy to use "nix run nixGL --impure -- program"
|
|
||||||
default = pkgs.auto.nixGLDefault;
|
|
||||||
|
|
||||||
nixGLDefault = pkgs.auto.nixGLDefault;
|
|
||||||
nixGLNvidia = pkgs.auto.nixGLNvidia;
|
|
||||||
nixGLNvidiaBumblebee = pkgs.auto.nixGLNvidiaBumblebee;
|
|
||||||
nixGLIntel = pkgs.nixGLIntel;
|
|
||||||
nixVulkanNvidia = pkgs.auto.nixVulkanNvidia;
|
|
||||||
nixVulkanIntel = pkgs.nixVulkanIntel;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
# deprecated attributes for retro compatibility
|
|
||||||
defaultPackage = packages;
|
|
||||||
})) // rec {
|
|
||||||
# deprecated attributes for retro compatibility
|
|
||||||
overlay = overlays.default;
|
|
||||||
overlays.default = final: _:
|
|
||||||
let isIntelX86Platform = final.system == "x86_64-linux";
|
|
||||||
in {
|
|
||||||
nixgl = import ./default.nix {
|
|
||||||
pkgs = final;
|
|
||||||
enable32bits = isIntelX86Platform;
|
|
||||||
enableIntelX86Extensions = isIntelX86Platform;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,45 +1,46 @@
|
||||||
{
|
{
|
||||||
# # Nvidia informations.
|
# # Nvidia informations.
|
||||||
# Version of the system kernel module. Let it to null to enable auto-detection.
|
# Version of the system kernel module. Let it to null to enable auto-detection.
|
||||||
nvidiaVersion ? null
|
nvidiaVersion ? null,
|
||||||
, # Hash of the Nvidia driver .run file. null is fine, but fixing a value here
|
# Hash of the Nvidia driver .run file. null is fine, but fixing a value here
|
||||||
# will be more reproducible and more efficient.
|
# will be more reproducible and more efficient.
|
||||||
nvidiaHash ? null
|
nvidiaHash ? null,
|
||||||
, # Alternatively, you can pass a path that points to a nvidia version file
|
# Alternatively, you can pass a path that points to a nvidia version file
|
||||||
# and let nixGL extract the version from it. That file must be a copy of
|
# and let nixGL extract the version from it. That file must be a copy of
|
||||||
# /proc/driver/nvidia/version. Nix doesn't like zero-sized files (see
|
# /proc/driver/nvidia/version. Nix doesn't like zero-sized files (see
|
||||||
# https://github.com/NixOS/nix/issues/3539 ).
|
# https://github.com/NixOS/nix/issues/3539 ).
|
||||||
nvidiaVersionFile ? null
|
nvidiaVersionFile ? null,
|
||||||
, # Enable 32 bits driver
|
# Enable 32 bits driver
|
||||||
# This is one by default, you can switch it to off if you want to reduce a
|
# This is one by default, you can switch it to off if you want to reduce a
|
||||||
# bit the size of nixGL closure.
|
# bit the size of nixGL closure.
|
||||||
enable32bits ? true
|
enable32bits ? true,
|
||||||
, writeTextFile
|
writeTextFile,
|
||||||
, shellcheck
|
shellcheck,
|
||||||
, pcre
|
pcre,
|
||||||
, runCommand
|
runCommand,
|
||||||
, linuxPackages
|
linuxPackages,
|
||||||
, fetchurl
|
fetchurl,
|
||||||
, lib
|
lib,
|
||||||
, runtimeShell
|
runtimeShell,
|
||||||
, bumblebee
|
bumblebee,
|
||||||
, libglvnd
|
libglvnd,
|
||||||
, vulkan-validation-layers
|
vulkan-validation-layers,
|
||||||
, mesa
|
mesa,
|
||||||
, libvdpau-va-gl
|
libvdpau-va-gl,
|
||||||
, intel-media-driver
|
intel-media-driver,
|
||||||
, vaapiIntel
|
vaapiIntel,
|
||||||
, pkgsi686Linux
|
pkgsi686Linux,
|
||||||
, driversi686Linux
|
driversi686Linux,
|
||||||
, zlib
|
zlib,
|
||||||
, libdrm
|
libdrm,
|
||||||
, xorg
|
xorg,
|
||||||
, wayland
|
wayland,
|
||||||
, gcc
|
gcc,
|
||||||
}:
|
}: let
|
||||||
|
writeExecutable = {
|
||||||
let
|
name,
|
||||||
writeExecutable = { name, text }:
|
text,
|
||||||
|
}:
|
||||||
writeTextFile {
|
writeTextFile {
|
||||||
inherit name text;
|
inherit name text;
|
||||||
|
|
||||||
|
@ -59,230 +60,234 @@ let
|
||||||
fetch_db = builtins.fromJSON (builtins.readFile ./nvidia_versions.json);
|
fetch_db = builtins.fromJSON (builtins.readFile ./nvidia_versions.json);
|
||||||
top = rec {
|
top = rec {
|
||||||
/*
|
/*
|
||||||
It contains the builder for different nvidia configuration, parametrized by
|
It contains the builder for different nvidia configuration, parametrized by
|
||||||
the version of the driver and sha256 sum of the driver installer file.
|
the version of the driver and sha256 sum of the driver installer file.
|
||||||
*/
|
*/
|
||||||
nvidiaPackages = { version, sha256 ? fetch_db."${version}".sha256 }:
|
nvidiaPackages = {
|
||||||
let
|
version,
|
||||||
nvidiaDrivers = (linuxPackages.nvidia_x11.override { }).overrideAttrs
|
sha256 ? fetch_db."${version}".sha256,
|
||||||
(oldAttrs: {
|
}: let
|
||||||
pname = "nvidia";
|
nvidiaDrivers =
|
||||||
name = "nvidia-x11-${version}-nixGL";
|
(linuxPackages.nvidia_x11.override {}).overrideAttrs
|
||||||
inherit version;
|
(oldAttrs: {
|
||||||
src =
|
pname = "nvidia";
|
||||||
let
|
name = "nvidia-x11-${version}-nixGL";
|
||||||
url =
|
inherit version;
|
||||||
"https://download.nvidia.com/XFree86/Linux-x86_64/${version}/NVIDIA-Linux-x86_64-${version}.run";
|
src = let
|
||||||
in
|
url = "https://download.nvidia.com/XFree86/Linux-x86_64/${version}/NVIDIA-Linux-x86_64-${version}.run";
|
||||||
fetchurl { inherit url sha256; };
|
in
|
||||||
useGLVND = true;
|
fetchurl {inherit url sha256;};
|
||||||
});
|
useGLVND = true;
|
||||||
nvidiaLibsOnly = nvidiaDrivers.override {
|
});
|
||||||
libsOnly = true;
|
nvidiaLibsOnly = nvidiaDrivers.override {
|
||||||
kernel = null;
|
libsOnly = true;
|
||||||
};
|
kernel = null;
|
||||||
nixNvidiaWrapper = api:
|
};
|
||||||
writeExecutable {
|
nixNvidiaWrapper = api:
|
||||||
name = "nix${api}Nvidia-${version}";
|
writeExecutable {
|
||||||
text = ''
|
name = "nix${api}Nvidia-${version}";
|
||||||
#!${runtimeShell}
|
|
||||||
${lib.optionalString (api == "Vulkan")
|
|
||||||
"export VK_LAYER_PATH=${vulkan-validation-layers}/share/vulkan/explicit_layer.d"}
|
|
||||||
NVIDIA_JSON=(${nvidiaLibsOnly}/share/glvnd/egl_vendor.d/*nvidia.json)
|
|
||||||
${lib.optionalString enable32bits "NVIDIA_JSON32=(${nvidiaLibsOnly.lib32}/share/glvnd/egl_vendor.d/*nvidia.json)"}
|
|
||||||
|
|
||||||
${''export __EGL_VENDOR_LIBRARY_FILENAMES=''${NVIDIA_JSON[*]}${
|
|
||||||
lib.optionalString enable32bits
|
|
||||||
'':''${NVIDIA_JSON32[*]}''
|
|
||||||
}"''${__EGL_VENDOR_LIBRARY_FILENAMES:+:$__EGL_VENDOR_LIBRARY_FILENAMES}"''
|
|
||||||
}
|
|
||||||
|
|
||||||
${
|
|
||||||
lib.optionalString (api == "Vulkan")
|
|
||||||
''export VK_ICD_FILENAMES=${nvidiaLibsOnly}/share/vulkan/icd.d/nvidia_icd.json${
|
|
||||||
lib.optionalString enable32bits
|
|
||||||
":${nvidiaLibsOnly.lib32}/share/vulkan/icd.d/nvidia_icd.json"
|
|
||||||
}"''${VK_ICD_FILENAMES:+:$VK_ICD_FILENAMES}"''
|
|
||||||
}
|
|
||||||
export LD_LIBRARY_PATH=${
|
|
||||||
lib.makeLibraryPath ([ libglvnd nvidiaLibsOnly ]
|
|
||||||
++ lib.optional (api == "Vulkan") vulkan-validation-layers
|
|
||||||
++ lib.optionals enable32bits [
|
|
||||||
nvidiaLibsOnly.lib32
|
|
||||||
pkgsi686Linux.libglvnd
|
|
||||||
])
|
|
||||||
}"''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
|
||||||
exec "$@"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
inherit nvidiaDrivers nvidiaLibsOnly;
|
|
||||||
|
|
||||||
nixGLNvidiaBumblebee = writeExecutable {
|
|
||||||
name = "nixGLNvidiaBumblebee-${version}";
|
|
||||||
text = ''
|
text = ''
|
||||||
#!${runtimeShell}
|
#!${runtimeShell}
|
||||||
export LD_LIBRARY_PATH=${
|
${lib.optionalString (api == "Vulkan")
|
||||||
lib.makeLibraryPath [ nvidiaDrivers ]
|
"export VK_LAYER_PATH=${vulkan-validation-layers}/share/vulkan/explicit_layer.d"}
|
||||||
}"''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
NVIDIA_JSON=(${nvidiaLibsOnly}/share/glvnd/egl_vendor.d/*nvidia.json)
|
||||||
${
|
${lib.optionalString enable32bits "NVIDIA_JSON32=(${nvidiaLibsOnly.lib32}/share/glvnd/egl_vendor.d/*nvidia.json)"}
|
||||||
bumblebee.override {
|
|
||||||
nvidia_x11 = nvidiaDrivers;
|
${''export __EGL_VENDOR_LIBRARY_FILENAMES=''${NVIDIA_JSON[*]}${
|
||||||
nvidia_x11_i686 = nvidiaDrivers.lib32;
|
lib.optionalString enable32bits
|
||||||
}
|
'':''${NVIDIA_JSON32[*]}''
|
||||||
}/bin/optirun --ldpath ${
|
}"''${__EGL_VENDOR_LIBRARY_FILENAMES:+:$__EGL_VENDOR_LIBRARY_FILENAMES}"''}
|
||||||
lib.makeLibraryPath ([ libglvnd nvidiaDrivers ]
|
|
||||||
|
${
|
||||||
|
lib.optionalString (api == "Vulkan")
|
||||||
|
''export VK_ICD_FILENAMES=${nvidiaLibsOnly}/share/vulkan/icd.d/nvidia_icd.json${
|
||||||
|
lib.optionalString enable32bits
|
||||||
|
":${nvidiaLibsOnly.lib32}/share/vulkan/icd.d/nvidia_icd.json"
|
||||||
|
}"''${VK_ICD_FILENAMES:+:$VK_ICD_FILENAMES}"''
|
||||||
|
}
|
||||||
|
export LD_LIBRARY_PATH=${
|
||||||
|
lib.makeLibraryPath ([libglvnd nvidiaLibsOnly]
|
||||||
|
++ lib.optional (api == "Vulkan") vulkan-validation-layers
|
||||||
++ lib.optionals enable32bits [
|
++ lib.optionals enable32bits [
|
||||||
nvidiaDrivers.lib32
|
nvidiaLibsOnly.lib32
|
||||||
pkgsi686Linux.libglvnd
|
pkgsi686Linux.libglvnd
|
||||||
])
|
])
|
||||||
} "$@"
|
}"''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
||||||
|
exec "$@"
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
in {
|
||||||
|
inherit nvidiaDrivers nvidiaLibsOnly;
|
||||||
|
|
||||||
# TODO: 32bit version? Not tested.
|
nixGLNvidiaBumblebee = writeExecutable {
|
||||||
inherit nixNvidiaWrapper;
|
name = "nixGLNvidiaBumblebee-${version}";
|
||||||
|
text = ''
|
||||||
# TODO: 32bit version? Not tested.
|
#!${runtimeShell}
|
||||||
nixGLNvidia = nixNvidiaWrapper "GL";
|
export LD_LIBRARY_PATH=${
|
||||||
|
lib.makeLibraryPath [nvidiaDrivers]
|
||||||
# TODO: 32bit version? Not tested.
|
}"''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
||||||
nixVulkanNvidia = nixNvidiaWrapper "Vulkan";
|
${
|
||||||
|
bumblebee.override {
|
||||||
|
nvidia_x11 = nvidiaDrivers;
|
||||||
|
nvidia_x11_i686 = nvidiaDrivers.lib32;
|
||||||
|
}
|
||||||
|
}/bin/optirun --ldpath ${
|
||||||
|
lib.makeLibraryPath ([libglvnd nvidiaDrivers]
|
||||||
|
++ lib.optionals enable32bits [
|
||||||
|
nvidiaDrivers.lib32
|
||||||
|
pkgsi686Linux.libglvnd
|
||||||
|
])
|
||||||
|
} "$@"
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# TODO: 32bit version? Not tested.
|
||||||
|
inherit nixNvidiaWrapper;
|
||||||
|
|
||||||
|
# TODO: 32bit version? Not tested.
|
||||||
|
nixGLNvidia = nixNvidiaWrapper "GL";
|
||||||
|
|
||||||
|
# TODO: 32bit version? Not tested.
|
||||||
|
nixVulkanNvidia = nixNvidiaWrapper "Vulkan";
|
||||||
|
};
|
||||||
|
|
||||||
nixGLIntel = writeExecutable {
|
nixGLIntel = writeExecutable {
|
||||||
name = "nixGLIntel";
|
name = "nixGLIntel";
|
||||||
# add the 32 bits drivers if needed
|
# add the 32 bits drivers if needed
|
||||||
text =
|
text = let
|
||||||
let
|
mesa-drivers =
|
||||||
mesa-drivers = [ mesa.drivers ]
|
[mesa.drivers]
|
||||||
++ lib.optional enable32bits pkgsi686Linux.mesa.drivers;
|
++ lib.optional enable32bits pkgsi686Linux.mesa.drivers;
|
||||||
intel-driver = [ intel-media-driver vaapiIntel ]
|
intel-driver =
|
||||||
# Note: intel-media-driver is disabled for i686 until https://github.com/NixOS/nixpkgs/issues/140471 is fixed
|
[intel-media-driver vaapiIntel]
|
||||||
++ lib.optionals enable32bits [ /* pkgsi686Linux.intel-media-driver */ driversi686Linux.vaapiIntel ];
|
# Note: intel-media-driver is disabled for i686 until https://github.com/NixOS/nixpkgs/issues/140471 is fixed
|
||||||
libvdpau = [ libvdpau-va-gl ]
|
++ lib.optionals enable32bits [
|
||||||
++ lib.optional enable32bits pkgsi686Linux.libvdpau-va-gl;
|
/*
|
||||||
glxindirect = runCommand "mesa_glxindirect" { } (
|
pkgsi686Linux.intel-media-driver
|
||||||
''
|
*/
|
||||||
mkdir -p $out/lib
|
driversi686Linux.vaapiIntel
|
||||||
ln -s ${mesa.drivers}/lib/libGLX_mesa.so.0 $out/lib/libGLX_indirect.so.0
|
];
|
||||||
''
|
libvdpau =
|
||||||
);
|
[libvdpau-va-gl]
|
||||||
in
|
++ lib.optional enable32bits pkgsi686Linux.libvdpau-va-gl;
|
||||||
''
|
glxindirect = runCommand "mesa_glxindirect" {} ''
|
||||||
#!${runtimeShell}
|
mkdir -p $out/lib
|
||||||
export LIBGL_DRIVERS_PATH=${lib.makeSearchPathOutput "lib" "lib/dri" mesa-drivers}
|
ln -s ${mesa.drivers}/lib/libGLX_mesa.so.0 $out/lib/libGLX_indirect.so.0
|
||||||
export LIBVA_DRIVERS_PATH=${lib.makeSearchPathOutput "out" "lib/dri" intel-driver}
|
'';
|
||||||
${''export __EGL_VENDOR_LIBRARY_FILENAMES=${mesa.drivers}/share/glvnd/egl_vendor.d/50_mesa.json${
|
in ''
|
||||||
|
#!${runtimeShell}
|
||||||
|
export LIBGL_DRIVERS_PATH=${lib.makeSearchPathOutput "lib" "lib/dri" mesa-drivers}
|
||||||
|
export LIBVA_DRIVERS_PATH=${lib.makeSearchPathOutput "out" "lib/dri" intel-driver}
|
||||||
|
${''export __EGL_VENDOR_LIBRARY_FILENAMES=${mesa.drivers}/share/glvnd/egl_vendor.d/50_mesa.json${
|
||||||
lib.optionalString enable32bits
|
lib.optionalString enable32bits
|
||||||
":${pkgsi686Linux.mesa.drivers}/share/glvnd/egl_vendor.d/50_mesa.json"
|
":${pkgsi686Linux.mesa.drivers}/share/glvnd/egl_vendor.d/50_mesa.json"
|
||||||
}"''${__EGL_VENDOR_LIBRARY_FILENAMES:+:$__EGL_VENDOR_LIBRARY_FILENAMES}"''
|
}"''${__EGL_VENDOR_LIBRARY_FILENAMES:+:$__EGL_VENDOR_LIBRARY_FILENAMES}"''}
|
||||||
}
|
export LD_LIBRARY_PATH=${lib.makeLibraryPath mesa-drivers}:${lib.makeSearchPathOutput "lib" "lib/vdpau" libvdpau}:${glxindirect}/lib:${lib.makeLibraryPath [libglvnd]}"''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
||||||
export LD_LIBRARY_PATH=${lib.makeLibraryPath mesa-drivers}:${lib.makeSearchPathOutput "lib" "lib/vdpau" libvdpau}:${glxindirect}/lib:${lib.makeLibraryPath [libglvnd]}"''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
exec "$@"
|
||||||
exec "$@"
|
'';
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
nixVulkanIntel = writeExecutable {
|
nixVulkanIntel = writeExecutable {
|
||||||
name = "nixVulkanIntel";
|
name = "nixVulkanIntel";
|
||||||
text =
|
text = let
|
||||||
let
|
# generate a file with the listing of all the icd files
|
||||||
# generate a file with the listing of all the icd files
|
icd = runCommand "mesa_icd" {} (
|
||||||
icd = runCommand "mesa_icd" { } (
|
# 64 bits icd
|
||||||
# 64 bits icd
|
''
|
||||||
''
|
ls ${mesa.drivers}/share/vulkan/icd.d/*.json > f
|
||||||
ls ${mesa.drivers}/share/vulkan/icd.d/*.json > f
|
''
|
||||||
''
|
# 32 bits ones
|
||||||
# 32 bits ones
|
+ lib.optionalString enable32bits ''
|
||||||
+ lib.optionalString enable32bits ''
|
ls ${pkgsi686Linux.mesa.drivers}/share/vulkan/icd.d/*.json >> f
|
||||||
ls ${pkgsi686Linux.mesa.drivers}/share/vulkan/icd.d/*.json >> f
|
''
|
||||||
''
|
# concat everything as a one line string with ":" as seperator
|
||||||
# concat everything as a one line string with ":" as seperator
|
+ ''cat f | xargs | sed "s/ /:/g" > $out''
|
||||||
+ ''cat f | xargs | sed "s/ /:/g" > $out''
|
);
|
||||||
);
|
in ''
|
||||||
in
|
#!${runtimeShell}
|
||||||
''
|
if [ -n "$LD_LIBRARY_PATH" ]; then
|
||||||
#!${runtimeShell}
|
echo "Warning, nixVulkanIntel overwriting existing LD_LIBRARY_PATH" 1>&2
|
||||||
if [ -n "$LD_LIBRARY_PATH" ]; then
|
fi
|
||||||
echo "Warning, nixVulkanIntel overwriting existing LD_LIBRARY_PATH" 1>&2
|
export VK_LAYER_PATH=${vulkan-validation-layers}/share/vulkan/explicit_layer.d
|
||||||
fi
|
ICDS=$(cat ${icd})
|
||||||
export VK_LAYER_PATH=${vulkan-validation-layers}/share/vulkan/explicit_layer.d
|
export VK_ICD_FILENAMES=$ICDS"''${VK_ICD_FILENAMES:+:$VK_ICD_FILENAMES}"
|
||||||
ICDS=$(cat ${icd})
|
export LD_LIBRARY_PATH=${
|
||||||
export VK_ICD_FILENAMES=$ICDS"''${VK_ICD_FILENAMES:+:$VK_ICD_FILENAMES}"
|
lib.makeLibraryPath [
|
||||||
export LD_LIBRARY_PATH=${
|
zlib
|
||||||
lib.makeLibraryPath [
|
libdrm
|
||||||
zlib
|
xorg.libX11
|
||||||
libdrm
|
xorg.libxcb
|
||||||
xorg.libX11
|
xorg.libxshmfence
|
||||||
xorg.libxcb
|
wayland
|
||||||
xorg.libxshmfence
|
gcc.cc
|
||||||
wayland
|
]
|
||||||
gcc.cc
|
}"''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
||||||
]
|
exec "$@"
|
||||||
}"''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
'';
|
||||||
exec "$@"
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
nixGLCommon = nixGL:
|
nixGLCommon = nixGL:
|
||||||
runCommand "nixGL" { } ''
|
runCommand "nixGL" {} ''
|
||||||
mkdir -p "$out/bin"
|
mkdir -p "$out/bin"
|
||||||
# star because nixGLNvidia... have version prefixed name
|
# star because nixGLNvidia... have version prefixed name
|
||||||
cp ${nixGL}/bin/* "$out/bin/nixGL";
|
cp ${nixGL}/bin/* "$out/bin/nixGL";
|
||||||
'';
|
'';
|
||||||
|
|
||||||
auto =
|
auto = let
|
||||||
let
|
_nvidiaVersionFile =
|
||||||
_nvidiaVersionFile =
|
if nvidiaVersionFile != null
|
||||||
if nvidiaVersionFile != null then
|
then nvidiaVersionFile
|
||||||
nvidiaVersionFile
|
else
|
||||||
else
|
|
||||||
# HACK: Get the version from /proc. It turns out that /proc is mounted
|
# HACK: Get the version from /proc. It turns out that /proc is mounted
|
||||||
# inside of the build sandbox and varies from machine to machine.
|
# inside of the build sandbox and varies from machine to machine.
|
||||||
#
|
#
|
||||||
# builtins.readFile is not able to read /proc files. See
|
# builtins.readFile is not able to read /proc files. See
|
||||||
# https://github.com/NixOS/nix/issues/3539.
|
# https://github.com/NixOS/nix/issues/3539.
|
||||||
runCommand "impure-nvidia-version-file"
|
runCommand "impure-nvidia-version-file"
|
||||||
{
|
{
|
||||||
# To avoid sharing the build result over time or between machine,
|
# To avoid sharing the build result over time or between machine,
|
||||||
# Add an impure parameter to force the rebuild on each access.
|
# Add an impure parameter to force the rebuild on each access.
|
||||||
# time = builtins.currentTime;
|
# time = builtins.currentTime;
|
||||||
preferLocalBuild = true;
|
preferLocalBuild = true;
|
||||||
allowSubstitutes = false;
|
allowSubstitutes = false;
|
||||||
} "cp /proc/driver/nvidia/version $out 2> /dev/null || touch $out";
|
} "cp /proc/driver/nvidia/version $out 2> /dev/null || touch $out";
|
||||||
|
|
||||||
# The nvidia version. Either fixed by the `nvidiaVersion` argument, or
|
# The nvidia version. Either fixed by the `nvidiaVersion` argument, or
|
||||||
# auto-detected. Auto-detection is impure.
|
# auto-detected. Auto-detection is impure.
|
||||||
nvidiaVersionAuto =
|
nvidiaVersionAuto =
|
||||||
if nvidiaVersion != null then
|
if nvidiaVersion != null
|
||||||
nvidiaVersion
|
then nvidiaVersion
|
||||||
else
|
else
|
||||||
# Get if from the nvidiaVersionFile
|
# Get if from the nvidiaVersionFile
|
||||||
let
|
let
|
||||||
data = builtins.readFile _nvidiaVersionFile;
|
data = builtins.readFile _nvidiaVersionFile;
|
||||||
versionMatch = builtins.match ".*Module ([0-9.]+) .*" data;
|
versionMatch = builtins.match ".*Module ([0-9.]+) .*" data;
|
||||||
in
|
in
|
||||||
if versionMatch != null then builtins.head versionMatch else null;
|
if versionMatch != null
|
||||||
|
then builtins.head versionMatch
|
||||||
|
else null;
|
||||||
|
|
||||||
autoNvidia = nvidiaPackages { version = nvidiaVersionAuto; };
|
autoNvidia = nvidiaPackages {version = nvidiaVersionAuto;};
|
||||||
in
|
in
|
||||||
rec {
|
rec {
|
||||||
# The output derivation contains nixGL which point either to
|
# The output derivation contains nixGL which point either to
|
||||||
# nixGLNvidia or nixGLIntel using an heuristic.
|
# nixGLNvidia or nixGLIntel using an heuristic.
|
||||||
nixGLDefault =
|
nixGLDefault =
|
||||||
if nvidiaVersionAuto != null then
|
if nvidiaVersionAuto != null
|
||||||
nixGLCommon autoNvidia.nixGLNvidia
|
then nixGLCommon autoNvidia.nixGLNvidia
|
||||||
else
|
else nixGLCommon nixGLIntel;
|
||||||
nixGLCommon nixGLIntel;
|
}
|
||||||
} // autoNvidia;
|
// autoNvidia;
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
top // (if nvidiaVersion != null then
|
top
|
||||||
top.nvidiaPackages
|
// (
|
||||||
{
|
if nvidiaVersion != null
|
||||||
version = nvidiaVersion;
|
then
|
||||||
sha256 = nvidiaHash;
|
top.nvidiaPackages
|
||||||
}
|
{
|
||||||
else
|
version = nvidiaVersion;
|
||||||
{ })
|
sha256 = nvidiaHash;
|
||||||
|
}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
let
|
let
|
||||||
rev = "4f6d8095fd51";
|
rev = "4f6d8095fd51";
|
||||||
in
|
in
|
||||||
import (fetchTarball {
|
import (fetchTarball {
|
||||||
url = "https://github.com/nixos/nixpkgs/archive/${rev}.tar.gz";
|
url = "https://github.com/nixos/nixpkgs/archive/${rev}.tar.gz";
|
||||||
sha256 = "14sm0bjjcmi9qmznwy3nkd2vbhj5xcshgm54a5wiprl9ssvxqw53";
|
sha256 = "14sm0bjjcmi9qmznwy3nkd2vbhj5xcshgm54a5wiprl9ssvxqw53";
|
||||||
})
|
})
|
||||||
|
|
39
secrets.nix
39
secrets.nix
|
@ -1,22 +1,29 @@
|
||||||
|
# WARNING: currently not usable anymore
|
||||||
let
|
let
|
||||||
inherit ((import
|
inherit
|
||||||
(
|
((
|
||||||
let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in
|
import
|
||||||
fetchTarball {
|
(
|
||||||
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
|
let
|
||||||
sha256 = lock.nodes.flake-compat.locked.narHash;
|
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
||||||
}
|
in
|
||||||
)
|
fetchTarball {
|
||||||
{ src = ./.; }
|
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
|
||||||
).defaultNix) secrets;
|
sha256 = lock.nodes.flake-compat.locked.narHash;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
{src = ./.;}
|
||||||
|
)
|
||||||
|
.defaultNix)
|
||||||
|
secrets
|
||||||
|
;
|
||||||
inherit (secrets) pubKeys;
|
inherit (secrets) pubKeys;
|
||||||
inherit (pubKeys) users hosts;
|
inherit (pubKeys) users hosts;
|
||||||
all = users // hosts;
|
all = users // hosts;
|
||||||
c_ = builtins;
|
c_ = builtins;
|
||||||
in
|
in {
|
||||||
{
|
"secrets/s3fs.age".publicKeys = c_.attrValues all;
|
||||||
"secrets/s3fs.age".publicKeys = c_.attrValues (all);
|
"secrets/s3fs.digital-garden.age".publicKeys = c_.attrValues all;
|
||||||
"secrets/s3fs.digital-garden.age".publicKeys = c_.attrValues (all);
|
"secrets/_nhitrl.age".publicKeys = c_.attrValues all;
|
||||||
"secrets/_nhitrl.age".publicKeys = c_.attrValues (all);
|
"secrets/wifi.env.age".publicKeys = c_.attrValues all;
|
||||||
"secrets/wifi.env.age".publicKeys = c_.attrValues (all);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# TODO: put ssh keys as user/host config
|
# TODO: put ssh keys as user/host config
|
||||||
inputs:
|
inputs: let
|
||||||
let
|
|
||||||
# user-specific (~/.ssh/id_ed25519.pub)
|
# user-specific (~/.ssh/id_ed25519.pub)
|
||||||
users = {
|
users = {
|
||||||
"hungtr@bao" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK+1+gps6phbZboIb9fH51VNPUCkhSSOAbkI3tq3Ou0Z";
|
"hungtr@bao" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK+1+gps6phbZboIb9fH51VNPUCkhSSOAbkI3tq3Ou0Z";
|
||||||
|
@ -12,9 +11,8 @@ let
|
||||||
all = users // systems;
|
all = users // systems;
|
||||||
# stands for calculus
|
# stands for calculus
|
||||||
c_ = builtins;
|
c_ = builtins;
|
||||||
in
|
in {
|
||||||
{
|
"system/secrets/s3fs.age".publicKeys = c_.attrValues all;
|
||||||
"system/secrets/s3fs.age".publicKeys = c_.attrValues (all);
|
"system/secrets/s3fs.digital-garden.age".publicKeys = c_.attrValues all;
|
||||||
"system/secrets/s3fs.digital-garden.age".publicKeys = c_.attrValues (all);
|
"system/secrets/_nhitrl.age".publicKeys = c_.attrValues all;
|
||||||
"system/secrets/_nhitrl.age".publicKeys = c_.attrValues (all);
|
|
||||||
}
|
}
|
||||||
|
|
11
shell.nix
11
shell.nix
|
@ -1,11 +1,14 @@
|
||||||
# This uses the exported devShells from flake.nix
|
# This uses the exported devShells from flake.nix
|
||||||
# the default or base version of nix-shell can be found in dev-shell.nix instead
|
# the default or base version of nix-shell can be found in dev-shell.nix instead
|
||||||
# This architecture is because we use top-level flake.nix
|
# This architecture is because we use top-level flake.nix
|
||||||
(import
|
(
|
||||||
|
import
|
||||||
(
|
(
|
||||||
let
|
let
|
||||||
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
||||||
in (import ./c_.nix).fetchTree lock.nodes.flake-compat.locked
|
in
|
||||||
|
(import ./c_.nix).fetchTree lock.nodes.flake-compat.locked
|
||||||
)
|
)
|
||||||
{ src = ./.; }
|
{src = ./.;}
|
||||||
).shellNix
|
)
|
||||||
|
.shellNix
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
# TODO: templates should be able to have initial states like
|
# TODO: templates should be able to have initial states like
|
||||||
# repo name, author,...
|
# repo name, author,...
|
||||||
{ pkgs
|
{
|
||||||
, lib
|
pkgs,
|
||||||
, ...
|
lib,
|
||||||
|
...
|
||||||
}: {
|
}: {
|
||||||
rust = {
|
rust = {
|
||||||
path = ./rust;
|
path = ./rust;
|
||||||
|
|
|
@ -7,4 +7,5 @@
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
src = ./.;
|
src = ./.;
|
||||||
}).defaultNix
|
})
|
||||||
|
.defaultNix
|
||||||
|
|
|
@ -1,29 +1,30 @@
|
||||||
{
|
{
|
||||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||||
|
|
||||||
outputs = { self, nixpkgs }:
|
outputs = {
|
||||||
let
|
self,
|
||||||
supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
|
nixpkgs,
|
||||||
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
|
}: let
|
||||||
pkgs = forAllSystems (system: nixpkgs.legacyPackages.${system});
|
supportedSystems = ["x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"];
|
||||||
in
|
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
|
||||||
{
|
pkgs = forAllSystems (system: nixpkgs.legacyPackages.${system});
|
||||||
packages = forAllSystems (system: {
|
in {
|
||||||
default = pkgs.${system}.poetry2nix.mkPoetryApplication { projectDir = self; };
|
packages = forAllSystems (system: {
|
||||||
});
|
default = pkgs.${system}.poetry2nix.mkPoetryApplication {projectDir = self;};
|
||||||
|
});
|
||||||
|
|
||||||
devShells = forAllSystems (system: {
|
devShells = forAllSystems (system: {
|
||||||
bootstrap = pkgs.${system}.mkShellNoCC {
|
bootstrap = pkgs.${system}.mkShellNoCC {
|
||||||
packages = [
|
packages = [
|
||||||
pkgs.${system}.poetry
|
pkgs.${system}.poetry
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
default = pkgs.${system}.mkShellNoCC {
|
default = pkgs.${system}.mkShellNoCC {
|
||||||
packages = [
|
packages = [
|
||||||
(pkgs.${system}.poetry2nix.mkPoetryEnv { projectDir = self; })
|
(pkgs.${system}.poetry2nix.mkPoetryEnv {projectDir = self;})
|
||||||
pkgs.${system}.poetry
|
pkgs.${system}.poetry
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,4 +7,5 @@
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
src = ./.;
|
src = ./.;
|
||||||
}).shellNix
|
})
|
||||||
|
.shellNix
|
||||||
|
|
|
@ -7,4 +7,5 @@
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
src = ./.;
|
src = ./.;
|
||||||
}).defaultNix
|
})
|
||||||
|
.defaultNix
|
||||||
|
|
|
@ -6,23 +6,29 @@
|
||||||
rust-overlay.url = "github:oxalica/rust-overlay";
|
rust-overlay.url = "github:oxalica/rust-overlay";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, utils, naersk, rust-overlay }:
|
outputs = {
|
||||||
utils.lib.eachDefaultSystem (system:
|
self,
|
||||||
let
|
nixpkgs,
|
||||||
overlays = [ rust-overlay.overlays.default ];
|
utils,
|
||||||
pkgs = import nixpkgs { inherit system overlays; };
|
naersk,
|
||||||
rust_pkgs = (pkgs.rust-bin.selectLatestNightlyWith
|
rust-overlay,
|
||||||
(
|
}:
|
||||||
toolchain:
|
utils.lib.eachDefaultSystem (system: let
|
||||||
|
overlays = [rust-overlay.overlays.default];
|
||||||
|
pkgs = import nixpkgs {inherit system overlays;};
|
||||||
|
rust_pkgs =
|
||||||
|
pkgs.rust-bin.selectLatestNightlyWith
|
||||||
|
(
|
||||||
|
toolchain:
|
||||||
toolchain.default.override {
|
toolchain.default.override {
|
||||||
extensions = [ "rust-src" "rust-analyzer" "rust-docs" "clippy" "miri" ];
|
extensions = ["rust-src" "rust-analyzer" "rust-docs" "clippy" "miri"];
|
||||||
}
|
}
|
||||||
));
|
);
|
||||||
naersk-lib = pkgs.callPackage naersk { };
|
naersk-lib = pkgs.callPackage naersk {};
|
||||||
in
|
in {
|
||||||
{
|
defaultPackage = naersk-lib.buildPackage ./.;
|
||||||
defaultPackage = naersk-lib.buildPackage ./.;
|
devShell = with pkgs;
|
||||||
devShell = with pkgs; mkShell {
|
mkShell {
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
rust_pkgs
|
rust_pkgs
|
||||||
# rust's compiler is quite powerful enough to the point where
|
# rust's compiler is quite powerful enough to the point where
|
||||||
|
@ -37,5 +43,5 @@
|
||||||
# nix flake update # is this even needed?
|
# nix flake update # is this even needed?
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,4 +7,5 @@
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
src = ./.;
|
src = ./.;
|
||||||
}).shellNix
|
})
|
||||||
|
.shellNix
|
||||||
|
|
|
@ -7,4 +7,5 @@
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
src = ./.;
|
src = ./.;
|
||||||
}).defaultNix
|
})
|
||||||
|
.defaultNix
|
||||||
|
|
|
@ -6,23 +6,29 @@
|
||||||
rust-overlay.url = "github:oxalica/rust-overlay";
|
rust-overlay.url = "github:oxalica/rust-overlay";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, utils, naersk, rust-overlay }:
|
outputs = {
|
||||||
utils.lib.eachDefaultSystem (system:
|
self,
|
||||||
let
|
nixpkgs,
|
||||||
overlays = [ rust-overlay.overlays.default ];
|
utils,
|
||||||
pkgs = import nixpkgs { inherit system overlays; };
|
naersk,
|
||||||
rust_pkgs = (pkgs.rust-bin.selectLatestNightlyWith
|
rust-overlay,
|
||||||
(
|
}:
|
||||||
toolchain:
|
utils.lib.eachDefaultSystem (system: let
|
||||||
|
overlays = [rust-overlay.overlays.default];
|
||||||
|
pkgs = import nixpkgs {inherit system overlays;};
|
||||||
|
rust_pkgs =
|
||||||
|
pkgs.rust-bin.selectLatestNightlyWith
|
||||||
|
(
|
||||||
|
toolchain:
|
||||||
toolchain.default.override {
|
toolchain.default.override {
|
||||||
extensions = [ "rust-src" "rust-analyzer" "rust-docs" "clippy" "miri" ];
|
extensions = ["rust-src" "rust-analyzer" "rust-docs" "clippy" "miri"];
|
||||||
}
|
}
|
||||||
));
|
);
|
||||||
naersk-lib = pkgs.callPackage naersk { };
|
naersk-lib = pkgs.callPackage naersk {};
|
||||||
in
|
in {
|
||||||
{
|
defaultPackage = naersk-lib.buildPackage ./.;
|
||||||
defaultPackage = naersk-lib.buildPackage ./.;
|
devShell = with pkgs;
|
||||||
devShell = with pkgs; mkShell {
|
mkShell {
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
rust_pkgs
|
rust_pkgs
|
||||||
# rust's compiler is quite powerful enough to the point where
|
# rust's compiler is quite powerful enough to the point where
|
||||||
|
@ -37,5 +43,5 @@
|
||||||
# nix flake update # is this even needed?
|
# nix flake update # is this even needed?
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,4 +7,5 @@
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
src = ./.;
|
src = ./.;
|
||||||
}).shellNix
|
})
|
||||||
|
.shellNix
|
||||||
|
|
|
@ -9,45 +9,52 @@
|
||||||
turbo.url = "github:dlip/turbo";
|
turbo.url = "github:dlip/turbo";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, turbo, flake-utils, nixpkgs }:
|
outputs = {
|
||||||
with flake-utils; lib.eachSystem lib.defaultSystems (sys:
|
self,
|
||||||
let
|
turbo,
|
||||||
overlays = [ turbo.overlay ];
|
flake-utils,
|
||||||
# pkgs is our tweaked nixpkgs
|
nixpkgs,
|
||||||
pkgs = import nixpkgs { system = sys; overlays = overlays; };
|
}:
|
||||||
shellMsg = ''
|
with flake-utils; lib.eachSystem lib.defaultSystems (sys: let
|
||||||
echo "Hello from nix ${sys}"
|
overlays = [turbo.overlay];
|
||||||
echo "Local development may use our remote planetscale database (pscale login && pnpm dev:infra; pnpm dev)"
|
# pkgs is our tweaked nixpkgs
|
||||||
echo "Or from the specified docker-compose.yml (pnpm dev:local_infra && pnpm dev)"
|
pkgs = import nixpkgs {
|
||||||
echo "See more on CONTRIBUTING.md"
|
system = sys;
|
||||||
'';
|
overlays = overlays;
|
||||||
in
|
};
|
||||||
{
|
shellMsg = ''
|
||||||
devShell = pkgs.mkShell {
|
echo "Hello from nix ${sys}"
|
||||||
nativeBuildInputs = [ pkgs.bashInteractive ];
|
echo "Local development may use our remote planetscale database (pscale login && pnpm dev:infra; pnpm dev)"
|
||||||
buildInputs = [
|
echo "Or from the specified docker-compose.yml (pnpm dev:local_infra && pnpm dev)"
|
||||||
pkgs.nodejs-18_x
|
echo "See more on CONTRIBUTING.md"
|
||||||
pkgs.nodePackages.pnpm
|
'';
|
||||||
pkgs.nodePackages.prisma
|
in {
|
||||||
pkgs.prisma-engines
|
devShell = pkgs.mkShell {
|
||||||
pkgs.turbo
|
nativeBuildInputs = [pkgs.bashInteractive];
|
||||||
# pkgs.turbo-tooling
|
buildInputs = [
|
||||||
pkgs.jq
|
pkgs.nodejs-18_x
|
||||||
pkgs.pscale
|
pkgs.nodePackages.pnpm
|
||||||
pkgs.act # Github workflow
|
pkgs.nodePackages.prisma
|
||||||
];
|
pkgs.prisma-engines
|
||||||
shellHook =
|
pkgs.turbo
|
||||||
# https://github.com/prisma/prisma/issues/3026#issuecomment-927258138
|
# pkgs.turbo-tooling
|
||||||
# nix-direnv is required (impure build?) https://github.com/nix-community/nix-direnv
|
pkgs.jq
|
||||||
''
|
pkgs.pscale
|
||||||
export PRISMA_MIGRATION_ENGINE_BINARY="${pkgs.prisma-engines}/bin/migration-engine"
|
pkgs.act # Github workflow
|
||||||
export PRISMA_QUERY_ENGINE_BINARY="${pkgs.prisma-engines}/bin/query-engine"
|
];
|
||||||
export PRISMA_QUERY_ENGINE_LIBRARY="${pkgs.prisma-engines}/lib/libquery_engine.node"
|
shellHook =
|
||||||
export PRISMA_INTROSPECTION_ENGINE_BINARY="${pkgs.prisma-engines}/bin/introspection-engine"
|
# https://github.com/prisma/prisma/issues/3026#issuecomment-927258138
|
||||||
export PRISMA_FMT_BINARY="${pkgs.prisma-engines}/bin/prisma-fmt"
|
# nix-direnv is required (impure build?) https://github.com/nix-community/nix-direnv
|
||||||
export TURBO_BINARY_PATH="${pkgs.turbo}/bin/turbo"
|
''
|
||||||
pnpm install
|
export PRISMA_MIGRATION_ENGINE_BINARY="${pkgs.prisma-engines}/bin/migration-engine"
|
||||||
'' + shellMsg;
|
export PRISMA_QUERY_ENGINE_BINARY="${pkgs.prisma-engines}/bin/query-engine"
|
||||||
};
|
export PRISMA_QUERY_ENGINE_LIBRARY="${pkgs.prisma-engines}/lib/libquery_engine.node"
|
||||||
});
|
export PRISMA_INTROSPECTION_ENGINE_BINARY="${pkgs.prisma-engines}/bin/introspection-engine"
|
||||||
|
export PRISMA_FMT_BINARY="${pkgs.prisma-engines}/bin/prisma-fmt"
|
||||||
|
export TURBO_BINARY_PATH="${pkgs.turbo}/bin/turbo"
|
||||||
|
pnpm install
|
||||||
|
''
|
||||||
|
+ shellMsg;
|
||||||
|
};
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue