Progress
This commit is contained in:
parent
760815da50
commit
5e23488cae
60
flake.lock
generated
Normal file
60
flake.lock
generated
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"glue": {
|
||||||
|
"locked": {
|
||||||
|
"path": "./glue",
|
||||||
|
"type": "path"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"path": "./glue",
|
||||||
|
"type": "path"
|
||||||
|
},
|
||||||
|
"parent": []
|
||||||
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1746981801,
|
||||||
|
"narHash": "sha256-+Bfr0KqZV6gZdA7e2kupeoawozaLIHLuiPtC54uxbFc=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "ff915842e4a2e63c4c8c5c08c6870b9d5b3c3ee9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1746576598,
|
||||||
|
"narHash": "sha256-FshoQvr6Aor5SnORVvh/ZdJ1Sa2U4ZrIMwKBX5k2wu0=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "b3582c75c7f21ce0b429898980eddbbf05c68e55",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"glue": "glue",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
86
flake.nix
86
flake.nix
@ -1,88 +1,12 @@
|
|||||||
{
|
{
|
||||||
description = "NixOS system";
|
description = "System configuration for NixOS";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
|
glue.url = "./glue";
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||||
home-manager = {
|
home-manager.url = "github:nix-community/home-manager";
|
||||||
url = "github:nix-community/home-manager";
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
stylix.url = "github:danth/stylix";
|
|
||||||
nixvim.url = "github:nix-community/nixvim";
|
|
||||||
nur = {
|
|
||||||
url = "github:nix-community/NUR";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
nix-matlab = {
|
|
||||||
url = "gitlab:doronbehar/nix-matlab";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
|
||||||
nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs = inputs: inputs.glue { inherit inputs; };
|
||||||
{
|
|
||||||
self,
|
|
||||||
nixpkgs,
|
|
||||||
home-manager,
|
|
||||||
stylix,
|
|
||||||
nixvim,
|
|
||||||
nur,
|
|
||||||
nix-matlab,
|
|
||||||
nixos-cosmic,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
mkConfig =
|
|
||||||
system: machineConfig: userConfig:
|
|
||||||
(nixpkgs.lib.nixosSystem {
|
|
||||||
inherit system;
|
|
||||||
specialArgs = { inherit system; };
|
|
||||||
modules = [
|
|
||||||
machineConfig
|
|
||||||
home-manager.nixosModules.home-manager
|
|
||||||
{
|
|
||||||
nix.settings = {
|
|
||||||
substituters = [ "https://cosmic.cachix.org/" ];
|
|
||||||
trusted-public-keys = [ "cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE=" ];
|
|
||||||
};
|
|
||||||
machine.users = userConfig;
|
|
||||||
home-manager.extraSpecialArgs = { inherit system; };
|
|
||||||
home-manager.sharedModules = [
|
|
||||||
stylix.homeManagerModules.stylix
|
|
||||||
nixvim.homeManagerModules.nixvim
|
|
||||||
nur.modules.homeManager.default
|
|
||||||
{
|
|
||||||
nixpkgs.overlays = [
|
|
||||||
nix-matlab.overlay
|
|
||||||
nixos-cosmic.overlays.default
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
in
|
|
||||||
{
|
|
||||||
nixosConfigurations = {
|
|
||||||
"20212060" = mkConfig "x86_64-linux" ./machines/laptop.nix {
|
|
||||||
jan = {
|
|
||||||
sudo = true;
|
|
||||||
configuration = ./users/jan.nix;
|
|
||||||
};
|
|
||||||
berg-van-abstractie = {
|
|
||||||
sudo = false;
|
|
||||||
configuration = ./users/comp-prog.nix;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
"vm-audio" = mkConfig "x86_64-linux" ./machines/vm-audio.nix {
|
|
||||||
local = {
|
|
||||||
sudo = true;
|
|
||||||
configuration = ./users/server.nix;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
lib = import ./shell-modules/default.nix self.inputs;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
14
glue/flake.nix
Normal file
14
glue/flake.nix
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
description = "Some glue";
|
||||||
|
|
||||||
|
inputs = { };
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
inputs:
|
||||||
|
let
|
||||||
|
glue = import ./lib { inherit inputs; };
|
||||||
|
in
|
||||||
|
{
|
||||||
|
__functor = _: glue;
|
||||||
|
};
|
||||||
|
}
|
167
glue/lib/default.nix
Normal file
167
glue/lib/default.nix
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
mkGlue =
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
flake = inputs.self;
|
||||||
|
nixpkgs = inputs.nixpkgs;
|
||||||
|
lib = nixpkgs.lib;
|
||||||
|
|
||||||
|
importDir =
|
||||||
|
path: fn:
|
||||||
|
let
|
||||||
|
entries = builtins.readDir path;
|
||||||
|
|
||||||
|
# Get paths to directories
|
||||||
|
dirs = lib.filterAttrs (_: type: type == "directory") entries;
|
||||||
|
dirPaths = lib.mapAttrs (name: type: {
|
||||||
|
path = "${path}/${name}";
|
||||||
|
type = type;
|
||||||
|
}) dirs;
|
||||||
|
|
||||||
|
# Get paths to nix files
|
||||||
|
nixName = name: builtins.match "(.*)\\.nix" name;
|
||||||
|
files = lib.filterAttrs (name: type: (type != "directory") && ((nixName name) != null)) entries;
|
||||||
|
filePaths = lib.mapAttrs' (name: type: {
|
||||||
|
name = builtins.head (nixName name);
|
||||||
|
value = {
|
||||||
|
path = "${path}/${name}";
|
||||||
|
type = type;
|
||||||
|
};
|
||||||
|
}) files;
|
||||||
|
|
||||||
|
combined = dirPaths // filePaths;
|
||||||
|
in
|
||||||
|
fn (lib.optionalAttrs (builtins.pathExists path) combined);
|
||||||
|
|
||||||
|
# Split out into getNixFiles, getNixFilesRecursive, getDirs
|
||||||
|
importDirRecursive =
|
||||||
|
path: fn:
|
||||||
|
let
|
||||||
|
entries = importDir path lib.id;
|
||||||
|
|
||||||
|
# Dig down recursively
|
||||||
|
dirs = lib.filterAttrs (_: entry: entry.type == "directory") entries;
|
||||||
|
recursedEntries = lib.mapAttrs (name: entry: (importDirRecursive entry.path lib.id)) dirs;
|
||||||
|
in
|
||||||
|
fn (entries // recursedEntries);
|
||||||
|
|
||||||
|
systems = [
|
||||||
|
"x86_64-linux"
|
||||||
|
"aarch64-linux"
|
||||||
|
];
|
||||||
|
|
||||||
|
eachSystem = fn: lib.genAttrs systems fn;
|
||||||
|
|
||||||
|
systemArgs = eachSystem (system: {
|
||||||
|
pkgs = (
|
||||||
|
import inputs.nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
allPackages = importDir "${flake}/packages" (
|
||||||
|
attrs:
|
||||||
|
lib.mapAttrs (
|
||||||
|
name: entry: (if entry.type == "directory" then "${entry.path}/default.nix" else entry.path)
|
||||||
|
) attrs
|
||||||
|
);
|
||||||
|
|
||||||
|
packages =
|
||||||
|
let
|
||||||
|
# TODO: Filter out packages that are not supported on the platform?
|
||||||
|
mkPackages =
|
||||||
|
system:
|
||||||
|
let
|
||||||
|
args = systemArgs."${system}";
|
||||||
|
pkgs = args.pkgs;
|
||||||
|
in
|
||||||
|
lib.mapAttrs (name: package: pkgs.callPackage package { }) allPackages;
|
||||||
|
in
|
||||||
|
eachSystem mkPackages;
|
||||||
|
|
||||||
|
overlay = final: prev: (lib.mapAttrs (name: package: prev.callPackage package { }) allPackages);
|
||||||
|
|
||||||
|
collectEntries =
|
||||||
|
attrs:
|
||||||
|
lib.attrsets.collect (
|
||||||
|
entry: (lib.isAttrs entry) && (lib.hasAttr "path" entry) && (lib.hasAttr "type" entry)
|
||||||
|
) attrs;
|
||||||
|
|
||||||
|
collectModules =
|
||||||
|
path:
|
||||||
|
importDirRecursive path (
|
||||||
|
attrs:
|
||||||
|
map (entry: if entry.type == "directory" then entry.path + "/default.nix" else entry.path) (
|
||||||
|
collectEntries attrs
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
nixosModules = collectModules "${flake}/modules/nixos";
|
||||||
|
|
||||||
|
homeModules = collectModules "${flake}/modules/home";
|
||||||
|
|
||||||
|
overlayModule =
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
nixpkgs.overlays = [ overlay ];
|
||||||
|
};
|
||||||
|
|
||||||
|
homeManager = inputs.home-manager.nixosModules.home-manager;
|
||||||
|
|
||||||
|
nixosConfigurations = importDir "${flake}/hosts" (
|
||||||
|
attrs:
|
||||||
|
lib.mapAttrs (
|
||||||
|
name: entry:
|
||||||
|
lib.nixosSystem {
|
||||||
|
specialArgs = {
|
||||||
|
inherit inputs;
|
||||||
|
};
|
||||||
|
modules =
|
||||||
|
let
|
||||||
|
systemPath = "${entry.path}/configuration.nix";
|
||||||
|
|
||||||
|
userEntries = importDir "${entry.path}/users" lib.id;
|
||||||
|
|
||||||
|
usersConfiguration = lib.mapAttrs (name: entry: {
|
||||||
|
isNormalUser = true;
|
||||||
|
group = name;
|
||||||
|
}) userEntries;
|
||||||
|
groupsConfiguration = lib.mapAttrs (name: entry: {
|
||||||
|
}) userEntries;
|
||||||
|
homesConfiguration = lib.mapAttrs (name: entry: entry.path) userEntries;
|
||||||
|
|
||||||
|
usersModule =
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
home-manager.sharedModules = homeModules;
|
||||||
|
home-manager.useUserPackages = false; # TODO: See if this should be changed to true?
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.users = homesConfiguration;
|
||||||
|
users.users = usersConfiguration;
|
||||||
|
users.groups = groupsConfiguration;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
[
|
||||||
|
systemPath
|
||||||
|
overlayModule
|
||||||
|
usersModule
|
||||||
|
homeManager
|
||||||
|
]
|
||||||
|
++ nixosModules;
|
||||||
|
}
|
||||||
|
) (lib.attrsets.filterAttrs (name: entry: entry.type == "directory") attrs)
|
||||||
|
);
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
inherit packages nixosConfigurations;
|
||||||
|
overlays.default = overlay;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
mkGlue
|
20
hosts/20212060/configuration.nix
Normal file
20
hosts/20212060/configuration.nix
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{ flake, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# State version
|
||||||
|
system.stateVersion = "24.05";
|
||||||
|
|
||||||
|
# Machine hostname
|
||||||
|
networking.hostName = "20212060";
|
||||||
|
|
||||||
|
# Admin users
|
||||||
|
users.users.jan.extraGroups = [ "wheel" ];
|
||||||
|
|
||||||
|
modules = {
|
||||||
|
profiles.laptop.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
];
|
||||||
|
}
|
43
hosts/20212060/hardware-configuration.nix
Normal file
43
hosts/20212060/hardware-configuration.nix
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Machine platform
|
||||||
|
nixpkgs.hostPlatform = "x86_64-linux";
|
||||||
|
|
||||||
|
# Hardware configuration
|
||||||
|
hardware.enableRedistributableFirmware = true;
|
||||||
|
boot.initrd.availableKernelModules = [
|
||||||
|
"xhci_pci"
|
||||||
|
"nvme"
|
||||||
|
"usb_storage"
|
||||||
|
"sd_mod"
|
||||||
|
"rtsx_pci_sdmmc"
|
||||||
|
];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
hardware.cpu.intel.updateMicrocode = true;
|
||||||
|
|
||||||
|
# Filesystems
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-uuid/3b91eaeb-ea95-4bea-8dc1-f55af7502d23";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-uuid/46BF-DE2C";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [
|
||||||
|
"fmask=0077"
|
||||||
|
"dmask=0077"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Swapfile
|
||||||
|
swapDevices = [
|
||||||
|
{
|
||||||
|
device = "/var/lib/swapfile";
|
||||||
|
size = 16 * 1024;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
99
hosts/20212060/users/jan.nix
Normal file
99
hosts/20212060/users/jan.nix
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.stateVersion = "24.11";
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
libreoffice-still
|
||||||
|
remmina
|
||||||
|
thunderbird
|
||||||
|
signal-desktop
|
||||||
|
prusa-slicer
|
||||||
|
freecad-wayland
|
||||||
|
inkscape
|
||||||
|
ente-auth
|
||||||
|
bitwarden
|
||||||
|
carla
|
||||||
|
baobab
|
||||||
|
gnome-calculator
|
||||||
|
nautilus
|
||||||
|
winbox
|
||||||
|
whatsapp-for-linux
|
||||||
|
discord
|
||||||
|
steam
|
||||||
|
spotify
|
||||||
|
# feishin # TODO: Fix or replace as insecure
|
||||||
|
eduvpn-client
|
||||||
|
river # TODO: Move
|
||||||
|
firefox # TODO: Move to dediated module
|
||||||
|
ryubing
|
||||||
|
];
|
||||||
|
|
||||||
|
modules = {
|
||||||
|
# Desktop environment
|
||||||
|
desktop.gnome.enable = true;
|
||||||
|
# desktop.tiling.enable = true;
|
||||||
|
|
||||||
|
# Browser
|
||||||
|
# firefox = {
|
||||||
|
# enable = true;
|
||||||
|
# default = false;
|
||||||
|
# };
|
||||||
|
# qutebrowser = {
|
||||||
|
# enable = true;
|
||||||
|
# default = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# Gaming
|
||||||
|
# retroarch.enable = true;
|
||||||
|
# ryujinx.enable = true;
|
||||||
|
|
||||||
|
# Tools
|
||||||
|
git = {
|
||||||
|
enable = true;
|
||||||
|
user = "Jan-Bulthuis";
|
||||||
|
email = "git@bulthuis.dev";
|
||||||
|
# TODO: Move
|
||||||
|
ignores = [
|
||||||
|
".envrc"
|
||||||
|
".direnv"
|
||||||
|
"flake.nix"
|
||||||
|
"flake.lock"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
# btop.enable = true;
|
||||||
|
direnv.enable = true;
|
||||||
|
fish.enable = true;
|
||||||
|
# bluetuith.enable = false;
|
||||||
|
# obsidian.enable = true;
|
||||||
|
# zathura.enable = true;
|
||||||
|
# keyring.enable = true;
|
||||||
|
# scripts.enable = true;
|
||||||
|
xpra = {
|
||||||
|
enable = true;
|
||||||
|
hosts = [
|
||||||
|
"mixer@10.20.60.251"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Development
|
||||||
|
# neovim.enable = true;
|
||||||
|
vscode.enable = true;
|
||||||
|
# docker.enable = true;
|
||||||
|
# matlab.enable = true;
|
||||||
|
# mathematica.enable = true;
|
||||||
|
|
||||||
|
# Languages
|
||||||
|
haskell.enable = false;
|
||||||
|
js.enable = false;
|
||||||
|
nix.enable = true;
|
||||||
|
rust.enable = true;
|
||||||
|
python.enable = true;
|
||||||
|
cpp.enable = true;
|
||||||
|
tex.enable = true;
|
||||||
|
jupyter.enable = false;
|
||||||
|
};
|
||||||
|
}
|
17
hosts/20212060/users/test.nix
Normal file
17
hosts/20212060/users/test.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.stateVersion = "24.11";
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
];
|
||||||
|
|
||||||
|
modules = {
|
||||||
|
# Desktop environment
|
||||||
|
# desktop.gnome.enable = true;
|
||||||
|
# desktop.tiling.enable = true;
|
||||||
|
};
|
||||||
|
}
|
32
modules/home/desktop/gnome/default.nix
Normal file
32
modules/home/desktop/gnome/default.nix
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.desktop.gnome;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.desktop.gnome = {
|
||||||
|
enable = mkEnableOption "gnome";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# TODO: Enable extensions with dconf
|
||||||
|
|
||||||
|
home.packages =
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
gnome-control-center
|
||||||
|
gnome-tweaks
|
||||||
|
blackbox-terminal
|
||||||
|
]
|
||||||
|
++ (with pkgs.gnomeExtensions; [
|
||||||
|
gsconnect
|
||||||
|
disable-workspace-animation
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
}
|
20
modules/home/desktop/tiling/default.nix
Normal file
20
modules/home/desktop/tiling/default.nix
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.desktop.tiling;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.desktop.tiling = {
|
||||||
|
enable = mkEnableOption "tiling desktop";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
53
modules/home/development/git.nix
Normal file
53
modules/home/development/git.nix
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.git;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.git = {
|
||||||
|
enable = mkEnableOption "git";
|
||||||
|
|
||||||
|
user = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "Default user name to use.";
|
||||||
|
};
|
||||||
|
|
||||||
|
email = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "Default user email to use.";
|
||||||
|
};
|
||||||
|
|
||||||
|
ignores = mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [ ];
|
||||||
|
description = "Paths to globally ignore";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
git
|
||||||
|
lazygit
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
extraConfig = {
|
||||||
|
pull = {
|
||||||
|
rebase = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
userName = cfg.user;
|
||||||
|
userEmail = cfg.email;
|
||||||
|
ignores = cfg.ignores;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
50
modules/home/development/languages/cpp.nix
Normal file
50
modules/home/development/languages/cpp.nix
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.cpp;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.cpp = {
|
||||||
|
enable = mkEnableOption "cpp";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Gitignore additions
|
||||||
|
modules.git.ignores = [
|
||||||
|
".ccls-cache"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Development packages
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
gnumake
|
||||||
|
gcc
|
||||||
|
];
|
||||||
|
|
||||||
|
# VSCode configuration
|
||||||
|
programs.vscode = {
|
||||||
|
profiles.default = {
|
||||||
|
extensions = with pkgs.vscode-extensions; [
|
||||||
|
ms-vscode.cpptools
|
||||||
|
ms-vscode.cmake-tools
|
||||||
|
ms-vscode.cpptools-extension-pack
|
||||||
|
];
|
||||||
|
|
||||||
|
userSettings = {
|
||||||
|
# TODO: Add setting to set the compiler, it currently needs to be set for each workspace individually
|
||||||
|
# "C_Cpp.clang_format_fallbackStyle" = "{ BasedOnStyle: Google, IndentWidth: 4 }";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Neovim configuration
|
||||||
|
# programs.nixvim = {
|
||||||
|
# plugins.lsp.servers.ccls.enable = true;
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
}
|
42
modules/home/development/languages/haskell.nix
Normal file
42
modules/home/development/languages/haskell.nix
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.haskell;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.haskell = {
|
||||||
|
enable = mkEnableOption "haskell";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Development packages
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
haskell.compiler.ghc948
|
||||||
|
(haskell-language-server.override { supportedGhcVersions = [ "948" ]; })
|
||||||
|
];
|
||||||
|
|
||||||
|
# VSCode configuration
|
||||||
|
programs.vscode = {
|
||||||
|
profiles.default = {
|
||||||
|
extensions = with pkgs.vscode-extensions; [
|
||||||
|
haskell.haskell
|
||||||
|
justusadam.language-haskell
|
||||||
|
];
|
||||||
|
|
||||||
|
userSettings = {
|
||||||
|
"[haskell]" = { };
|
||||||
|
# "haskell.formattingProvider" = "fourmolu";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Neovim configuration
|
||||||
|
# programs.nixvim = { };
|
||||||
|
};
|
||||||
|
}
|
38
modules/home/development/languages/js.nix
Normal file
38
modules/home/development/languages/js.nix
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.js;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.js = {
|
||||||
|
enable = mkEnableOption "js";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Development packages
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
nodejs
|
||||||
|
tailwindcss
|
||||||
|
];
|
||||||
|
|
||||||
|
# VSCode configuration
|
||||||
|
programs.vscode = {
|
||||||
|
profiles.default = {
|
||||||
|
extensions = with pkgs.vscode-extensions; [
|
||||||
|
bradlc.vscode-tailwindcss
|
||||||
|
];
|
||||||
|
|
||||||
|
userSettings = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Neovim configuration
|
||||||
|
# programs.nixvim = { };
|
||||||
|
};
|
||||||
|
}
|
44
modules/home/development/languages/jupyter.nix
Normal file
44
modules/home/development/languages/jupyter.nix
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
# TODO: Move to a module for notebooks in general
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.jupyter;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.jupyter = {
|
||||||
|
enable = mkEnableOption "jupyter";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Development packages
|
||||||
|
# home.packages = with pkgs; [
|
||||||
|
# evcxr
|
||||||
|
# ];
|
||||||
|
|
||||||
|
# modules.python.extraPythonPackages = p: [
|
||||||
|
# p.jupyter
|
||||||
|
# p.notebook
|
||||||
|
# ];
|
||||||
|
|
||||||
|
# VSCode configuration
|
||||||
|
programs.vscode = {
|
||||||
|
profiles.default = {
|
||||||
|
extensions = with pkgs.vscode-extensions; [
|
||||||
|
ms-toolsai.jupyter
|
||||||
|
ms-toolsai.jupyter-renderers
|
||||||
|
];
|
||||||
|
|
||||||
|
userSettings = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Neovim configuration
|
||||||
|
# programs.nixvim = { };
|
||||||
|
};
|
||||||
|
}
|
60
modules/home/development/languages/nix.nix
Normal file
60
modules/home/development/languages/nix.nix
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.nix;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.nix = {
|
||||||
|
enable = mkEnableOption "nix";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Development packages
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
nix-tree
|
||||||
|
nixfmt-rfc-style
|
||||||
|
nixd
|
||||||
|
];
|
||||||
|
|
||||||
|
# Add nix tree
|
||||||
|
xdg.desktopEntries.nix-tree = {
|
||||||
|
exec = "${pkgs.nix-tree}/bin/nix-tree";
|
||||||
|
name = "Nix Tree";
|
||||||
|
terminal = true;
|
||||||
|
type = "Application";
|
||||||
|
};
|
||||||
|
|
||||||
|
# VSCode configuration
|
||||||
|
programs.vscode = {
|
||||||
|
profiles.default = {
|
||||||
|
extensions = with pkgs.vscode-extensions; [ jnoortheen.nix-ide ];
|
||||||
|
|
||||||
|
userSettings = {
|
||||||
|
"[nix]" = {
|
||||||
|
"editor.tabSize" = 2;
|
||||||
|
};
|
||||||
|
"nix.enableLanguageServer" = true;
|
||||||
|
"nix.serverPath" = "nixd";
|
||||||
|
"nix.serverSettings" = {
|
||||||
|
nixd = {
|
||||||
|
formatting = {
|
||||||
|
command = [ "nixfmt" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Neovim configuration
|
||||||
|
# programs.nixvim = {
|
||||||
|
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
}
|
52
modules/home/development/languages/python.nix
Normal file
52
modules/home/development/languages/python.nix
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.python;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.python = {
|
||||||
|
enable = mkEnableOption "python";
|
||||||
|
extraPythonPackages = mkOption {
|
||||||
|
type = types.functionTo (types.listOf types.package) // {
|
||||||
|
merge =
|
||||||
|
loc: defs: p:
|
||||||
|
lib.concatMap (def: (def.value p)) defs;
|
||||||
|
};
|
||||||
|
default = p: [ ];
|
||||||
|
description = "Extra Python packages to install";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Development packages
|
||||||
|
home.packages = [ ];
|
||||||
|
|
||||||
|
# VSCode configuration
|
||||||
|
programs.vscode = {
|
||||||
|
profiles.default = {
|
||||||
|
extensions = with pkgs.vscode-extensions; [
|
||||||
|
ms-python.python
|
||||||
|
ms-python.debugpy
|
||||||
|
ms-python.vscode-pylance
|
||||||
|
ms-python.black-formatter
|
||||||
|
];
|
||||||
|
|
||||||
|
userSettings = {
|
||||||
|
"python.defaultInterpreterPath" = "\${env:PYTHONINTERPRETER}";
|
||||||
|
"[python]" = {
|
||||||
|
"editor.defaultFormatter" = "ms-python.black-formatter";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Neovim configuration
|
||||||
|
# programs.nixvim = { };
|
||||||
|
};
|
||||||
|
}
|
59
modules/home/development/languages/rust.nix
Normal file
59
modules/home/development/languages/rust.nix
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.rust;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.rust = {
|
||||||
|
enable = mkEnableOption "rust";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Development packages
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
# rustup
|
||||||
|
# rustc
|
||||||
|
# cargo
|
||||||
|
# gcc
|
||||||
|
# lldb
|
||||||
|
# bacon
|
||||||
|
# rust-analyzer
|
||||||
|
# rustfmt
|
||||||
|
# clippy
|
||||||
|
# evcxr
|
||||||
|
];
|
||||||
|
|
||||||
|
# VSCode configuration
|
||||||
|
programs.vscode = {
|
||||||
|
profiles.default = {
|
||||||
|
extensions = with pkgs.vscode-extensions; [
|
||||||
|
rust-lang.rust-analyzer
|
||||||
|
vadimcn.vscode-lldb
|
||||||
|
tamasfe.even-better-toml
|
||||||
|
serayuzgur.crates
|
||||||
|
];
|
||||||
|
|
||||||
|
userSettings = {
|
||||||
|
"[rust]" = {
|
||||||
|
"editor.inlayHints.enabled" = "off";
|
||||||
|
};
|
||||||
|
"rust-analyzer.check.command" = "clippy";
|
||||||
|
"rust-analyzer.showUnlinkedFileNotification" = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Neovim configuration
|
||||||
|
# programs.nixvim = {
|
||||||
|
# plugins.rustaceanvim = {
|
||||||
|
# enable = true;
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
}
|
69
modules/home/development/languages/tex.nix
Normal file
69
modules/home/development/languages/tex.nix
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.tex;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.tex = {
|
||||||
|
enable = mkEnableOption "tex";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Development packages
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
(texlive.combine {
|
||||||
|
inherit (texlive) scheme-full;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
# Pygments for minted
|
||||||
|
modules.python.extraPythonPackages = p: [
|
||||||
|
p.pygments
|
||||||
|
];
|
||||||
|
|
||||||
|
# VSCode configuration
|
||||||
|
programs.vscode = {
|
||||||
|
profiles.default = {
|
||||||
|
extensions = with pkgs.vscode-extensions; [ jnoortheen.nix-ide ];
|
||||||
|
|
||||||
|
userSettings = {
|
||||||
|
"[tex]" = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Neovim configuration
|
||||||
|
# programs.nixvim = {
|
||||||
|
# extraConfigVim = ''
|
||||||
|
# " Enforce latexmk
|
||||||
|
# let g:vimtex_compiler_method = 'latexmk'
|
||||||
|
|
||||||
|
# " Set latexmk compilation settings
|
||||||
|
# let g:vimtex_compiler_latexmk = {
|
||||||
|
# \ 'options': [
|
||||||
|
# \ '-shell-escape',
|
||||||
|
# \ '-verbose',
|
||||||
|
# \ '-file-line-error',
|
||||||
|
# \ '-synctex=1',
|
||||||
|
# \ '-interaction=nonstopmode',
|
||||||
|
# \ ],
|
||||||
|
# \}
|
||||||
|
# '';
|
||||||
|
|
||||||
|
# # Vimtex plugin
|
||||||
|
# plugins.vimtex = {
|
||||||
|
# enable = true;
|
||||||
|
# texlivePackage = null;
|
||||||
|
# settings = {
|
||||||
|
# view_method = "zathura";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
}
|
27
modules/home/development/mathematica.nix
Normal file
27
modules/home/development/mathematica.nix
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.mathematica;
|
||||||
|
|
||||||
|
my-mathematica = pkgs.mathematica.override {
|
||||||
|
# TODO: Just use a generic name for the installer?
|
||||||
|
# source = ./Wolfram_14.2.1_LIN_Bndl.sh;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.mathematica = {
|
||||||
|
enable = mkEnableOption "mathematica";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.packages = [
|
||||||
|
my-mathematica
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
190
modules/home/development/neovim.nix
Normal file
190
modules/home/development/neovim.nix
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.neovim;
|
||||||
|
# theme = config.desktop.theming;
|
||||||
|
# colors = theme.colors;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.neovim = {
|
||||||
|
enable = mkEnableOption "neovim";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# programs.nixvim = {
|
||||||
|
# enable = true;
|
||||||
|
# defaultEditor = true;
|
||||||
|
# viAlias = true;
|
||||||
|
# vimAlias = true;
|
||||||
|
|
||||||
|
# # extraPackages = with pkgs; [ ];
|
||||||
|
|
||||||
|
# opts = {
|
||||||
|
# number = true;
|
||||||
|
# relativenumber = true;
|
||||||
|
|
||||||
|
# signcolumn = "yes";
|
||||||
|
|
||||||
|
# ignorecase = true;
|
||||||
|
# smartcase = true;
|
||||||
|
|
||||||
|
# tabstop = 4;
|
||||||
|
# shiftwidth = 4;
|
||||||
|
# softtabstop = 0;
|
||||||
|
# expandtab = true;
|
||||||
|
# smarttab = true;
|
||||||
|
|
||||||
|
# list = true;
|
||||||
|
# listchars = "tab:»┈«,trail:·,extends:→,precedes:←,nbsp:␣";
|
||||||
|
# };
|
||||||
|
|
||||||
|
# diagnostic.settings = {
|
||||||
|
# enable = true;
|
||||||
|
# signs = true;
|
||||||
|
# underline = true;
|
||||||
|
# update_in_insert = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# extraConfigLua = ''
|
||||||
|
# vim.fn.sign_define("DiagnosticSignError",
|
||||||
|
# {text = "", texthl = "DiagnosticSignError"})
|
||||||
|
# vim.fn.sign_define("DiagnosticSignWarn",
|
||||||
|
# {text = "", texthl = "DiagnosticSignWarn"})
|
||||||
|
# vim.fn.sign_define("DiagnosticSignInfo",
|
||||||
|
# {text = "", texthl = "DiagnosticSignInfo"})
|
||||||
|
# vim.fn.sign_define("DiagnosticSignHint",
|
||||||
|
# {text = "💡", texthl = "DiagnosticSignHint"})
|
||||||
|
# '';
|
||||||
|
|
||||||
|
# keymaps = [
|
||||||
|
# # Save shortcut
|
||||||
|
# {
|
||||||
|
# action = ":update<CR>";
|
||||||
|
# key = "<C-s>";
|
||||||
|
# mode = "n";
|
||||||
|
# }
|
||||||
|
# {
|
||||||
|
# action = "<C-o>:update<CR>";
|
||||||
|
# key = "<C-s>";
|
||||||
|
# mode = "i";
|
||||||
|
# }
|
||||||
|
|
||||||
|
# # Neo tree
|
||||||
|
# {
|
||||||
|
# action = ":Neotree action=focus reveal toggle<CR>";
|
||||||
|
# key = "<leader>n";
|
||||||
|
# mode = "n";
|
||||||
|
# options.silent = true;
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
|
||||||
|
# autoCmd = [
|
||||||
|
# {
|
||||||
|
# desc = "Automatic formatting";
|
||||||
|
# event = "BufWritePre";
|
||||||
|
# callback = {
|
||||||
|
# __raw = ''
|
||||||
|
# function()
|
||||||
|
# vim.lsp.buf.format {
|
||||||
|
# async = false,
|
||||||
|
# }
|
||||||
|
# end
|
||||||
|
# '';
|
||||||
|
# };
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
|
||||||
|
# # highlight = {
|
||||||
|
# # Comment = {
|
||||||
|
# # italic = true;
|
||||||
|
# # fg = theme.schemeColors.withHashtag.base03; # TODO: Come up with a good name colors.muted maybe?
|
||||||
|
# # };
|
||||||
|
# # };
|
||||||
|
|
||||||
|
# plugins.lsp = {
|
||||||
|
# enable = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# #plugins.treesitter = {
|
||||||
|
# # enable = true;
|
||||||
|
# #};
|
||||||
|
|
||||||
|
# plugins.cmp = {
|
||||||
|
# enable = true;
|
||||||
|
|
||||||
|
# settings = {
|
||||||
|
# mapping = {
|
||||||
|
# "<C-Space>" = "cmp.mapping.complete()";
|
||||||
|
# "<C-d>" = "cmp.mapping.scroll_docs(-4)";
|
||||||
|
# "<C-e>" = "cmp.mapping.close()";
|
||||||
|
# "<C-f>" = "cmp.mapping.scroll_docs(4)";
|
||||||
|
# "<CR>" = "cmp.mapping.confirm({ select = true })";
|
||||||
|
# "<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
|
||||||
|
# "<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
|
||||||
|
# };
|
||||||
|
# sources = [
|
||||||
|
# { name = "path"; }
|
||||||
|
# { name = "nvim_lsp"; }
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
# plugins.web-devicons = {
|
||||||
|
# enable = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# plugins.neo-tree = {
|
||||||
|
# enable = true;
|
||||||
|
|
||||||
|
# closeIfLastWindow = true;
|
||||||
|
# window = {
|
||||||
|
# width = 30;
|
||||||
|
# autoExpandWidth = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# extraOptions = {
|
||||||
|
# default_component_configs.git_status.symbols = {
|
||||||
|
# # Change type
|
||||||
|
# added = "+";
|
||||||
|
# deleted = "✕";
|
||||||
|
# modified = "✦";
|
||||||
|
# renamed = "→";
|
||||||
|
|
||||||
|
# # Status type
|
||||||
|
# untracked = "?";
|
||||||
|
# ignored = "▫";
|
||||||
|
# unstaged = "□";
|
||||||
|
# staged = "■";
|
||||||
|
# conflict = "‼";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
# #plugins.cmp-nvim-lsp.enable = true;
|
||||||
|
|
||||||
|
# plugins.gitsigns = {
|
||||||
|
# enable = true;
|
||||||
|
# settings.current_line_blame = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# #plugins.copilot-vim = {
|
||||||
|
# # enable = true;
|
||||||
|
# #};
|
||||||
|
|
||||||
|
# # plugins.vimtex = {
|
||||||
|
# # enable = true;
|
||||||
|
# # texlivePackage = null;
|
||||||
|
# # settings = {
|
||||||
|
# # view_method = "zathura";
|
||||||
|
# # };
|
||||||
|
# # };
|
||||||
|
# };
|
||||||
|
# programs.neovim.defaultEditor = true;
|
||||||
|
};
|
||||||
|
}
|
96
modules/home/development/vscode.nix
Normal file
96
modules/home/development/vscode.nix
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.vscode;
|
||||||
|
# theme = config.desktop.theming;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.vscode = {
|
||||||
|
enable = mkEnableOption "vscode";
|
||||||
|
# codeFont = mkOption {
|
||||||
|
# type = types.anything;
|
||||||
|
# default = theme.fonts.pkgs."Fira Code";
|
||||||
|
# };
|
||||||
|
# fallbackFont = mkOption {
|
||||||
|
# type = types.anything;
|
||||||
|
# default = theme.fonts.pkgs."Symbols Nerd Font Mono";
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# TODO: Fix theming
|
||||||
|
# desktop.theming.fonts.extraFonts = [ cfg.codeFont ];
|
||||||
|
|
||||||
|
programs.vscode = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
mutableExtensionsDir = false;
|
||||||
|
profiles.default = {
|
||||||
|
extensions = with pkgs.vscode-extensions; [
|
||||||
|
eamodio.gitlens
|
||||||
|
ms-vscode.hexeditor
|
||||||
|
mkhl.direnv
|
||||||
|
usernamehw.errorlens
|
||||||
|
gruntfuggly.todo-tree
|
||||||
|
github.copilot
|
||||||
|
github.copilot-chat
|
||||||
|
tomoki1207.pdf
|
||||||
|
ms-vsliveshare.vsliveshare
|
||||||
|
ms-vscode-remote.remote-ssh
|
||||||
|
];
|
||||||
|
|
||||||
|
userSettings =
|
||||||
|
let
|
||||||
|
# font-family = mkForce "'${cfg.codeFont.name}', '${cfg.fallbackFont.name}'";
|
||||||
|
# TODO: Move the conversion factor to theme settings
|
||||||
|
# font-size = mkForce cfg.codeFont.recommendedSize; # Convert pt to px
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# Font setup
|
||||||
|
# "editor.fontFamily" = font-family;
|
||||||
|
# "editor.inlayHints.fontFamily" = font-family;
|
||||||
|
# "editor.inlineSuggest.fontFamily" = font-family;
|
||||||
|
# "editor.fontSize" = font-size;
|
||||||
|
# "editor.fontLigatures" = true;
|
||||||
|
# "terminal.integrated.fontFamily" = font-family;
|
||||||
|
# "terminal.integrated.fontSize" = font-size;
|
||||||
|
# "chat.editor.fontFamily" = font-family; # TODO: Change this font to the standard UI font
|
||||||
|
# "chat.editor.fontSize" = font-size;
|
||||||
|
# "debug.console.fontFamily" = font-family;
|
||||||
|
# "debug.console.fontSize" = font-size;
|
||||||
|
# "scm.inputFontFamily" = font-family; # TODO: Change this font to the standard UI font
|
||||||
|
# "scm.inputFontSize" = font-size;
|
||||||
|
# "markdown.preview.fontFamily" = mkForce theme.fonts.sansSerif.name; # TODO: Change this font to the standard UI font
|
||||||
|
# "markdown.preview.fontSize" = mkForce theme.fonts.sansSerif.recommendedSize;
|
||||||
|
|
||||||
|
# Formatting
|
||||||
|
"editor.formatOnSave" = true;
|
||||||
|
"editor.tabSize" = 4;
|
||||||
|
|
||||||
|
# Layout
|
||||||
|
"window.menuBarVisibility" = "hidden";
|
||||||
|
|
||||||
|
# Git settings
|
||||||
|
"git.autofetch" = true;
|
||||||
|
"git.enableSmartCommit" = false;
|
||||||
|
"git.suggestSmartCommit" = false;
|
||||||
|
|
||||||
|
# Disable update notifications
|
||||||
|
"update.mode" = "none";
|
||||||
|
|
||||||
|
# TODO: Move to direnv module
|
||||||
|
# Ignore direnv folder
|
||||||
|
"files.exclude" = {
|
||||||
|
".direnv" = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
27
modules/home/utilities/bash.nix
Normal file
27
modules/home/utilities/bash.nix
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.bash;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.bash = {
|
||||||
|
enable = mkEnableOption "bash";
|
||||||
|
aliases = mkOption {
|
||||||
|
type = types.attrsOf types.str;
|
||||||
|
default = {
|
||||||
|
"..." = "cd ../..";
|
||||||
|
};
|
||||||
|
description = "Shell aliases";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config.programs.bash = {
|
||||||
|
enable = cfg.enable;
|
||||||
|
shellAliases = cfg.aliases;
|
||||||
|
};
|
||||||
|
}
|
26
modules/home/utilities/direnv.nix
Normal file
26
modules/home/utilities/direnv.nix
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.direnv;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.direnv = {
|
||||||
|
enable = mkEnableOption "direnv";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
programs.direnv = {
|
||||||
|
enable = true;
|
||||||
|
nix-direnv.enable = true;
|
||||||
|
};
|
||||||
|
modules.git.ignores = [
|
||||||
|
".direnv"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
57
modules/home/utilities/fish.nix
Normal file
57
modules/home/utilities/fish.nix
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.fish;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.fish = {
|
||||||
|
enable = mkEnableOption "fish";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Make bash load into fish
|
||||||
|
# Bash will remain the default shell as fish is not POSIX compliant.
|
||||||
|
modules.bash.enable = true;
|
||||||
|
programs.bash.initExtra = ''
|
||||||
|
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
|
||||||
|
then
|
||||||
|
shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
|
||||||
|
exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Actual fish configuration
|
||||||
|
programs.fish = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
shellAliases = config.modules.bash.aliases;
|
||||||
|
|
||||||
|
plugins = [
|
||||||
|
{
|
||||||
|
name = "done";
|
||||||
|
src = pkgs.fishPlugins.done.src;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "fzf";
|
||||||
|
src = pkgs.fishPlugins.fzf-fish.src;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "grc";
|
||||||
|
src = pkgs.fishPlugins.grc.src;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Fish plugin dependencies
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
fzf
|
||||||
|
grc
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
63
modules/home/utilities/xpra.nix
Normal file
63
modules/home/utilities/xpra.nix
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.xpra;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.xpra = {
|
||||||
|
enable = mkEnableOption "Enable xpra";
|
||||||
|
hosts = mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = { };
|
||||||
|
description = "xpra hosts";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
xpra
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg.desktopEntries = (
|
||||||
|
listToAttrs (
|
||||||
|
map
|
||||||
|
(entry: {
|
||||||
|
name = "xpra${
|
||||||
|
builtins.substring 0 12 (builtins.hashString "sha256" "${entry.name} (${entry.comment})")
|
||||||
|
}";
|
||||||
|
value = entry // {
|
||||||
|
type = "Application";
|
||||||
|
terminal = false;
|
||||||
|
genericName = entry.comment;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
(
|
||||||
|
concatMap (
|
||||||
|
host:
|
||||||
|
let
|
||||||
|
uri = "tcp://${host}:15151/7";
|
||||||
|
in
|
||||||
|
[
|
||||||
|
{
|
||||||
|
name = "Xpra - Attach";
|
||||||
|
comment = host;
|
||||||
|
exec = "xpra attach --min-quality=100 --min-speed=100 --encoding=png --speaker=off ${uri}";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Xpra - Detach";
|
||||||
|
comment = host;
|
||||||
|
exec = "xpra detach ${uri}";
|
||||||
|
}
|
||||||
|
]
|
||||||
|
) cfg.hosts
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
18
modules/nixos/bluetooth.nix
Normal file
18
modules/nixos/bluetooth.nix
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{ lib, config, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.bluetooth;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.bluetooth = {
|
||||||
|
enable = mkEnableOption "bluetooth";
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Enable bluetooth
|
||||||
|
hardware.bluetooth = {
|
||||||
|
enable = true;
|
||||||
|
powerOnBoot = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
20
modules/nixos/bootloader.nix
Normal file
20
modules/nixos/bootloader.nix
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{ lib, config, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.bootloader;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.bootloader = {
|
||||||
|
enable = mkEnableOption "bootloader";
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Bootloader
|
||||||
|
boot.loader = {
|
||||||
|
timeout = 0;
|
||||||
|
systemd-boot.enable = true;
|
||||||
|
systemd-boot.editor = false;
|
||||||
|
efi.canTouchEfiVariables = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
35
modules/nixos/fonts.nix
Normal file
35
modules/nixos/fonts.nix
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.fonts;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.fonts = {
|
||||||
|
enable = mkEnableOption "fonts";
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
console.packages = [
|
||||||
|
pkgs.dina-psfu
|
||||||
|
];
|
||||||
|
console.font = "dina";
|
||||||
|
console.earlySetup = true;
|
||||||
|
|
||||||
|
# TODO: Disable default fonts, fonts should be managed per user
|
||||||
|
# fonts.enableDefaultPackages = false;
|
||||||
|
# fonts.fontconfig = {
|
||||||
|
# enable = true;
|
||||||
|
# defaultFonts = {
|
||||||
|
# serif = mkDefault [ ];
|
||||||
|
# sansSerif = mkDefault [ ];
|
||||||
|
# monospace = mkDefault [ ];
|
||||||
|
# emoji = mkDefault [ ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
}
|
95
modules/nixos/gnome.nix
Normal file
95
modules/nixos/gnome.nix
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.gnome;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.gnome = {
|
||||||
|
enable = mkEnableOption "gnome";
|
||||||
|
# TODO: Add RDP toggle
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Enable GDM and Gnome
|
||||||
|
services.xserver.enable = true;
|
||||||
|
services.xserver.displayManager.gdm.enable = true;
|
||||||
|
services.xserver.desktopManager.gnome.enable = true;
|
||||||
|
services.gnome.core-utilities.enable = false;
|
||||||
|
services.gnome.games.enable = false;
|
||||||
|
services.gnome.core-developer-tools.enable = false;
|
||||||
|
environment.gnome.excludePackages = with pkgs; [
|
||||||
|
adwaita-icon-theme
|
||||||
|
(derivation { name = "nixos-background-info"; })
|
||||||
|
gnome-backgrounds
|
||||||
|
gnome-bluetooth
|
||||||
|
gnome-color-manager
|
||||||
|
gnome-control-center
|
||||||
|
gnome-shell-extensions
|
||||||
|
gnome-tour
|
||||||
|
gnome-user-docs
|
||||||
|
glib
|
||||||
|
gnome-menus
|
||||||
|
gtk3.out
|
||||||
|
xdg-user-dirs
|
||||||
|
xdg-user-dirs-gtk
|
||||||
|
];
|
||||||
|
|
||||||
|
# Set up desktop entries for possible desktop environments
|
||||||
|
services.displayManager.sessionPackages = [
|
||||||
|
(pkgs.writeTextFile {
|
||||||
|
name = "river.desktop";
|
||||||
|
text = ''
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=River
|
||||||
|
Comment=A dynamic tiling Wayland compositor
|
||||||
|
Exec=river
|
||||||
|
Type=Application
|
||||||
|
'';
|
||||||
|
destination = "/share/wayland-sessions/river.desktop";
|
||||||
|
passthru.providedSessions = [ "river" ];
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
# Enable Gnome Remote Desktop
|
||||||
|
services.gnome.gnome-remote-desktop.enable = true;
|
||||||
|
systemd.services."gnome-remote-desktop".wantedBy = [ "graphical.target" ];
|
||||||
|
networking.firewall = {
|
||||||
|
allowedTCPPorts = [
|
||||||
|
3389
|
||||||
|
3390
|
||||||
|
];
|
||||||
|
allowedUDPPorts = [
|
||||||
|
3389
|
||||||
|
3390
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# For GSConnect/KDE Connect
|
||||||
|
# TODO: Move to host config?
|
||||||
|
networking.firewall = {
|
||||||
|
allowedTCPPortRanges = [
|
||||||
|
{
|
||||||
|
from = 1714;
|
||||||
|
to = 1764;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
allowedUDPPortRanges = [
|
||||||
|
{
|
||||||
|
from = 1714;
|
||||||
|
to = 1764;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable dependencies
|
||||||
|
modules = {
|
||||||
|
networkmanager.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
22
modules/nixos/graphics.nix
Normal file
22
modules/nixos/graphics.nix
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{ lib, config, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.graphics;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.graphics = {
|
||||||
|
enable = mkEnableOption "graphics";
|
||||||
|
# TODO: Add toggle for hybrid graphics
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
hardware.graphics.enable = true;
|
||||||
|
hardware.graphics.enable32Bit = true;
|
||||||
|
services.xserver.videoDrivers = [ "nvidia" ];
|
||||||
|
# TODO: Add nvidia settings back in
|
||||||
|
# TODO: Move to nvidia module
|
||||||
|
hardware.nvidia = {
|
||||||
|
open = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
15
modules/nixos/networkmanager.nix
Normal file
15
modules/nixos/networkmanager.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{ lib, config, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.networkmanager;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.networkmanager = {
|
||||||
|
enable = mkEnableOption "networkmanager";
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# TODO: Add sudo users to the networkmanager group?
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
};
|
||||||
|
}
|
20
modules/nixos/power-saving.nix
Normal file
20
modules/nixos/power-saving.nix
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{ lib, config, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.power-saving;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.power-saving = {
|
||||||
|
enable = mkEnableOption "power saving";
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Setup power management
|
||||||
|
powerManagement.enable = true;
|
||||||
|
services.thermald.enable = true;
|
||||||
|
services.power-profiles-daemon.enable = true;
|
||||||
|
|
||||||
|
# Enable wifi power saving
|
||||||
|
networking.networkmanager.wifi.powersave = true;
|
||||||
|
};
|
||||||
|
}
|
22
modules/nixos/printing.nix
Normal file
22
modules/nixos/printing.nix
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{ lib, config, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.printing;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.printing = {
|
||||||
|
enable = mkEnableOption "printing";
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Enable CUPS
|
||||||
|
services.printing.enable = true;
|
||||||
|
|
||||||
|
# Enable Avahi to auto-detect network printers
|
||||||
|
services.avahi = {
|
||||||
|
enable = true;
|
||||||
|
nssmdns4 = true;
|
||||||
|
openFirewall = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
61
modules/nixos/profiles/base.nix
Normal file
61
modules/nixos/profiles/base.nix
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
mkModule,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.profiles.base;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.profiles.base = {
|
||||||
|
enable = mkEnableOption "base profile";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
modules = {
|
||||||
|
bootloader.enable = mkDefault true;
|
||||||
|
ssh.enable = mkDefault true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Localization
|
||||||
|
time.timeZone = "Europe/Amsterdam";
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
console.keyMap = "us";
|
||||||
|
|
||||||
|
# Enable neovim
|
||||||
|
programs.neovim = {
|
||||||
|
enable = true;
|
||||||
|
defaultEditor = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Allow unfree packages
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
# Enable the usage of flakes
|
||||||
|
nix.settings.experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Clean tmp
|
||||||
|
boot.tmp.cleanOnBoot = true;
|
||||||
|
|
||||||
|
# Base packages
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
git
|
||||||
|
wget
|
||||||
|
curl
|
||||||
|
dig
|
||||||
|
procps
|
||||||
|
wireguard-tools
|
||||||
|
usbutils
|
||||||
|
pciutils
|
||||||
|
zip
|
||||||
|
unzip
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
28
modules/nixos/profiles/desktop.nix
Normal file
28
modules/nixos/profiles/desktop.nix
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.profiles.desktop;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.profiles.desktop = {
|
||||||
|
enable = mkEnableOption "desktop profile";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
modules = {
|
||||||
|
profiles.base.enable = mkDefault true;
|
||||||
|
fonts.enable = mkDefault true;
|
||||||
|
graphics.enable = mkDefault true;
|
||||||
|
gnome.enable = mkDefault true; # TODO: Rename to display manager?
|
||||||
|
networkmanager.enable = mkDefault true;
|
||||||
|
printing.enable = mkDefault true;
|
||||||
|
sound.enable = mkDefault true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
30
modules/nixos/profiles/laptop.nix
Normal file
30
modules/nixos/profiles/laptop.nix
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.profiles.laptop;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.profiles.laptop = {
|
||||||
|
enable = mkEnableOption "laptop profile";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Setup modules
|
||||||
|
modules = {
|
||||||
|
profiles.desktop.enable = mkDefault true;
|
||||||
|
bluetooth.enable = mkDefault true;
|
||||||
|
power-saving.enable = mkDefault true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Add packages
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
brightnessctl
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
24
modules/nixos/sound.nix
Normal file
24
modules/nixos/sound.nix
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{ lib, config, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.sound;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.sound = {
|
||||||
|
enable = mkEnableOption "sound";
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Enable pipewire
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
jack.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Recommended by wiki, allows user processes to use realtime kernel
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
};
|
||||||
|
}
|
15
modules/nixos/ssh.nix
Normal file
15
modules/nixos/ssh.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{ lib, config, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.ssh;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.ssh = {
|
||||||
|
enable = mkEnableOption "ssh";
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.openssh.enable = true;
|
||||||
|
# TODO: Is this default configuration secure?
|
||||||
|
};
|
||||||
|
}
|
@ -1,63 +0,0 @@
|
|||||||
{ lib, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
# Import environment
|
|
||||||
../default.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
config = {
|
|
||||||
# State version
|
|
||||||
system.stateVersion = "24.05";
|
|
||||||
|
|
||||||
# Machine hostname
|
|
||||||
networking.hostName = "20212060";
|
|
||||||
|
|
||||||
# Enabled modules
|
|
||||||
modules = {
|
|
||||||
base.desktop.enable = true;
|
|
||||||
bluetooth.enable = true;
|
|
||||||
power-saving.enable = false;
|
|
||||||
networkmanager.enable = true;
|
|
||||||
grdp.enable = true;
|
|
||||||
printing.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Hardware configuration
|
|
||||||
hardware.enableRedistributableFirmware = true;
|
|
||||||
boot.initrd.availableKernelModules = [
|
|
||||||
"xhci_pci"
|
|
||||||
"nvme"
|
|
||||||
"usb_storage"
|
|
||||||
"sd_mod"
|
|
||||||
"rtsx_pci_sdmmc"
|
|
||||||
];
|
|
||||||
boot.initrd.kernelModules = [ ];
|
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
|
||||||
boot.extraModulePackages = [ ];
|
|
||||||
hardware.cpu.intel.updateMicrocode = true;
|
|
||||||
|
|
||||||
# Filesystems
|
|
||||||
fileSystems."/" = {
|
|
||||||
device = "/dev/disk/by-uuid/3b91eaeb-ea95-4bea-8dc1-f55af7502d23";
|
|
||||||
fsType = "ext4";
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/boot" = {
|
|
||||||
device = "/dev/disk/by-uuid/46BF-DE2C";
|
|
||||||
fsType = "vfat";
|
|
||||||
options = [
|
|
||||||
"fmask=0077"
|
|
||||||
"dmask=0077"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Swapfile
|
|
||||||
swapDevices = [
|
|
||||||
{
|
|
||||||
device = "/var/lib/swapfile";
|
|
||||||
size = 16 * 1024;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
370
unorganized/users/jan.nix
Normal file
370
unorganized/users/jan.nix
Normal file
@ -0,0 +1,370 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
config = (
|
||||||
|
lib.recursiveUpdate
|
||||||
|
{
|
||||||
|
# State version
|
||||||
|
home.stateVersion = "24.05";
|
||||||
|
|
||||||
|
# TODO: Move into modules
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
libreoffice-still
|
||||||
|
remmina
|
||||||
|
pinentry
|
||||||
|
thunderbird
|
||||||
|
signal-desktop
|
||||||
|
prusa-slicer
|
||||||
|
freecad-wayland
|
||||||
|
inkscape
|
||||||
|
ente-auth
|
||||||
|
bitwarden
|
||||||
|
carla
|
||||||
|
baobab
|
||||||
|
gnome-calculator
|
||||||
|
nautilus
|
||||||
|
];
|
||||||
|
|
||||||
|
# desktop.development = "river-light";
|
||||||
|
desktop.enable = true;
|
||||||
|
desktop.environments = {
|
||||||
|
river-dark = {
|
||||||
|
name = "River Dark";
|
||||||
|
type = "custom";
|
||||||
|
config = { };
|
||||||
|
extraConfig = {
|
||||||
|
modules = {
|
||||||
|
# Desktop environment
|
||||||
|
river.enable = true;
|
||||||
|
waylock.enable = true;
|
||||||
|
waybar.enable = true;
|
||||||
|
mako.enable = true;
|
||||||
|
foot.enable = true;
|
||||||
|
rofi-rbw.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# TODO: Remove everything below, it is here out of convenience and should be elsewhere
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
config.common.default = [
|
||||||
|
"wlr"
|
||||||
|
"gtk"
|
||||||
|
];
|
||||||
|
|
||||||
|
extraPortals = with pkgs; [
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
xdg-desktop-portal-wlr
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Color scheme
|
||||||
|
desktop.theming.background = {
|
||||||
|
image = {
|
||||||
|
url = "https://i.postimg.cc/tTB3dM3T/1382899.png";
|
||||||
|
hash = "sha256-kStcwAtK2vxitU6uaQtZTA5iFS8k0iXkFwinY2M8wQE=";
|
||||||
|
};
|
||||||
|
themed = true;
|
||||||
|
inverted = false;
|
||||||
|
};
|
||||||
|
desktop.theming.themes.catppuccin = {
|
||||||
|
enable = true;
|
||||||
|
flavor = "mocha";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
river-light = {
|
||||||
|
name = "River Light";
|
||||||
|
type = "custom";
|
||||||
|
config = { };
|
||||||
|
extraConfig = {
|
||||||
|
modules = {
|
||||||
|
# Desktop environment
|
||||||
|
river.enable = true;
|
||||||
|
waylock.enable = true;
|
||||||
|
waybar.enable = true;
|
||||||
|
mako.enable = true;
|
||||||
|
foot.enable = true;
|
||||||
|
rofi-rbw.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# TODO: Remove everything below, it is here out of convenience and should be elsewhere
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
config.common.default = [
|
||||||
|
"wlr"
|
||||||
|
"gtk"
|
||||||
|
];
|
||||||
|
|
||||||
|
extraPortals = with pkgs; [
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
xdg-desktop-portal-wlr
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Color scheme
|
||||||
|
desktop.theming.background = {
|
||||||
|
image = {
|
||||||
|
url = "https://raw.githubusercontent.com/dharmx/walls/refs/heads/main/digital/a_drawing_of_a_spider_on_a_white_surface.png";
|
||||||
|
hash = "sha256-eCEjM7R9yeHNhZZtvHjrgkfwT25JA7FeMoVwnQ887CQ=";
|
||||||
|
};
|
||||||
|
themed = true;
|
||||||
|
inverted = false;
|
||||||
|
};
|
||||||
|
desktop.theming.themes.catppuccin = {
|
||||||
|
enable = true;
|
||||||
|
flavor = lib.mkForce "latte";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
gnome = {
|
||||||
|
name = "Gnome";
|
||||||
|
type = "custom";
|
||||||
|
config = { };
|
||||||
|
extraConfig = {
|
||||||
|
programs = {
|
||||||
|
gnome-shell.enable = true;
|
||||||
|
};
|
||||||
|
desktop = {
|
||||||
|
initScript = ''
|
||||||
|
${pkgs.gnome-session}/bin/gnome-session
|
||||||
|
'';
|
||||||
|
session = {
|
||||||
|
type = "wayland";
|
||||||
|
desktop = "GNOME";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
modules.river.enable = lib.mkForce false;
|
||||||
|
|
||||||
|
# TODO: Remove everything below, it is here out of convenience and should be elsewhere
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
config.common.default = [
|
||||||
|
"gnome"
|
||||||
|
"gtk"
|
||||||
|
];
|
||||||
|
|
||||||
|
extraPortals = with pkgs; [
|
||||||
|
xdg-desktop-portal-gnome
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
];
|
||||||
|
};
|
||||||
|
home.packages = [
|
||||||
|
# Core utilities
|
||||||
|
pkgs.epiphany
|
||||||
|
pkgs.gnome-text-editor
|
||||||
|
pkgs.gnome-calendar
|
||||||
|
pkgs.gnome-characters
|
||||||
|
pkgs.gnome-clocks
|
||||||
|
pkgs.gnome-console
|
||||||
|
pkgs.gnome-contacts
|
||||||
|
pkgs.gnome-font-viewer
|
||||||
|
pkgs.gnome-logs
|
||||||
|
pkgs.gnome-maps
|
||||||
|
pkgs.gnome-music
|
||||||
|
pkgs.gnome-system-monitor
|
||||||
|
pkgs.gnome-weather
|
||||||
|
pkgs.loupe
|
||||||
|
pkgs.gnome-connections
|
||||||
|
pkgs.simple-scan
|
||||||
|
pkgs.snapshot
|
||||||
|
pkgs.totem
|
||||||
|
pkgs.yelp
|
||||||
|
|
||||||
|
# Optional packages
|
||||||
|
pkgs.adwaita-icon-theme
|
||||||
|
pkgs.gnome-backgrounds
|
||||||
|
pkgs.gnome-bluetooth
|
||||||
|
pkgs.gnome-color-manager
|
||||||
|
pkgs.gnome-control-center
|
||||||
|
pkgs.gnome-shell-extensions
|
||||||
|
pkgs.gnome-tour # GNOME Shell detects the .desktop file on first log-in.
|
||||||
|
pkgs.gnome-user-docs
|
||||||
|
pkgs.glib # for gsettings program
|
||||||
|
pkgs.gnome-menus
|
||||||
|
pkgs.gtk3.out # for gtk-launch program
|
||||||
|
pkgs.xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/
|
||||||
|
pkgs.xdg-user-dirs-gtk # Used to create the default bookmarks
|
||||||
|
|
||||||
|
# Fonts
|
||||||
|
pkgs.cantarell-fonts
|
||||||
|
pkgs.dejavu_fonts
|
||||||
|
pkgs.source-code-pro # Default monospace font in 3.32
|
||||||
|
pkgs.source-sans
|
||||||
|
|
||||||
|
# Other stuff
|
||||||
|
pkgs.gnome-session
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Pipewire roc sink
|
||||||
|
xdg.configFile."pipewire/pipewire.conf.d/60-roc-sink.conf" = {
|
||||||
|
text = ''
|
||||||
|
context.modules = [
|
||||||
|
{
|
||||||
|
name = "libpipewire-module-roc-sink"
|
||||||
|
args = {
|
||||||
|
fec.code = "rs8m"
|
||||||
|
remote.ip = "10.20.60.251"
|
||||||
|
remote.source.port = 10001
|
||||||
|
remote.repair.port = 10002
|
||||||
|
sink.name = "Roc Sink"
|
||||||
|
sink.props.node.name = "roc-sink"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enabled modules
|
||||||
|
modules = {
|
||||||
|
# Communication
|
||||||
|
whatsapp.enable = true;
|
||||||
|
discord.enable = true;
|
||||||
|
|
||||||
|
# Browser
|
||||||
|
firefox = {
|
||||||
|
enable = true;
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
qutebrowser = {
|
||||||
|
enable = true;
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Gaming
|
||||||
|
steam.enable = true;
|
||||||
|
# modrinth.enable = true;
|
||||||
|
# es-de.enable = true; # TODO: Fix, again
|
||||||
|
retroarch.enable = true;
|
||||||
|
ryujinx.enable = true;
|
||||||
|
|
||||||
|
# Media
|
||||||
|
spotify.enable = true;
|
||||||
|
feishin.enable = true;
|
||||||
|
|
||||||
|
# Tools
|
||||||
|
git = {
|
||||||
|
enable = true;
|
||||||
|
user = "Jan-Bulthuis";
|
||||||
|
email = "git@bulthuis.dev";
|
||||||
|
# TODO: Move
|
||||||
|
ignores = [
|
||||||
|
".envrc"
|
||||||
|
".direnv"
|
||||||
|
"flake.nix"
|
||||||
|
"flake.lock"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
btop.enable = true;
|
||||||
|
fish.enable = true;
|
||||||
|
bluetuith.enable = false;
|
||||||
|
winbox.enable = true;
|
||||||
|
obsidian.enable = true;
|
||||||
|
zathura.enable = true;
|
||||||
|
eduvpn.enable = true;
|
||||||
|
keyring.enable = true;
|
||||||
|
scripts.enable = true;
|
||||||
|
xpra = {
|
||||||
|
enable = true;
|
||||||
|
hosts = [
|
||||||
|
"mixer@10.20.60.251"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Development
|
||||||
|
neovim.enable = true;
|
||||||
|
vscode.enable = true;
|
||||||
|
docker.enable = true;
|
||||||
|
matlab.enable = true;
|
||||||
|
mathematica.enable = true;
|
||||||
|
|
||||||
|
# Languages
|
||||||
|
haskell.enable = false;
|
||||||
|
js.enable = true;
|
||||||
|
nix.enable = true;
|
||||||
|
rust.enable = true;
|
||||||
|
python.enable = true;
|
||||||
|
cpp.enable = true;
|
||||||
|
tex.enable = true;
|
||||||
|
jupyter.enable = true;
|
||||||
|
|
||||||
|
# Enable unfree
|
||||||
|
unfree.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Theme configuration
|
||||||
|
desktop.theming =
|
||||||
|
let
|
||||||
|
fontpkgs = config.desktop.theming.fonts.pkgs;
|
||||||
|
in
|
||||||
|
lib.mkDefault {
|
||||||
|
# Fonts
|
||||||
|
fonts.serif = fontpkgs."DejaVu Serif";
|
||||||
|
fonts.sansSerif = fontpkgs."DejaVu Sans";
|
||||||
|
fonts.monospace = fontpkgs."Dina";
|
||||||
|
fonts.emoji = fontpkgs."Noto Color Emoji";
|
||||||
|
fonts.interface = fontpkgs."Dina";
|
||||||
|
fonts.extraFonts = [ ];
|
||||||
|
|
||||||
|
# Color scheme
|
||||||
|
themes.catppuccin = {
|
||||||
|
enable = true;
|
||||||
|
flavor = "mocha";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# Default desktop environment
|
||||||
|
modules = {
|
||||||
|
# Desktop environment
|
||||||
|
river.enable = true;
|
||||||
|
waylock.enable = true;
|
||||||
|
waybar.enable = true;
|
||||||
|
mako.enable = true;
|
||||||
|
foot.enable = true;
|
||||||
|
rofi-rbw.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# TODO: Remove everything below, it is here out of convenience and should be elsewhere
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
config.common.default = lib.mkDefault [
|
||||||
|
"wlr"
|
||||||
|
"gtk"
|
||||||
|
];
|
||||||
|
|
||||||
|
extraPortals =
|
||||||
|
with pkgs;
|
||||||
|
lib.mkDefault [
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
xdg-desktop-portal-wlr
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Color scheme
|
||||||
|
desktop.theming.background = lib.mkDefault {
|
||||||
|
image = {
|
||||||
|
url = "https://i.postimg.cc/tTB3dM3T/1382899.png";
|
||||||
|
hash = "sha256-kStcwAtK2vxitU6uaQtZTA5iFS8k0iXkFwinY2M8wQE=";
|
||||||
|
};
|
||||||
|
themed = true;
|
||||||
|
inverted = false;
|
||||||
|
};
|
||||||
|
desktop.theming.themes.catppuccin = {
|
||||||
|
enable = true;
|
||||||
|
flavor = "mocha";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user