Restructuring #1
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 = {
|
||||
glue.url = "./glue";
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
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";
|
||||
home-manager.url = "github:nix-community/home-manager";
|
||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
outputs =
|
||||
{
|
||||
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;
|
||||
};
|
||||
outputs = inputs: inputs.glue { inherit 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