Compare commits

..

No commits in common. "main" and "backup_pre_merge" have entirely different histories.

156 changed files with 649 additions and 5529 deletions

1
.envrc Normal file
View file

@ -0,0 +1 @@
use flake

View file

@ -1,11 +1,6 @@
.PHONY: default build flathub
.PHONY: build
HOST := $(shell hostname)
default: build
build:
nix build --keep-going .#nixosConfigurations.$(HOST).config.system.build.toplevel
flathub:
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
nix build .#nixosConfigurations.$(HOST).config.system.build.toplevel

View file

@ -1,62 +1,10 @@
#+title: README
#+author: Evie Litherland-Smith
#+email: evie@xenia.me.uk
My personal NixOS + home-manager configuration files.
System configuration files for NixOS.
To set up without cloning the repository (assuming an already running
NixOS system), run:
#+begin_src bash
sudo nixos-rebuild switch --flake "git+https://git.xenia.me.uk/pixelifytica/nixos.git?ref=main"\#$(hostname)
#+end_src
Fairly minimal setup and installation, to be paired with [[https://git.xenia.me.uk/pixelifytica/home-manager.git][a
home-manager config]] to get the full user setup.
* Password store setup
** Transfer GPG key(s)
#+begin_src bash
# Export keys on existing machine
gpg -a --export > publickeys.asc
gpg -a --export-secret-keys > privatekeys.asc
# Import key on new machine
gpg --import privatekeys.asc; gpg --import publickeys.asc
# Edit (for each key) to set trust
gpg --edit-key evie@xenia.me.uk
#+end_src
** Clone password-store repository
#+begin_src bash
git clone https://git.xenia.me.uk/pixelifytica/pass $PASSWORD_STORE_DIR
#+end_src
* Email setup
** Passwords for mbsync
Run src_bash{mbsync-ensure-pass} to check for passwords required by
~mbsync~, and query for missing passwords.
Static app-specific passwords are stored in ~password-store~, fetch from
there to add to secret service.
** Proton
*** Bridge
Start Proton Mail Bridge application, if needed configure to store
using =SecretService= and log in. Application will auto-start with
desktop session.
Use password from Bridge for ~mbsync~.
** Outlook
*** Davmail
Run src_bash{davmail-setup} to automate this process.
On first run (or if token expires), stop systemd service and run manually to complete manual auth. Token will stay valid for a little while (no idea how long specifically).
#+begin_src bash
# Restart service to ensure ~/.davmail.properties exists
systemctl --user restart davmail.service
# Run to use manual authentication
systemctl --user stop davmail.service && davmail -notray ~/.davmail.properties
# Restart again so that service picks up available ports
systemctl --user restart davmail.service
#+end_src
* Flathub setup
#+begin_src bash
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
#+end_src
* Further reading:
Further reading:
- https://nixos.org/

19
configuration/Legion.nix Normal file
View file

@ -0,0 +1,19 @@
{...}: {
imports = [
../services/caddy.nix
../services/forgejo.nix
../services/grafana.nix
../services/minecraft.nix
../services/nix-serve.nix
../services/radicale.nix
../services/sshd.nix
../services/syncthing.nix
# ../services/znc.nix
];
boot.loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
users.mutableUsers = false;
system.autoUpgrade.operation = "switch";
}

View file

@ -0,0 +1 @@
{...}: {imports = [./laptop.nix];}

19
configuration/Scorch.nix Normal file
View file

@ -0,0 +1,19 @@
{pkgs, ...}: {
imports = [./desktop.nix];
boot = {
loader.efi.efiSysMountPoint = "/boot/efi";
initrd = {
secrets = {"/crypto_keyfile.bin" = null;};
luks.devices."luks-47d34268-5100-4eba-b34d-220f4239c1cb" = {
device = "/dev/disk/by-uuid/47d34268-5100-4eba-b34d-220f4239c1cb";
keyFile = "/crypto_keyfile.bin";
};
};
};
environment = {
etc."ppp/options".text = ''
ipcp-accept-remote
'';
systemPackages = with pkgs; [openfortivpn samba];
};
}

20
configuration/Tone.nix Normal file
View file

@ -0,0 +1,20 @@
{pkgs, ...}: {
imports = [./laptop.nix];
boot.initrd = {
secrets = {"/crypto_keyfile.bin" = null;};
luks.devices."luks-761eeb11-3091-4142-9232-4fb33165eccd" = {
device = "/dev/disk/by-uuid/761eeb11-3091-4142-9232-4fb33165eccd";
keyFile = "/crypto_keyfile.bin";
};
};
environment = {
etc."ppp/options".text = ''
ipcp-accept-remote
'';
systemPackages = with pkgs; [openfortivpn];
};
services = {
samba.enable = true;
hardware.bolt.enable = true;
};
}

View file

@ -0,0 +1,22 @@
{config, ...}: {
imports = [./desktop.nix];
boot = {
initrd.kernelModules = ["amdgpu"];
extraModulePackages = with config.boot.kernelPackages; [v4l2loopback];
extraModprobeConfig = ''
options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1
'';
};
hardware = {
opengl = {
driSupport = true;
driSupport32Bit = true;
};
steam-hardware.enable = true;
};
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
};
}

135
configuration/default.nix Normal file
View file

@ -0,0 +1,135 @@
{
config,
pkgs,
iosevkaCustom,
...
}: {
nix = {
enable = true;
settings = {
cores = 0;
max-jobs = "auto";
trusted-users = ["root"];
experimental-features = ["nix-command" "flakes"];
auto-optimise-store = true;
};
channel.enable = true;
gc = {
automatic = true;
options = "--delete-older-than 7d";
};
optimise.automatic = true;
extraOptions = ''
keep-outputs = false
keep-derivations = false
min-free = ${toString (100 * 1024 * 1024)}
max-free = ${toString (1024 * 1024 * 1024)}
'';
};
nixpkgs.config.allowUnfree = true;
system = {
stateVersion = "23.05";
autoUpgrade = {
enable = true;
persistent = true;
allowReboot = false;
flake = "git+${config.nix.registry.my-nixos.to.url}";
dates = "02:00";
randomizedDelaySec = "45min";
flags = [
"--accept-flake-config"
"--option"
"extra-binary-caches"
"https://nix.xenia.me.uk"
];
};
};
boot.loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
networking = {
networkmanager.enable = true;
firewall.enable = true;
nameservers = ["9.9.9.9"];
};
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINI1dWlS16Keil0MGPWmMsBzx8F9ylfz+fRwxUr8/tZ/ ion"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC4M1zV3yLMMI1tYwdY9QDXJDlOBugm7UXKC+Xk89yHq pixelifytica@Vanguard"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICPypUUGVAdpl0SHrUDVw0RureuFNsljrXQvrf0uc055 pixelifytica@Northstar"
];
environment = {
pathsToLink = ["/share/zsh"];
sessionVariables = {
XDG_CONFIG_HOME = "$HOME/.config";
XDG_CACHE_HOME = "$HOME/.cache";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_STATE_HOME = "$HOME/.local/state";
};
systemPackages = with pkgs; [
libsecret
coreutils-full
gnumake
git
file
zip
unzip
curl
wget
dig
wireguard-tools
(quickemu.override {qemu = qemu_full;})
];
localBinInPath = true;
};
programs = {
command-not-found.enable = false;
ssh.startAgent = true;
nano = {
enable = true;
syntaxHighlight = true;
nanorc = ''
set nowrap
set tabstospaces
set tabsize 2
'';
};
};
services = {
upower.enable = true;
power-profiles-daemon.enable = true;
system76-scheduler = {
enable = true;
useStockConfig = true;
};
};
security.rtkit.enable = true;
virtualisation.podman.enable = true;
time.timeZone = "Europe/London";
i18n.defaultLocale = "en_GB.UTF-8";
console = {
font = iosevkaCustom.names.iosevka-custom-nerdfont;
useXkbConfig = true;
};
fonts = {
packages = with pkgs;
with iosevkaCustom.packages; [
iosevka-custom-nerdfont
iosevka-custom-aile
(nerdfonts.override {fonts = ["NerdFontsSymbolsOnly"];}) # Status bar
emacs-all-the-icons-fonts # Emacs
weather-icons # Emacs
lmodern # LaTeX
noto-fonts-emoji # Emoji
];
fontconfig = {
enable = true;
defaultFonts = with iosevkaCustom.names; {
serif = [iosevka-custom-aile];
sansSerif = [iosevka-custom-aile];
monospace = [iosevka-custom-nerdfont];
emoji = ["Noto Color Emoji"];
};
};
};
}

58
configuration/desktop.nix Normal file
View file

@ -0,0 +1,58 @@
{
config,
lib,
pkgs,
...
}: {
imports = [./default.nix];
nixpkgs.config.chromium.commandLineArgs = "--enable-features=UseOzonePlatform --ozone-platform=wayland";
system.autoUpgrade.operation = "boot";
hardware.bluetooth.enable = true;
environment = {
plasma6 =
lib.mkIf config.services.desktopManager.plasma6.enable
{excludePackages = with pkgs.kdePackages; [plasma-browser-integration];};
systemPackages = with pkgs; [
xdg-utils
hunspell
hunspellDicts.en_GB-large
];
};
programs = {
dconf.enable = true;
noisetorch.enable = true;
kdeconnect.enable = true;
gamescope = {
enable = true;
capSysNice = true;
};
};
services = {
flatpak.enable = true;
printing.enable = true;
pipewire = {
enable = true;
pulse.enable = true;
alsa = {
enable = true;
support32Bit = true;
};
};
xserver = {
enable = true;
xkb = {
layout = "gb";
variant = "";
options = "ctrl:nocaps";
};
};
displayManager.sddm = {
enable = true;
wayland.enable = true;
};
desktopManager.plasma6 = {
enable = true;
enableQt5Integration = true;
};
};
}

View file

@ -1,7 +1,5 @@
{ pkgs, ... }:
{
{...}: {
imports = [./desktop.nix];
environment.systemPackages = [ pkgs.acpi ];
powerManagement.enable = true;
services.auto-cpufreq = {
enable = true;

View file

@ -1,199 +1,15 @@
{
"nodes": {
"base16": {
"inputs": {
"fromYaml": "fromYaml"
},
"locked": {
"lastModified": 1708890466,
"narHash": "sha256-LlrC09LoPi8OPYOGPXegD72v+//VapgAqhbOFS3i8sc=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "665b3c6748534eb766c777298721cece9453fdae",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "base16.nix",
"type": "github"
}
},
"base16-fish": {
"flake": false,
"locked": {
"lastModified": 1622559957,
"narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=",
"owner": "tomyun",
"repo": "base16-fish",
"rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe",
"type": "github"
},
"original": {
"owner": "tomyun",
"repo": "base16-fish",
"type": "github"
}
},
"base16-foot": {
"flake": false,
"locked": {
"lastModified": 1696725948,
"narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=",
"owner": "tinted-theming",
"repo": "base16-foot",
"rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-foot",
"type": "github"
}
},
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1696727917,
"narHash": "sha256-FVrbPk+NtMra0jtlC5oxyNchbm8FosmvXIatkRbYy1g=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "dbe1480d99fe80f08df7970e471fac24c05f2ddb",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-helix",
"type": "github"
}
},
"base16-kitty": {
"flake": false,
"locked": {
"lastModified": 1665001328,
"narHash": "sha256-aRaizTYPpuWEcvoYE9U+YRX+Wsc8+iG0guQJbvxEdJY=",
"owner": "kdrag0n",
"repo": "base16-kitty",
"rev": "06bb401fa9a0ffb84365905ffbb959ae5bf40805",
"type": "github"
},
"original": {
"owner": "kdrag0n",
"repo": "base16-kitty",
"type": "github"
}
},
"base16-tmux": {
"flake": false,
"locked": {
"lastModified": 1696725902,
"narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=",
"owner": "tinted-theming",
"repo": "base16-tmux",
"rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-tmux",
"type": "github"
}
},
"base16-vim": {
"flake": false,
"locked": {
"lastModified": 1663659192,
"narHash": "sha256-uJvaYYDMXvoo0fhBZUhN8WBXeJ87SRgof6GEK2efFT0=",
"owner": "chriskempson",
"repo": "base16-vim",
"rev": "3be3cd82cd31acfcab9a41bad853d9c68d30478d",
"type": "github"
},
"original": {
"owner": "chriskempson",
"repo": "base16-vim",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"fromYaml": {
"flake": false,
"locked": {
"lastModified": 1689549921,
"narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=",
"owner": "SenchoPens",
"repo": "fromYaml",
"rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "fromYaml",
"type": "github"
}
},
"gnome-shell": {
"flake": false,
"locked": {
"lastModified": 1713702291,
"narHash": "sha256-zYP1ehjtcV8fo+c+JFfkAqktZ384Y+y779fzmR9lQAU=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "0d0aadf013f78a7f7f1dc984d0d812971864b934",
"type": "github"
},
"original": {
"owner": "GNOME",
"ref": "46.1",
"repo": "gnome-shell",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1726989464,
"narHash": "sha256-Vl+WVTJwutXkimwGprnEtXc/s/s8sMuXzqXaspIGlwM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "2f23fa308a7c067e52dfcc30a0758f47043ec176",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-24.05",
"repo": "home-manager",
"type": "github"
}
},
"iosevka-custom": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1730274547,
"narHash": "sha256-34sNwbLNuE6l7jsBkBRUMRahoZc63lCsCa+PoZd/8W8=",
"lastModified": 1719045863,
"narHash": "sha256-J0RQ2aiAchRxNzl2jlvqFNpFnDW2GZ7QXp53y7fs4GU=",
"ref": "refs/heads/main",
"rev": "49828459e58b6987d2738b74c085cecb963355ab",
"revCount": 19,
"rev": "db915e9a55cecdedac53a3cdba354dbc281938d9",
"revCount": 13,
"type": "git",
"url": "https://git.xenia.me.uk/pixelifytica/iosevka.git"
},
@ -204,11 +20,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1728888510,
"narHash": "sha256-nsNdSldaAyu6PE3YUA+YQLqUDJh+gRbBooMMekZJwvI=",
"lastModified": 1717602782,
"narHash": "sha256-pL9jeus5QpX5R+9rsp3hhZ+uplVHscNJh8n8VpqscM0=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "a3c0b3b21515f74fd2665903d4ce6bc4dc81c77c",
"rev": "e8057b67ebf307f01bdcc8fba94d94f75039d1f6",
"type": "github"
},
"original": {
@ -220,11 +36,11 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1730883749,
"narHash": "sha256-mwrFF0vElHJP8X3pFCByJR365Q2463ATp2qGIrDUdlE=",
"lastModified": 1719838683,
"narHash": "sha256-Zw9rQjHz1ilNIimEXFeVa1ERNRBF8DoXDhLAZq5B4pE=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "dba414932936fde69f0606b4f1d87c5bc0003ede",
"rev": "d032c1a6dfad4eedec7e35e91986becc699d7d69",
"type": "github"
},
"original": {
@ -236,43 +52,8 @@
},
"root": {
"inputs": {
"home-manager": "home-manager",
"iosevka-custom": "iosevka-custom",
"nixpkgs": "nixpkgs_2",
"stylix": "stylix"
}
},
"stylix": {
"inputs": {
"base16": "base16",
"base16-fish": "base16-fish",
"base16-foot": "base16-foot",
"base16-helix": "base16-helix",
"base16-kitty": "base16-kitty",
"base16-tmux": "base16-tmux",
"base16-vim": "base16-vim",
"flake-compat": "flake-compat",
"gnome-shell": "gnome-shell",
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1718122552,
"narHash": "sha256-A+dBkSwp8ssHKV/WyXb9uqIYrHBqHvtSedU24Lq9lqw=",
"owner": "danth",
"repo": "stylix",
"rev": "e59d2c1725b237c362e4a62f5722f5b268d566c7",
"type": "github"
},
"original": {
"owner": "danth",
"ref": "release-24.05",
"repo": "stylix",
"type": "github"
"nixpkgs": "nixpkgs_2"
}
}
},

149
flake.nix
View file

@ -9,65 +9,128 @@
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
iosevka-custom.url = "git+https://git.xenia.me.uk/pixelifytica/iosevka.git";
home-manager = {
url = "github:nix-community/home-manager/release-24.05";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:danth/stylix/release-24.05";
inputs = {
nixpkgs.follows = "nixpkgs";
home-manager.follows = "home-manager";
};
};
};
outputs =
inputs@{ nixpkgs, ... }:
{
outputs = {
nixpkgs,
iosevka-custom,
...
}: let
defaultSpecialArgs = {system ? "x86_64-linux", ...}: {
iosevkaCustom = {
packages = iosevka-custom.outputs.packages.${system};
names = iosevka-custom.outputs.names;
};
};
defaultModules = {
hostName ? "Atlas",
userName ? "pixelifytica",
loginShell ? "zsh",
...
}: [
./configuration/default.nix
./configuration/${hostName}.nix
./hardware-configuration/${hostName}.nix
({
config,
lib,
pkgs,
...
}: {
networking = {inherit hostName;};
nix = {
settings.trusted-users = [userName];
registry = {
my-nixos = {
from = {
type = "indirect";
id = "my-nixos";
};
to = {
type = "git";
url = "https://git.xenia.me.uk/pixelifytica/nixos.git?ref=main";
};
};
my-home-manager = {
from = {
type = "indirect";
id = "my-home-manager";
};
to = {
type = "git";
url = "https://git.xenia.me.uk/pixelifytica/home-manager.git?ref=main";
};
};
};
};
programs.${loginShell}.enable = true;
users.users.${userName} = {
shell = pkgs.${loginShell};
group = "users";
isNormalUser = true;
description = "Evie Litherland-Smith";
extraGroups = ["networkmanager" "wheel" "video" "input" "uinput"];
initialHashedPassword = "$y$j9T$tHIPQt09Kf3KH2eIRze3g/$2mwSlcq27DTGvHNPJ5EP9/1CfL3bXP0F6oS/Vuffmn3";
openssh = {inherit (config.users.users.root.openssh) authorizedKeys;};
};
})
];
in {
devShells.x86_64-linux.default = let
pkgs = import nixpkgs {system = "x86_64-linux";};
in
pkgs.mkShellNoCC {
packages = with pkgs; [nil pre-commit];
shellHook = "pre-commit install --install-hooks";
};
nixosConfigurations = {
## Server
Legion = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
username = "pixelifytica";
Legion = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = defaultSpecialArgs {inherit system;};
modules = defaultModules {
hostName = "Legion";
userName = "pixelifytica";
loginShell = "zsh";
};
modules = [ ./system/default.nix ];
};
## Personal
Vanguard = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
username = "pixelifytica";
hostName = "Vanguard";
};
modules = [ ./system/default.nix ];
};
Northstar = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
username = "pixelifytica";
Northstar = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = defaultSpecialArgs {inherit system;};
modules = defaultModules {
hostName = "Northstar";
userName = "pixelifytica";
loginShell = "zsh";
};
};
Vanguard = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = defaultSpecialArgs {inherit system;};
modules = defaultModules {
hostName = "Vanguard";
userName = "pixelifytica";
loginShell = "zsh";
};
modules = [ ./system/default.nix ];
};
## Work
Tone = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
username = "elitherl";
Tone = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = defaultSpecialArgs {inherit system;};
modules = defaultModules {
hostName = "Tone";
userName = "elitherl";
loginShell = "zsh";
};
modules = [ ./system/default.nix ];
};
Ronin = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
username = "elitherl";
hostName = "Ronin";
Scorch = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = defaultSpecialArgs {inherit system;};
modules = defaultModules {
hostName = "Scorch";
userName = "elitherl";
loginShell = "zsh";
};
modules = [ ./system/default.nix ];
};
};
};

