Compare commits

..

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

129 changed files with 736 additions and 5343 deletions

1
.envrc Normal file
View file

@ -0,0 +1 @@
use flake

View file

@ -1,3 +0,0 @@
indent_type = "Spaces"
call_parentheses = "None"
collapse_simple_statement = "Always"

View file

@ -1,18 +1,6 @@
.PHONY: default build server flathub
.PHONY: build
HOST := $(shell hostname)
default: build
build:
nix build --no-link --keep-going .#nixosConfigurations.$(HOST).config.system.build.toplevel
fonts:
nix build --no-link --max-jobs 1 .#iosevka-custom-aile .#iosevka-custom-etoile .#iosevka-custom-nerdfont
server: fonts
nixos-rebuild build --flake .#Legion
nix copy ./result --to ssh://legion && rm ./result
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,14 +1,8 @@
{
pkgs,
...
}:
{
imports = [ ./desktop.nix ];
environment.systemPackages = [ pkgs.acpi ];
{...}: {
imports = [./desktop.nix];
powerManagement.enable = true;
networking.networkmanager.wifi.powersave = true;
services.auto-cpufreq = {
enable = false; # TEMP, conflict with power-profiles-daemon
enable = true;
settings = {
battery = {
governor = "powersave";

View file

@ -1,372 +1,59 @@
{
"nodes": {
"base16": {
"iosevka-custom": {
"inputs": {
"fromYaml": "fromYaml"
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1732200724,
"narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "153d52373b0fb2d343592871009a286ec8837aec",
"type": "github"
"lastModified": 1719045863,
"narHash": "sha256-J0RQ2aiAchRxNzl2jlvqFNpFnDW2GZ7QXp53y7fs4GU=",
"ref": "refs/heads/main",
"rev": "db915e9a55cecdedac53a3cdba354dbc281938d9",
"revCount": 13,
"type": "git",
"url": "https://git.xenia.me.uk/pixelifytica/iosevka.git"
},
"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-helix": {
"flake": false,
"locked": {
"lastModified": 1725860795,
"narHash": "sha256-Z2o8VBPW3I+KKTSfe25kskz0EUj7MpUh8u355Z1nVsU=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "7f795bf75d38e0eea9fed287264067ca187b88a9",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-helix",
"type": "github"
}
},
"base16-vim": {
"flake": false,
"locked": {
"lastModified": 1731949548,
"narHash": "sha256-XIDexXM66sSh5j/x70e054BnUsviibUShW7XhbDGhYo=",
"owner": "tinted-theming",
"repo": "base16-vim",
"rev": "61165b1632409bd55e530f3dbdd4477f011cadc6",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-vim",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": [
"stylix",
"systems"
]
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"fromYaml": {
"flake": false,
"locked": {
"lastModified": 1731966426,
"narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=",
"owner": "SenchoPens",
"repo": "fromYaml",
"rev": "106af9e2f715e2d828df706c386a685698f3223b",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "fromYaml",
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": [
"stylix",
"flake-compat"
],
"gitignore": "gitignore",
"nixpkgs": [
"stylix",
"nixpkgs"
],
"nixpkgs-stable": [
"stylix",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1731363552,
"narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"stylix",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gnome-shell": {
"flake": false,
"locked": {
"lastModified": 1732369855,
"narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "dadd58f630eeea41d645ee225a63f719390829dc",
"type": "github"
},
"original": {
"owner": "GNOME",
"ref": "47.2",
"repo": "gnome-shell",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1735344290,
"narHash": "sha256-oJDtWPH1oJT34RJK1FSWjwX4qcGOBRkcNQPD0EbSfNM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "613691f285dad87694c2ba1c9e6298d04736292d",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-24.11",
"repo": "home-manager",
"type": "github"
"type": "git",
"url": "https://git.xenia.me.uk/pixelifytica/iosevka.git"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1736061677,
"narHash": "sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60=",
"lastModified": 1717602782,
"narHash": "sha256-pL9jeus5QpX5R+9rsp3hhZ+uplVHscNJh8n8VpqscM0=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "cbd8ec4de4469333c82ff40d057350c30e9f7d36",
"rev": "e8057b67ebf307f01bdcc8fba94d94f75039d1f6",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.11",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1735554305,
"narHash": "sha256-zExSA1i/b+1NMRhGGLtNfFGXgLtgo+dcuzHzaWA6w3Q=",
"lastModified": 1719838683,
"narHash": "sha256-Zw9rQjHz1ilNIimEXFeVa1ERNRBF8DoXDhLAZq5B4pE=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "0e82ab234249d8eee3e8c91437802b32c74bb3fd",
"rev": "d032c1a6dfad4eedec7e35e91986becc699d7d69",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"ref": "nixos-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs",
"stylix": "stylix",
"treefmt-nix": "treefmt-nix"
}
},
"stylix": {
"inputs": {
"base16": "base16",
"base16-fish": "base16-fish",
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"git-hooks": "git-hooks",
"gnome-shell": "gnome-shell",
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
],
"systems": "systems",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-tmux": "tinted-tmux"
},
"locked": {
"lastModified": 1736019457,
"narHash": "sha256-MWe3RXEV9dov1wFZraWagVAxynPo/VceStIYfNRgqG4=",
"owner": "danth",
"repo": "stylix",
"rev": "5204b085385c0bfaa1eb1bb0f8dc81922012128d",
"type": "github"
},
"original": {
"owner": "danth",
"ref": "release-24.11",
"repo": "stylix",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tinted-foot": {
"flake": false,
"locked": {
"lastModified": 1726913040,
"narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
}
},
"tinted-kitty": {
"flake": false,
"locked": {
"lastModified": 1716423189,
"narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=",
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "eb39e141db14baef052893285df9f266df041ff8",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "eb39e141db14baef052893285df9f266df041ff8",
"type": "github"
}
},
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1729501581,
"narHash": "sha256-1ohEFMC23elnl39kxWnjzH1l2DFWWx4DhFNNYDTYt54=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "f0e7f7974a6441033eb0a172a0342e96722b4f14",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-tmux",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"iosevka-custom": "iosevka-custom",
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1736154270,
"narHash": "sha256-p2r8xhQZ3TYIEKBoiEhllKWQqWNJNoT9v64Vmg4q8Zw=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "13c913f5deb3a5c08bb810efd89dc8cb24dd968b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
}
},

172
flake.nix
View file

@ -2,87 +2,135 @@
description = "Evie's machine configurations";
nixConfig = {
extra-substituters = [ "https://nix.xenia.me.uk" ];
extra-trusted-public-keys = [ "nix.xenia.me.uk:tlgwOaG5KMLjQUk2YaErS8mAG69ZCr3PaHXZYi+Y5eI=" ];
extra-substituters = ["https://nix.xenia.me.uk"];
extra-trusted-public-keys = ["nix.xenia.me.uk:tlgwOaG5KMLjQUk2YaErS8mAG69ZCr3PaHXZYi+Y5eI="];
};
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
treefmt-nix.url = "github:numtide/treefmt-nix";
home-manager = {
url = "github:nix-community/home-manager/release-24.11";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:danth/stylix/release-24.11";
inputs = {
nixpkgs.follows = "nixpkgs";
home-manager.follows = "home-manager";
};
};
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
iosevka-custom.url = "git+https://git.xenia.me.uk/pixelifytica/iosevka.git";
};
outputs =
inputs@{
self,
outputs = {
nixpkgs,
treefmt-nix,
iosevka-custom,
...
}:
let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
treefmt = treefmt-nix.lib.evalModule pkgs ./treefmt.nix;
in
{
packages.x86_64-linux =
let
fonts = pkgs.callPackage ./system/fonts.nix { };
in
{
inherit (fonts)
iosevka-custom
iosevka-custom-aile
iosevka-custom-etoile
iosevka-custom-nerdfont
;
}: 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";
};
formatter.x86_64-linux = treefmt.config.build.wrapper;
checks.x86_64-linux.formatting = treefmt.config.build.check self;
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
Monarch = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
username = "elitherl";
hostName = "Monarch";
Tone = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = defaultSpecialArgs {inherit system;};
modules = defaultModules {
hostName = "Tone";
userName = "elitherl";
loginShell = "zsh";
};
};
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,44 +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";
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

@ -0,0 +1,42 @@
# 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, ... }:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules =
[ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/0c6931d0-50c3-47b0-98c8-d295ddeb2004";
fsType = "ext4";
};
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"; }];
# 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
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -1,45 +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";
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,52 +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";
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

43
services/adguardhome.nix Normal file
View file

@ -0,0 +1,43 @@
{
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"];
ratelimit = 0;
safe_search.enabled = true;
rewrites = [
{
domain = "xenia.me.uk";
answer = "192.168.1.230";
}
{
domain = "*.xenia.me.uk";
answer = "192.168.1.230";
}
];
blocked_services.ids = [];
};
filtering = {inherit (dns) safe_search rewrites blocked_services;};
querylog.ignored = [
"discovery.syncthing.net"
"discovery-v6.syncthing.net"
"matrix.tchncs.de"
];
statistics = {inherit (querylog) ignored;};
};
openFirewall = true;
};
networking.firewall = {
allowedTCPPorts = [53];
allowedUDPPorts = [53];
};
}

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,14 +1,10 @@
{ ... }:
{
networking.firewall.allowedTCPPorts = [
80
443
];
{...}: {
networking.firewall.allowedTCPPorts = [80 443];
services.caddy = {
enable = true;
email = "evie@xenia.me.uk";
virtualHosts."xenia.me.uk" = {
serverAliases = [ "www.xenia.me.uk" ];
serverAliases = ["www.xenia.me.uk"];
extraConfig = ''
file_server * {
root /var/www/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,6 +1,5 @@
{ ... }:
{
imports = [ ./caddy.nix ];
{...}: {
imports = [./caddy.nix];
services.grafana = {
enable = true;
settings = {
@ -17,14 +16,14 @@
exporters = {
node = {
enable = true;
enabledCollectors = [ "systemd" ];
enabledCollectors = ["systemd"];
port = 9002;
};
};
scrapeConfigs = [
{
job_name = "legion";
static_configs = [ { targets = [ "127.0.0.1:${toString exporters.node.port}" ]; } ];
static_configs = [{targets = ["127.0.0.1:${toString exporters.node.port}"];}];
}
# {
# job_name = "minecraft";
@ -32,6 +31,5 @@
# }
];
};
services.caddy.virtualHosts."grafana.xenia.me.uk".extraConfig =
"reverse_proxy http://localhost:3000";
services.caddy.virtualHosts."grafana.xenia.me.uk".extraConfig = "reverse_proxy http://localhost:3000";
}

View file

@ -1,10 +1,8 @@
{ ... }:
let
{...}: let
baseUrl = "xenia.me.uk";
port = 8008;
in
{
imports = [ ./caddy.nix ];
in {
imports = [./caddy.nix];
services = {
matrix-synapse = {
enable = true;
@ -14,26 +12,20 @@ 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;
}
];
}
];
};
extraConfigFiles = [ "/run/secrets/matrix-shared-secret" ];
extraConfigFiles = ["/run/secrets/matrix-shared-secret"];
};
caddy.virtualHosts."xenia.me.uk".extraConfig = ''
header /.well-known/matrix/* Content-Type application/json

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,7 +1,6 @@
{ pkgs, ... }:
{
imports = [ ./caddy.nix ];
environment.systemPackages = with pkgs; [ ffmpeg ];
{pkgs, ...}: {
imports = [./caddy.nix];
environment.systemPackages = with pkgs; [ffmpeg];
services = {
navidrome = {
enable = true;

9
services/nix-serve.nix Normal file
View file

@ -0,0 +1,9 @@
{config, ...}: {
imports = [./caddy.nix];
services.nix-serve = {
enable = true;
openFirewall = true;
secretKeyFile = "/root/nix-serve.key";
};
services.caddy.virtualHosts."nix.xenia.me.uk".extraConfig = "reverse_proxy http://localhost:${toString config.services.nix-serve.port}";
}

View file

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

View file

@ -1,11 +1,9 @@
{ config, ... }:
{
imports = [ ./caddy.nix ];
{config, ...}: {
imports = [./caddy.nix];
services.owncast = {
enable = true;
port = 9090;
openFirewall = true;
};
services.caddy.virtualHosts."stream.xenia.me.uk".extraConfig =
"reverse_proxy http://localhost:${config.services.owncast.port}";
services.caddy.virtualHosts."stream.xenia.me.uk".extraConfig = "reverse_proxy http://localhost:${config.services.owncast.port}";
}

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,8 +1,7 @@
{ ... }:
{
{...}: {
services.openssh = {
enable = true;
ports = [ 22 ];
ports = [22];
settings = {
UseDns = true;
PermitRootLogin = "no";

View file

@ -1,14 +1,7 @@
{ ... }:
let
devices = [
"Ion"
"Legion"
"Northstar"
"Vanguard"
];
in
{
imports = [ ./caddy.nix ];
{...}: let
devices = ["Ion" "Legion" "Northstar" "Vanguard"];
in {
imports = [./caddy.nix];
services.syncthing = {
enable = true;
systemService = 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,6 +1,5 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [ tmux ];
{pkgs, ...}: {
environment.systemPackages = with pkgs; [tmux];
services.terraria = {
enable = true;
maxPlayers = 10;

View file

@ -1,15 +1,12 @@
{ ... }:
{
{...}: {
services.znc = {
enable = true;
mutable = false;
useLegacyConfig = false;
openFirewall = true;
config = {
LoadModule = [ "adminlog" ];
Listener.l = {
Port = 6697;
};
LoadModule = ["adminlog"];
Listener.l = {Port = 6697;};
User.pixelifytica = {
Admin = true;
Pass.password = {
@ -21,7 +18,7 @@
liberachat = {
Server = "irc.libera.chat +6697";
Nick = "pixelifytica";
Chan = { };
Chan = {};
JoinDelay = 2;
};
};

View file

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

View file

@ -1,33 +0,0 @@
{ pkgs, username, ... }:
{
# nixpkgs.config.kodi.enableAdvancedLauncher = true;
services.xserver = {
enable = true;
desktopManager.kodi = {
enable = true;
package = pkgs.kodi.withPackages (
kp: with kp; [
jellyfin
youtube
netflix
]
);
};
displayManager = {
lightdm.greeter.enable = false;
autoLogin = {
enable = true;
user = username;
};
};
};
networking.firewall = {
allowedTCPPorts = [ 8080 ];
allowedUDPPorts = [ 8080 ];
};
home-manager.users.${username} = {
home.stateVersion = null;
};
system.stateVersion = null;
users.mutableUsers = false;
}

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,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,91 +0,0 @@
{
config,
pkgs,
username,
...
}:
{
imports = [
./desktop.nix
./steam.nix
];
home-manager.users.${username} = {
imports = [ ./home/swww/default.nix ];
home = {
stateVersion = "23.05";
packages = with pkgs; [
helvum
prusa-slicer
blender
freecad
openscad
kicad-small
wineWowPackages.waylandFull
winetricks
lutris
cartridges
prismlauncher
(retroarch.override {
cores = with libretro; [
mupen64plus
dolphin
mgba
citra
pcsx2
ppsspp
];
})
];
};
programs = {
btop.package = pkgs.btop-rocm;
obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-vkcapture
obs-pipewire-audio-capture
input-overlay
];
};
};
wayland.windowManager.hyprland.settings =
let
primary = "Microstep MSI G27CQ4 E2";
secondary = "Acer Technologies ED270R TJMEE0043W01";
in
{
monitor = [
"desc:${primary},2560x1440@144,1920x0,1.25,vrr,2"
"desc:${secondary},1920x1080@144,0x140,1.0,vrr,2"
];
workspace = [
"3, monitor:desc:${secondary}"
"5, monitor:desc:${primary}"
"7, monitor:desc:${primary}"
];
};
};
boot = {
kernel.sysctl = {
"vm.max_map_count" = 16777216;
"fs.file-max" = 524288;
};
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;
};
graphics = {
enable = true;
enable32Bit = true;
};
};
services.hardware.openrgb.enable = true;
system.stateVersion = "23.05";
}

View file

@ -1,261 +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 3d";
};
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)}
'';
};
nixpkgs.config.allowUnfreePredicate =
pkg:
builtins.elem (lib.getName pkg) [
"steam"
"steam-unwrapped"
"steam-original"
"steam-run"
"steamcmd"
"nomachine-client"
];
system.autoUpgrade = {
enable = true;
persistent = true;
allowReboot = false;
flake = "git+${config.nix.registry.my-nixos.to.url}";
dates = "02:00";
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;
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";
shell = pkgs.zsh;
extraGroups = [
"networkmanager"
"wheel"
"video"
"input"
"uinput"
"dialout"
"podman"
"gamemode"
];
initialHashedPassword = "$y$j9T$tHIPQt09Kf3KH2eIRze3g/$2mwSlcq27DTGvHNPJ5EP9/1CfL3bXP0F6oS/Vuffmn3";
openssh = {
inherit authorizedKeys;
};
};
};
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "backup";
users.${username} = {
imports = [
./home/shell/default.nix
./home/scripts/default.nix
./home/gpg/default.nix
];
home = {
inherit username;
homeDirectory = "/home/${username}";
};
programs.home-manager.enable = true;
};
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
librespeed-cli
dust
quickemu
distrobox
];
localBinInPath = true;
};
programs = {
zsh.enable = true;
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 = {
containers.enable = true;
podman = {
enable = true;
dockerCompat = true;
defaultNetwork.settings.dns_enabled = 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 = ./wallpapers/default.png;
base16Scheme = lib.mkDefault "${pkgs.base16-schemes}/share/themes/onedark.yaml";
polarity = config.lib.stylix.scheme.variant;
opacity = {
applications = 0.9;
desktop = 0.7;
popups = 0.5;
terminal = 0.9;
};
cursor = {
package = pkgs.volantes-cursors;
name = "volantes_cursors";
size = 32;
};
fonts =
let
fpkgs = pkgs.callPackage ./fonts.nix { };
in
{
serif = {
package = fpkgs.iosevka-custom-etoile;
name = "Iosevka Custom Etoile";
};
sansSerif = {
package = fpkgs.iosevka-custom-aile;
name = "Iosevka Custom Aile";
};
monospace = {
package = fpkgs.iosevka-custom-nerdfont;
name = "IosevkaCustom Nerd Font Propo";
};
sizes = {
applications = 12;
desktop = 14;
popups = 16;
terminal = 12;
};
};
};
fonts.packages = with pkgs; [
liberation_ttf # Documents
lmodern # LaTeX
(nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; })
];
}

View file

@ -1,245 +0,0 @@
{
config,
pkgs,
username,
...
}:
{
nixpkgs.config.chromium.commandLineArgs = "--password-store='gnome-libsecret' --enable-features=UseOzonePlatform --ozone-platform=wayland";
hardware.bluetooth.enable = true;
networking.networkmanager.enable = true;
environment = {
sessionVariables = {
SSH_ASKPASS_REQUIRE = "prefer";
NIXOS_OZONE_WL = "1";
MOZ_ENABLE_WAYLAND = "1";
WEBKIT_DISABLE_COMPOSITING_MODE = "1";
MPLBACKEND = "TkAgg";
GDK_BACKEND = "wayland,x11";
XDG_SESSION_TYPE = "wayland";
QT_QPA_PLATFORM = "wayland";
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
};
systemPackages = with pkgs; [
libsecret
libnotify
xdg-utils
hunspell
hunspellDicts.en_GB-large
wl-clipboard
hyprpicker
grim
slurp
swappy
cameractrls-gtk4
czkawka
nautilus
libreoffice
evince
image-roll
imagemagick
clapper
g4music
ffmpeg
picard
webcord
signal-desktop
whatsapp-for-linux
teams-for-linux
nomachine-client
];
};
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;
hyprland.enable = true;
xwayland.enable = true;
};
gtk.iconCache.enable = true;
qt = {
enable = true;
style = if config.lib.stylix.scheme.variant == "light" then "adwaita" else "adwaita-dark";
};
services = {
gnome.gnome-keyring.enable = true;
flatpak.enable = true;
printing.enable = true;
tumbler.enable = true;
udisks2.enable = true;
blueman.enable = config.hardware.bluetooth.enable;
gnome.sushi.enable = true;
gvfs = {
enable = true;
package = pkgs.gnome.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 ];
};
home-manager.users.${username} =
{
config,
pkgs,
osConfig,
...
}:
{
imports = [
./home/hyprland.nix
./home/terminal/default.nix
./home/browser/firefox.nix
./home/emacs/default.nix
./home/email/default.nix
./home/calendar/default.nix
];
home.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 = "violet"; });
name = if config.lib.stylix.scheme.variant == "light" then "Papirus-Light" else "Papirus-Dark";
};
};
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;
# Set Swappy config so that it saves to Screenshots directory
"swappy/config".text = ''
[Default]
save_dir=${config.xdg.userDirs.pictures}/Screenshots/
save_filename_format=swappy-%Y%m%d-%H%M%S.png
show_panel=false
line_size=5
text_size=${toString config.stylix.fonts.sizes.desktop}
text_font=${config.stylix.fonts.sansSerif.name}
paint_mode=brush
early_exit=false
fill_shape=false
'';
# WhatsApp config
"whatsapp-for-linux/settings.conf" =
let
inherit (config.lib.stylix.scheme) variant;
in
{
force = true;
text = ''
[web]
allow-permissions=true
hw-accel=2
[general]
notification-sounds=true
close-to-tray=true
start-in-tray=true
[appearance]
prefer-dark-theme=${if variant == "dark" then "true" else "false"}
'';
};
# Teams config
"teams-for-linux/config.json" = {
force = true;
text = builtins.toJSON {
awayOnSystemIdle = true;
closeAppOnCross = false;
followSystemTheme = true;
notificationMethod = "electron";
optInTeamsV2 = true;
spellCheckerLanguages = [ "en_GB" ];
};
};
# 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";
};
};
};
}

View file

@ -1,139 +0,0 @@
{
stdenv,
findutils,
iosevka,
nerd-font-patcher,
}:
let
custom-build-plan = {
noCvSs = false;
exportGlyphNames = false;
widths.Normal = {
shape = 500;
menu = 5;
css = "normal";
};
weights = {
Regular = {
shape = 400;
menu = 400;
css = 400;
};
Bold = {
shape = 700;
menu = 700;
css = 700;
};
};
slopes = {
Upright = {
angle = 0;
shape = "upright";
menu = "upright";
css = "normal";
};
Italic = {
angle = 9.4;
shape = "italic";
menu = "italic";
css = "italic";
};
};
variants.design = {
capital-g = "toothless-corner-serifless-hooked";
capital-j = "serifed-both-sides";
capital-k = "curly-serifless";
capital-p = "closed-motion-serifed";
capital-q = "crossing";
capital-r = "curly-serifless";
capital-u = "tailed-serifless";
capital-z = "straight-serifless-with-horizontal-crossbar";
a = "double-storey-tailed";
d = "tailed-serifless";
e = "rounded";
f = "tailed-crossbar-at-x-height";
g = "double-storey-open";
h = "tailed-serifless";
i = "tailed-serifed";
j = "serifed";
k = "cursive-serifless";
l = "tailed-serifed";
m = "tailed-serifless";
n = "tailed-serifless";
q = "diagonal-tailed-serifless";
u = "tailed-serifless";
y = "cursive-serifless";
z = "straight-serifless-with-horizontal-crossbar";
lower-delta = "flat-top";
lower-lambda = "tailed-turn";
lower-xi = "flat-top";
lower-chi = "semi-chancery-straight-serifless";
zero = "tall-slashed";
one = "no-base";
two = "straight-neck-serifless";
three = "flat-top-serifless";
four = "semi-open-serifless";
five = "oblique-arched-serifless";
six = "open-contour";
seven = "bend-serifless-crossbar";
eight = "two-circles";
nine = "open-contour";
asterisk = "hex-low";
underscore = "high";
caret = "high";
paren = "normal";
brace = "straight";
number-sign = "slanted";
ampersand = "closed";
at = "fourfold";
percent = "dots";
question = "corner";
lig-ltgteq = "flat";
lig-neq = "more-slanted";
lig-equal-chain = "without-notch";
lig-hyphen-chain = "without-notch";
lig-double-arrow-bar = "without-notch";
lig-single-arrow-bar = "without-notch";
};
};
in
rec {
iosevka-custom = iosevka.override {
set = "Custom";
privateBuildPlan = custom-build-plan // {
family = "Iosevka Custom";
spacing = "normal";
serifs = "sans";
};
};
iosevka-custom-aile = iosevka.override {
set = "CustomAile";
privateBuildPlan = custom-build-plan // {
family = "Iosevka Custom Aile";
spacing = "quasi-proportional";
serifs = "sans";
};
};
iosevka-custom-etoile = iosevka.override {
set = "CustomEtoile";
privateBuildPlan = custom-build-plan // {
family = "Iosevka Custom Etoile";
spacing = "quasi-proportional";
serifs = "slab";
};
};
iosevka-custom-nerdfont = stdenv.mkDerivation {
name = "${iosevka-custom.name}-nerd-font-patched";
src = iosevka-custom;
nativeBuildInputs = [
findutils
nerd-font-patcher
];
buildPhase = ''
find \( -name \*.ttf -o -name \*.otf \) -execdir nerd-font-patcher --variable-width-glyphs --careful --complete --boxdrawing --no-progressbars {} \;
'';
installPhase = ''
cp -a . $out
'';
};
}

View file

@ -1,14 +0,0 @@
{ config, lib, ... }:
{
services.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)";
};
};
}

View file

@ -1,307 +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/UKAEA/",
"tags": ["Work", "Room Booking"]
},
{
"name": "UKAEA Pinboard",
"url": "https://pinboard.ukaea.uk/",
"tags": ["Work"]
},
{
"name": "EUROFusion Pinboard",
"url": "https://users.euro-fusion.org/webapps/pinboard/EFDA-JET/",
"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": "Spectroscopy and Imaging Sharepoint",
"url": "https://ukaeauk.sharepoint.com/sites/Plasma/Team_Areas/SitePages/Spectroscopy-and-Imaging---Team-Area.aspx",
"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,65 +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/")
'("archwiki" "https://wiki.archlinux.org/index.php?search=~a" "https://wiki.archlinux.org/")
'("nixwiki" "https://wiki.nixos.org/w/index.php?search=~a" "https://wiki.nixos.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)))

View file

@ -1,222 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
stylix.targets.firefox.enable = false;
programs.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 = {
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";
};
# Proton Pass
"78272b6fa58f4a1abaac99321d503a20@proton.me" = {
installation_mode = "force_installed";
install_url = "https://addons.mozilla.org/firefox/downloads/latest/proton-pass/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.startup.homepage" = lib.mkDefault "about:home";
"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.globalprivacycontrol.enabled" = true;
"privacy.donottrackheader.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,78 +0,0 @@
{ config, pkgs, ... }:
{
home.packages = [ pkgs.nyxt ];
xdg = {
configFile = {
"nyxt/config.lisp".text =
let
inherit (config.lib.stylix.scheme) variant;
fonts = config.stylix.fonts;
scheme = config.lib.stylix.scheme.withHashtag;
accent = scheme.base0E;
in
''
;; Import custom configuration
(nyxt::load-lisp "${./config.lisp}")
;; Set theme variant from GTK_THEME if available
(setf (uiop/os:getenv "GTK_THEME") "Adwaita:${variant}")
;; Define custom theme
(define-configuration browser
((theme (make-instance 'theme:theme
:dark-p ${if variant == "light" then "nil" else "t"}
:font-family "${fonts.sansSerif.name}"
:monospace-font-family "${fonts.monospace.name}"
:text-color "${scheme.base05}"
:contrast-text-color "${scheme.base01}"
:background-color "${scheme.base00}"
:primary-color "${scheme.base02}"
:secondary-color "${scheme.base03}"
:tertiary-color "${scheme.base04}"
:quaternary-color "${scheme.base04}"
:accent-color "${scheme.base0E}"
:action-color "${scheme.cyan}"
:success-color "${scheme.green}"
:warning-color "${scheme.yellow}"
:highlight-color "${scheme.base01}"
:codeblock-color "${scheme.base01}"
;; :on-background-color "${scheme.base05}"
;; :on-primary-color "${scheme.base05}"
;; :on-secondary-color "${scheme.base05}"
;; :on-tertiary-color "${scheme.base05}"
;; :on-quaternary-color "${scheme.base05}"
;; :on-accent-color "${scheme.base01}"
;; :on-action-color "${scheme.base01}"
;; :on-success-color "${scheme.base01}"
;; :on-warning-color "${scheme.base01}"
;; :on-highlight-color "${scheme.base01}"
;; :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,44 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
programs.qutebrowser = {
enable = true;
settings = {
changelog_after_upgrade = "major";
# confirm_quit = "downloads";
content = {
autoplay = false;
blocking.enabled = true;
cookies.accept = "no-unknown-3rdparty";
headers.do_not_track = true;
};
downloads.location.directory = config.xdg.userDirs.download;
new_instance_open_target = "tab";
qt.highdpi = true;
scrolling.smooth = true;
# spellcheck.languages = [ "en-GB" ];
tabs = {
last_close = "blank";
show = "multiple";
};
url.default_page = lib.mkDefault "about:blank";
window.hide_decoration = true;
};
searchEngines = {
w = "https://en.wikipedia.org/wiki/Special:Search?search={}&go=Go&ns0=1";
aw = "https://wiki.archlinux.org/?search={}";
nw = "https://wiki.nixos.org/index.php?search={}";
gh = "https://github.com/search?q={}";
fh = "https://flathub.org/apps/search?q={}";
py = "https://pypi.org/search/?q={}";
};
# quickmarks =
# let
# in
# { };
};
}

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,41 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
../shell/default.nix
../shell/git.nix
../gpg/default.nix
../texlive/default.nix
../programming/default.nix
];
services.emacs = {
enable = lib.mkDefault true;
package = config.programs.emacs.finalPackage;
defaultEditor = true;
client.enable = true;
socketActivation.enable = true;
};
programs.emacs = {
enable = true;
package = pkgs.emacs30.override {
withImageMagick = true;
withPgtk = true;
};
extraPackages = epkgs: import ./packages.nix { inherit epkgs; };
};
home.packages = with pkgs; [
# External requirements
gcc
languagetool
wordnet
pandoc
ghostscript
mupdf-headless
poppler_utils
graphviz-nox
];
}

View file

@ -1,84 +0,0 @@
#+TITLE: Font Showcase
#+AUTHOR: Evie Litherland-Smith
This is a showcase of various font and UI features to act as a
standard candle.
* Font emphasis
Examples of:
- *Bold text*
- /Italic text/
- _Underscored text_
- =Literal text=
- ~Code~
- +Strike-through+
* Character showcase
#+begin_example
ABC.DEF.GHI.JKL.MNO.PQRS.TUV.WXYZ abc.def.ghi.jkl.mno.pqrs.tuv.wxyz
!iIlL17|¦ ¢coO08BbDQ $5SZ2zs 96µm float il1[]={1-2/3.4,5+6=7/8%90};
1234567890 ,._-+= >< «¯-¬_» ~–÷+× {*}[]()<>`+-=$/#_%^@\&|~?'" !,.;:
E3CGQ g9q¶ uvw ſßðþ ΓΔΛαδιλμξπτχ∂ ЖЗКУЯжзклмнруфчьыя <= != == => ->
#+end_example
** Legibility test
Can I tell the difference between: 1,i,I,l,L,|
How about: 0,O,o
* Tables
| Heading 1 | Heading 2 | Plot |
|-----------+-----------+--------------|
| 1 | 1 | |
| 2 | 4 | c |
| 3 | 9 | W |
| 4 | 16 | WV |
| 5 | 25 | WWH |
| 6 | 36 | WWWW: |
| 7 | 49 | WWWWWV |
| 8 | 64 | WWWWWWWl |
| 9 | 81 | WWWWWWWWWh |
| 10 | 100 | WWWWWWWWWWWW |
#+TBLFM: $2=$1**2::$3='(orgtbl-ascii-draw $2 1 100 12)
* Source blocks
#+begin_src python
def main(*args, **kwargs) -> None:
"""
Example docstring for function
"""
return
if __name__ == "__main__":
main()
#+end_src
* Example prose
#+begin_quote
AMONG the many valuable contributions of William Dwight Whitney to
linguistic science is one especially important and fundamental
principle. It may be stated in these words. In explaining the
prehistoric phenomena of language we must assume no other factors than
those which we are able to observe and estimate in the historical
period of language development. The factors that produced changes in
human speech five thousand or ten thousand years ago cannot have been
essentially different from those which are now operating to transform
living languages. On the basis of this principle we look to-day at a
much-discussed problem of Indo-European philology with views very
different from the views held by the founders of Comparative Philology
and their immediate successors. I refer to the problem, how the
Indo-European people came to assign gender to nouns, to distinguish
between masculine, feminine, and neuter. This question is of interest
to others besides philologists. What man of culture who has learned
languages such as the Greek, Latin, or French has not at times
wondered that objects which have no possible connection with the
natural gender of animals appear constantly in the language as male or
female? In German, for example, it is der fuss, but die hand; der
geist, but die seele; in Latin, hīc hortus, hīc animus, hīc amor, but
haec planta, haec anima, haec felicitas; in Greek, ὁ πλοῦτος, ὁ οἶκος,
but ἡ πενία, ἡ οἰκία.
This gender distinction pervades all the older Indo-European
languages, and must therefore be regarded as having its origin in the
time of the pro-ethnic Indo-European community. Not only is the
subject itself full of interest, but also the treatment it has
received from the philological research of our century. The various
efforts made to solve the problem may very aptly illustrate an
essential difference which exists between the theories of language
development held in the beginning and middle of this century and those
which prevail to-day, — a difference of method existing not in
comparative linguistics alone, but also in other fields of
philological and historical research that border on it.
#+end_quote

View file

@ -1,49 +0,0 @@
{ epkgs }:
with epkgs;
[
# EViL Mode
evil
# UI and Appearance
nerd-icons
nerd-icons-dired
nerd-icons-ibuffer
nerd-icons-corfu
doom-modeline
dashboard
# Email and Calendar
khalel
mu4e
# Other (TODO sort)
diff-hl
org-roam
org-journal
org-noter
citar
vertico
marginalia
orderless
corfu
corfu-terminal
cape
consult
consult-eglot
tempel
tempel-collection
rainbow-delimiters
envrc
treesit-grammars.with-all-grammars
treesit-auto
apheleia
flymake-shellcheck
flymake-clippy
magit
forge
nix-mode
nix-ts-mode
python-docstring
python-pytest
engrave-faces
auctex
markdown-mode
scad-mode
]

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,24 +0,0 @@
{ config, lib, ... }:
{
programs.fuzzel = {
enable = true;
settings = {
main = {
use-bold = true;
icon-theme = config.gtk.iconTheme.name;
icons-enabled = true;
fields = "filename,name,generic,exec";
fuzzy = true;
filter-desktop = true;
terminal = "${config.programs.alacritty.package}/bin/alacritty -e";
anchor = "center";
layer = "overlay";
};
border = {
width = 2;
radius = 10;
};
colors.border = lib.mkForce "${config.lib.stylix.scheme.base0E}ff";
};
};
}

View file

@ -1,8 +0,0 @@
{ lib, pkgs, ... }:
{
programs.gpg.enable = true;
services.gpg-agent = {
enable = true;
pinentryPackage = lib.mkDefault pkgs.pinentry-all;
};
}

View file

@ -1,410 +0,0 @@
{
config,
lib,
pkgs,
osConfig,
...
}:
{
imports = [
./udiskie.nix
./waybar.nix
./fuzzel.nix
./mako.nix
./avizo.nix
./wlogout.nix
];
home.packages = [
(pkgs.writeShellScriptBin "protonmail-setup-bridge" ''
pkill -9 -f protonmail-bridge
${pkgs.protonmail-bridge}/bin/protonmail-bridge -c
${config.wayland.windowManager.hyprland.finalPackage}/bin/hyprctl dispatch exec "${pkgs.protonmail-bridge}/bin/protonmail-bridge -n"
'')
];
stylix.targets.hyprlock.enable = false; # TODO maybe re-enable once I've checked what it does
services = {
kanshi.systemdTarget = "hyprland-session.target";
gpg-agent.pinentryPackage = pkgs.pinentry-gnome3;
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
scheme = config.lib.stylix.scheme;
accent = scheme.base0E;
in
{
enable = true;
settings = {
general = {
disable_loading_bar = false;
hide_cursor = true;
grace = 3;
ignore_empty_input = true;
};
background = [
{
monitor = "";
path = "screenshot";
blur_passes = 3;
blur_size = 8;
}
];
shape = [
{
monitor = "";
size = "395, 185";
color = "0xff${scheme.base00}";
rounding = 10;
border_size = 2;
border_color = "0xff${accent}";
position = "-10, -10";
halign = "right";
valign = "top";
}
];
label =
let
font = config.stylix.fonts.monospace.name;
in
[
{
monitor = "";
text = "cmd[update:30000] echo \"$(date +\"%R\")\"";
color = "0xff${scheme.base05}";
font_size = 90;
font_family = font;
position = "-30, 0";
halign = "right";
valign = "top";
}
{
monitor = "";
text = "cmd[update:43200000] echo \"$(date +\"%F\")\"";
color = "0xff${scheme.base05}";
font_size = 25;
font_family = font;
position = "-40, -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;
package = osConfig.programs.hyprland.package;
xwayland.enable = true;
systemd.enable = true;
settings = {
monitor = [ ",preferred,auto,auto" ];
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"
"${pkgs.protonmail-bridge}/bin/protonmail-bridge -n"
"${pkgs.dex}/bin/dex -a"
];
gestures.workspace_swipe = true;
general = {
layout = "master";
gaps_in = 3;
gaps_out = 5;
"col.active_border" = lib.mkForce "rgb(${config.lib.stylix.scheme.base0E})";
};
master = {
allow_small_split = true;
special_scale_factor = 0.95;
mfact = 0.5;
new_on_top = false;
orientation = "left";
inherit_fullscreen = false;
smart_resizing = false;
drop_at_cursor = true;
};
input = {
kb_layout = osConfig.services.xserver.xkb.layout;
follow_mouse = 1;
touchpad.natural_scroll = "yes";
};
decoration = {
rounding = 10;
blur = {
enabled = true;
size = 5;
passes = 3;
new_optimizations = true;
brightness = 1.0;
noise = 2.0e-2;
};
shadow = {
enabled = true;
range = 4;
render_power = 3;
ignore_window = true;
color = lib.mkForce "rgba(${config.lib.stylix.scheme.base00}0d)";
};
};
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"
# PulseAudio, Network and Bluetooth control panels
"float, pavucontrol|nm-connection-editor|.blueman-manager-wrapped"
"size 800 600, pavucontrol|nm-connection-editor|.blueman-manager-wrapped"
"move onscreen 50 100%-615,pavucontrol|nm-connection-editor|.blueman-manager-wrapped"
# File browser and picker dialog
"float, org.gnome.Nautilus|xdg-desktop-portal-gtk"
"size 800 600, org.gnome.Nautilus|xdg-desktop-portal-gtk"
"center, org.gnome.Nautilus|xdg-desktop-portal-gtk"
# Matplotlib plots
"float, Matplotlib"
# Workspace rules
"workspace 2, (nyxt|firefox)" # Browser
"workspace 3, (signal|whatsapp-for-linux|WebCord|teams-for-linux|twinkle)" # Messaging
"workspace 4, (libreoffice|soffice)(.*)" # Documents
"workspace 5, (Nxplayer.bin)" # Remote Desktop
"workspace 6, (PrusaSlicer)" # 3D Printing
"workspace 7, (steam_app|steam|lutris|page.kramo.Cartridges|org.prismlauncher.PrismLauncher|explorer.exe|gw2-64.exe|rsi launcher.exe)" # 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
"workspace 7 silent, title:(notification)(.*),class:steam"
"float, title:Friends List,class:steam"
"size 400 600, title:Friends List,class:steam"
"center, title:Friends List,class:steam"
"float, title:Steam Settings,class:steam"
"size 800 600, title:Steam Settings,class:steam"
"center, title:Steam Settings,class:steam"
"float, title:(.*)(Controller Layout),class:steam"
"size 1200 800, title:(.*)(Controller Layout),class:steam"
"center, title:(.*)(Controller Layout),class:steam"
# NoMachine
"suppressevent fullscreen maximize, class:Nxplayer.bin"
];
bind =
let
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)
++ [
# 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, P, exec, ${config.programs.wlogout.package}/bin/wlogout"
"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, ${pkgs.nyxt}/bin/nyxt --no-socket"
"SUPER, F, exec, ${pkgs.nautilus}/bin/nautilus"
# 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"
];
};
};
}

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 = 10;
borderSize = 2;
borderColor = lib.mkForce config.lib.stylix.scheme.withHashtag.base0E;
defaultTimeout = (builtins.mul 5 1000); # 5s timeout
};
}

View file

@ -1,5 +0,0 @@
host = vpn.jetdata.eu
port = 943
username = elitherl
set-dns = 0
set-routes = 0

View file

@ -1,5 +0,0 @@
host = vpn.ukaea.uk
port = 943
username = elitherl
set-dns = 1
set-routes = 1

View file

@ -1,11 +0,0 @@
{ pkgs, ... }:
{
home.packages = [
(pkgs.writeShellScriptBin "ukaea-vpn-connect" ''
sudo ${pkgs.openfortivpn}/bin/openfortivpn --config=${./ukaea-vpn.conf}
'')
(pkgs.writeShellScriptBin "jetdata-vpn-connect" ''
sudo ${pkgs.openfortivpn}/bin/openfortivpn --config=${./jetdata-vpn.conf}
'')
];
}

View file

@ -1,18 +0,0 @@
{ config, pkgs, ... }:
{
imports = [
../gpg/default.nix
../shell/git.nix
];
programs = {
gpg.enable = true;
password-store = {
enable = true;
package = pkgs.pass-nodmenu.withExtensions (exts: with exts; [ pass-update ]);
settings = {
PASSWORD_STORE_DIR = "${config.home.homeDirectory}/.password-store";
PASSWORD_STORE_ENABLE_EXTENSIONS = "true";
};
};
};
}

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,43 +0,0 @@
{ pkgs, ... }:
{
home.packages =
let
pythonEnv = (
pkgs.python312.withPackages (
ps: with ps; [
flake8
isort
numpy
scipy
xarray
netcdf4
matplotlib
]
)
);
luaEnv = (pkgs.luajit.withPackages (ps: [ (ps.callPackage ./luarocks/scilua.nix { }) ]));
in
with pkgs;
[
## Language Environments
pythonEnv
luaEnv
## Linters
shellcheck
ruff
## Formatters
nixfmt-rfc-style
shfmt
stylua
nodePackages.prettier
## Language servers
nixd
pyright
lua-language-server
rust-analyzer
];
xdg.configFile."ruff/pyproject.toml".source = ./ruff.toml;
}

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,32 +0,0 @@
{
pkgs ? import <nixpkgs> { },
python3 ? pkgs.python3,
extraPackages ? with pkgs; [ uv ],
}:
let
inherit (pkgs) lib;
ldlibs = lib.makeLibraryPath (
with pkgs;
[
stdenv.cc.cc
glibc
zlib
zstd
]
);
pythonWrapped = pkgs.symlinkJoin {
name = "python";
paths = [ python3 ];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
for file in $out/bin/*; do wrapProgram "$file" --prefix LD_LIBRARY_PATH : "${ldlibs}"; done
'';
};
in
pkgs.mkShellNoCC {
packages = [ pythonWrapped ] ++ extraPackages;
shellHook = ''
[ ! -d .venv ] && ${pythonWrapped}/bin/python3 -m venv .venv
[ -f .venv/bin/activate ] && source .venv/bin/activate
'';
}

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,13 +0,0 @@
{ pkgs, ... }:
{
home.packages = [
(pkgs.writeShellScriptBin "sync-git" (builtins.readFile ./shell/sync-git.sh))
(pkgs.writeShellScriptBin "ensure-pass" (builtins.readFile ./shell/ensure-pass.sh))
(pkgs.writeShellScriptBin "clean-config" (builtins.readFile ./shell/clean-config.sh))
(pkgs.writeShellScriptBin "rsync-local-config" (builtins.readFile ./shell/rsync-local-config.sh))
(pkgs.writeShellScriptBin "xdg-query-program" (builtins.readFile ./shell/xdg-query-program.sh))
(pkgs.writeShellScriptBin "animate-wallpaper" (builtins.readFile ./shell/animate-wallpaper.sh))
(pkgs.writeShellScriptBin "mount-protondrive" (builtins.readFile ./shell/mount-protondrive.sh))
(pkgs.writeShellScriptBin "mount-onedrive" (builtins.readFile ./shell/mount-onedrive.sh))
];
}

View file

@ -1,10 +0,0 @@
WALLPAPER_FILE="$HOME/.wallpaper.gif"
if [ ! -f "$WALLPAPER_FILE" ]; then
exit 1
fi
systemctl --user start swww-daemon.service &&
sleep 5 &&
swww img "$WALLPAPER_FILE" &&
systemctl --user stop hyprpaper.service

View file

@ -1,2 +0,0 @@
shopt -s extglob
rm -rf ~/.config/!(dconf|protonmail|Signal|whatsapp-for-linux)

View file

@ -1,31 +0,0 @@
# Email
EMAILS=(
"e.litherlandsmith@proton.me"
"e.litherlandsmith@icloud.com"
"evie.litherland-smith@ukaea.uk"
)
for EMAIL in "${EMAILS[@]}"; do
LABEL="$EMAIL"
secret-tool lookup email "$EMAIL" >/dev/null || (
echo "Insert pass for $LABEL"
secret-tool store --label="$LABEL" email "$EMAIL"
)
done
# Calendar
URL="dav.xenia.me.uk"
USER="pixelifytica"
LABEL="$USER@$URL"
secret-tool lookup url "$URL" user "$USER" >/dev/null || (
echo "Insert pass for $LABEL"
secret-tool store --label="$LABEL" url "$URL" user "$USER"
)
# GitHub API token
HOST="api.github.com"
USER="pixelifytica^forge"
LABEL="$USER@$HOST"
secret-tool lookup host "$HOST" user "$USER" >/dev/null || (
echo "Insert pass for $LABEL"
secret-tool store --label="$LABEL" host "$HOST" user "$USER"
)

View file

@ -1,3 +0,0 @@
ONEDRIVE="$HOME/OneDrive"
[ -d "$ONEDRIVE" ] || mkdir -p "$ONEDRIVE"
[ -z "$(ls -A "$ONEDRIVE")" ] && rclone --vfs-cache-mode writes mount --daemon OneDrive: "$ONEDRIVE"

View file

@ -1,3 +0,0 @@
PROTONDRIVE="$HOME/ProtonDrive"
[ -d "$PROTONDRIVE" ] || mkdir -p "$PROTONDRIVE"
[ -z "$(ls -A "$PROTONDRIVE")" ] && rclone --vfs-cache-mode writes mount --daemon ProtonDrive: "$PROTONDRIVE"

View file

@ -1,23 +0,0 @@
HOSTS=("$@")
# Config files
for TARGET in ".inputrc" ".config/starship.toml"; do
SOURCE="$HOME/$TARGET"
echo "--- $SOURCE ---"
TMP_TARGET=/tmp/rsync-local-config
TMP_SOURCE=$TMP_TARGET
NIX_SED="sed -i 's|/nix/.*/bin/||g'"
NIX_REPLACE="$NIX_SED $TMP_TARGET"
if [[ -e $SOURCE ]]; then
if [[ -d $SOURCE ]]; then
SOURCE=$SOURCE/
TMP_SOURCE=$TMP_SOURCE/
NIX_REPLACE="fd -g '**' $TMP_TARGET -tfile -x $NIX_SED {};"
fi
rsync -avzL --exclude=".git*" --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r "$SOURCE" $TMP_TARGET
sh -c "$NIX_REPLACE"
for HOST in "${HOSTS[@]}"; do
rsync -avzL --delete --exclude=".git*" $TMP_SOURCE "$HOST:$TARGET"
done
rm -rf $TMP_SOURCE
fi
done

View file

@ -1,45 +0,0 @@
# Clone ~/.config/emacs/ if it doesn't exist, pull otherwise
EMACS_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/emacs"
EMACS_URL="https://git.xenia.me.uk/pixelifytica/emacs.git"
if [ -d "$EMACS_DIR" ]; then
git -C "$EMACS_DIR" remote set-url origin "$EMACS_URL"
git -C "$EMACS_DIR" pull --ff --ff-only
else
git clone "$EMACS_URL" "$EMACS_DIR"
fi
# Cleanup legacy Emacs config file/directory
[ -f "$HOME/.emacs" ] && rm "$HOME/.emacs"
[ -d "$HOME/.emacs.d" ] && rm -r "$HOME/.emacs.d"
# Sync common directories, setting url to ensure it's up-to-date first
SYNC_DIRS=(
"$HOME/Documents/org/"
"$HOME/Documents/library/"
"$HOME/Documents/notebooks/"
)
SYNC_URLS=(
"https://git.xenia.me.uk/pixelifytica/org.git"
"https://git.xenia.me.uk/pixelifytica/library.git"
"git@git.ccfe.ac.uk:elitherl/notebooks.git"
)
for i in "${!SYNC_DIRS[@]}"; do
DIRECTORY="${SYNC_DIRS[$i]}"
URL="${SYNC_URLS[$i]}"
echo "--- sync: $DIRECTORY ---"
if [ ! -d "$DIRECTORY" ]; then
git clone "$URL" "$DIRECTORY"
fi
(
cd "$DIRECTORY" || exit
git remote set-url origin "$URL"
if [ "$(git branch --show-current)" = "main" ]; then
git branch --set-upstream-to=origin/main main
fi
git pull --ff --ff-only
git submodule update --remote --recursive
git-sync -ns
git status --porcelain
)
done

View file

@ -1,3 +0,0 @@
FILETYPE=$(xdg-mime query filetype "$@")
DEFAULT=$(xdg-mime query default "$FILETYPE")
echo "$FILETYPE -> $DEFAULT"

View file

@ -1,132 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./git.nix
./ssh.nix
./starship.nix
./extras.nix
];
home.shellAliases = {
sync-all = "sync-git; vdirsyncer sync; mbsync -a";
sync-and-shutdown = "sync-all && shutdown now";
protonup = "sudo wg-quick up protonvpn && sudo wg";
protondown = "sudo wg-quick down protonvpn";
};
programs = {
# Shells
bash.enable = true;
nushell.enable = true;
zsh = {
enable = true;
enableCompletion = true;
autocd = true;
autosuggestion.enable = true;
defaultKeymap = "emacs";
syntaxHighlighting = {
enable = true;
highlighters = [
"brackets"
"cursor"
];
};
historySubstringSearch.enable = true;
history = {
extended = true;
share = true;
ignoreDups = true;
ignoreAllDups = true;
ignoreSpace = true;
expireDuplicatesFirst = true;
};
initExtra = ''
## completion config and styling
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}'
zstyle ':completion:*' menu 'select=long-list'
## transient prompt
source ${./transient.zsh}
'';
};
# CLI programs and utilities
btop.enable = true;
carapace.enable = true;
fd.enable = true;
jq.enable = true;
ripgrep.enable = true;
bat = {
enable = true;
config.style = "plain,numbers,changes";
};
cava = {
enable = true;
settings = {
color = with config.lib.stylix.colors.withHashtag; {
gradient = 1;
gradient_count = 6;
gradient_color_1 = "'${red}'";
gradient_color_2 = "'${yellow}'";
gradient_color_3 = "'${green}'";
gradient_color_4 = "'${cyan}'";
gradient_color_5 = "'${blue}'";
gradient_color_6 = "'${magenta}'";
};
};
};
direnv = {
enable = true;
nix-direnv.enable = true;
};
eza = {
enable = true;
git = true;
icons = "auto";
extraOptions = [
"--header"
"--time-style=iso"
];
};
fzf = {
enable = true;
defaultCommand = "${pkgs.fd}/bin/fd --type f";
changeDirWidgetCommand = "${pkgs.fd}/bin/fd --type d";
fileWidgetCommand = "${pkgs.fd}/bin/fd --type f";
colors = {
bg = lib.mkForce "-1";
"bg+" = lib.mkForce "-1";
};
};
hyfetch = {
enable = true;
settings = rec {
preset = if light_dark == "dark" then "transgender" else "rainbow";
mode = "rgb";
light_dark = config.lib.stylix.scheme.variant;
lightness = 0.4;
color_align = {
mode = "horizontal";
};
};
};
readline = {
enable = true;
variables = {
bell-style = "visible";
blink-matching-paren = "On";
colored-completion-prefix = "On";
colored-stats = "On";
completion-ignore-case = "On";
completion-map-case = "On";
editing-mode = "emacs";
expand-tilde = "On";
mark-directories = "On";
mark-symlinked-directories = "On";
visible-stats = "On";
};
};
};
}

View file

@ -1,8 +0,0 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
asciiquarium-transparent
pipes
cbonsai
];
}

View file

@ -1,47 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
home.packages = [ pkgs.git-sync ];
programs.git =
let
package = pkgs.git.override {
withLibsecret = true;
withSsh = true;
};
in
{
inherit package;
enable = true;
userName = "Evie Litherland-Smith";
userEmail = lib.mkDefault "evie@xenia.me.uk";
delta = {
enable = true;
options = {
line-numbers = true;
hyprlinks = true;
navigate = true;
side-by-side = true;
syntax-theme = lib.mkIf config.programs.bat.enable config.programs.bat.config.theme;
};
};
attributes = [
"*.gpg filter=gpg diff=gpg"
"*.asc filter=gpg diff=gpg"
];
extraConfig = {
github.user = "pixelifytica";
pull.rebase = false;
init.defaultBranch = "main";
merge.conflictstyle = "diff3";
credential.helper = "${package}/bin/git-credential-libsecret";
diff = {
colorMoved = "default";
gpg.textconv = "gpg --no-tty --decrypt";
};
};
};
}

View file

@ -1,46 +0,0 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
rclone
sshfs
(writeShellScriptBin "ssh-keygen-defaults" ''ssh-keygen -t ed25519 -C "$(whoami)@$(hostname)"'')
];
programs.ssh = {
enable = true;
addKeysToAgent = "yes";
forwardAgent = true;
compression = true;
serverAliveInterval = 15;
serverAliveCountMax = 5;
controlMaster = "auto";
controlPersist = "10s";
extraConfig = ''
SetEnv TERM=xterm-256color
'';
matchBlocks = {
"git*".user = "git";
"legion" = {
user = "pixelifytica";
hostname = "192.168.0.31";
};
"vanguard" = {
user = "pixelifytica";
hostname = "192.168.0.90";
};
"ionos" = {
user = "root";
hostname = "77.68.67.133";
};
"freia" = {
user = "elitherl";
hostname = "freia027.hpc.l";
compression = true;
};
"heimdall" = {
user = "elitherl";
hostname = "heimdall003.jet.uk";
compression = true;
};
};
};
}

View file

@ -1,170 +0,0 @@
{ ... }:
{
programs.starship = {
enable = true;
enableTransience = true;
settings = {
add_newline = false;
aws.symbol = "󰸏 ";
buf.symbol = " ";
c.symbol = " ";
character = {
success_symbol = "[>](bold green)";
error_symbol = "[>](bold red)";
};
command_timeout = 2000;
conda.symbol = " ";
container.symbol = " ";
crystal.symbol = " ";
dart.symbol = " ";
directory = {
read_only = " 󰌾";
truncation_length = 2;
fish_style_pwd_dir_length = 1;
truncate_to_repo = false;
};
direnv.disabled = false;
docker_context.symbol = " ";
elixir.symbol = " ";
elm.symbol = " ";
fennel.symbol = " ";
fossil_branch.symbol = " ";
git_branch = {
symbol = " ";
only_attached = true;
ignore_branches = [
"master"
"main"
];
};
git_commit = {
format = "[ $hash | $tag]($style) ";
tag_symbol = " ";
tag_disabled = false;
};
git_metrics.disabled = false;
git_status = {
stashed = " ";
ahead = " ";
behind = " ";
up_to_date = "";
diverged = " ";
conflicted = " ";
deleted = " ";
renamed = " ";
modified = " ";
staged = " ";
untracked = " ";
typechanged = " ";
};
golang.symbol = " ";
guix_shell.symbol = " ";
haskell.symbol = " ";
haxe.symbol = " ";
hg_branch.symbol = " ";
hostname = {
ssh_only = false;
ssh_symbol = "󰢹 ";
};
java.symbol = " ";
jobs.symbol = "󰈏 ";
julia.symbol = " ";
kotlin.symbol = " ";
line_break.disabled = false;
localip.disabled = false;
lua.symbol = " ";
memory_usage = {
disabled = false;
symbol = "󰍛 ";
};
meson.symbol = "󰔷 ";
nim.symbol = "󰆥 ";
nix_shell.symbol = " ";
nodejs.symbol = " ";
ocaml.symbol = " ";
os = {
disabled = false;
format = "on [$symbol]($style) ";
symbols = {
Alpaquita = " ";
Alpine = " ";
Amazon = " ";
Android = " ";
Arch = " ";
Artix = " ";
CentOS = " ";
Debian = " ";
DragonFly = " ";
Emscripten = " ";
EndeavourOS = " ";
Fedora = " ";
FreeBSD = " ";
Garuda = "󰛓 ";
Gentoo = " ";
HardenedBSD = "󰞌 ";
Illumos = "󰈸 ";
Linux = " ";
Mabox = " ";
Macos = " ";
Manjaro = " ";
Mariner = " ";
MidnightBSD = " ";
Mint = " ";
NetBSD = " ";
NixOS = " ";
OpenBSD = "󰈺 ";
openSUSE = " ";
OracleLinux = "󰌷 ";
Pop = " ";
Raspbian = " ";
Redhat = " ";
RedHatEnterprise = " ";
Redox = "󰀘 ";
Solus = "󰠳 ";
SUSE = " ";
Ubuntu = " ";
Unknown = " ";
Windows = "󰍲 ";
};
};
package.symbol = "󰏗 ";
perl.symbol = " ";
php.symbol = " ";
pijul_channel.symbol = " ";
python = {
python_binary = "python3";
symbol = " ";
};
rlang.symbol = "󰟔 ";
ruby.symbol = " ";
rust.symbol = " ";
scala.symbol = " ";
shell = {
disabled = false;
format = "using [$indicator]($style) ";
nu_indicator = "ν";
bash_indicator = "";
powershell_indicator = "";
cmd_indicator = "";
unknown_indicator = "";
};
status = {
disabled = false;
map_symbol = true;
pipestatus = true;
symbol = " ";
success_symbol = "";
not_executable_symbol = " ";
not_found_symbol = " ";
sigint_symbol = " ";
signal_symbol = " ";
};
sudo = {
disabled = false;
symbol = "󱑷 ";
};
swift.symbol = " ";
zig.symbol = " ";
};
};
}

View file

@ -1,31 +0,0 @@
#!/usr/bin/env zsh
zle-line-init() {
emulate -L zsh
[[ $CONTEXT == start ]] || return 0
while true; do
zle .recursive-edit
local -i ret=$?
[[ $ret == 0 && $KEYS == $'\4' ]] || break
[[ -o ignore_eof ]] || exit 0
done
local saved_prompt=$PROMPT
local saved_rprompt=$RPROMPT
PROMPT='󰁔 '
RPROMPT=''
zle .reset-prompt
PROMPT=$saved_prompt
RPROMPT=$saved_rprompt
if ((ret)); then
zle .send-break
else
zle .accept-line
fi
return ret
}
zle -N zle-line-init

View file

@ -1,12 +0,0 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [ swww ];
systemd.user.services.swww-daemon = {
Unit = {
Description = "SWWW Daemon";
Wants = [ "graphical-session.target" ];
After = [ "graphical-session.target" ];
};
Service.ExecStart = "${pkgs.swww}/bin/swww-daemon";
};
}

View file

@ -1,45 +0,0 @@
{ pkgs, ... }:
let
swwwMorning = "${pkgs.swww}/bin/swww img ${../wallpapers/tropic_island_morning.jpg}";
swwwDay = "${pkgs.swww}/bin/swww img ${../wallpapers/tropic_island_day.jpg}";
swwwEvening = "${pkgs.swww}/bin/swww img ${../wallpapers/tropic_island_evening.jpg}";
swwwNight = "${pkgs.swww}/bin/swww img ${../wallpapers/tropic_island_night.jpg}";
dynamicWallpaper = pkgs.writeShellScriptBin "dynamic-wallpaper" ''
swww query || exit 1 # Check SWWW daemon is actually running
case $(date +%H) in
06 | 07 | 08) # Morning
${swwwMorning}
;;
09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17) # Day
${swwwDay}
;;
18 | 19 | 20) # Evening
${swwwEvening}
;;
21 | 22 | 23 | 00 | 01 | 02 | 03 | 04 | 05) # Night
${swwwNight}
;;
esac
'';
in
{
imports = [ ./default.nix ];
systemd.user = {
services.dynamic-wallpaper = {
Unit = {
Description = "Change wallpaper based on time of day";
Wants = [ "swww-daemon.service" ];
After = [ "swww-daemon.service" ];
};
Service = {
Type = "oneshot";
ExecStart = "${dynamicWallpaper}/bin/dynamic-wallpaper";
};
};
timers.dynamic-wallpaper.Timer = {
OnCalendar = "*:0";
Unit = "dynamic-wallpaper.service";
};
};
}

View file

@ -1,18 +0,0 @@
{ ... }:
{
programs.alacritty = {
enable = true;
settings = {
window = {
dynamic_title = true;
padding = {
x = 5;
y = 5;
};
};
general.live_config_reload = true;
selection.save_to_clipboard = true;
mouse.hide_when_typing = true;
};
};
}

View file

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

View file

@ -1,9 +0,0 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
(texlive.combine {
inherit (texlive) scheme-full;
latex-beamer-ukaea.pkgs = [ (callPackage ./latex-beamer-ukaea/default.nix { }) ];
})
];
}

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}

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