View file

@ -1,44 +1,32 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = [
"xhci_pci"
"ahci"
"nvme"
"usbhid"
"usb_storage"
"sd_mod"
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/b9d4ba04-a867-4ca6-88f9-79dc6a982e94";
fileSystems."/" =
{ device = "/dev/disk/by-uuid/b9d4ba04-a867-4ca6-88f9-79dc6a982e94";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/8F05-4C3A";
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/8F05-4C3A";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
];
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices = [ { device = "/dev/disk/by-uuid/a10ee1da-3b0d-4f6b-b20a-d6a32ae1f668"; } ];
swapDevices =
[ { device = "/dev/disk/by-uuid/a10ee1da-3b0d-4f6b-b20a-d6a32ae1f668"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's

View file

@ -1,43 +1,34 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"rtsx_pci_sdmmc"
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "rtsx_pci_sdmmc" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/84b28760-3643-4ad8-9ff6-ff78b57067f8";
fileSystems."/" =
{ device = "/dev/disk/by-uuid/84b28760-3643-4ad8-9ff6-ff78b57067f8";
fsType = "ext4";
};
boot.initrd.luks.devices."luks-d1062931-ee58-4848-adf9-09452daeb6eb".device = "/dev/disk/by-uuid/d1062931-ee58-4848-adf9-09452daeb6eb";
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/ABE3-88E7";
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/ABE3-88E7";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
];
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices = [ { device = "/dev/disk/by-uuid/ba43345c-a652-497f-84d0-86064805446b"; } ];
swapDevices =
[ { device = "/dev/disk/by-uuid/ba43345c-a652-497f-84d0-86064805446b"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's

View file

@ -1,24 +1,13 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = [
"xhci_pci"
"ahci"
"usb_storage"
"usbhid"
"sd_mod"
];
boot.initrd.availableKernelModules =
[ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
@ -28,14 +17,16 @@
fsType = "ext4";
};
boot.initrd.luks.devices."luks-08822b9c-e9d6-424c-bc75-373f8667526d".device = "/dev/disk/by-uuid/08822b9c-e9d6-424c-bc75-373f8667526d";
boot.initrd.luks.devices."luks-08822b9c-e9d6-424c-bc75-373f8667526d".device =
"/dev/disk/by-uuid/08822b9c-e9d6-424c-bc75-373f8667526d";
fileSystems."/boot/efi" = {
device = "/dev/disk/by-uuid/6009-89FC";
fsType = "vfat";
};
swapDevices = [ { device = "/dev/disk/by-uuid/ff9627a7-820c-4628-a040-2b665688b893"; } ];
swapDevices =
[{ device = "/dev/disk/by-uuid/ff9627a7-820c-4628-a040-2b665688b893"; }];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
@ -46,5 +37,6 @@
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
hardware.cpu.intel.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -1,44 +1,33 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = [
"xhci_pci"
"thunderbolt"
"vmd"
"nvme"
"usbhid"
"usb_storage"
"sd_mod"
"rtsx_pci_sdmmc"
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "vmd" "nvme" "usbhid" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/44c11386-0af8-4954-93bc-963a8e071672";
fileSystems."/" =
{ device = "/dev/disk/by-uuid/44c11386-0af8-4954-93bc-963a8e071672";
fsType = "ext4";
};
boot.initrd.luks.devices."luks-bf1eab3a-6d92-430d-a282-8dd4c9efe2c7".device = "/dev/disk/by-uuid/bf1eab3a-6d92-430d-a282-8dd4c9efe2c7";
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/85D5-B6EC";
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/85D5-B6EC";
fsType = "vfat";
};
swapDevices = [ { device = "/dev/disk/by-uuid/e65e5e4d-2084-4e6b-9255-3b36cba1529f"; } ];
swapDevices =
[ { device = "/dev/disk/by-uuid/e65e5e4d-2084-4e6b-9255-3b36cba1529f"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's

View file

@ -1,51 +1,39 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = [
"xhci_pci"
"ahci"
"nvme"
"usbhid"
"sd_mod"
"sr_mod"
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "sd_mod" "sr_mod" ];
boot.initrd.kernelModules = [ "dm-snapshot" ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/379a999a-0753-4cbf-b868-e275902f0f73";
fileSystems."/" =
{ device = "/dev/disk/by-uuid/379a999a-0753-4cbf-b868-e275902f0f73";
fsType = "ext4";
};
boot.initrd.luks.devices."luks-0d50df5f-9456-4296-9156-f5b818e11552".device = "/dev/disk/by-uuid/0d50df5f-9456-4296-9156-f5b818e11552";
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/3297-A70D";
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/3297-A70D";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
];
options = [ "fmask=0022" "dmask=0022" ];
};
fileSystems."/mnt/secondary" = {
device = "/dev/disk/by-uuid/036f1fcb-0674-4ae5-a2fe-cb4f7ada001d";
fileSystems."/mnt/secondary" =
{ device = "/dev/disk/by-uuid/036f1fcb-0674-4ae5-a2fe-cb4f7ada001d";
fsType = "ext4";
};
swapDevices = [ { device = "/dev/disk/by-uuid/26a8690a-70f9-4701-b224-b212f76a7035"; } ];
swapDevices =
[ { device = "/dev/disk/by-uuid/26a8690a-70f9-4701-b224-b212f76a7035"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's

View file

@ -1,19 +1,17 @@
{ ... }:
{
config,
lib,
pkgs,
...
}: {
services.adguardhome = {
enable = true;
mutableSettings = false;
settings = rec {
http.address = "0.0.0.0:3200";
dns = {
bind_hosts = [
"127.0.0.1"
"192.168.1.230"
];
bootstrap_dns = [
"9.9.9.9"
"149.112.112.10"
];
bind_hosts = ["127.0.0.1" "192.168.1.230"];
bootstrap_dns = ["9.9.9.9" "149.112.112.10"];
ratelimit = 0;
safe_search.enabled = true;
rewrites = [
@ -28,16 +26,13 @@
];
blocked_services.ids = [];
};
filtering = {
inherit (dns) safe_search rewrites blocked_services;
};
filtering = {inherit (dns) safe_search rewrites blocked_services;};
querylog.ignored = [
"discovery.syncthing.net"
"discovery-v6.syncthing.net"
"matrix.tchncs.de"
];
statistics = {
inherit (querylog) ignored;
};
statistics = {inherit (querylog) ignored;};
};
openFirewall = true;
};

5
services/astroneer.nix Normal file
View file

@ -0,0 +1,5 @@
{pkgs, ...}: {
environment.systemPackages = with pkgs; [steamcmd];
networking.firewall.allowedTCPPorts = [8777];
services.caddy.virtualHosts."astro.xenia.me.uk".extraConfig = "reverse_proxy http://localhost:8777";
}

View file

@ -1,9 +1,5 @@
{ ... }:
{
networking.firewall.allowedTCPPorts = [
80
443
];
{...}: {
networking.firewall.allowedTCPPorts = [80 443];
services.caddy = {
enable = true;
email = "evie@xenia.me.uk";
@ -18,13 +14,7 @@
};
services.fail2ban = {
enable = true;
ignoreIP = [
"127.0.0.1/8"
"::1"
"192.168.1.0/16"
];
bantime-increment = {
enable = true;
};
ignoreIP = ["127.0.0.1/8" "::1" "192.168.1.0/16"];
bantime-increment = {enable = true;};
};
}

21
services/forgejo.nix Normal file
View file

@ -0,0 +1,21 @@
{...}: {
imports = [./caddy.nix];
services = {
forgejo = {
enable = true;
settings = {
server = {
ROOT_URL = "https://git.xenia.me.uk";
DOMAIN = "git.xenia.me.uk";
HTTP_ADDR = "127.0.0.1";
HTTP_PORT = 3100;
DISABLE_SSH = true;
};
ui = {DEFAULT_THEME = "forgejo-auto";};
admin = {DISABLE_REGULAR_ORG_CREATION = true;};
service = {DISABLE_REGISTRATION = true;};
};
};
caddy.virtualHosts."git.xenia.me.uk".extraConfig = "reverse_proxy http://localhost:3100";
};
}

22
services/gitea.nix Normal file
View file

@ -0,0 +1,22 @@
{...}: {
imports = [./caddy.nix];
services.gitea = {
enable = true;
settings = {
server = {
ROOT_URL = "https://git.xenia.me.uk";
DOMAIN = "git.xenia.me.uk";
HTTP_ADDR = "127.0.0.1";
HTTP_PORT = 3100;
DISABLE_SSH = true;
};
service.DISABLE_REGISTRATION = true;
ui = {
DEFAULT_THEME = "auto";
THEMES = "auto,gitea,arc-greenw,catppuccin-latte-rosewater,catppuccin-latte-flamingo,catppuccin-latte-pink,catppuccin-latte-mauve,catppuccin-latte-red,catppuccin-latte-maroon,catppuccin-latte-peach,catppuccin-latte-yellow,catppuccin-latte-green,catppuccin-latte-teal,catppuccin-latte-sky,catppuccin-latte-sapphire,catppuccin-latte-blue,catppuccin-latte-lavender,catppuccin-frappe-rosewater,catppuccin-frappe-flamingo,catppuccin-frappe-pink,catppuccin-frappe-mauve,catppuccin-frappe-red,catppuccin-frappe-maroon,catppuccin-frappe-peach,catppuccin-frappe-yellow,catppuccin-frappe-green,catppuccin-frappe-teal,catppuccin-frappe-sky,catppuccin-frappe-sapphire,catppuccin-frappe-blue,catppuccin-frappe-lavender,catppuccin-macchiato-rosewater,catppuccin-macchiato-flamingo,catppuccin-macchiato-pink,catppuccin-macchiato-mauve,catppuccin-macchiato-red,catppuccin-macchiato-maroon,catppuccin-macchiato-peach,catppuccin-macchiato-yellow,catppuccin-macchiato-green,catppuccin-macchiato-teal,catppuccin-macchiato-sky,catppuccin-macchiato-sapphire,catppuccin-macchiato-blue,catppuccin-macchiato-lavender,catppuccin-mocha-rosewater,catppuccin-mocha-flamingo,catppuccin-mocha-pink,catppuccin-mocha-mauve,catppuccin-mocha-red,catppuccin-mocha-maroon,catppuccin-mocha-peach,catppuccin-mocha-yellow,catppuccin-mocha-green,catppuccin-mocha-teal,catppuccin-mocha-sky,catppuccin-mocha-sapphire,catppuccin-mocha-blue,catppuccin-mocha-lavender";
};
};
appName = "Gitea";
};
services.caddy.virtualHosts."git.xenia.me.uk".extraConfig = "reverse_proxy http://localhost:3100";
}

View file

@ -1,5 +1,4 @@
{ ... }:
{
{...}: {
imports = [./caddy.nix];
services.grafana = {
enable = true;

View file

@ -1,9 +1,7 @@
{ ... }:
let
{...}: let
baseUrl = "xenia.me.uk";
port = 8008;
in
{
in {
imports = [./caddy.nix];
services = {
matrix-synapse = {
@ -14,19 +12,13 @@ in
listeners = [
{
inherit port;
bind_addresses = [
"127.0.0.1"
"::1"
];
bind_addresses = ["127.0.0.1" "::1"];
type = "http";
tls = false;
x_forwarded = true;
resources = [
{
names = [
"client"
"federation"
];
names = ["client" "federation"];
compress = true;
}
];

25
services/minecraft.nix Normal file
View file

@ -0,0 +1,25 @@
{config, ...}: {
services.minecraft-server = {
enable = true;
eula = true;
openFirewall = true;
declarative = true;
whitelist = {
"pixelifytica" = "b1848d60-4ddd-4fa4-a328-fb269910b6ae";
"HomeInTheClouds" = "d49f0aee-f217-477b-9516-9d5906f7fc87";
};
serverProperties = {
server-port = 25565;
difficulty = "easy";
gamemode = "survival";
force-gamemode = true;
max-players = 10;
# level-seed = 238902389203;
motd = "NixOS Minecraft server!";
white-list = true;
};
};
# Caddy forwarding
services.caddy.virtualHosts."craft.xenia.me.uk".extraConfig = "reverse_proxy http://localhost:${toString config.services.minecraft-server.serverProperties.server-port}";
}

View file

@ -1,5 +1,4 @@
{ pkgs, ... }:
{
{pkgs, ...}: {
imports = [./caddy.nix];
environment.systemPackages = with pkgs; [ffmpeg];
services = {

View file

@ -1,5 +1,4 @@
{ config, ... }:
{
{config, ...}: {
imports = [./caddy.nix];
services.nix-serve = {
enable = true;

View file

@ -1,5 +1,4 @@
{ ... }:
{
{...}: {
imports = [./caddy.nix];
services.ntfy-sh = {
enable = true;

View file

@ -1,5 +1,4 @@
{ config, ... }:
{
{config, ...}: {
imports = [./caddy.nix];
services.owncast = {
enable = true;

21
services/radicale.nix Normal file
View file

@ -0,0 +1,21 @@
{...}: let
port = "5232";
in {
services.radicale = {
enable = true;
settings = {
server = {
hosts = ["0.0.0.0:${port}"];
};
auth = {
type = "htpasswd";
htpasswd_filename = "/etc/radicale/users";
delay = 1;
};
};
# rights = {};
};
services.caddy.virtualHosts."cal.xenia.me.uk".extraConfig = ''
reverse_proxy http://localhost:${port}
'';
}

View file

@ -1,5 +1,4 @@
{ ... }:
{
{...}: {
services.openssh = {
enable = true;
ports = [22];

View file

@ -1,13 +1,6 @@
{ ... }:
let
devices = [
"Ion"
"Legion"
"Northstar"
"Vanguard"
];
in
{
{...}: let
devices = ["Ion" "Legion" "Northstar" "Vanguard"];
in {
imports = [./caddy.nix];
services.syncthing = {
enable = true;
@ -19,10 +12,16 @@ in
devices = {
"Ion".id = "7DD4NPH-6T2ET5A-4FCLFWW-CS6UR2W-IO5XQXC-DM5B2Q4-6X7DGU2-UKKVEAB";
"Legion".id = "XIJ4CPX-3USDOFM-JLKWEPP-J7MEVKX-LJ6HCCS-YZNHGGC-GDSMZPD-TTVYNAZ";
"Northstar".id = "2GDDHJC-MIT5RCN-YR4ZQ4M-VYPP5NJ-UKMQDCN-RCCF7AK-WG5AHXU-4KINIQX";
"Vanguard".id = "UT6YVRQ-K6UVH3V-XMAFNO6-TN3QIIN-5GBGPST-QFJJTSJ-SCKBJGP-PQBZVQW";
"Northstar".id = "W7JNTCJ-ESF4WJS-ZXZGV2X-OVL2BXY-6R7IYV4-GBABAQT-7J55XTZ-4QJXXA7";
"Vanguard".id = "YELFAIP-4VBWPRX-CB7RNJD-RPBQ6KN-CGTMIBO-FK7EPTH-ZXYS6AF-C6WKOQT";
};
folders = {
"Sync" = {
inherit devices;
id = "fn9cr-ncfas";
path = "~/Sync";
ignorePerms = true;
};
"Music" = {
inherit devices;
id = "munzw-vnxhl";
@ -41,30 +40,6 @@ in
path = "~/Videos";
ignorePerms = true;
};
"Models" = {
inherit devices;
id = "hcvfl-qspqe";
path = "~/Models";
ignorePerms = true;
};
"Documents" = {
inherit devices;
id = "4bxk7-zkrt2";
path = "~/Documents/sync";
ignorePerms = true;
};
"Books" = {
inherit devices;
id = "5zaud-r3rtt";
path = "~/Documents/books";
ignorePerms = true;
};
"ROMs" = {
inherit devices;
id = "xjbwf-b6qgd";
path = "~/Games/ROMs";
ignorePerms = true;
};
};
};
};

View file

@ -1,5 +1,4 @@
{ pkgs, ... }:
{
{pkgs, ...}: {
environment.systemPackages = with pkgs; [tmux];
services.terraria = {
enable = true;

View file

@ -1,5 +1,4 @@
{ ... }:
{
{...}: {
services.znc = {
enable = true;
mutable = false;
@ -7,9 +6,7 @@
openFirewall = true;
config = {
LoadModule = ["adminlog"];
Listener.l = {
Port = 6697;
};
Listener.l = {Port = 6697;};
User.pixelifytica = {
Admin = true;
Pass.password = {

View file

@ -1,26 +0,0 @@
{ username, ... }:
{
imports = [
./services/adguardhome.nix
./services/caddy.nix
./services/forgejo.nix
./services/grafana.nix
./services/home-assistant.nix
./services/minecraft.nix
./services/nix-serve.nix
./services/satisfactory/default.nix
./services/sshd.nix
./services/syncthing.nix
./services/xandikos.nix
];
boot.loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
home-manager.users.${username} = {
home.stateVersion = "23.05";
};
system.stateVersion = "23.05";
users.mutableUsers = false;
hardware.bluetooth.enable = true;
}

View file

@ -1,9 +0,0 @@
{ username, ... }:
{
imports = [ ./laptop.nix ];
home-manager.users.${username} = {
home.stateVersion = "23.05";
wayland.windowManager.hyprland.settings.monitor = [ "eDP-1,preferred,auto,1.25" ];
};
system.stateVersion = "23.05";
}

View file

@ -1,31 +0,0 @@
{ pkgs, username, ... }:
{
imports = [
./laptop.nix
./work.nix
];
home-manager.users.${username} = {
home.stateVersion = "23.05";
wayland.windowManager.hyprland.settings.monitor = [
"eDP-1,preferred,auto,1.25"
"desc:Dell Inc. DELL P3223QE CCG8YN3,preferred,auto-left,1.5"
];
};
boot.initrd = {
secrets = {
"/crypto_keyfile.bin" = null;
};
luks.devices."luks-761eeb11-3091-4142-9232-4fb33165eccd" = {
device = "/dev/disk/by-uuid/761eeb11-3091-4142-9232-4fb33165eccd";
keyFile = "/crypto_keyfile.bin";
};
};
system.stateVersion = "23.05";
environment = {
etc."ppp/options".text = ''
ipcp-accept-remote
'';
systemPackages = with pkgs; [ openfortivpn ];
};
services.hardware.bolt.enable = true;
}

View file

@ -1,36 +0,0 @@
{ pkgs, username, ... }:
{
imports = [
./desktop.nix
./work.nix
];
home-manager.users.${username} = {
home.stateVersion = "23.05";
wayland.windowManager.hyprland.settings.monitor = [
"desc:Dell Inc. DELL P3223QE CCG8YN3,preferred,auto,1.5"
];
};
boot = {
loader.efi.efiSysMountPoint = "/boot/efi";
initrd = {
secrets = {
"/crypto_keyfile.bin" = null;
};
luks.devices."luks-47d34268-5100-4eba-b34d-220f4239c1cb" = {
device = "/dev/disk/by-uuid/47d34268-5100-4eba-b34d-220f4239c1cb";
keyFile = "/crypto_keyfile.bin";
};
};
};
system.stateVersion = "23.05";
environment = {
etc."ppp/options".text = ''
ipcp-accept-remote
'';
systemPackages = with pkgs; [
openfortivpn
samba
];
};
services.ollama.enable = true;
}

View file

@ -1,65 +0,0 @@
{
config,
pkgs,
username,
...
}:
{
imports = [
./desktop.nix
./steam.nix
];
home-manager.users.${username} = {
home = {
stateVersion = "23.05";
packages = with pkgs; [
helvum
prusa-slicer
blender
freecad
openscad
kicad-small
wineWowPackages.waylandFull
winetricks
lutris
cartridges
prismlauncher
];
};
programs.obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-vkcapture
obs-pipewire-audio-capture
input-overlay
];
};
wayland.windowManager.hyprland.settings.monitor = [
"desc:Acer Technologies ED270R TJMEE0043W01,1920x1080@144,0x140,1.0,vrr,2"
"desc:Microstep MSI G27CQ4 E2,2560x1440@144,1920x0,1.25,vrr,2"
];
};
boot = {
extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
extraModprobeConfig = ''
options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1
'';
};
hardware = {
amdgpu = {
initrd.enable = true;
opencl.enable = true;
};
opengl = {
enable = true;
driSupport = true;
driSupport32Bit = true;
};
};
services.ollama = {
enable = true;
acceleration = "rocm";
};
system.stateVersion = "23.05";
}

View file

@ -1,228 +0,0 @@
{
config,
lib,
pkgs,
inputs,
username,
hostName,
...
}:
{
imports = [
inputs.home-manager.nixosModules.home-manager
inputs.stylix.nixosModules.stylix
./${hostName}.nix
./hardware-configuration/${hostName}.nix
];
nix = {
enable = true;
package = pkgs.nixVersions.latest;
settings = {
cores = 0;
max-jobs = "auto";
trusted-users = [
"root"
username
];
experimental-features = [
"nix-command"
"flakes"
];
auto-optimise-store = true;
substituters = [ "https://nix.xenia.me.uk" ];
trusted-public-keys = [ "nix.xenia.me.uk:tlgwOaG5KMLjQUk2YaErS8mAG69ZCr3PaHXZYi+Y5eI=" ];
};
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
channel.enable = true;
gc = {
automatic = true;
options = "--delete-older-than 7d";
};
optimise.automatic = true;
registry.my-nixos = {
from = {
type = "indirect";
id = "my-nixos";
};
to = {
type = "git";
url = "https://git.xenia.me.uk/pixelifytica/nixos.git?ref=main";
};
};
extraOptions = ''
keep-outputs = false
keep-derivations = false
min-free = ${toString (100 * 1024 * 1024)}
max-free = ${toString (1024 * 1024 * 1024)}
'';
};
system.autoUpgrade = {
enable = true;
persistent = true;
allowReboot = false;
flake = "git+${config.nix.registry.my-nixos.to.url}";
dates = "02:00";
randomizedDelaySec = "5min";
fixedRandomDelay = true;
flags = [
"--option"
"extra-binary-caches"
"https://nix.xenia.me.uk"
];
};
systemd.services = lib.mkIf config.system.autoUpgrade.enable {
nixos-upgrade.serviceConfig = {
CPUQuota = "75%";
CPUWeight = 20;
IOWeight = 20;
};
};
boot.loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
networking = {
inherit hostName;
networkmanager.enable = true;
firewall.enable = true;
nameservers = [ "9.9.9.9" ];
};
users.users =
let
authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINI1dWlS16Keil0MGPWmMsBzx8F9ylfz+fRwxUr8/tZ/ ion"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC4M1zV3yLMMI1tYwdY9QDXJDlOBugm7UXKC+Xk89yHq pixelifytica@Vanguard"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICPypUUGVAdpl0SHrUDVw0RureuFNsljrXQvrf0uc055 pixelifytica@Northstar"
];
in
{
root.openssh = {
inherit authorizedKeys;
};
${username} = {
isNormalUser = true;
group = "users";
description = "Evie Litherland-Smith";
extraGroups = [
"networkmanager"
"wheel"
"video"
"input"
"uinput"
"dialout"
];
initialHashedPassword = "$y$j9T$tHIPQt09Kf3KH2eIRze3g/$2mwSlcq27DTGvHNPJ5EP9/1CfL3bXP0F6oS/Vuffmn3";
openssh = {
inherit authorizedKeys;
};
};
};
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "backup";
users.${username} = {
imports = [ ./home/default.nix ];
home = {
inherit username;
homeDirectory = "/home/${username}";
};
};
extraSpecialArgs = {
inherit inputs;
};
};
environment = {
sessionVariables = {
XDG_CONFIG_HOME = "$HOME/.config";
XDG_CACHE_HOME = "$HOME/.cache";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_STATE_HOME = "$HOME/.local/state";
};
systemPackages = with pkgs; [
coreutils-full
gnumake
git
file
zip
unzip
p7zip
curl
wget
dig
wireguard-tools
quickemu
distrobox
];
localBinInPath = true;
};
programs = {
command-not-found.enable = false;
ssh.startAgent = true;
nano = {
enable = true;
syntaxHighlight = true;
nanorc = ''
set nowrap
set tabstospaces
set tabsize 2
'';
};
};
services = {
upower.enable = true;
power-profiles-daemon.enable = true;
system76-scheduler = {
enable = true;
useStockConfig = true;
};
};
security.rtkit.enable = true;
virtualisation.podman.enable = true;
location = {
latitude = 51.7;
longitude = -1.2;
provider = "manual";
};
time.timeZone = "Europe/London";
i18n.defaultLocale = "en_GB.UTF-8";
console.useXkbConfig = true;
stylix = {
enable = true;
image = ./home/desktop/wallpapers/tropic_island_day.jpg;
base16Scheme = ./one-light.yaml; # Base24 scheme
polarity = "light";
opacity.popups = 0.8;
cursor = {
package = pkgs.volantes-cursors;
name = "volantes_cursors";
size = 32;
};
fonts = {
serif = {
package = inputs.iosevka-custom.outputs.packages.${pkgs.system}.iosevka-custom-etoile;
name = inputs.iosevka-custom.outputs.names.iosevka-custom-etoile;
};
sansSerif = {
package = inputs.iosevka-custom.outputs.packages.${pkgs.system}.iosevka-custom-aile;
name = inputs.iosevka-custom.outputs.names.iosevka-custom-aile;
};
monospace = {
package = pkgs.nerdfonts.override { fonts = [ "Iosevka" ]; };
name = "Iosevka Nerd Font";
};
sizes = {
applications = 12;
desktop = 14;
popups = 16;
terminal = 12;
};
};
};
fonts.packages = with pkgs; [
dejavu_fonts # General compatibility
liberation_ttf # Documents
lmodern # LaTeX
(nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; })
];
}

View file

@ -1,99 +0,0 @@
{ pkgs, username, ... }:
{
home-manager.users.${username}.imports = [ ./home/desktop/default.nix ];
nixpkgs.config.chromium.commandLineArgs = "--password-store='gnome-libsecret' --enable-features=UseOzonePlatform --ozone-platform=wayland";
hardware.bluetooth.enable = true;
environment = {
sessionVariables = {
NIXOS_OZONE_WL = "1";
MOZ_ENABLE_WAYLAND = "1";
WEBKIT_DISABLE_COMPOSITING_MODE = "1";
XDG_SESSION_TYPE = "wayland";
QT_QPA_PLATFORM = "wayland";
};
systemPackages = with pkgs; [
libsecret
libnotify
xdg-utils
hunspell
hunspellDicts.en_GB-large
gnome.nautilus
];
};
security = {
polkit.enable = true;
pam.loginLimits = [
{
domain = "@users";
item = "rtprio";
type = "-";
value = 1;
}
];
};
programs = {
dconf.enable = true;
noisetorch.enable = true;
seahorse.enable = true;
file-roller.enable = true;
kdeconnect.enable = true;
hyprland.enable = true;
xwayland.enable = true;
};
gtk.iconCache.enable = true;
qt = {
enable = true;
style = "adwaita";
platformTheme = "gnome";
};
services = {
gnome.gnome-keyring.enable = true;
flatpak.enable = true;
printing.enable = true;
tumbler.enable = true;
udisks2.enable = true;
gnome.sushi.enable = true;
gvfs = {
enable = true;
package = pkgs.gnome3.gvfs;
};
kanata = {
enable = true;
keyboards.main = {
config = builtins.readFile ./kanata.kbd;
extraDefCfg = "process-unmapped-keys yes";
};
};
pipewire = {
enable = true;
pulse.enable = true;
alsa = {
enable = true;
support32Bit = true;
};
};
greetd = {
enable = true;
settings =
let
default_session.command = "Hyprland";
in
{
inherit default_session;
initial_session = {
inherit (default_session) command;
user = username;
};
};
};
xserver = {
enable = true;
xkb.layout = "gb";
};
};
xdg.portal = {
enable = true;
config.common.default = "*"; # TODO change for xdg-desktop-portal > 1.17 changes
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
};
}

View file

@ -1,9 +0,0 @@
{ ... }:
{
imports = [
./shell/default.nix
./scripts/default.nix
./password-store/default.nix
];
programs.home-manager.enable = true;
}

View file

@ -1,297 +0,0 @@
[
{
"name": "Spotify",
"url": "https://open.spotify.com",
"tags": ["Music", "Streaming"]
},
{
"name": "ABRP",
"url": "https://abetterrouteplanner.com/",
"tags": ["Travel"]
},
{
"name": "Patreon",
"url": "https://www.patreon.com/home",
"tags": ["Personal"]
},
{
"name": "NHS App",
"url": "https://www.nhsapp.service.nhs.uk/login",
"tags": ["Personal", "NHS"]
},
{
"name": "Krystal Hosting",
"url": "https://krystal.io",
"tags": ["Server", "Hosting"]
},
{
"name": "Home Assistant",
"url": "https://home.xenia.me.uk",
"tags": ["Home", "Automation", "Personal"]
},
{
"name": "Forgejo",
"url": "https://git.xenia.me.uk",
"tags": ["Software", "Git", "Personal"]
},
{
"name": "GitHub",
"url": "https://github.com",
"tags": ["Software", "Git"]
},
{
"name": "CCFE GitLab",
"url": "https://git.ccfe.ac.uk",
"tags": ["Software", "Git", "Work"]
},
{
"name": "NixOS Manual",
"url": "https://nixos.org/manual/nixpkgs/stable/",
"tags": ["Software", "Documentation", "Ni"]
},
{
"name": "Home Manager",
"url": "https://nix-community.github.io/home-manager/options.xhtml",
"tags": ["Software", "Documentation", "Nix"]
},
{
"name": "Plasma Manager",
"url": "https://nix-community.github.io/plasma-manager/",
"tags": ["Software", "Documentation", "Nix", "KDE", "Plasma"]
},
{
"name": "NixOS and Flakes",
"url": "https://nixos-and-flakes.thiscute.world/",
"tags": ["Software", "Documentation", "Nix"]
},
{
"name": "KDE Plasma Desktop Scripting",
"url": "https://develop.kde.org/docs/plasma/scripting/",
"tags": ["Software", "Documentation", "KDE", "Plasma"]
},
{
"name": "Awesome Emacs",
"url": "https://github.com/emacs-tw/awesome-emacs",
"tags": ["Software", "Repositories"]
},
{
"name": "Awesome Wayland",
"url": "https://github.com/natpen/awesome-wayland",
"tags": ["Software", "Repositories"]
},
{
"name": "Awesome Selfhosted",
"url": "https://github.com/awesome-selfhosted/awesome-selfhosted",
"tags": ["Software", "Repositories"]
},
{
"name": "Awesome reMarkable",
"url": "https://github.com/reHackable/awesome-reMarkable",
"tags": ["Software", "Repositories"]
},
{
"name": "NixOS Wiki",
"url": "https://nixos.wiki",
"tags": ["Wiki"]
},
{
"name": "Arch Wiki",
"url": "https://wiki.archlinux.org",
"tags": ["Wiki"]
},
{
"name": "Filament Guide",
"url": "https://help.prusa3d.com/materials",
"tags": ["3D Printing", "Filament"]
},
{
"name": "Thingiverse",
"url": "https://www.thingiverse.com/",
"tags": ["3D Printing"]
},
{
"name": "Printables",
"url": "https://www.printables.com/",
"tags": ["3D Printing"]
},
{
"name": "MyMiniFactory",
"url": "https://www.myminifactory.com",
"tags": ["3D Printing"]
},
{
"name": "pinshape",
"url": "https://www.pinshape.com",
"tags": ["3D Printing"]
},
{
"name": "YouMagine",
"url": "https://www.youmagine.com",
"tags": ["3D Printing"]
},
{
"name": "SHAPEWAYS",
"url": "https://www.shapeways.com",
"tags": ["3D Printing"]
},
{
"name": "Gambody",
"url": "https://www.gambody.com",
"tags": ["3D Printing"]
},
{
"name": "TouchTerrain",
"url": "https://touchterrain.geol.iastate.edu/",
"tags": ["3D Printing", "Modelling"]
},
{
"name": "Touch Mapper",
"url": "https://touch-mapper.org/en/",
"tags": ["3D Printing", "Modelling"]
},
{
"name": "Homepage",
"url": "https://wiki.jetdata.eu/open/index.php?title=Main_Page",
"tags": ["Wiki", "OpenWiki"]
},
{
"name": "Diagnostic Coordinator",
"url": "https://wiki.jetdata.eu/open/index.php?title=Diagnostic_Coordinator_Wiki",
"tags": ["Wiki", "OpenWiki"]
},
{
"name": "Spectroscopy Group",
"url": "https://wiki.jetdata.eu/open/index.php?title=Spectroscopy_Group:index",
"tags": ["Wiki", "OpenWiki"]
},
{
"name": "KS5 Wiki",
"url": "https://wiki.jetdata.eu/open/index.php?title=CXS:Topic3",
"tags": ["Wiki", "OpenWiki"]
},
{
"name": "KT3 Journals",
"url": "https://wiki.jetdata.eu/open/index.php?title=KT3_Journals",
"tags": ["Wiki", "OpenWiki"]
},
{
"name": "Nucleus",
"url": "https://nucleus.ukaea.uk/",
"tags": ["Work"]
},
{
"name": "Ivanti",
"url": "https://ukaea-ism.ivanticloud.com/Modules/SelfService/?NoDefaultProvider=True#home",
"tags": ["Work"]
},
{
"name": "U4BW",
"url": "https://ubw.unit4cloud.com/uk_aea_prod_web/Login/Login.aspx",
"tags": ["Work"]
},
{
"name": "APS",
"url": "https://appraisal.org.ukaea.uk/",
"tags": ["Work"]
},
{
"name": "Robin",
"url": "https://dashboard.robinpowered.com/",
"tags": ["Work", "Room Booking"]
},
{
"name": "UKAEA Pinboard",
"url": "https://pinboard.ukaea.uk/",
"tags": ["Work"]
},
{
"name": "OPEN-ADAS",
"url": "https://open.adas.ac.uk/",
"tags": ["Work"]
},
{
"name": "Physics Summary",
"url": "https://users.euro-fusion.org/pages/physics-summary/LatestSession.php",
"tags": ["Work", "JET"]
},
{
"name": "DVCM Homepage",
"url": "https://dvcm.jetdata.eu/",
"tags": ["Work", "JET"]
},
{
"name": "JET Data Services",
"url": "https://data.jet.uk",
"tags": ["Work", "JET", "Data"]
},
{
"name": "JET Dashboard",
"url": "https://data.jet.uk/dashboard/sessions/",
"tags": ["Work", "JET", "Data"]
},
{
"name": "PPF Query",
"url": "https://data.jet.uk/ppf/browse/ppfquery",
"tags": ["Work", "JET", "Data"]
},
{
"name": "ReqCo",
"url": "https://data.jet.uk/reqco/myrequests",
"tags": ["Work", "JET", "Data"]
},
{
"name": "Countdown Mimic",
"url": "http://webmimic.jet.uk/mc/codas/countdown",
"tags": ["Work", "JET", "Mimic"]
},
{
"name": "KS5 Mimic",
"url": "http://webmimic.jet.uk/DG/codas/ks5.mim.html",
"tags": ["Work", "JET", "Mimic"]
},
{
"name": "KT3 Mimic",
"url": "http://webmimic.jet.uk/DG/codas/kt3spec.mim.html",
"tags": ["Work", "JET", "Mimic"]
},
{
"name": "MAST-U Users Page",
"url": "https://users.mastu.ukaea.uk/home",
"tags": ["Work", "MAST-U"]
},
{
"name": "MAST-U Diagnostic Handbook",
"url": "https://intranet.ccfe.ac.uk/mastu-handbook",
"tags": ["Work", "MAST-U"]
},
{
"name": "MAST-U Data Access and Tools",
"url": "https://users.mastu.ukaea.uk/data-access-and-tools",
"tags": ["Work", "MAST-U"]
},
{
"name": "Outlook Calendar",
"url": "https://outlook.office.com/calendar/view/workweek",
"tags": ["Work", "Office"]
},
{
"name": "LGBTQIA+ Network Email",
"url": "https://outlook.office.com/mail/ContactUs@lgbtqi.ukaea.uk/",
"tags": ["Work", "Office", "Network", "LGBTQIA+"]
},
{
"name": "OneDrive",
"url": "https://ukaeauk-my.sharepoint.com/",
"tags": ["Work", "Office"]
},
{
"name": "PSFO Sharepoint",
"url": "https://ukaeauk.sharepoint.com/sites/Plasma",
"tags": ["Work", "Office"]
},
{
"name": "Culham Canteen Menus",
"url": "https://nucleus.ukaea.uk/Interact/Pages/Section/Default.aspx?section=10112",
"tags": ["Work", "Canteen", "Menu"]
}
]

View file

@ -1,67 +0,0 @@
(define-configuration buffer
((default-modes
(pushnew 'nyxt/mode/emacs:emacs-mode %slot-value%))
(default-modes
(pushnew 'nyxt/mode/blocker:blocker-mode %slot-value%))))
(define-configuration status-buffer
((glyph-mode-presentation-p t)
(display-tabs-by-last-access-p nil)))
(define-configuration :emacs-mode ((glyph "ε")))
(define-configuration :force-https-mode ((glyph "ϕ")))
(define-configuration :no-script-mode ((glyph "j")))
(define-configuration :user-script-mode ((glyph "u")))
(define-configuration :blocker-mode ((glyph "β")))
(define-configuration :proxy-mode ((glyph "π")))
(define-configuration :reduce-tracking-mode ((glyph "τ")))
(define-configuration :reduce-bandwidth-mode ((glyph "r")))
(define-configuration :certificate-exception-mode ((glyph "χ")))
(define-configuration :style-mode ((glyph "ϕ")))
(define-configuration :cruise-control-mode ((glyph "σ")))
(define-configuration :document-mode
"Extend with custom keybinds"
((keyscheme-map
(keymaps:define-keyscheme-map "custom" (list :import %slot-value%)
nyxt/keyscheme:emacs (list
"C-c u" 'copy-username
"C-c p" 'copy-password)))))
(define-configuration :autofill-mode
"Add autofill functions for passwords"
((autofills
(list
(nyxt/mode/autofill:make-autofill
:name "name"
:fill "Evie Litherland-Smith")
(nyxt/mode/autofill:make-autofill
:name "email"
:fill "evie@xenia.me.uk")))))
(defvar *my-search-engines*
(list
'("osm" "https://www.openstreetmap.org/search?query=~a" "https://www.openstreetmap.org/")
'("rust" "https://doc.rust-lang.org/std/index.html?search=~a" "https://doc.rust-lang.org/std/index.html")
'("crates" "https://crates.io/search?q=~a" "https://crates.io/")
'("py" "https://docs.python.org/3/search.html?q=~a" "https://docs.python.org/3")
'("pypi" "https://pypi.org/search/?q=~a" "https://pypi.org/")
'("nixwiki" "https://nixos.wiki/index.php?search=~a&go=Go" "https://nixos.wiki/")
'("archwiki" "https://wiki.archlinux.org/index.php?search=~a" "https://wiki.archlinux.org/")
'("github" "https://github.com/search?utf8=✓&q=~a&type=repositories" "https://github.com/")
'("flathub" "https://flathub.org/apps/search?q=~a" "https://flathub.org/")
'("doi" "https://dx.doi.org/~a" "https://dx.doi.org/")
'("wiki" "https://en.wikipedia.org/w/index.php?search=~a" "https://en.wikipedia.org/")
'("ddg" "https://html.duckduckgo.com/html/?q=~a" "https://html.duckduckgo.com/"))
"List of search engines.")
(define-configuration context-buffer
"Go through the search engines above and make-search-engine out of them."
((search-engines
(mapcar (lambda (engine) (apply 'make-search-engine engine))
*my-search-engines*))))
(define-configuration browser
((restore-session-on-startup-p nil)))
(setf (uiop/os:getenv "GTK_THEME") "Adwaita:light")

View file

@ -1,4 +0,0 @@
{ ... }:
{
imports = [ ./firefox.nix ];
}

View file

@ -1,221 +0,0 @@
{ config, pkgs, ... }:
{
stylix.targets.firefox.enable = false;
programs = {
browserpass = {
enable = true;
browsers = [ "firefox" ];
};
firefox = {
enable = true;
policies = {
BlockAboutProfiles = true;
Cookies = {
Behavior = "reject-tracker-and-partition-foreign";
BehaviorPrivateBrowsing = "reject";
Locked = true;
};
DefaultDownloadDirectory = config.xdg.userDirs.download;
DisableAppUpdate = true;
DisableFirefoxAccounts = true;
DisableFirefoxScreenshots = true;
DisableFirefoxStudies = true;
DisableFormHistory = true;
DisablePocket = true;
DisableProfileImport = true;
DisableSetDesktopBackground = true;
DisableSystemAddonUpdate = true;
DisableTelemetry = true;
DisplayMenuBar = "default-off";
DontCheckDefaultBrowser = true;
EnableTrackingProtection = {
Value = true;
Locked = true;
Cryptomining = true;
Fingerprinting = true;
};
ExtensionSettings = {
"queryamoid@kaply.com" = {
installation_mode = "force_installed";
install_url = "https://github.com/mkaply/queryamoid/releases/download/v0.1/query_amo_addon_id-0.1-fx.xpi";
};
# uBlock Origin
"uBlock0@raymondhill.net" = {
installation_mode = "force_installed";
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
};
# Browserpass
"browserpass@maximbaz.com" = {
installation_mode = "force_installed";
install_url = "https://addons.mozilla.org/firefox/downloads/latest/browserpass-ce/latest.xpi";
};
# SimpleLogin
"addon@simplelogin" = {
installation_mode = "force_installed";
install_url = "https://addons.mozilla.org/firefox/downloads/latest/simplelogin/latest.xpi";
};
# Consent-O-Matic
"gdpr@cavi.au.dk" = {
installation_mode = "force_installed";
install_url = "https://addons.mozilla.org/firefox/downloads/latest/consent-o-matic/latest.xpi";
};
# ClearURLs
"{74145f27-f039-47ce-a470-a662b129930a}" = {
installation_mode = "force_installed";
install_url = "https://addons.mozilla.org/firefox/downloads/latest/clearurls/latest.xpi";
};
};
FirefoxHome = {
Search = true;
TopSites = false;
SponsoredTopSites = false;
Highlights = false;
Pocket = false;
SponsoredPocket = false;
Snippets = false;
Locked = true;
};
FirefoxSuggest = {
WebSuggestions = false;
SponsoredSuggestions = false;
ImproveSuggest = false;
Locked = true;
};
HardwareAcceleration = true;
Homepage = {
Locked = true;
StartPage = "homepage-locked";
};
NewTabPage = true;
NoDefaultBookmarks = false;
OfferToSaveLogins = false;
PasswordManagerEnabled = false;
PDFjs = {
Enabled = false;
};
Permissions = {
Autoplay = {
Default = "block-audio-video";
};
};
PictureInPicture = {
Enabled = true;
};
PopupBlocking = {
Default = true;
};
RequestedLocales = [ "en-GB" ];
SearchBar = "unified";
ShowHomeButton = true;
StartDownloadsInTempDirectory = true;
};
profiles.user = {
isDefault = true;
bookmarks = builtins.fromJSON (builtins.readFile ./bookmarks.json);
settings = {
"app.shield.optoutstudies.enabled" = false;
"browser.tabs.inTitlebar" = 0;
"browser.bookmarks.addedImportButton" = false;
"browser.bookmarks.showMobileBookmarks" = false;
"browser.toolbars.bookmarks.visibility" = "never";
"browser.contentblocking.category" = "strict";
"browser.search.region" = "GB";
"browser.search.isUS" = false;
"browser.warnOnQuitShortcut" = false;
"browser.zoom.siteSpecific" = false;
"distribution.searchplugins.defaultLocale" = "en-GB";
"doh-rollout.home-region" = "GB";
"dom.private-attribution.submission.enabled" = false;
"extensions.activeThemeID" = "default-theme@mozilla.org";
"extensions.formautofill.creditCards.enabled" = false;
"general.useragent.locale" = "en-GB";
"intl.accept_languages" = "en-gb,en";
"intl.locale.requested" = "en-gb,en";
"intl.regional_prefs.use_os_locales" = true;
"media.eme.enabled" = true;
"privacy.webrtc.legacyGlobalIndicator" = false;
"signon.management.page.breach-alerts.enabled" = false;
"signon.rememberSignons" = false;
"widget.use-xdg-desktop-portal.file-picker" = 1;
"widget.use-xdg-desktop-portal.mime-handler" = 1;
"widget.use-xdg-desktop-portal.open-uri" = 1;
"browser.newtabpage.pinned" = [
{
title = "NixOS Wiki";
url = "https://wiki.nixos.org";
}
{
title = "Arch Wiki";
url = "https://wiki.archlinux.org";
}
{
title = "Hyprland Wiki";
url = "https://wiki.hyprland.org";
}
];
};
search = rec {
default = "DuckDuckGo";
privateDefault = default;
force = true;
order = [
"DuckDuckGo"
"Atlas SearXNG"
];
engines = {
"Atlas SearXNG" = {
urls = [ { template = "https://search.atlas.engineer/searxng/search?q={searchTerms}"; } ];
definedAliases = [ "@atlas" ];
};
"NixOS Wiki" = {
urls = [ { template = "https://wiki.nixos.org/w/index.php?search={searchTerms}"; } ];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [
"@nix"
"@nixos"
"@nixoswiki"
];
};
"Arch Wiki" = {
urls = [ { template = "https://wiki.archlinux.org/index.php?search={searchTerms}"; } ];
definedAliases = [
"@aw"
"@arch"
"@archwiki"
];
};
"GitHub" = {
urls = [ { template = "https://github.com/search?q={searchTerms}"; } ];
definedAliases = [
"@gh"
"@git"
"@github"
];
};
"FlatHub" = {
url = [ { template = "https://flathub.org/apps/search?q={searchTerms}"; } ];
definedAliases = [
"@flat"
"@fthub"
"@flathub"
];
};
"NixOS Packages" = {
urls = [
{
template = "http://search.nixos.org/packages?channel=unstable&size=50&sort=relevance&type=packages&query={searchTerms}";
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@nixpkgs" ];
};
"PyPI packages" = {
urls = [ { template = "https://pypi.org/search/?q={searchTerms}"; } ];
definedAliases = [ "@pypi" ];
};
};
};
};
};
};
}

View file

@ -1,10 +0,0 @@
{ ... }:
{
programs = {
browserpass.browsers = [ "librewolf" ];
librewolf = {
enable = true;
settings = { };
};
};
}

View file

@ -1,67 +0,0 @@
{ config, pkgs, ... }:
{
home.packages = [ pkgs.nyxt ];
xdg = {
configFile = {
"nyxt/config.lisp".text =
let
fonts = config.stylix.fonts;
scheme = config.lib.stylix.scheme.withHashtag;
in
''
;; Import custom configuration
(nyxt::load-lisp "${./config.lisp}")
;; Define custom theme
(define-configuration browser
((theme (make-instance 'theme:theme
:dark-p nil
:font-family "${fonts.sansSerif.name}"
:monospace-font-family "${fonts.monospace.name}"
:background-color "${scheme.base00}"
:on-background-color "${scheme.base05}"
:primary-color "${scheme.base02}"
:on-primary-color "${scheme.base05}"
:secondary-color "${scheme.base03}"
:on-secondary-color "${scheme.base05}"
:accent-color "${scheme.base0E}"
:on-accent-color "${scheme.base01}"
:action-color "${scheme.cyan}"
:on-action-color "${scheme.base01}"
:success-color "${scheme.green}"
:on-success-color "${scheme.base01}"
:highlight-color "${scheme.magenta}"
:on-highlight-color "${scheme.base01}"
:warning-color "${scheme.yellow}"
:on-warning-color "${scheme.base01}"
:codeblock-color "${scheme.base02}"
:on-codeblock-color "${scheme.base05}"))))
'';
};
dataFile."nyxt/bookmarks.lisp".text =
let
# Make a string of lisp-style list of strings, from nix-style
# list
convertTags = tags: "(" + (builtins.foldl' (x: y: x + " \"" + y + "\"") "" tags) + " )";
# Take bookmarks as returned from JSON file and convert to NYXT
# expected format
convertBookmark =
{
name,
tags,
url,
}:
"(:url \"${url}\" :title \"${name}\" :tags ${convertTags tags})\n";
in
(
# Fold all entries in bookmarks.json into single string of NYXT
# format bookmarks, each entry on a new line and with 2 space
# indentation, just for visual clarity if reading the outputted
# file
"(\n"
+ (builtins.foldl' (x: y: x + " " + convertBookmark y) "" (
builtins.fromJSON (builtins.readFile ./bookmarks.json)
))
+ ")"
);
};
}

View file

@ -1,73 +0,0 @@
{ config, pkgs, ... }:
{
programs = {
vdirsyncer.enable = true;
khal = {
enable = true;
locale = {
timeformat = "%H:%M";
dateformat = "%Y-%m-%d";
longdateformat = "%Y-%m-%d %a";
datetimeformat = "%Y-%m-%d %H:%M";
longdatetimeformat = "%Y-%m-%d %H:%M";
};
};
};
services.vdirsyncer = {
inherit (config.programs.vdirsyncer) enable package;
frequency = "*:0/30"; # Every 30 minutes
};
accounts.calendar = {
basePath = "Calendar";
accounts = {
main =
let
url = "dav.xenia.me.uk";
in
{
primary = true;
primaryCollection = "personal";
local = {
type = "filesystem";
fileExt = ".ics";
};
remote =
let
userName = "pixelifytica";
in
{
inherit userName;
url = "https://${url}";
type = "caldav";
passwordCommand = [
"${pkgs.libsecret}/bin/secret-tool"
"lookup"
"url"
"${url}"
"user"
"${userName}"
];
};
vdirsyncer = {
inherit (config.programs.vdirsyncer) enable;
auth = "basic";
collections = [
"personal"
"work"
"other"
];
metadata = [ "displayname" ];
timeRange = {
start = "datetime.now() - timedelta(days=365)";
end = "datetime.now() + timedelta(days=365)";
};
};
khal = {
inherit (config.programs.khal) enable;
type = "discover";
addresses = with config.accounts.email.accounts.proton; [ address ] ++ aliases;
};
};
};
};
}

View file

@ -1,94 +0,0 @@
{
config,
pkgs,
osConfig,
...
}:
{
imports = [
./hyprland.nix
./email/default.nix
./calendar/default.nix
./terminal/default.nix
./emacs/default.nix
./browser/default.nix
];
home = {
packages = with pkgs; [
wl-clipboard
libreoffice-fresh
evince
image-roll
clapper
g4music
ffmpeg
remmina
fractal
webcord
signal-desktop
whatsapp-for-linux
teams-for-linux
twinkle
];
file.${config.gtk.gtk2.configLocation}.force = true;
};
services = {
syncthing.enable = true;
gammastep = {
inherit (osConfig.location) latitude longitude provider;
enable = true;
tray = true;
};
};
gtk = {
enable = true;
gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
iconTheme = {
package = (pkgs.papirus-icon-theme.override { color = "magenta"; });
name = "Papirus-Light";
};
};
stylix.targets.gtk.extraCss = with config.lib.stylix.scheme.withHashtag; ''
@define-color accent_color ${base0E-hex};
@define-color accent_bg_color ${base0E-hex};
'';
xdg = {
mime.enable = true;
mimeApps =
let
defaultApplications = import ./mimeapps.nix;
in
{
enable = true;
inherit defaultApplications;
associations.added = defaultApplications;
};
userDirs = {
enable = true;
createDirectories = true;
extraConfig = {
XDG_PROJECTS_DIR = "${config.home.homeDirectory}/Projects";
};
};
configFile = {
# Stop programs from overriding mimeapps
"mimeapps.list".force = true;
# Ensure GTK config is set
"gtk-3.0/gtk.css".force = true;
"gtk-3.0/settings.ini".force = true;
"gtk-4.0/gtk.css".force = true;
"gtk-4.0/settings.ini".force = true;
# Autostart some programs
"autostart/signal-desktop.desktop".source = "${pkgs.signal-desktop}/share/applications/signal-desktop.desktop";
"autostart/com.github.eneshecan.WhatsAppForLinux.desktop".source = "${pkgs.whatsapp-for-linux}/share/applications/com.github.eneshecan.WhatsAppForLinux.desktop";
"teams-for-linux/config.json".text = builtins.toJSON {
awayOnSystemIdle = true;
closeAppOnCross = false;
followSystemTheme = true;
notificationMethod = "electron";
optInTeamsV2 = true;
spellCheckerLanguages = [ "en_GB" ];
};
};
};
}

View file

@ -1,137 +0,0 @@
{ config, pkgs, ... }:
{
imports = [
../../shell/default.nix
../../shell/git.nix
../../gpg/default.nix
];
stylix.targets.emacs.enable = false;
services.emacs = {
enable = true;
package = config.programs.emacs.finalPackage;
defaultEditor = true;
client.enable = true;
socketActivation.enable = true;
startWithUserSession = false;
};
programs.emacs = {
# Clone emacs config from https://git.xenia.me.uk/pixelifytica/emacs.git
enable = true;
package = pkgs.emacs29-pgtk;
extraConfig =
let
fixed-font-family = "${config.stylix.fonts.monospace.name}";
variable-font-family = "${config.stylix.fonts.sansSerif.name}";
font-height = builtins.toString (
builtins.floor (builtins.mul config.stylix.fonts.sizes.applications 10)
);
custom-theme-name = "nix";
custom-theme = pkgs.writeTextFile {
name = "custom-emacs-theme";
destination = "/${custom-theme-name}-theme.el";
text = ''
(deftheme ${custom-theme-name}
"Use Nix customised fonts for main faces")
(custom-theme-set-variables
'${custom-theme-name}
'(menu-bar-mode nil))
(custom-theme-set-faces
'${custom-theme-name}
'(default ((t (:family "${fixed-font-family}" :height ${font-height}))))
'(fixed-pitch ((t (:family "${fixed-font-family}"))))
'(fixed-pitch-serif ((t (:family "${fixed-font-family}"))))
'(variable-pitch ((t (:family "${variable-font-family}")))))
(provide-theme '${custom-theme-name})
'';
};
custom-theme-hash = builtins.hashFile "sha256" "${custom-theme}/${custom-theme-name}-theme.el";
in
''
(add-to-list 'custom-theme-load-path "${custom-theme}")
(add-to-list 'custom-safe-themes "${custom-theme-hash}")
(load-theme '${custom-theme-name})
'';
extraPackages =
epkgs: with epkgs; [
treesit-grammars.with-all-grammars
mu4e
emacsql-sqlite
];
};
home.packages = with pkgs; [
# Emacs requirements
imagemagick
languagetool
wordnet
# Plugin requirements
gcc
sqlite
pandoc
ghostscript
poppler_utils
graphviz
mp3info
# Customised LaTeX install
(texlive.combine {
inherit (texlive)
scheme-medium
dvisvgm
dvipng
wrapfig
amsmath
ulem
hyperref
capt-of
listings
bera
;
latex-beamer-ukaea.pkgs = [ (callPackage ./texlive/latex-beamer-ukaea/default.nix { }) ];
})
# Development tools
## Code screenshots
silicon
## Python Environments
poetry
## Linters
shellcheck
yamllint
ruff
## Formatters
nixfmt-rfc-style
shfmt
stylua
nodePackages.prettier
nodePackages.prettier-plugin-toml
## Language servers
nixd
lua-language-server
## Interpreters
(python3.withPackages (
ps: with ps; [
tkinter
python-lsp-server
mypy
numpy
scipy
xarray
matplotlib
]
))
(luajit.withPackages (ps: [ (ps.callPackage ./luarocks/scilua.nix { }) ]))
];
xdg.configFile = {
"ruff/pyproject.toml".source = ./ruff.toml;
"pypoetry/config.toml".source = ./pypoetry.toml;
};
}

View file

@ -1,60 +0,0 @@
epkgs: with epkgs; [
# UI
base16-theme
all-the-icons
nerd-icons
nerd-icons-completion
nerd-icons-corfu
nerd-icons-dired
nerd-icons-ibuffer
minions
ligature
which-key
diff-hl
# Completion
vertico
orderless
marginalia
cape
corfu
corfu-terminal
consult
consult-eglot
flyspell-correct
tempel
# IDE
treesit-auto
magit
forge
apheleia
envrc
rainbow-delimiters
flymake-shellcheck
flymake-yamllint
flymake-clippy
flymake-eslint
markdown-mode
pandoc-mode
python-docstring
nix-mode
lua-mode
# Org + LaTeX
org-roam
org-noter
citar
auctex
htmlize
# Other
password-store
emms
bbdb
ement
elfeed
elfeed-org
elfeed-tube
scad-mode
]

View file

@ -1,53 +0,0 @@
{
agg,
freetype,
buildLuarocksPackage,
fetchgit,
fetchurl,
lua,
luaOlder,
}:
buildLuarocksPackage {
pname = "graph-toolkit";
version = "scm-1";
knownRockspec =
(fetchurl {
url = "mirror://luarocks/graph-toolkit-scm-1.rockspec";
sha256 = "0hsrf7k45w8ri18mdrx44mv1kr4zfr5mg76cxi8nnr30ssrblvgb";
}).outPath;
src = fetchgit (
removeAttrs
(builtins.fromJSON ''
{
"url": "https://github.com/franko/graph-toolkit",
"rev": "126a11bdbb98faf785c373516a288b7fa609f824",
"date": "2015-01-02T08:44:01-08:00",
"path": "/nix/store/gbwbjrl4j42kaqk3pjzvmckmr6dimkd0-graph-toolkit",
"sha256": "1pqjpqfandi7brk2213vlq891bl8drb0q32m5wmf0l21li0l4zrp",
"hash": "sha256-N39CQaRBUOAqL1UMDFZuiK6QEKZ7BCFmXic2qxy+Et8=",
"fetchLFS": false,
"fetchSubmodules": true,
"deepClone": false,
"leaveDotGit": false
}
'')
[
"date"
"path"
"sha256"
]
);
disabled = luaOlder "5.1";
propagatedBuildInputs = [
lua
agg
freetype
];
meta = {
homepage = "http://franko.github.io/graph-toolkit/";
description = "Lua Graphics Toolkit";
license.fullName = "GPL-3";
};
}

View file

@ -1,38 +0,0 @@
{
buildLuarocksPackage,
fetchurl,
luaAtLeast,
luaOlder,
callPackage,
luajit,
openblas,
}:
let
xsys = callPackage ./xsys.nix { };
in
buildLuarocksPackage {
pname = "sci";
version = "1.0.0.beta12-1";
knownRockspec =
(fetchurl {
url = "mirror://luarocks/sci-1.0.0.beta12-1.rockspec";
sha256 = "0lprn9x4zw767hdz8lyxmwrrfyn5xj3x50pm9b4qiwy8992mg00r";
}).outPath;
src = fetchurl {
url = "https://github.com/stepelu/lua-sci/archive/v1.0.0-beta12.tar.gz";
sha256 = "0a45r7n13gfqckpdp1bmizqvjadn8nc5d6ff9gjw860g3i75sy2h";
};
disabled = (luaOlder "5.1") || (luaAtLeast "5.4");
propagatedBuildInputs = [
luajit
xsys
openblas
];
meta = {
homepage = "https://github.com/stepelu/lua-sci";
description = "Scientific Computing with LuaJIT";
license.fullName = "MIT";
};
}

View file

@ -1,29 +0,0 @@
{
buildLuarocksPackage,
fetchurl,
luaAtLeast,
luaOlder,
luajit,
}:
buildLuarocksPackage {
pname = "xsys";
version = "1.0.2-1";
knownRockspec =
(fetchurl {
url = "mirror://luarocks/xsys-1.0.2-1.rockspec";
sha256 = "0jlyrwbzh6fi68msdynp4bbihyww4i3yk0qh859xlwqhfy5cza7p";
}).outPath;
src = fetchurl {
url = "https://github.com/stepelu/lua-xsys/archive/v1.0.2.tar.gz";
sha256 = "1zwrlp6bghq8c12kyqc1ic7mrn8lf3d42755h8q2wxwhy1i3xqyh";
};
disabled = (luaOlder "5.1") || (luaAtLeast "5.4");
propagatedBuildInputs = [ luajit ];
meta = {
homepage = "http://scilua.org/xsys.html";
description = "LuaJIT General Purpose Routines";
license.fullName = "MIT";
};
}

View file

@ -1,9 +0,0 @@
[virtualenvs]
create = true
in-project = true
[virtualenvs.options]
always-copy = true
no-pip = true
no-setuptools = true
system-site-packages = true

View file

@ -1,38 +0,0 @@
[lint]
select = [
"F", "E4", "E7", "E9", # Defaults
"W", # pycodestyle warnings
"B", # Flake8 bugbear rules
"PD", # Pandas vet rules
"NPY", # NumPy specific rules
"NPY201", # NumPy 2.0 deprecation warnings
"RUF", # Ruff specific rules
"PERF1", "PERF2", # Performance lints from Perflint
"E101", # Mixed spaces and tabs
"E501", # Line too long
"C901", # Complex structure
"I001", # Import block un-sorted / un-formatted
"I002", # Missing required import
"N804", # First argument of class method should be cls
"N805" # First argument of method should be self
]
ignore = [
"W191", # Ignore due to conflict with ruff formatter
"E111", # Ignore due to conflict with ruff formatter
"E114", # Ignore due to conflict with ruff formatter
"E117", # Ignore due to conflict with ruff formatter
"D206", # Ignore due to conflict with ruff formatter
"D300", # Ignore due to conflict with ruff formatter
"Q000", # Ignore due to conflict with ruff formatter
"Q001", # Ignore due to conflict with ruff formatter
"Q002", # Ignore due to conflict with ruff formatter
"Q003", # Ignore due to conflict with ruff formatter
"COM812", # Ignore due to conflict with ruff formatter
"COM819", # Ignore due to conflict with ruff formatter
"ISC001", # Ignore due to conflict with ruff formatter
"ISC002" # Ignore due to conflict with ruff formatter
]
unfixable = ["W", "B", "PD", "NPY", "RUF", "E101", "E501", "C901", "I001", "I002"]
[format]
docstring-code-format = false

View file

@ -1,18 +0,0 @@
# UKAEA Beamer Style
This provides a Beamer theme for the default UKAEA branding. Subbrands
(CCFE, RACE, etc.) are not current available, but would not be
difficult to add.
For best results, it is recommended that you install the non-free
Latex fonts, as described here:
<https://www.tug.org/fonts/getnonfreefonts/>. However you will still
get perfectly acceptable results without them.
The file `ukaea-example.tex` is provided as a starting point for your
presentations. Simply rename and modify it as needed. You must either
keep your presentation TeX file in the same directory as the `.sty`
and image files or install those files on your system. If you wish to
do the latter, [follow these
instructions](https://en.wikibooks.org/wiki/LaTeX/Installing_Extra_Packages#Installing_a_package)
starting from step 3.

View file

@ -1,50 +0,0 @@
\usepackage{xcolor}
\mode<presentation>
\definecolor{UkaeaCoreBlue}{RGB}{0,48,86}
\definecolor{UkaeaCoreWhite}{RGB}{255,255,255}
\definecolor{UkaeaCoreBlack}{RGB}{0,0,0}
\definecolor{UkaeaCoreGrey1}{RGB}{88,89,91}
\definecolor{UkaeaCoreGrey2}{RGB}{128,130,133}
\definecolor{UkaeaCoreGrey3}{RGB}{167,169,172}
\definecolor{UkaeaCoreGrey4}{RGB}{209,211,212}
\definecolor{UkaeaSecondaryYellow}{RGB}{246,212,77}
\definecolor{UkaeaSecondaryGreen}{RGB}{0,111,69}
\definecolor{UkaeaSecondaryBlue}{RGB}{0,130,202}
\definecolor{UkaeaSecondaryRed}{RGB}{201,37,44}
\definecolor{UkaeaSecondaryText}{RGB}{144,145,179}
\definecolor{CcfeOrange}{RGB}{248,151,29}
\definecolor{OasRed}{RGB}{230,62,48}
\definecolor{RaceSilver}{RGB}{191,196,217}
\definecolor{MrcGreen}{RGB}{5,206,124}
\setbeamercolor{headline}{bg=UkaeaCoreBlue}
\setbeamercolor{title page}{bg=UkaeaCoreBlue}
\setbeamercolor{title}{fg=UkaeaCoreWhite, bg=UkaeaCoreBlue}
\setbeamercolor{subtitle}{fg=UkaeaCoreWhite}
\setbeamercolor{author}{fg=UkaeaSecondaryText}
\setbeamercolor{date}{fg=UkaeaSecondaryText}
\setbeamercolor{institute}{fg=UkaeaSecondaryText}
\setbeamercolor{normal text}{fg=UkaeaCoreBlue}
\setbeamercolor{structure}{fg=UkaeaCoreBlue}
\setbeamercolor{frametitle}{fg=UkaeaCoreBlue}
\setbeamercolor{framesubtitle}{fg=UkaeaCoreBlue}
\setbeamercolor{alerted text}{fg=UkaeaSecondaryRed}
\setbeamercolor{block title}{fg=UkaeaCoreWhite, bg=UkaeaCoreBlue}
\setbeamercolor{block body}{parent=normal text, fg=UkaeaCoreBlack, bg=UkaeaCoreBlue!10}
\setbeamercolor{block title example}{fg=UkaeaCoreWhite, bg=UkaeaSecondaryBlue}
\setbeamercolor{block body example}{parent=normal text, fg=UkaeaCoreBlack, bg=UkaeaSecondaryBlue!10}
\setbeamercolor{block title alert}{fg=UkaeaCoreWhite, bg=UkaeaSecondaryRed}
\setbeamercolor{block body alert}{parent=normal text, fg=UkaeaCoreBlack, bg=UkaeaSecondaryRed!10}
\setbeamercolor{pagenumber}{fg=UkaeaCoreGrey3}
\mode<all>

View file

@ -1,24 +0,0 @@
% to use non-standard font
\usepackage{iftex}
\usepackage[T1]{fontenc}
\IfFileExists{uarial.sty}{
\usepackage{newtxsf, uarial, textcomp}
\usepackage[italic]{mathastext}
}{
\usepackage[scaled]{helvet}
}
\renewcommand\familydefault{\sfdefault}
\usepackage[scaled]{beramono}
\setbeamerfont{title}{family=\fontfamily{ugq}, size=\LARGE}
\setbeamerfont{subtitle}{family=\sffamily, series=\mdseries, size=\large}
\setbeamerfont{institute}{family=\fontfamily{ugq}, size=\Large}
\setbeamerfont{author}{family=\sffamily, series=\bfseries, size=\footnotesize}
\setbeamerfont{date}{family=\sffamily, series=\bfseries, size=\footnotesize}
\setbeamerfont{frametitle}{family=\fontfamily{ugq}, size=\LARGE}
\setbeamerfont{framesubtitle}{family=\sffamily, series=\mdseries, size=\Large}
\setbeamerfont{normal text}{family=\sffamily, series=\mdseries, size=\Large}

View file

@ -1,24 +0,0 @@
\mode<presentation>
\defbeamertemplate{itemize item}{circ}%
{\small\raise.2ex\hbox{$\bullet$}}
\defbeamertemplate{itemize subitem}{circ}%
{\small\raise.1ex\hbox{$\circ$}}
\defbeamertemplate{itemize subsubitem}{circ}%
{\scriptsize\raise.1ex\hbox{$\bullet$}}
\setbeamertemplate{items}[circ]
\setbeamertemplate{frametitle}
{
\nointerlineskip%
\vspace{4mm}\hspace{-8mm}
\begin{beamercolorbox}[wd=0.8\paperwidth]{frametitle}
\usebeamerfont{frametitle}{\insertframetitle}\par
\usebeamerfont{framesubtitle}{\usebeamercolor{framesubtitle}\insertframesubtitle}
\end{beamercolorbox}
}
\mode<all>

View file

@ -1,96 +0,0 @@
\usepackage{tikz}
\mode<presentation>
\DeclareOptionBeamer{logo}{\def\beamer@ukaea@logo{#1}}
\ExecuteOptionsBeamer{logo=ukaea_logo.png}
\DeclareOptionBeamer{extratitletext}{\def\beamer@ukaea@extratitletext{#1}}
\ExecuteOptionsBeamer{extratitletext=}
\ProcessOptionsBeamer
\newcommand{\ukaeatriangle}[1] {
\begin{tikzpicture}
\useasboundingbox (0,0) rectangle(\the\paperwidth,0.2\paperwidth);
\node (t1) at (\paperwidth, 0.2\paperwidth) {};
\node (t2) at (0.8\paperwidth, 0.2\paperwidth) {};
\node (t3) at (\paperwidth, 0.) {};
\fill[fill=#1] (t1.center)--(t2.center)--(t3.center);
\if \beamer@ukaea@logo\@empty
\else
\node (logo) at (0.9415\paperwidth, 0.1415\paperwidth) {
\includegraphics[height=0.073\paperwidth]{\beamer@ukaea@logo}
};
\fi
\end{tikzpicture}
}
\setbeamertemplate{title page}
{%
\newdimen\title@graphic@height
\begin{minipage}[t]{\paperwidth}
\hspace*{-1cm}\inserttitlegraphic{}
\end{minipage}
\settoheight{\title@graphic@height}{\inserttitlegraphic{}}
\vspace*{-\title@graphic@height minus 0.004\paperheight}
\hspace*{-1cm}%
\begin{minipage}{\paperwidth}
\usebeamercolor[bg]{headline}
\ukaeatriangle{bg}\par
\end{minipage}
\vspace*{-2.59cm}
\hspace*{-1.085cm}
\begin{tikzpicture}
\useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);
\node (q1) at (0,0.54\paperheight) {};
\node (q2) at (\the\paperwidth,0.32\paperheight) {};
\node (q3) at (0,0) {};
\node (q4) at (\the\paperwidth,0) {};
\fill[fill=bg] (q1.center)--(q2.center)--(q4.center)--(q3.center);
\node[anchor=north west,text width=0.9\paperwidth] (titletext) at (0.4,0.44\paperheight) {
\usebeamerfont{institute}{\usebeamercolor[fg]{institute}\insertinstitute}\par
\smallskip
\usebeamerfont{title}{\usebeamercolor[fg]{title}\inserttitle}\par
\usebeamerfont{subtitle}{\usebeamercolor[fg]{subtitle}\insertsubtitle}\par
\bigskip
% \begin{minipage}{0.6\textwidth}
\usebeamercolor[fg]{date}{\usebeamerfont{date}\insertdate}\par
\usebeamercolor[fg]{author}{\usebeamerfont{author}\insertauthor}\par
% \end{minipage}
};
\node[anchor=south east,text width=0.45\paperwidth] (extratext) at
(1.28\paperwidth, 0.15) {
\usebeamercolor[fg]{title}
\usebeamerfont{main text}
\beamer@ukaea@extratitletext
};
\end{tikzpicture}
\addtocounter{framenumber}{-1}
}
\setbeamertemplate{headline}
{%\vspace{-0.07cm}\hspace{0.795\paperwidth}
\ukaeatriangle{bg}
\vspace{-0.2\paperwidth}
}
\setbeamertemplate{footline}
{
\leavevmode
\hbox{
\begin{beamercolorbox}[wd=1.0cm,ht=1.5cm,dp=0.3cm,right, rightskip=0.1cm]{pagenumber}%
\textbf{\large{\usebeamercolor[fg]{pagenumber}\insertframenumber{}}}
\end{beamercolorbox}
\usebeamercolor[fg]{normal text}{\textbf{\Large |} \raisebox{0.5ex}{\insertshorttitle}
}
}
}
\mode<all>
\endinput

View file

@ -1,24 +0,0 @@
\mode<presentation>
% Requirement
\RequirePackage{tikz}
\RequirePackage{xcolor}
% Options
\DeclareOptionBeamer{logo}{\PassOptionsToPackage{logo=#1}{beamerouterthemeukaea}}
\DeclareOptionBeamer{sponsors}{\PassOptionsToPackage{sponsors=#1}{beamerouterthemeukaea}}
\ProcessOptionsBeamer
% Settings
\useinnertheme{ukaea}
\useoutertheme{ukaea}
\usecolortheme{ukaea}
\usefonttheme{ukaea}
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{blocks}[default]
%\setbeamertemplate{blocks}[rounded][shadow=true]
\titlegraphic{\includegraphics[width=\paperwidth]{ukaea-jet.jpg}}
\mode<all>

View file

@ -1,11 +0,0 @@
{ stdenvNoCC }:
stdenvNoCC.mkDerivation {
pname = "latex-beamer-ukaea";
version = "0.1";
src = ./.;
installPhase = ''
mkdir -p $out/tex/latex
cp -r $src/* $out/tex/latex
'';
tlType = "run";
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View file

@ -1,39 +0,0 @@
davmail.server=true
davmail.mode=O365Manual
davmail.url=https://outlook.office365.com/EWS/Exchange.asmx
davmail.imapPort=1144
davmail.smtpPort=1026
davmail.caldavPort=1080
davmail.enableKeepAlive=true
davmail.logFilePath=/tmp/davmail.log
davmail.enableKerberos=false
davmail.forceActiveSyncUpdate=false
davmail.imapAutoExpunge=true
davmail.useSystemProxies=false
davmail.caldavEditNotifications=false
davmail.ssl.nosecuresmtp=false
davmail.caldavPastDelay=0
log4j.logger.httpclient.wire=WARN
davmail.popMarkReadOnRetr=false
davmail.ssl.nosecureimap=false
davmail.disableTrayActivitySwitch=true
davmail.caldavAutoSchedule=true
davmail.enableProxy=false
davmail.smtpSaveInSent=false
davmail.ssl.nosecurepop=false
log4j.rootLogger=WARN
log4j.logger.davmail=DEBUG
davmail.ssl.clientKeystorePass=
log4j.logger.org.apache.http.conn.ssl=WARN
davmail.sentKeepDelay=0
davmail.ssl.nosecureldap=false
davmail.imapAlwaysApproxMsgSize=true
davmail.ssl.nosecurecaldav=false
davmail.showStartupBanner=false
log4j.logger.httpclient=WARN
log4j.logger.org.apache.http.wire=WARN
davmail.disableGuiNotifications=true
davmail.disableUpdateCheck=true
log4j.logger.org.apache.http=WARN
davmail.carddavReadPhoto=true
davmail.keepDelay=30

View file

@ -1,175 +0,0 @@
{ config, pkgs, ... }:
{
home.packages = [
(pkgs.writeShellScriptBin "davmail-setup" ''
systemctl --user restart davmail # Ensure config file is present
systemctl --user stop davmail
${pkgs.davmail}/bin/davmail -n ~/.davmail.properties
systemctl --user restart davmail
'')
];
accounts.email = {
maildirBasePath = "Mail";
accounts =
let
realName = "Evie Litherland-Smith";
in
{
proton =
let
address = "e.litherlandsmith@proton.me";
host = "127.0.0.1";
tls.enable = false;
in
{
inherit realName address;
primary = true;
maildir.path = "Proton";
imap = {
inherit host tls;
port = 1143;
};
smtp = {
inherit host tls;
port = 1025;
};
aliases = [
"evie@xenia.me.uk"
"evie@litherlandsmith.slmail.me"
];
userName = address;
passwordCommand = "${pkgs.libsecret}/bin/secret-tool lookup email ${address}";
mu.enable = true;
msmtp = {
enable = true;
extraConfig = {
tls = "off";
auth = "login";
};
};
mbsync = {
enable = true;
create = "both";
expunge = "both";
remove = "both";
patterns = [
"*"
"!All Mail"
"!Labels*"
"!Starred"
"!Recovered Messages"
];
subFolders = "Verbatim";
extraConfig.account.AuthMechs = "LOGIN";
};
};
icloud =
let
address = "e.litherlandsmith@icloud.com";
in
{
inherit realName address;
primary = false;
maildir.path = "iCloud";
imap.host = "imap.mail.me.com";
smtp.host = "smtp.mail.me.com";
userName = address;
passwordCommand = "${pkgs.libsecret}/bin/secret-tool lookup email ${address}";
mu.enable = true;
msmtp.enable = true;
mbsync = {
enable = true;
create = "both";
expunge = "both";
remove = "both";
patterns = [
"*"
"!Notes"
];
subFolders = "Verbatim";
};
};
outlook =
let
address = "evie.litherland-smith@ukaea.uk";
host = "127.0.0.1";
tls.enable = false;
in
{
inherit realName address;
primary = false;
maildir.path = "Outlook";
imap = {
inherit host tls;
port = 1144;
};
smtp = {
inherit host tls;
port = 1026;
};
aliases = [ "elitherl@jet.uk" ];
userName = address;
passwordCommand = "${pkgs.libsecret}/bin/secret-tool lookup email ${address}";
mu.enable = true;
msmtp = {
enable = true;
extraConfig = {
tls = "off";
auth = "login";
};
};
mbsync = {
enable = true;
create = "both";
expunge = "both";
remove = "both";
patterns = [
"*"
"!Conversation History"
"!Snoozed"
"!Social Activity Notifications"
"!Sync Issues*"
"!Unsent Messages"
];
subFolders = "Verbatim";
extraConfig.account.AuthMechs = "LOGIN";
};
};
};
};
programs = {
mu.enable = true;
msmtp.enable = true;
mbsync = {
enable = true;
groups.inboxes = {
proton = [ "INBOX" ];
icloud = [ "INBOX" ];
outlook = [ "INBOX" ];
};
};
};
services.mbsync = {
inherit (config.programs.mbsync) enable package;
frequency = "*:0/30"; # Every 30 minutes
verbose = true;
preExec = null;
postExec = null;
};
systemd.user.services.davmail = {
Unit = {
Description = "Davmail server";
Wants = [ "network-online.target" ];
After = [ "network-online.target" ];
};
Service = {
Environment = [ "PATH=/run/current-system/sw/bin/:$PATH" ];
Restart = "always";
ExecStartPre = with config.home; ''
/bin/sh -c "if [ ! -f ${homeDirectory}/.davmail.properties ]; then cp ${./davmail.properties} ${homeDirectory}/.davmail.properties; fi; chmod 644 ${homeDirectory}/.davmail.properties"
'';
ExecStart = "${pkgs.davmail}/bin/davmail -notray ${config.home.homeDirectory}/.davmail.properties";
};
Install.WantedBy = [ "default.target" ];
};
}

View file

@ -1,3 +0,0 @@
--
Evelyn Litherland-Smith (she/they)
email: evie@xenia.me.uk

View file

@ -1,5 +0,0 @@
--
Evelyn Litherland-Smith (she/they)
Spectroscopy Diagnostic Physicist
Plasma Science and Fusion Operations
UK Atomic Energy Authority

View file

@ -1,25 +0,0 @@
{ config, lib, ... }:
{
programs.fuzzel = {
enable = true;
settings = {
main = {
icon-theme = config.gtk.iconTheme.name;
icons-enabled = true;
fields = "filename,name,generic,categories";
fuzzy = true;
filter-desktop = true;
terminal = "${config.programs.alacritty.package}/bin/alacritty -e";
lines = 24;
width = 80;
tabs = 4;
layer = "overlay";
};
border = {
width = 1;
radius = 5;
};
colors.border = lib.mkForce "${config.lib.stylix.scheme.base0E}ff";
};
};
}

View file

@ -1,459 +0,0 @@
{
config,
lib,
pkgs,
osConfig,
...
}:
{
imports = [
./waybar.nix
./fuzzel.nix
./mako.nix
];
home.packages = [
(pkgs.writeShellScriptBin "protonmail-setup-bridge" ''
pkill -9 -f protonmail-bridge
PASSWORD_STORE_DIR=/dev/null ${pkgs.protonmail-bridge}/bin/protonmail-bridge -c
${config.wayland.windowManager.hyprland.finalPackage}/bin/hyprctl dispatch exec "PASSWORD_STORE_DIR=/dev/null ${pkgs.protonmail-bridge}/bin/protonmail-bridge -n"
'')
];
services = {
hyprpaper.enable = true;
kanshi.systemdTarget = "hyprland-session.target";
gpg-agent.pinentryPackage = pkgs.pinentry-gnome3;
avizo = {
enable = true;
settings.default = {
image-opacity = lib.mkForce "1.0";
border-color =
let
scheme = config.lib.stylix.scheme;
in
lib.mkForce "rgba(${scheme.base0E-rgb-r}, ${scheme.base0E-rgb-g}, ${scheme.base0E-rgb-b}, 1.0)";
};
};
kdeconnect = {
enable = true;
indicator = true;
};
udiskie = {
enable = true;
notify = true;
automount = true;
tray = "never";
};
hypridle = {
enable = true;
settings =
let
hyprctl = "${config.wayland.windowManager.hyprland.finalPackage}/bin/hyprctl";
hyprlock = "${config.programs.hyprlock.package}/bin/hyprlock";
in
{
general = {
after_sleep_cmd = "${hyprctl} dispatch dpms on";
ignore_dbus_inhibit = false;
lock_cmd = "${hyprlock}";
};
listener = [
{
timeout = 900;
on-timeout = "${hyprlock}";
}
{
timeout = 1200;
on-timeout = "${hyprctl} dispatch dpms off";
on-resume = "${hyprctl} dispatch dpms on";
}
];
};
};
};
programs = {
waybar.systemd.target = "hyprland-session.target";
hyprlock =
let
font = config.stylix.fonts.sansSerif.name;
scheme = config.lib.stylix.scheme;
accent = scheme.base0E;
in
{
enable = true;
settings = {
general = {
hide_cursor = true;
grace = 5;
ignore_emptry_input = true;
};
background = [
{
monitor = "";
path = "screenshot";
blur_passes = 3;
blur_size = 8;
}
];
label = [
{
monitor = "";
text = "cmd[update:30000] echo \"$(date +\"%R\")\"";
color = "0xff${scheme.base00}";
font_size = 90;
font_family = font;
position = "-30, 0";
halign = "right";
valign = "top";
}
{
monitor = "";
text = "cmd[update:43200000] echo \"$(date +\"%A,%e %B %Y\")\"";
color = "0xff${scheme.base00}";
font_size = 25;
font_family = font;
position = "-30, -150";
halign = "right";
valign = "top";
}
];
image = [
{
monitor = "";
path = "${./pfp/personal.png}";
size = 100;
border_color = "0xff${accent}";
position = "0, 75";
halign = "center";
valign = "center";
}
];
input-field = [
{
monitor = "";
size = "300, 60";
outline_thickness = 2;
dots_size = 0.2; # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.2; # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true;
outer_color = "0xff${accent}";
inner_color = "0xff${scheme.base00}";
font_color = "0xff${scheme.base05}";
fade_on_empty = false;
placeholder_text = "󰌾 Logged in as <span foreground=\"##${accent}\">$USER</span>";
check_color = "0xff${scheme.blue}";
fail_color = "0xff${scheme.red}";
fail_text = "<i>$FAIL <b>($ATTEMPTS)</b></i>";
hide_input = false;
position = "0, -50";
halign = "center";
valign = "center";
}
];
};
};
};
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
systemd.enable = true;
settings = {
monitor = [ ",preferred,auto,auto" ];
env = [
"XDG_CURRENT_DESKTOP=Hyprland"
"XDG_SESSION_DESKTOP=Hyprland"
"GDK_BACKEND=wayland,x11"
"QT_AUTO_SCREEN_SCALE_FACTOR,1"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"GRIM_DEFAULT_DIR,${config.xdg.userDirs.pictures}/Screenshots"
];
exec-once = [
"systemctl --user import-environment WAYLAND_DISPLAY QT_QPA_PLATFORMTHEME"
"${config.wayland.windowManager.hyprland.finalPackage}/bin/hyprctl setcursor ${config.gtk.cursorTheme.name} ${toString config.gtk.cursorTheme.size}"
"${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1"
"PASSWORD_STORE_DIR=/dev/null ${pkgs.protonmail-bridge}/bin/protonmail-bridge -n"
"sleep 5; ${pkgs.dex}/bin/dex -a"
];
gestures.workspace_swipe = true;
input = {
kb_layout = osConfig.services.xserver.xkb.layout;
follow_mouse = 1;
touchpad.natural_scroll = "yes";
};
dwindle = {
force_split = 2;
preserve_split = false;
smart_split = false;
smart_resizing = false;
special_scale_factor = 0.95;
no_gaps_when_only = 0;
use_active_for_splits = true;
default_split_ratio = 1.0;
};
master = {
allow_small_split = true;
special_scale_factor = 0.95;
mfact = 0.5;
# new_is_master = false;
new_on_top = false;
no_gaps_when_only = 0;
orientation = "left";
inherit_fullscreen = false;
smart_resizing = false;
drop_at_cursor = true;
};
general = {
"col.active_border" = lib.mkForce "rgb(${config.lib.stylix.scheme.magenta})";
gaps_in = 2.5;
gaps_out = 5;
border_size = 1;
# cursor_inactive_timeout = 0;
layout = "master";
};
decoration = {
rounding = 5;
"col.shadow" = lib.mkForce "rgba(${config.lib.stylix.scheme.base00}0d)";
drop_shadow = "yes";
shadow_ignore_window = true;
shadow_range = 4;
shadow_render_power = 3;
blur = {
enabled = true;
size = 5;
passes = 3;
new_optimizations = true;
brightness = 1.0;
noise = 2.0e-2;
};
};
animations = {
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
misc = {
disable_splash_rendering = true;
disable_autoreload = true;
mouse_move_enables_dpms = true;
key_press_enables_dpms = true;
};
xwayland.force_zero_scaling = true;
layerrule =
let
blur = x: "blur, ^(${x})$";
ignorealpha = x: "ignorealpha 0.3, ^(${x})$";
layers = [
"system-menu"
"gtk-layer-shell"
"notifications"
"launcher"
"logout_dialog"
"waybar"
"avizo"
];
in
(lib.lists.forEach layers blur) ++ (lib.lists.forEach layers ignorealpha);
windowrule = [
# Float + move system windows
# Password prompts
"float, org.kde.polkit-kde-authentication-agent-1|Pinentry|pinentry-qt|gcr-prompter"
"center, org.kde.polkit-kde-authentication-agent-1|Pinentry|pinentry-qt|gcr-prompter"
"pin, org.kde.polkit-kde-authentication-agent-1|Pinentry|pinentry-qt|gcr-prompter"
"dimaround, org.kde.polkit-kde-authentication-agent-1|Pinentry|pinentry-qt|gcr-prompter"
"stayfocused, org.kde.polkit-kde-authentication-agent-1|Pinentry|pinentry-qt|gcr-prompter"
# Network and Bluetooth control panels
"float, pavucontrol|.blueman-manager-wrapped|nm-connection-editor"
"size 800 600, pavucontrol|.blueman-manager-wrapped|nm-connection-editor"
"move onscreen 100%-820 50,pavucontrol|.blueman-manager-wrapped|nm-connection-editor"
# File picker dialog
"float, xdg-desktop-portal-gtk"
"size 800 600, xdg-desktop-portal-gtk"
"center, xdg-desktop-portal-gtk"
# Workspace rules
"workspace 2, firefox" # Browser
"workspace 3, (libreoffice|soffice)(.*)" # Documents
"workspace 4, (signal|whatsapp-for-linux|WebCord|teams-for-linux)" # Messaging
"workspace 5, (org.remmina.Remmina|Nxplayer.bin)" # Remote Desktop
"workspace 6 silent, (steam|steam_app|lutris|page.kramo.Cartridges|org.prismlauncher.PrismLauncher)" # Gaming
# PrismLauncher / Minecraft
"float, org.prismlauncher.PrismLauncher"
"center, org.prismlauncher.PrismLauncher"
"size 800 600, org.prismlauncher.PrismLauncher"
];
windowrulev2 = [
# Firefox PIP
"float, title:Picture-in-Picture|Library,class:firefox"
"size 750 400, title:Picture-in-Picture,class:firefox"
"size 800 800, title:Library,class:firefox"
"move onscreen 100%-775 100%-425, title:Picture-in-Picture,class:firefox"
"center, title:Library,class:firefox"
"pin, title:Picture-in-Picture,class:firefox"
# NautilusPreviewer (Sushi)
"float, class:org.gnome.NautilusPreviewer"
"center, class:org.gnome.NautilusPreviewer"
# Electron file picker dialog
"float, title:Open Files,class:electron"
"size 800 600, title:Open Files,class:electron"
"center, title:Open Files,class:electron"
# Inhibit idle when watching videos
"idleinhibit fullscreen, class:firefox|com.github.rafostar.Clapper"
# Inhibit idle when playing games
"idleinhibit always, class:(steam_app|Minecraft).*"
# LibreOffice
"suppressevent fullscreen maximize, class:(libreoffice|soffice)(.*)"
"float, title:Open,class:(libreoffice|soffice)(.*)"
# Steam
"float, title:Friends List,class:steam"
"size 400 600, title:Friends List,class:steam"
"float, title:(.*)(Chat),class:steam"
"size 800 600, title:(.*)(Chat),class:steam"
"float, title:Steam Settings,class:steam"
"size 800 600, title:Steam Settings,class:steam"
"float, title:(.*)(Controller Layout),class:steam"
"size 1200 800, title:(.*)(Controller Layout),class:steam"
# Remmina / NoMachine
"suppressevent fullscreen maximize, class:org.remmina.Remmina|Nxplayer.bin"
"float, title:Remmina Remote Desktop Client, class:org.remmina.Remmina"
"center, title:Remmina Remote Desktop Client, class:org.remmina.Remmina"
];
bind =
let
withTerm =
{
term ? "alacritty",
package ? config.programs.${term}.package,
progname,
args ? "",
}:
"${package}/bin/${term} -T ${progname} -e ${progname} ${args}";
workspace = w: [
"SUPER, ${toString w}, moveworkspacetomonitor, ${toString w} current"
"SUPER, ${toString w}, workspace, ${toString w}"
"SUPER SHIFT, ${toString w}, movetoworkspace, ${toString w}"
];
in
lib.lists.flatten (lib.lists.forEach (lib.lists.range 1 9) workspace)
++ (
let
btm_args = "--autohide_time --battery --celsius --enable_cache_memory --enable_gpu_memory --group --hide_avg_cpu --hide_table_gap --retention=3m --show_table_scroll_position";
in
[
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
# Open Hyprland wiki at correct version number
"CTRL_SHIFT, H, exec, xdg-open \"https://wiki.hyprland.org/$(${config.wayland.windowManager.hyprland.finalPackage}/bin/hyprctl version -j | ${pkgs.jq}/bin/jq $args.tag | ${pkgs.gnused}/bin/sed s/v// | ${pkgs.gnused}/bin/sed s/\\\"//g)\""
"SUPER, F1, exec, ${config.programs.hyprlock.package}/bin/hyprlock"
# "SUPER, F1, exec, ${config.programs.swaylock.package}/bin/swaylock --screenshots --clock --indicator --grace-no-mouse"
"SUPER, Q, killactive,"
"SUPER, V, togglefloating"
# "SUPER SHIFT, V, setfloating" ## TODO setfloating exists
# in newer version of Hyprland than mine
"SUPER SHIFT, V, moveactive, exact 1% 4%"
"SUPER SHIFT, V, resizeactive, exact 800 600"
"SUPER SHIFT, V, pin"
"SUPER, M, fullscreen, 1" # Maximise window
"SUPER SHIFT, M, fullscreen, 0" # Actual fullscreen
"SUPER, Z, exec, ${config.services.mako.package}/bin/makoctl restore"
"SUPER SHIFT, Z, exec, exec ${config.services.mako.package}/bin/makoctl dismiss -a"
# Common program shortcuts
"SUPER, Space, exec, ${config.programs.fuzzel.package}/bin/fuzzel"
"SUPER, Return, exec, ${config.programs.alacritty.package}/bin/alacritty"
"SUPER SHIFT, Return, exec, ${config.programs.emacs.finalPackage}/bin/emacsclient -c"
"SUPER, W, exec, ${config.programs.firefox.finalPackage}/bin/firefox"
"SUPER, F, exec, ${pkgs.gnome.nautilus}/bin/nautilus"
# Terminal utilities
"SUPER, S, exec, ${
withTerm {
progname = "${config.programs.bottom.package}/bin/btm";
args = btm_args;
}
}"
"SUPER SHIFT, S, exec, ${
withTerm {
progname = "${config.programs.bottom.package}/bin/btm";
args = btm_args + " --basic";
}
}"
"SUPER, C, exec, ${withTerm { progname = "${config.programs.cava.package}/bin/cava"; }}"
# Misc useful binds
",Print,exec,${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\" - | ${pkgs.swappy}/bin/swappy -f -"
# ",XF86Calculator,exec,pkill rofi || ${config.programs.rofi.finalPackage}/bin/rofi -show calc"
# Movement binds
"SUPER, H, movefocus, l"
"SUPER, L, movefocus, r"
"SUPER, K, movefocus, u"
"SUPER, J, movefocus, d"
"SUPER SHIFT, H, movewindow, l"
"SUPER SHIFT, L, movewindow, r"
"SUPER SHIFT, K, movewindow, u"
"SUPER SHIFT, J, movewindow, d"
# Special workspaces
"SUPER, comma, workspace, m-1"
"SUPER SHIFT, comma, movetoworkspace, r-1"
"SUPER, period, workspace, m+1"
"SUPER SHIFT, period, movetoworkspace, r+1"
"SUPER, N, workspace, empty"
"SUPER SHIFT, N, movetoworkspace, empty"
"SUPER, minus, togglespecialworkspace"
"SUPER SHIFT, minus, movetoworkspace, special"
"SUPER, bracketright, focusmonitor, +1"
"SUPER SHIFT, bracketright, movecurrentworkspacetomonitor, +1"
"SUPER, bracketleft, focusmonitor, -1"
"SUPER SHIFT, bracketleft, movecurrentworkspacetomonitor, -1"
"SUPER, O, focusurgentorlast"
]
);
bindl = [
# Sound
",XF86AudioMute,exec,${config.services.avizo.package}/bin/volumectl %"
",XF86AudioMicMute,exec,${config.services.avizo.package}/bin/volumectl -m %"
# Playback
",XF86AudioPlay,exec,${pkgs.playerctl}/bin/playerctl play-pause"
",XF86AudioStop,exec,${pkgs.playerctl}/bin/playerctl play-pause"
",XF86AudioPrev,exec,${pkgs.playerctl}/bin/playerctl previous"
",XF86AudioNext,exec,${pkgs.playerctl}/bin/playerctl next"
];
bindle = [
# Sound
",XF86AudioRaiseVolume,exec,${config.services.avizo.package}/bin/volumectl -u + 5"
",XF86AudioLowerVolume,exec,${config.services.avizo.package}/bin/volumectl -u - 5"
# Brightness
",XF86MonBrightnessUp,exec,${config.services.avizo.package}/bin/lightctl + 5"
",XF86MonBrightnessDown,exec,${config.services.avizo.package}/bin/lightctl - 5"
];
bindm = [
# Move/resize windows with mainMod + LMB/RMB and dragging
"SUPER, mouse:272, movewindow"
"SUPER, mouse:273, resizewindow"
];
};
};
xdg.configFile."hypr/hyprpaper.conf".text = ''
preload = ${config.stylix.image}
wallpaper = ,${config.stylix.image}
'';
}

View file

@ -1,18 +0,0 @@
{ config, lib, ... }:
{
services.mako = {
enable = true;
anchor = "top-right";
width = 600;
height = 600;
layer = "top";
markup = true;
maxVisible = 10;
icons = true;
iconPath = with config.gtk.iconTheme; "${package}/share/icons/${name}";
borderRadius = 5;
borderSize = 1;
borderColor = lib.mkForce config.lib.stylix.scheme.withHashtag.base0E;
defaultTimeout = (builtins.mul 5 1000); # 5s timeout
};
}

View file

@ -1,77 +0,0 @@
let
emacs = [ "emacsclient.desktop" ];
browser = [ "firefox.desktop" ];
in
{
"inode/directory" = [ "org.gnome.Nautilus.desktop" ];
"inode/symlink" = [ "org.gnome.Nautilus.desktop" ];
"image/jpeg" = [ "com.github.weclaw1.ImageRoll.desktop" ];
"image/png" = [ "com.github.weclaw1.ImageRoll.desktop" ];
"video/mp4" = [ "com.github.rafostar.Clapper.desktop" ];
"text/plain" = emacs;
"text/richtext" = emacs;
"text/org" = emacs;
"text/markdown" = emacs;
"text/rust" = emacs;
"text/csv" = emacs;
"text/css" = emacs;
"text/tab-separated-values" = emacs;
"text/html" = browser;
"text/x-emacs-lisp" = emacs;
"text/x-fortran" = emacs;
"text/x-idl" = emacs;
"text/x-log" = emacs;
"text/x-lua" = emacs;
"text/x-makefile" = emacs;
"text/x-cmake" = emacs;
"text/x-python" = emacs;
"text/x-python3" = emacs;
"text/x-readme" = emacs;
"text/x-scheme" = emacs;
"text/x-tex" = emacs;
"text/x-texinfo" = emacs;
"application/json" = emacs;
"application/toml" = emacs;
"application/yaml" = emacs;
"application/xml" = emacs;
"application/rss+xml" = emacs;
"application/xhtml+xml" = emacs;
"application/oxps" = emacs;
"application/zip" = [ "org.gnome.FileRoller.desktop" ];
"application/pdf" = [ "org.gnome.Evince.desktop" ];
"application/epub+zip" = [ "org.gnome.Evince.desktop" ];
"application/msword" = [ "writer.desktop" ];
"application/x-shellscript" = emacs;
"application/x-docbook+xml" = emacs;
"application/x-yaml" = emacs;
"application/x-archive" = [ "org.gnome.FileRoller.desktop" ];
"application/x-extension-htm" = browser;
"application/x-extension-html" = browser;
"application/x-extension-shtml" = browser;
"application/x-extension-xhtml" = browser;
"application/x-extension-xht" = browser;
"application/x-mozilla-bookmarks" = browser;
"application/x-zoom" = browser;
"x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser;
"x-scheme-handler/about" = browser;
"x-scheme-handler/chrome" = browser;
"x-scheme-handler/webcal" = browser;
"x-scheme-handler/geo" = [ "openstreetmap-geo-handler.desktop" ];
"x-scheme-handler/mailto" = [ "emacsclient-mail.desktop" ];
"x-scheme-handler/unknown" = emacs;
"x-scheme-handler/prusaslicer" = [ "PrusaSlicerURLProtocol.desktop" ];
"x-scheme-handler/ms-word" = [ "writer.desktop" ];
"x-scheme-handler/ms-powerpoint" = [ "impress.desktop" ];
"x-scheme-handler/ms-excel" = [ "calc.desktop" ];
"x-scheme-handler/msteams" = [ "teams-for-linux.desktop" ] ++ browser;
"x-scheme-handler/zoomus" = browser;
"x-scheme-handler/zoommtg" = browser;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View file

@ -1,360 +0,0 @@
{
config,
pkgs,
inputs,
osConfig,
...
}:
{
stylix.targets.kde.enable = false;
imports = [ inputs.plasma-manager.homeManagerModules.plasma-manager ];
home.packages = with pkgs; [
protonmail-bridge-gui
libreoffice-qt-fresh
rc2nix
wl-clipboard
];
services.gpg-agent.pinentryPackage = pkgs.pinentry-qt;
programs.plasma = {
enable = true;
overrideConfig = true;
workspace = {
iconTheme = config.gtk.iconTheme.name;
cursor = {
inherit (config.home.pointerCursor) size;
theme = config.home.pointerCursor.name;
};
wallpaper = config.stylix.image;
};
fonts =
let
general = {
family = config.stylix.fonts.sansSerif.name;
pointSize = 12;
};
small = {
inherit (general) family;
pointSize = general.pointSize - 2;
};
fixedWidth = {
family = config.stylix.fonts.monospace.name;
pointSize = 12;
};
in
{
inherit general small fixedWidth;
menu = general;
toolbar = general;
windowTitle = small;
};
hotkeys.commands = {
"launch-alacritty" = {
name = "Launch Alacritty terminal emulator";
key = "Ctrl+Alt+T";
command = "alacritty";
};
"launch-emacs" = {
name = "Launch Emacs Client Window";
key = "Meta+Alt+X";
command = "emacsclient -c";
};
};
panels = [
{
height = 32;
lengthMode = "fill";
location = "bottom";
alignment = "center";
hiding = "normalpanel";
floating = true;
screen = "all";
widgets = [
{
name = "org.kde.plasma.kicker";
config.General = {
icon = "nix-snowflake";
appNameFormat = 0;
limitDepth = true;
alphaSort = true;
recentOrdering = 0;
showRecentApps = true;
showRecentDocs = true;
showIconsRootLevel = true;
};
}
"org.kde.plasma.marginsseparator"
{
name = "org.kde.plasma.pager";
config.General = {
showWindowIcons = "true";
showOnlyCurrentScreen = "false";
wrapPage = "true";
};
}
"org.kde.plasma.panelspacer"
{
name = "org.kde.plasma.icontasks";
config.General = {
maxStripes = "1";
showToolTips = "true";
launchers = [
"preferred://filemanager"
"preferred://browser"
"applications:emacs.desktop"
"applications:Alacritty.desktop"
"applications:writer.desktop"
"applications:calc.desktop"
"applications:impress.desktop"
"applications:org.kde.okular.desktop"
"applications:org.kde.elisa.desktop"
"applications:org.kde.plasma-systemmonitor.desktop"
"applications:systemsettings.desktop"
];
};
}
"org.kde.plasma.panelspacer"
"org.kde.plasma.marginsseparator"
"org.kde.plasma.keyboardindicator"
"org.kde.plasma.cameraindicator"
{
systemTray = {
icons = {
spacing = "small";
scaleToFit = false;
};
};
}
{
digitalClock = {
date = {
enable = true;
format = "isoDate";
position = "besideTime";
};
time = {
format = "24h";
showSeconds = "onlyInTooltip";
};
calendar.showWeekNumbers = true;
};
}
{
name = "org.kde.plasma.userswitcher";
config.General = {
showFace = "true";
showName = "false";
showFullName = "true";
showTechnicalInfo = "true";
};
}
];
}
];
shortcuts = {
ksmserver = {
"Lock Session" = [
"Screensaver"
"Meta+Alt+L"
];
};
kwin = {
"Walk Through Windows of Current Application" = "Alt+`";
"Walk Through Windows of Current Application (Reverse)" = "Alt+¬";
"ToggleMouseClick" = "Meta+*";
"Expose" = "Meta+,";
"Switch Window Down" = "Meta+J";
"Switch Window Left" = "Meta+H";
"Switch Window Right" = "Meta+L";
"Switch Window Up" = "Meta+K";
"Invert" = "Meta+Ctrl+I";
"InvertWindow" = "Meta+Ctrl+U";
"Invert Screen Colors" = [ ];
};
"services/org.kde.konsole.desktop"."_launch" = [ ];
"services/org.kde.krunner.desktop"."_launch" = [
"Meta+Space"
"Search"
"Alt+F2"
];
};
kwin = {
virtualDesktops = {
rows = 1;
number = 4;
};
effects = {
translucency.enable = true;
blur.enable = true;
cube.enable = true;
dimAdminMode.enable = true;
};
};
powerdevil =
let
powerButtonAction = "turnOffScreen";
whenSleepingEnter = "standbyThenHibernate";
whenLaptopLidClosed = "sleep";
in
{
AC = {
inherit powerButtonAction whenSleepingEnter whenLaptopLidClosed;
autoSuspend = {
action = "sleep";
idleTimeout = 7200;
};
dimDisplay = {
enable = true;
# idleTimeOut = 300;
};
turnOffDisplay = {
idleTimeout = 1800;
idleTimeoutWhenLocked = 120;
};
};
battery = {
inherit powerButtonAction whenSleepingEnter whenLaptopLidClosed;
autoSuspend = {
action = "sleep";
idleTimeout = 900;
};
dimDisplay = {
enable = true;
# idleTimeOut = 120;
};
turnOffDisplay = {
idleTimeout = 300;
idleTimeoutWhenLocked = 60;
};
};
lowBattery = {
inherit powerButtonAction whenSleepingEnter whenLaptopLidClosed;
autoSuspend = {
action = "hibernate";
idleTimeout = 300;
};
dimDisplay = {
enable = true;
# idleTimeOut = 60;
};
turnOffDisplay = {
idleTimeout = 120;
idleTimeoutWhenLocked = "immediately";
};
};
};
configFile = {
baloofilerc."Basic Settings"."Indexing-Enabled" = false;
kwalletrc."org.freedesktop.secrets".apiEnabled = true;
kcminputrc.Keyboard.NumLock = 1;
plasmanotifyrc = {
Notifications = {
NormalAlwaysOnTop = true;
};
};
krunnerrc = {
General = {
ActivateWhenTypingOnDesktop = false;
FreeFloating = true;
};
};
kscreenlockerrc = {
Daemon.Timeout = 15;
Greeter.WallpaperPlugin = "org.kde.potd";
};
klipperrc = {
General = {
SyncClipboards = true;
MaxClipItems = 5;
IgnoreImages = false;
KeepClipboardContents = false;
};
};
kdeglobals = {
General =
let
AccentColor =
let
r = config.lib.stylix.scheme."base0E-rgb-r";
g = config.lib.stylix.scheme."base0E-rgb-g";
b = config.lib.stylix.scheme."base0E-rgb-b";
in
"${r}, ${g}, ${b}";
in
{
inherit AccentColor;
LastUsedCustomAccentColor = AccentColor;
TerminalApplication = "alacritty";
TerminalService = "Alacritty.desktop";
};
WM = {
# TODO convert to base16 colours at some point
activeBackground = "227,229,231";
activeBlend = "227,229,231";
activeForeground = "35,38,41";
inactiveBackground = "239,240,241";
inactiveBlend = "239,240,241";
inactiveForeground = "112,125,138";
};
};
breezerc = {
Common = {
OutlineClassButton = true;
OutlineCloseButtone = true;
ShadowSize = "ShadowVeryLarge";
ShadowStrength = "128";
};
Style = {
MenuOpacity = "100";
};
};
dolphinrc = {
ContentDisplay = {
UsePermissionsFormat = "CombinedFormat";
};
General = {
BrowseThroughArchives = true;
OpenNewTabAfterLastTab = true;
RememberOpenedTabs = false;
};
};
kwinrc = {
Plugins = {
frozenappEnabled = false;
mouseclickEnabled = true;
shakecursorEnabled = false;
invertEnabled = true;
};
Windows = {
FocusPolicy = "FocusFollowsMouse";
RollOverDesktops = true;
};
NightColor = {
Active = true;
Mode = "Location";
LatitudeFixed = "${osConfig.location.latitude}";
LongitudeFixed = "${osConfig.location.longitude}";
};
"Effect-translucency" = {
Inactive = 100;
MoveResize = 100;
Dialogs = 100;
ComboboxPopups = 100;
Menus = 100;
};
"org.kde.kdecoration2" = {
BorderSize = "None";
BorderSizeAuto = "false";
};
};
};
};
xdg.configFile."autostart/proton-bridge-gui.desktop".source = "${pkgs.protonmail-bridge-gui}/share/applications/proton-bridge-gui.desktop";
}

View file

@ -1,202 +0,0 @@
{
config,
lib,
pkgs,
osConfig,
...
}:
{
imports = [
./waybar.nix
./fuzzel.nix
./mako.nix
];
stylix.targets.swaylock.useImage = false; # Using swaylock-effects instead
home.packages = with pkgs; [
libreoffice-fresh
ffmpeg
grim
slurp
swappy
wl-clipboard
swayimg
swaybg
(writeShellScriptBin "swaylockfx" ''
${swaylock-effects}/bin/swaylock --screenshots --clock --indicator --effect-blur 7x5 --effect-vignette 0.5:0.5
'')
(writeShellScriptBin "protonmail-setup-bridge" ''
pkill -9 -f protonmail-bridge
${protonmail-bridge}/bin/protonmail-bridge -c
swaymsg exec "${protonmail-bridge}/bin/protonmail-bridge -n"
'')
];
programs = {
waybar.systemd.target = "sway-session.target";
swaylock = {
enable = true;
package = pkgs.swaylock-effects;
};
};
services = {
kanshi.systemdTarget = "sway-session.target";
gpg-agent.pinentryPackage = pkgs.pinentry-gnome3;
avizo = {
enable = true;
settings.default.image-opacity = lib.mkForce "1.0";
};
kdeconnect = {
enable = true;
indicator = true;
};
swayidle = {
enable = true;
timeouts = [
{
timeout = 60 * 15; # 15 minutes
command = "swaylockfx";
}
];
};
udiskie = {
enable = true;
notify = true;
automount = true;
tray = "never";
};
};
wayland.windowManager.sway = {
enable = true;
package = pkgs.swayfx.overrideAttrs (old: {
passthru.providedSessions = [ "sway" ];
});
swaynag.enable = true;
systemd.enable = true;
xwayland = true;
checkConfig = false;
config = {
input = {
"*" = {
xkb_layout = osConfig.services.xserver.xkb.layout;
};
"type:touchpad" = {
tap = "enabled";
natural_scroll = "enabled";
};
};
seat = {
"seat0" = {
xcursor_theme = "${config.gtk.cursorTheme.name} ${toString config.gtk.cursorTheme.size}";
};
};
modifier = "Mod4";
terminal = "${config.programs.alacritty.package}/bin/alacritty";
menu = "${config.programs.fuzzel.package}/bin/fuzzel";
workspaceAutoBackAndForth = true;
bars = [ ];
gaps = {
inner = 5;
outer = 0;
};
startup = [
{ command = "${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1"; }
{ command = "${pkgs.protonmail-bridge}/bin/protonmail-bridge -n"; }
{ command = "${pkgs.dex}/bin/dex -a"; }
{ command = "${config.services.mako.package}/bin/mako"; }
];
window = {
border = 1;
titlebar = false;
commands = [
{
criteria.window_role = "(?:pop-up|bubble|dialog)";
command = "floating enable";
}
{
criteria.app_id = "(?:org\.kde\.polkit-kde-authentication-agent-1|Pinentry|pavucontrol|\.blueman-manager-wrapped|nm-connection-editor)";
command = "floating enable";
}
{
criteria.class = "(?:[Mm]atplotlib|.*\.py|Idl)";
command = "floating enable";
}
{
# Catch-all for file dialog windows
criteria.title = "(?:Open|Save) (?:File|Folder|As)";
command = "floating enable, resize set width 1030 height 710";
}
{
# Inhibit idle when watching vidoes
criteria.app_id = "(?:firefox|mpv)";
command = "inhibit_idle fullscreen";
}
{
# Window rules for game sessions.
# Note: controllers don't reset idle timer
criteria.class = "(?:steam_app|Minecraft).*";
command = "floating enable, fullscreen enable, inhibit_idle focus";
}
];
};
floating.border = 1;
keybindings =
let
modifier = config.wayland.windowManager.sway.config.modifier;
in
lib.mkOptionDefault {
# Movement
"${modifier}+comma" = "workspace prev";
"${modifier}+period" = "workspace next";
"${modifier}+shift+comma" = "move workspace prev";
"${modifier}+shift+period" = "move workspace next";
"${modifier}+bracketleft" = "move workspace to output left";
"${modifier}+bracketright" = "move workspace to output right";
# Function keys
## Screenshot
"Print" = "exec ${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\" - | ${pkgs.swappy}/bin/swappy -f -";
## Sound
"XF86AudioMute" = "exec ${config.services.avizo.package}/bin/volumectl %";
"XF86AudioMicMute" = "exec ${config.services.avizo.package}/bin/volumectl -m %";
"XF86AudioRaiseVolume" = "exec ${config.services.avizo.package}/bin/volumectl -u + 5";
"XF86AudioLowerVolume" = "exec ${config.services.avizo.package}/bin/volumectl -u - 5";
## Playback
"XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioStop" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
"XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
## Brightness
"XF86MonBrightnessUp" = "exec ${config.services.avizo.package}/bin/lightctl + 5";
"XF86MonBrightnessDown" = "exec ${config.services.avizo.package}/bin/lightctl - 5";
# System utilities
"Mod4+Mod1+l" = "exec swaylockfx";
"${modifier}+z" = "exec ${config.services.mako.package}/bin/makoctl restore";
"${modifier}+Shift+z" = "exec ${config.services.mako.package}/bin/makoctl dismiss -a";
"${modifier}+Shift+Return" = "exec ${config.programs.emacs.finalPackage}/bin/emacsclient -c";
};
};
extraConfig = ''
bindgesture swipe:right workspace prev
bindgesture swipe:left workspace next
corner_radius 5
blur enable
blur_xray disable
blur_passes 3
blur_radius 5
shadows enable
shadow_blur_radius 5
layer_effects "system-menu" blur enable; blur_ignore_transparent enable; shadows enable
layer_effects "gtk-layer-shell" blur enable; blur_ignore_transparent enable; shadows enable
layer_effects "notifications" blur enable; blur_ignore_transparent enable; shadows enable
layer_effects "launcher" blur enable; blur_ignore_transparent enable; shadows enable
layer_effects "logout_dialog" blur enable; blur_ignore_transparent enable; shadows enable
layer_effects "waybar" blur enable; blur_ignore_transparent enable; shadows enable
layer_effects "avizo" blur enable; blur_ignore_transparent enable; shadows enable
titlebar_separator enable
'';
};
xdg.configFile."swappy/config".source = ./swappy.conf;
}

View file

@ -1,19 +0,0 @@
{ config, ... }:
{
programs.alacritty = {
enable = true;
settings = {
shell = "${config.programs.zsh.package}/bin/zsh";
window = {
dynamic_title = true;
padding = {
x = 5;
y = 5;
};
};
live_config_reload = true;
selection.save_to_clipboard = true;
mouse.hide_when_typing = true;
};
};
}

View file

@ -1,4 +0,0 @@
{ ... }:
{
imports = [ ./alacritty.nix ];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 562 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 642 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,000 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Some files were not shown because too many files have changed in this diff Show more