Compare commits

..

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

127 changed files with 2048 additions and 1675 deletions

5
.pre-commit-config.yaml Normal file
View file

@ -0,0 +1,5 @@
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.18.4
hooks:
- id: gitleaks

View file

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

View file

@ -1,18 +1,11 @@
.PHONY: default build server flathub
.PHONY: default build flathub
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
nix build --keep-going .#nixosConfigurations.$(HOST).config.system.build.toplevel
flathub:
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

View file

@ -5,11 +5,11 @@
"fromYaml": "fromYaml"
},
"locked": {
"lastModified": 1732200724,
"narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=",
"lastModified": 1708890466,
"narHash": "sha256-LlrC09LoPi8OPYOGPXegD72v+//VapgAqhbOFS3i8sc=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "153d52373b0fb2d343592871009a286ec8837aec",
"rev": "665b3c6748534eb766c777298721cece9453fdae",
"type": "github"
},
"original": {
@ -34,14 +34,30 @@
"type": "github"
}
},
"base16-foot": {
"flake": false,
"locked": {
"lastModified": 1696725948,
"narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=",
"owner": "tinted-theming",
"repo": "base16-foot",
"rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-foot",
"type": "github"
}
},
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1725860795,
"narHash": "sha256-Z2o8VBPW3I+KKTSfe25kskz0EUj7MpUh8u355Z1nVsU=",
"lastModified": 1696727917,
"narHash": "sha256-FVrbPk+NtMra0jtlC5oxyNchbm8FosmvXIatkRbYy1g=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "7f795bf75d38e0eea9fed287264067ca187b88a9",
"rev": "dbe1480d99fe80f08df7970e471fac24c05f2ddb",
"type": "github"
},
"original": {
@ -50,18 +66,50 @@
"type": "github"
}
},
"base16-vim": {
"base16-kitty": {
"flake": false,
"locked": {
"lastModified": 1731949548,
"narHash": "sha256-XIDexXM66sSh5j/x70e054BnUsviibUShW7XhbDGhYo=",
"lastModified": 1665001328,
"narHash": "sha256-aRaizTYPpuWEcvoYE9U+YRX+Wsc8+iG0guQJbvxEdJY=",
"owner": "kdrag0n",
"repo": "base16-kitty",
"rev": "06bb401fa9a0ffb84365905ffbb959ae5bf40805",
"type": "github"
},
"original": {
"owner": "kdrag0n",
"repo": "base16-kitty",
"type": "github"
}
},
"base16-tmux": {
"flake": false,
"locked": {
"lastModified": 1696725902,
"narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=",
"owner": "tinted-theming",
"repo": "base16-vim",
"rev": "61165b1632409bd55e530f3dbdd4477f011cadc6",
"repo": "base16-tmux",
"rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-tmux",
"type": "github"
}
},
"base16-vim": {
"flake": false,
"locked": {
"lastModified": 1663659192,
"narHash": "sha256-uJvaYYDMXvoo0fhBZUhN8WBXeJ87SRgof6GEK2efFT0=",
"owner": "chriskempson",
"repo": "base16-vim",
"rev": "3be3cd82cd31acfcab9a41bad853d9c68d30478d",
"type": "github"
},
"original": {
"owner": "chriskempson",
"repo": "base16-vim",
"type": "github"
}
@ -69,11 +117,11 @@
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
@ -82,35 +130,14 @@
"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=",
"lastModified": 1689549921,
"narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=",
"owner": "SenchoPens",
"repo": "fromYaml",
"rev": "106af9e2f715e2d828df706c386a685698f3223b",
"rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84",
"type": "github"
},
"original": {
@ -119,72 +146,19 @@
"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=",
"lastModified": 1713702291,
"narHash": "sha256-zYP1ehjtcV8fo+c+JFfkAqktZ384Y+y779fzmR9lQAU=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "dadd58f630eeea41d645ee225a63f719390829dc",
"rev": "0d0aadf013f78a7f7f1dc984d0d812971864b934",
"type": "github"
},
"original": {
"owner": "GNOME",
"ref": "47.2",
"ref": "46.1",
"repo": "gnome-shell",
"type": "github"
}
@ -196,48 +170,66 @@
]
},
"locked": {
"lastModified": 1735344290,
"narHash": "sha256-oJDtWPH1oJT34RJK1FSWjwX4qcGOBRkcNQPD0EbSfNM=",
"lastModified": 1726989464,
"narHash": "sha256-Vl+WVTJwutXkimwGprnEtXc/s/s8sMuXzqXaspIGlwM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "613691f285dad87694c2ba1c9e6298d04736292d",
"rev": "2f23fa308a7c067e52dfcc30a0758f47043ec176",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-24.11",
"ref": "release-24.05",
"repo": "home-manager",
"type": "github"
}
},
"iosevka-custom": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1730274547,
"narHash": "sha256-34sNwbLNuE6l7jsBkBRUMRahoZc63lCsCa+PoZd/8W8=",
"ref": "refs/heads/main",
"rev": "49828459e58b6987d2738b74c085cecb963355ab",
"revCount": 19,
"type": "git",
"url": "https://git.xenia.me.uk/pixelifytica/iosevka.git"
},
"original": {
"type": "git",
"url": "https://git.xenia.me.uk/pixelifytica/iosevka.git"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1736061677,
"narHash": "sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60=",
"lastModified": 1728888510,
"narHash": "sha256-nsNdSldaAyu6PE3YUA+YQLqUDJh+gRbBooMMekZJwvI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "cbd8ec4de4469333c82ff40d057350c30e9f7d36",
"rev": "a3c0b3b21515f74fd2665903d4ce6bc4dc81c77c",
"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": 1731386116,
"narHash": "sha256-lKA770aUmjPHdTaJWnP3yQ9OI1TigenUqVC3wweqZuI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "0e82ab234249d8eee3e8c91437802b32c74bb3fd",
"rev": "689fed12a013f56d4c4d3f612489634267d86529",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"ref": "nixos-24.05",
"repo": "nixpkgs",
"type": "github"
}
@ -245,129 +237,43 @@
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs",
"stylix": "stylix",
"treefmt-nix": "treefmt-nix"
"iosevka-custom": "iosevka-custom",
"nixpkgs": "nixpkgs_2",
"stylix": "stylix"
}
},
"stylix": {
"inputs": {
"base16": "base16",
"base16-fish": "base16-fish",
"base16-foot": "base16-foot",
"base16-helix": "base16-helix",
"base16-kitty": "base16-kitty",
"base16-tmux": "base16-tmux",
"base16-vim": "base16-vim",
"flake-compat": "flake-compat",
"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=",
"lastModified": 1718122552,
"narHash": "sha256-A+dBkSwp8ssHKV/WyXb9uqIYrHBqHvtSedU24Lq9lqw=",
"owner": "danth",
"repo": "stylix",
"rev": "5204b085385c0bfaa1eb1bb0f8dc81922012128d",
"rev": "e59d2c1725b237c362e4a62f5722f5b268d566c7",
"type": "github"
},
"original": {
"owner": "danth",
"ref": "release-24.11",
"ref": "release-24.05",
"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": {
"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"
}
}
},
"root": "root",

View file

@ -7,14 +7,14 @@
};
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
treefmt-nix.url = "github:numtide/treefmt-nix";
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
iosevka-custom.url = "git+https://git.xenia.me.uk/pixelifytica/iosevka.git";
home-manager = {
url = "github:nix-community/home-manager/release-24.11";
url = "github:nix-community/home-manager/release-24.05";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:danth/stylix/release-24.11";
url = "github:danth/stylix/release-24.05";
inputs = {
nixpkgs.follows = "nixpkgs";
home-manager.follows = "home-manager";
@ -23,31 +23,8 @@
};
outputs =
inputs@{
self,
nixpkgs,
treefmt-nix,
...
}:
let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
treefmt = treefmt-nix.lib.evalModule pkgs ./treefmt.nix;
in
inputs@{ nixpkgs, ... }:
{
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
;
};
formatter.x86_64-linux = treefmt.config.build.wrapper;
checks.x86_64-linux.formatting = treefmt.config.build.check self;
nixosConfigurations = {
## Server
Legion = nixpkgs.lib.nixosSystem {
@ -76,11 +53,19 @@
modules = [ ./system/default.nix ];
};
## Work
Monarch = nixpkgs.lib.nixosSystem {
Tone = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
username = "elitherl";
hostName = "Monarch";
hostName = "Tone";
};
modules = [ ./system/default.nix ];
};
Ronin = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
username = "elitherl";
hostName = "Ronin";
};
modules = [ ./system/default.nix ];
};

View file

@ -1,30 +1,25 @@
{ lib, username, ... }:
{ username, ... }:
{
imports = [
./services/adguardhome.nix
./services/caddy.nix
./services/forgejo.nix
./services/grafana.nix
./services/home-assistant.nix
./services/minecraft.nix
./services/nix-serve.nix
./services/satisfactory/default.nix
./services/sshd.nix
./services/syncthing.nix
./services/webdav.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

@ -5,6 +5,5 @@
home.stateVersion = "23.05";
wayland.windowManager.hyprland.settings.monitor = [ "eDP-1,preferred,auto,1.25" ];
};
networking.wg-quick.interfaces.wg0.configFile = "/etc/wireguard/gb-mnc-wg-001.conf";
system.stateVersion = "23.05";
}

35
system/Tone.nix Normal file
View file

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

View file

@ -10,7 +10,6 @@
./steam.nix
];
home-manager.users.${username} = {
imports = [ ./home/swww/default.nix ];
home = {
stateVersion = "23.05";
packages = with pkgs; [
@ -25,53 +24,23 @@
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
];
};
programs.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 = [
"2, monitor:desc:${secondary}"
"3, monitor:desc:${secondary}"
"5, monitor:desc:${primary}"
"7, monitor:desc:${primary}"
];
};
wayland.windowManager.hyprland.settings.monitor = [
"desc:Acer Technologies ED270R TJMEE0043W01,1920x1080@144,0x140,1.0,vrr,2"
"desc:Microstep MSI G27CQ4 E2,2560x1440@144,1920x0,1.25,vrr,2"
];
};
boot = {
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
@ -82,12 +51,11 @@
initrd.enable = true;
opencl.enable = true;
};
graphics = {
opengl = {
enable = true;
enable32Bit = true;
driSupport = true;
driSupport32Bit = true;
};
};
services.hardware.openrgb.enable = true;
networking.wg-quick.interfaces.wg0.configFile = "/etc/wireguard/gb-mnc-wg-001.conf";
system.stateVersion = "23.05";
}

View file

@ -18,20 +18,37 @@
enable = true;
package = pkgs.nixVersions.latest;
settings = {
trusted-users = [ username ];
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";
options = "--delete-older-than 7d";
};
optimise.automatic = true;
registry.my-nixos = {
from = {
type = "indirect";
id = "my-nixos";
};
to = {
type = "git";
url = "https://git.xenia.me.uk/pixelifytica/nixos.git?ref=main";
};
};
extraOptions = ''
keep-outputs = false
keep-derivations = false
@ -50,11 +67,13 @@
"nomachine-client"
];
system.autoUpgrade = {
enable = false; # TEMP disable until server is back up
enable = true;
persistent = true;
allowReboot = false;
flake = "git+${config.nix.registry.my-nixos.to.url}";
dates = "02:00";
randomizedDelaySec = "5min";
fixedRandomDelay = true;
flags = [
"--option"
"extra-binary-caches"
@ -74,6 +93,7 @@
};
networking = {
inherit hostName;
networkmanager.enable = true;
firewall.enable = true;
nameservers = [ "9.9.9.9" ];
};
@ -93,7 +113,6 @@
isNormalUser = true;
group = "users";
description = "Evie Litherland-Smith";
shell = pkgs.zsh;
extraGroups = [
"networkmanager"
"wheel"
@ -101,8 +120,6 @@
"input"
"uinput"
"dialout"
"podman"
"gamemode"
];
initialHashedPassword = "$y$j9T$tHIPQt09Kf3KH2eIRze3g/$2mwSlcq27DTGvHNPJ5EP9/1CfL3bXP0F6oS/Vuffmn3";
openssh = {
@ -118,7 +135,8 @@
imports = [
./home/shell/default.nix
./home/scripts/default.nix
./home/gpg/default.nix
./home/password-store/default.nix
./home/emacs/default.nix
];
home = {
inherit username;
@ -149,15 +167,12 @@
wget
dig
wireguard-tools
librespeed-cli
dust
quickemu
distrobox
];
localBinInPath = true;
};
programs = {
zsh.enable = true;
command-not-found.enable = false;
ssh.startAgent = true;
nano = {
@ -179,14 +194,7 @@
};
};
security.rtkit.enable = true;
virtualisation = {
containers.enable = true;
podman = {
enable = true;
dockerCompat = true;
defaultNetwork.settings.dns_enabled = true;
};
};
virtualisation.podman.enable = true;
location = {
latitude = 51.7;
longitude = -1.2;
@ -197,47 +205,38 @@
console.useXkbConfig = true;
stylix = {
enable = true;
image = ./wallpapers/default.png;
base16Scheme = lib.mkDefault "${pkgs.base16-schemes}/share/themes/one-light.yaml";
polarity = config.lib.stylix.scheme.variant;
opacity = {
applications = 1.0;
terminal = 0.8125; # 0x0.D
desktop = 0.75; # 0x0.C
popups = 0.6875; # 0x0.B
};
image = ./wallpapers/tropic_island_day.jpg;
base16Scheme = ./one-light.yaml; # Base24 scheme
polarity = "light";
opacity.popups = 0.8;
cursor = {
package = pkgs.volantes-cursors;
name = "volantes_cursors";
size = 32;
};
fonts =
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 = {
serif = {
package = inputs.iosevka-custom.outputs.packages.${pkgs.system}.iosevka-custom-etoile;
name = inputs.iosevka-custom.outputs.names.iosevka-custom-etoile;
};
sansSerif = {
package = inputs.iosevka-custom.outputs.packages.${pkgs.system}.iosevka-custom-aile;
name = inputs.iosevka-custom.outputs.names.iosevka-custom-aile;
};
monospace = {
package = pkgs.nerdfonts.override { fonts = [ "Iosevka" ]; };
name = "Iosevka Nerd Font";
};
sizes = {
applications = 12;
desktop = 14;
popups = 16;
terminal = 12;
};
};
};
fonts.packages = with pkgs; [
dejavu_fonts # Compatibility
dejavu_fonts # General compatibility
liberation_ttf # Documents
lmodern # LaTeX
(nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; })

View file

@ -1,47 +1,36 @@
{
config,
pkgs,
username,
...
}:
{ 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 = {
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
libarchive
xdg-utils
imagemagick
ffmpeg
wl-clipboard
hunspell
hunspellDicts.en_GB-large
wl-clipboard
hyprpicker
grim
slurp
swappy
xfce.ristretto
g4music
picard
zotero
gnome.nautilus
libreoffice-fresh
evince
libreoffice
image-roll
clapper
g4music
ffmpeg
remmina
fractal
webcord
signal-desktop
zapzap
teams-for-linux
twinkle
nomachine-client
];
};
@ -58,39 +47,29 @@
};
programs = {
dconf.enable = true;
xfconf.enable = true;
noisetorch.enable = true;
seahorse.enable = true;
file-roller.enable = true;
thunar = {
enable = true;
plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
];
};
hyprland = {
enable = true;
xwayland.enable = true;
};
kdeconnect.enable = true;
hyprland.enable = true;
xwayland.enable = true;
};
gtk.iconCache.enable = true;
qt = {
enable = true;
style = "adwaita";
platformTheme = "gnome";
style = if config.lib.stylix.scheme.variant == "light" then "adwaita" else "adwaita-dark";
};
services = {
xserver.xkb.layout = "gb";
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;
package = pkgs.gnome3.gvfs;
};
kanata = {
enable = true;
@ -121,6 +100,10 @@
};
};
};
xserver = {
enable = true;
xkb.layout = "gb";
};
};
xdg.portal = {
enable = true;
@ -137,29 +120,26 @@
{
imports = [
./home/hyprland.nix
./home/terminal.nix
./home/browser/firefox.nix
./home/emacs/default.nix
./home/terminal/default.nix
./home/browser/default.nix
./home/email/default.nix
./home/calendar/default.nix
./home/password-store/default.nix
];
home.file.${config.gtk.gtk2.configLocation}.force = true;
programs.mpv.enable = true;
services = {
syncthing.enable = true;
gammastep = {
inherit (osConfig.location) latitude longitude provider;
enable = true;
tray = false;
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";
package = (pkgs.papirus-icon-theme.override { color = "magenta"; });
name = "Papirus-Light";
};
};
stylix.targets.gtk.extraCss = with config.lib.stylix.scheme.withHashtag; ''
@ -192,37 +172,17 @@
"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
'';
# Matplotlib default figure sizes and font settings
"matplotlib/matplotlibrc".text =
let
inherit (config.stylix) fonts;
in
''
font.family: sans-serif
font.serif: ${fonts.serif.name}, DejaVu Serif
font.sans-serif: ${fonts.sansSerif.name}, DejaVu Sans
font.monospace: ${fonts.monospace.name}, DejaVu Sans Mono
figure.figsize: 8, 6
figure.dpi: 150
figure.autolayout: True
savefig.dpi: 300
'';
# Autostart some programs
"autostart/signal-desktop.desktop".source =
"${pkgs.signal-desktop}/share/applications/signal-desktop.desktop";
"autostart/signal-desktop.desktop".source = "${pkgs.signal-desktop}/share/applications/signal-desktop.desktop";
"autostart/com.rtosta.zapzap.desktop".source = "${pkgs.zapzap}/share/applications/com.rtosta.zapzap.desktop";
"teams-for-linux/config.json".text = builtins.toJSON {
awayOnSystemIdle = true;
closeAppOnCross = false;
followSystemTheme = true;
notificationMethod = "electron";
optInTeamsV2 = true;
spellCheckerLanguages = [ "en_GB" ];
};
};
};
};

View file

@ -1,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

@ -26,8 +26,7 @@
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";

View file

@ -31,8 +31,7 @@
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";

View file

@ -0,0 +1,50 @@
# 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

@ -29,8 +29,7 @@
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";

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

@ -76,7 +76,7 @@
},
{
"name": "Awesome Wayland",
"url": "https://github.com/rcalixte/awesome-wayland",
"url": "https://github.com/natpen/awesome-wayland",
"tags": ["Software", "Repositories"]
},
{
@ -89,11 +89,6 @@
"url": "https://github.com/reHackable/awesome-reMarkable",
"tags": ["Software", "Repositories"]
},
{
"name": "We Are Wayland Now!",
"url": "https://wearewaylandnow.com/",
"tags": ["Software"]
},
{
"name": "NixOS Wiki",
"url": "https://nixos.wiki",
@ -201,7 +196,7 @@
},
{
"name": "Robin",
"url": "https://dashboard.robinpowered.com/UKAEA/",
"url": "https://dashboard.robinpowered.com/",
"tags": ["Work", "Room Booking"]
},
{
@ -209,11 +204,6 @@
"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/",
@ -299,11 +289,6 @@
"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",

View file

@ -2,9 +2,7 @@
((default-modes
(pushnew 'nyxt/mode/emacs:emacs-mode %slot-value%))
(default-modes
(pushnew 'nyxt/mode/blocker:blocker-mode %slot-value%))
(default-modes
(pushnew 'nyxt/mode/reduce-tracking:reduce-tracking-mode %slot-value%))))
(pushnew 'nyxt/mode/blocker:blocker-mode %slot-value%))))
(define-configuration status-buffer
((glyph-mode-presentation-p t)
@ -48,9 +46,8 @@
'("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/")
'("nixpkgs" "https://search.nixos.org/packages?type=packages&query=~a" "https://search.nixos.org/packages")
'("nixwiki" "https://nixos.wiki/index.php?search=~a&go=Go" "https://nixos.wiki/")
'("archwiki" "https://wiki.archlinux.org/index.php?search=~a" "https://wiki.archlinux.org/")
'("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/")
@ -61,7 +58,10 @@
(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*))))
(mapcar (lambda (engine) (apply 'make-search-engine engine))
*my-search-engines*))))
(define-configuration browser
((restore-session-on-startup-p t)))
((restore-session-on-startup-p nil)))
(setf (uiop/os:getenv "GTK_THEME") "Adwaita:light")

View file

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

View file

@ -1,9 +1,4 @@
{
config,
lib,
pkgs,
...
}:
{ config, pkgs, ... }:
{
stylix.targets.firefox.enable = false;
programs = {
@ -34,6 +29,7 @@
DisplayMenuBar = "default-off";
DontCheckDefaultBrowser = true;
EnableTrackingProtection = {
Value = true;
Locked = true;
Cryptomining = true;
Fingerprinting = true;
@ -118,7 +114,6 @@
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;
@ -138,8 +133,6 @@
"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;

View file

@ -5,46 +5,36 @@
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 nil
: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.base04}"
:secondary-color "${scheme.base03}"
:tertiary-color "${scheme.base02}"
:quaternary-color "${scheme.base02}"
:accent-color "${accent}"
:action-color "${scheme.cyan}"
:success-color "${scheme.green}"
:warning-color "${scheme.yellow}"
:highlight-color "${scheme.base04}"
:codeblock-color "${scheme.base01}"
:on-background-color "${scheme.base05}"
:on-primary-color "${scheme.base00}"
:on-secondary-color "${scheme.base01}"
:on-tertiary-color "${scheme.base04}"
:on-quaternary-color "${scheme.base04}"
:primary-color "${scheme.base02}"
:on-primary-color "${scheme.base05}"
:secondary-color "${scheme.base03}"
:on-secondary-color "${scheme.base05}"
:accent-color "${scheme.magenta}"
:on-accent-color "${scheme.base01}"
:action-color "${scheme.cyan}"
:on-action-color "${scheme.base01}"
:success-color "${scheme.green}"
:on-success-color "${scheme.base01}"
:on-warning-color "${scheme.base01}"
:highlight-color "${scheme.magenta}"
:on-highlight-color "${scheme.base01}"
:on-codeblock-color "${scheme.base05}"
))))
:warning-color "${scheme.yellow}"
:on-warning-color "${scheme.base01}"
:codeblock-color "${scheme.base02}"
:on-codeblock-color "${scheme.base05}"))))
'';
};
dataFile."nyxt/bookmarks.lisp".text =
@ -52,8 +42,8 @@
# 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
# Take bookmarks as returned from JSON file and convert to NYXT
# expected format
convertBookmark =
{
name,
@ -63,10 +53,10 @@
"(: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
# 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,35 +1,138 @@
{
pkgs,
...
}:
{ config, pkgs, ... }:
{
imports = [
../shell/default.nix
../shell/git.nix
../gpg/default.nix
../texlive/default.nix
../programming/default.nix
];
home.sessionVariables.EDITOR = "emacs";
programs.emacs = {
stylix.targets.emacs.enable = false;
services.emacs = {
enable = true;
package = pkgs.emacs30.override {
package = config.programs.emacs.finalPackage;
defaultEditor = true;
client.enable = true;
socketActivation.enable = true;
startWithUserSession = false;
};
programs.emacs = {
# Clone emacs config from https://git.xenia.me.uk/pixelifytica/emacs.git
enable = true;
package = pkgs.emacs29.override {
withImageMagick = true;
withPgtk = true;
};
extraPackages = epkgs: import ./packages.nix { inherit epkgs; };
extraConfig =
let
fixed-font-family = "${config.stylix.fonts.monospace.name}";
variable-font-family = "${config.stylix.fonts.sansSerif.name}";
font-height = builtins.toString (
builtins.floor (builtins.mul config.stylix.fonts.sizes.applications 10)
);
custom-theme-name = "nix";
custom-theme = pkgs.writeTextFile {
name = "custom-emacs-theme";
destination = "/${custom-theme-name}-theme.el";
text = ''
(deftheme ${custom-theme-name}
"Use Nix customised fonts for main faces")
(custom-theme-set-variables
'${custom-theme-name}
'(menu-bar-mode nil))
(custom-theme-set-faces
'${custom-theme-name}
'(default ((t (:family "${fixed-font-family}" :height ${font-height}))))
'(fixed-pitch ((t (:family "${fixed-font-family}"))))
'(fixed-pitch-serif ((t (:family "${fixed-font-family}"))))
'(variable-pitch ((t (:family "${variable-font-family}")))))
(provide-theme '${custom-theme-name})
'';
};
custom-theme-hash = builtins.hashFile "sha256" "${custom-theme}/${custom-theme-name}-theme.el";
in
''
(add-to-list 'custom-theme-load-path "${custom-theme}")
(add-to-list 'custom-safe-themes "${custom-theme-hash}")
(load-theme '${custom-theme-name})
'';
extraPackages =
epkgs: with epkgs; [
treesit-grammars.with-all-grammars
mu4e
emacsql-sqlite
];
};
home.packages = with pkgs; [
# External requirements
# Plugin requirements
gcc
sqlite
languagetool
wordnet
pandoc
ghostscript
mupdf-headless
poppler_utils
graphviz-nox
toolbox
# Customised LaTeX install
(texlive.combine {
inherit (texlive)
scheme-medium
dvisvgm
dvipng
wrapfig
amsmath
ulem
hyperref
capt-of
listings
bera
;
latex-beamer-ukaea.pkgs = [ (callPackage ./texlive/latex-beamer-ukaea/default.nix { }) ];
})
# Development tools
## Code screenshots
silicon
## Python Environments
poetry
## Linters
shellcheck
yamllint
ruff
## Formatters
nixfmt-rfc-style
shfmt
stylua
nodePackages.prettier
nodePackages.prettier-plugin-toml
## Language servers
nixd
lua-language-server
## Interpreters
(python3.withPackages (
ps: with ps; [
tkinter
python-lsp-server
pylsp-rope
rope
mypy
numpy
scipy
xarray
matplotlib
]
))
(luajit.withPackages (ps: [ (ps.callPackage ./luarocks/scilua.nix { }) ]))
];
xdg.configFile = {
"ruff/pyproject.toml".source = ./ruff.toml;
"pypoetry/config.toml".source = ./pypoetry.toml;
};
}

View file

@ -1,48 +1,60 @@
{ epkgs }:
with epkgs;
[
# EViL Mode
evil
# UI and Appearance
epkgs: with epkgs; [
# UI
base16-theme
all-the-icons
nerd-icons
nerd-icons-completion
nerd-icons-corfu
nerd-icons-dired
nerd-icons-ibuffer
nerd-icons-corfu
doom-modeline
visual-fill-column
# Email and Calendar
khalel
mu4e
# Other (TODO sort)
minions
ligature
which-key
diff-hl
org-roam
org-journal
org-noter
citar
# Completion
vertico
marginalia
orderless
marginalia
cape
corfu
corfu-terminal
cape
consult
consult-eglot
flyspell-correct
tempel
tempel-collection
rainbow-delimiters
envrc
treesit-grammars.with-all-grammars
# IDE
treesit-auto
apheleia
flymake-shellcheck
flymake-clippy
magit
nix-mode
nix-ts-mode
nushell-ts-mode
python-docstring
python-pytest
engrave-faces
auctex
forge
apheleia
envrc
rainbow-delimiters
flymake-shellcheck
flymake-yamllint
flymake-clippy
flymake-eslint
markdown-mode
pandoc-mode
python-docstring
nix-mode
lua-mode
# Org + LaTeX
org-roam
org-noter
citar
auctex
htmlize
# Other
password-store
emms
bbdb
ement
elfeed
elfeed-org
elfeed-tube
scad-mode
]

View file

@ -1,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

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

View file

@ -50,7 +50,7 @@
\node (q3) at (0,0) {};
\node (q4) at (\the\paperwidth,0) {};
\fill[fill=bg] (q1.center)--(q2.center)--(q4.center)--(q3.center);
\node[anchor=north west,text width=0.8\paperwidth] (titletext) at (0.4,0.42\paperheight) {
\node[anchor=north west,text width=0.9\paperwidth] (titletext) at (0.4,0.44\paperheight) {
\usebeamerfont{institute}{\usebeamercolor[fg]{institute}\insertinstitute}\par
\smallskip
\usebeamerfont{title}{\usebeamercolor[fg]{title}\inserttitle}\par

View file

Before

Width:  |  Height:  |  Size: 244 KiB

After

Width:  |  Height:  |  Size: 244 KiB

View file

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View file

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

View file

@ -7,12 +7,9 @@
}:
{
imports = [
./udiskie.nix
./waybar.nix
./fuzzel.nix
./mako.nix
./avizo.nix
./wlogout.nix
];
home.packages = [
(pkgs.writeShellScriptBin "protonmail-setup-bridge" ''
@ -21,10 +18,31 @@
${config.wayland.windowManager.hyprland.finalPackage}/bin/hyprctl dispatch exec "PASSWORD_STORE_DIR=/dev/null ${pkgs.protonmail-bridge}/bin/protonmail-bridge -n"
'')
];
stylix.targets.hyprlock.enable = false; # TODO maybe re-enable once I've checked what it does
services = {
hyprpaper.enable = true;
kanshi.systemdTarget = "hyprland-session.target";
gpg-agent.pinentryPackage = pkgs.pinentry-gnome3;
avizo = {
enable = true;
settings.default = {
image-opacity = lib.mkForce "1.0";
border-color =
let
scheme = config.lib.stylix.scheme;
in
lib.mkForce "rgba(${scheme.base0E-rgb-r}, ${scheme.base0E-rgb-g}, ${scheme.base0E-rgb-b}, 1.0)";
};
};
kdeconnect = {
enable = true;
indicator = true;
};
udiskie = {
enable = true;
notify = true;
automount = true;
tray = "never";
};
hypridle = {
enable = true;
settings =
@ -57,6 +75,7 @@
waybar.systemd.target = "hyprland-session.target";
hyprlock =
let
font = config.stylix.fonts.sansSerif.name;
scheme = config.lib.stylix.scheme;
accent = scheme.base0E;
in
@ -64,10 +83,9 @@
enable = true;
settings = {
general = {
disable_loading_bar = false;
hide_cursor = true;
grace = 3;
ignore_empty_input = true;
grace = 5;
ignore_emptry_input = true;
};
background = [
{
@ -77,45 +95,28 @@
blur_size = 8;
}
];
shape = [
label = [
{
monitor = "";
size = "395, 185";
text = "cmd[update:30000] echo \"$(date +\"%R\")\"";
color = "0xff${scheme.base00}";
rounding = 10;
border_size = 2;
border_color = "0xff${accent}";
position = "-10, -10";
font_size = 90;
font_family = font;
position = "-30, 0";
halign = "right";
valign = "top";
}
{
monitor = "";
text = "cmd[update:43200000] echo \"$(date +\"%A,%e %B %Y\")\"";
color = "0xff${scheme.base00}";
font_size = 25;
font_family = font;
position = "-30, -150";
halign = "right";
valign = "top";
}
];
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 = "";
@ -159,29 +160,32 @@
systemd.enable = true;
settings = {
monitor = [ ",preferred,auto,auto" ];
env = [
"XDG_CURRENT_DESKTOP=Hyprland"
"XDG_SESSION_DESKTOP=Hyprland"
"GDK_BACKEND=wayland,x11"
"QT_AUTO_SCREEN_SCALE_FACTOR,1"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"GRIM_DEFAULT_DIR,${config.xdg.userDirs.pictures}/Screenshots"
];
exec-once = [
"systemctl --user import-environment WAYLAND_DISPLAY QT_QPA_PLATFORMTHEME"
"${config.wayland.windowManager.hyprland.finalPackage}/bin/hyprctl setcursor ${config.gtk.cursorTheme.name} ${toString config.gtk.cursorTheme.size}"
"${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1"
"PASSWORD_STORE_DIR=/dev/null ${pkgs.protonmail-bridge}/bin/protonmail-bridge -n"
"${pkgs.dex}/bin/dex -a"
"sleep 5; ${pkgs.dex}/bin/dex -a"
];
gestures.workspace_swipe = true;
general = {
layout = "master";
gaps_in = 3;
layout = "dwindle";
gaps_in = 2.5;
gaps_out = 5;
"col.active_border" = lib.mkForce "rgb(${config.lib.stylix.scheme.base0E})";
"col.active_border" = lib.mkForce "rgb(${config.lib.stylix.scheme.magenta})";
};
master = {
allow_small_split = true;
special_scale_factor = 0.95;
mfact = 0.5;
new_on_top = false;
orientation = "left";
inherit_fullscreen = false;
dwindle = {
force_split = 2;
smart_resizing = false;
drop_at_cursor = true;
special_scale_factor = 0.95;
};
input = {
kb_layout = osConfig.services.xserver.xkb.layout;
@ -189,7 +193,12 @@
touchpad.natural_scroll = "yes";
};
decoration = {
rounding = 10;
rounding = 5;
"col.shadow" = lib.mkForce "rgba(${config.lib.stylix.scheme.base00}0d)";
drop_shadow = "yes";
shadow_ignore_window = true;
shadow_range = 4;
shadow_render_power = 3;
blur = {
enabled = true;
size = 5;
@ -198,13 +207,6 @@
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;
@ -248,24 +250,21 @@
"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"
# Network and Bluetooth control panels
"float, pavucontrol|.blueman-manager-wrapped|nm-connection-editor"
"size 800 600, pavucontrol|.blueman-manager-wrapped|nm-connection-editor"
"move onscreen 100%-820 50,pavucontrol|.blueman-manager-wrapped|nm-connection-editor"
# File picker dialog
"float, xdg-desktop-portal-gtk"
"size 800 600, xdg-desktop-portal-gtk"
"center, xdg-desktop-portal-gtk"
# Matplotlib plots
"float, Matplotlib"
# Workspace rules
"workspace 2, (firefox)" # Browser
"workspace 3, (signal|WebCord|teams-for-linux|twinkle)" # Messaging
"workspace 4, (Zotero|libreoffice|soffice|org.musicbrainz.Picard)(.*)" # Files
"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
"workspace 2, (firefox|nyxt|org.qutebrowser.qutebrowser)" # Browser
"workspace 3, (libreoffice|soffice)(.*)" # Documents
"workspace 4, (signal|com.rtosta.zapzap|WebCord|teams-for-linux|twinkle)" # Messaging
"workspace 5, (org.remmina.Remmina|Nxplayer.bin)" # Remote Desktop
"workspace 6, (steam|steam_app|lutris|page.kramo.Cartridges|org.prismlauncher.PrismLauncher)" # Gaming
# PrismLauncher / Minecraft
"float, org.prismlauncher.PrismLauncher"
@ -281,16 +280,15 @@
"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"
# Zotero settings window
"float, title:(Zotero Settings|Progress),class:Zotero"
"size 800 600, title:(Zotero Settings|Progress),class:Zotero"
"center, title:(Zotero Settings|Progress),class:Zotero"
# Inhibit idle when watching videos
"idleinhibit fullscreen, class:firefox|com.github.rafostar.Clapper"
@ -302,22 +300,30 @@
"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:(.*)(Chat),class:steam"
"size 800 600, title:(.*)(Chat),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"
# Remmina / NoMachine
"suppressevent fullscreen maximize, class:org.remmina.Remmina|Nxplayer.bin"
"float, title:Remmina Remote Desktop Client, class:org.remmina.Remmina"
"center, title:Remmina Remote Desktop Client, class:org.remmina.Remmina"
];
bind =
let
withTerm =
{
term ? "alacritty",
package ? config.programs.${term}.package,
progname,
args ? "",
}:
"${package}/bin/${term} -T ${progname} -e ${progname} ${args}";
workspace = w: [
"SUPER, ${toString w}, moveworkspacetomonitor, ${toString w} current"
"SUPER, ${toString w}, workspace, ${toString w}"
@ -325,61 +331,81 @@
];
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 | ${pkgs.gnugrep}/bin/grep -Po \"[0-9]+\.[0-9]+\").0\""
++ (
let
btm_args = "--autohide_time --battery --celsius --enable_cache_memory --enable_gpu_memory --group --hide_avg_cpu --hide_table_gap --retention=3m --show_table_scroll_position";
in
[
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
# Open Hyprland wiki at correct version number
"CTRL_SHIFT, H, exec, xdg-open \"https://wiki.hyprland.org/$(${config.wayland.windowManager.hyprland.finalPackage}/bin/hyprctl version -j | ${pkgs.jq}/bin/jq $args.tag | ${pkgs.gnused}/bin/sed s/v// | ${pkgs.gnused}/bin/sed s/\\\"//g)\""
"SUPER, F1, exec, ${config.programs.hyprlock.package}/bin/hyprlock"
"SUPER, 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"
"SUPER, F1, exec, ${config.programs.hyprlock.package}/bin/hyprlock"
# "SUPER, F1, exec, ${config.programs.swaylock.package}/bin/swaylock --screenshots --clock --indicator --grace-no-mouse"
"SUPER, Q, killactive,"
"SUPER, V, togglefloating"
# "SUPER SHIFT, V, setfloating" ## TODO setfloating exists
# in newer version of Hyprland than mine
"SUPER SHIFT, V, moveactive, exact 1% 4%"
"SUPER SHIFT, V, resizeactive, exact 800 600"
"SUPER SHIFT, V, pin"
"SUPER, M, fullscreen, 1" # Maximise window
"SUPER SHIFT, M, fullscreen, 0" # Actual fullscreen
"SUPER, Z, exec, ${config.services.mako.package}/bin/makoctl restore"
"SUPER SHIFT, Z, exec, exec ${config.services.mako.package}/bin/makoctl dismiss -a"
# Common program shortcuts
"SUPER, D, exec, ${config.programs.fuzzel.package}/bin/fuzzel"
"SUPER, C, exec, ${config.programs.alacritty.package}/bin/alacritty"
"SUPER, E, exec, ${config.programs.emacs.finalPackage}/bin/emacs"
"SUPER, W, exec, ${config.programs.firefox.finalPackage}/bin/firefox"
"SUPER, F, exec, thunar"
# Common program shortcuts
"SUPER, Space, exec, ${config.programs.fuzzel.package}/bin/fuzzel"
"SUPER, Return, exec, ${config.programs.alacritty.package}/bin/alacritty"
"SUPER SHIFT, Return, exec, ${config.programs.emacs.finalPackage}/bin/emacsclient -c"
"SUPER, W, exec, ${config.programs.firefox.finalPackage}/bin/firefox"
"SUPER, F, exec, ${pkgs.gnome.nautilus}/bin/nautilus"
# 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"
# Terminal utilities
"SUPER, S, exec, ${
withTerm {
progname = "${config.programs.bottom.package}/bin/btm";
args = btm_args;
}
}"
"SUPER SHIFT, S, exec, ${
withTerm {
progname = "${config.programs.bottom.package}/bin/btm";
args = btm_args + " --basic";
}
}"
"SUPER, C, exec, ${withTerm { progname = "${config.programs.cava.package}/bin/cava"; }}"
# 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"
# 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"
# 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"
];
# 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 %"
@ -407,5 +433,9 @@
];
};
};
xdg.configFile."hypr/hyprpaper.conf".text = ''
preload = ${config.stylix.image}
wallpaper = ,${config.stylix.image}
'';
}

View file

@ -10,8 +10,8 @@
maxVisible = 10;
icons = true;
iconPath = with config.gtk.iconTheme; "${package}/share/icons/${name}";
borderRadius = 10;
borderSize = 2;
borderRadius = 5;
borderSize = 1;
borderColor = lib.mkForce config.lib.stylix.scheme.withHashtag.base0E;
defaultTimeout = (builtins.mul 5 1000); # 5s timeout
};

View file

@ -2,10 +2,10 @@
{
home.packages = [
(pkgs.writeShellScriptBin "ukaea-vpn-connect" ''
sudo ${pkgs.openfortivpn}/bin/openfortivpn --config=${./ukaea-vpn.conf}
sudo ${pkgs.openfortivpn}/bin/openfortivpn -c ${./ukaea-vpn.conf} -p $(${pkgs.pass}/bin/pass show work/microsoftonline.com | head -n1)
'')
(pkgs.writeShellScriptBin "jetdata-vpn-connect" ''
sudo ${pkgs.openfortivpn}/bin/openfortivpn --config=${./jetdata-vpn.conf}
sudo ${pkgs.openfortivpn}/bin/openfortivpn -c ${./jetdata-vpn.conf} -p $(${pkgs.pass}/bin/pass show work/microsoftonline.com | head -n1)
'')
];
}

360
system/home/plasma.nix Normal file
View file

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

View file

@ -1,46 +0,0 @@
{ pkgs, ... }:
{
home.packages =
let
pythonEnv = (
pkgs.python312.withPackages (
ps: with ps; [
ipython
python-lsp-server
pyflakes
isort
numpy
scipy
astropy
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
lua-language-server
rust-analyzer
];
home.file.".ipython/profile_default/ipython_config.json".source = ./ipython_config.json;
xdg.configFile."ruff/pyproject.toml".source = ./ruff.toml;
}

View file

@ -1,15 +0,0 @@
{
"Application": { "log_datefmt": "%Y-%m-%d %H:%M:%S" },
"InteractiveShell": {
"color_info": true
},
"InteractiveShellApp": {
"exec_PYTHONSTARTUP": false,
"exec_lines": ["%load_ext autoreload", "%autoreload 2 --print"]
},
"TerminalInteractiveShell": {
"editing_mode": "emacs",
"mouse_support": false,
"true_color": true
}
}

View file

@ -1,37 +0,0 @@
{
pkgs ? import <nixpkgs> { },
python3 ? pkgs.python3Full,
extraPackages ? [ ],
extraLibs ? [ ],
}:
let
inherit (pkgs) lib;
ldlibs = lib.makeLibraryPath (
(with pkgs; [
stdenv.cc.cc
glib
glibc
zlib
zstd
])
++ extraLibs
);
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
pkgs.uv
] ++ extraPackages;
shellHook = ''
[ ! -d .venv ] && ${pythonWrapped}/bin/python3 -m venv .venv
[ -f .venv/bin/activate ] && source .venv/bin/activate
'';
}

View file

@ -2,11 +2,10 @@
{
home.packages = [
(pkgs.writeShellScriptBin "sync-git" (builtins.readFile ./shell/sync-git.sh))
(pkgs.writeShellScriptBin "sync-emacs" (builtins.readFile ./shell/sync-emacs.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-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 +1,2 @@
shopt -s extglob
rm -rf ~/.config/!(dconf|protonmail|Signal|whatsapp-for-linux)
rm -rf ~/.config/!(dconf|kdeconnect|protonmail|Signal|WebCord)

View file

@ -1,32 +1,38 @@
# Email
EMAIL="e.litherlandsmith@proton.me"
secret-tool lookup email "$EMAIL" >/dev/null || (
echo "Insert pass from protonmail-bridge"
secret-tool store --label="Proton Mail mbsync" email "$EMAIL"
echo "Insert pass from protonmail-bridge"
secret-tool store --label="Proton Mail mbsync" email "$EMAIL"
)
EMAIL="e.litherlandsmith@icloud.com"
secret-tool lookup clear "$EMAIL"
pass show identity/apple.com/mbsync | head -n1 | secret-tool store --label="iCloud mbsync" email "$EMAIL"
secret-tool lookup email "$EMAIL" >/dev/null || (
pass show identity/apple.com/mbsync |
head -n1 |
secret-tool store --label="iCloud mbsync" email "$EMAIL"
)
EMAIL="evie.litherland-smith@ukaea.uk"
secret-tool clear email "$EMAIL"
pass show work/microsoftonline.com | head -n1 | secret-tool store --label="Outlook mbsync" email "$EMAIL"
secret-tool lookup email "$EMAIL" >/dev/null || (
pass show work/microsoftonline.com |
head -n1 |
secret-tool store --label="Outlook mbsync" email "$EMAIL"
)
# Calendar
URL="dav.xenia.me.uk"
USER="pixelifytica"
secret-tool clear url "$URL" user "$USER"
pass show "server/xenia.me.uk/$URL" | head -n1 | secret-tool store --label="Personal calendar vdirsyncer" url "$URL" user "$USER"
secret-tool lookup url "$URL" user "$USER" >/dev/null || (
pass show "server/xenia.me.uk/$URL" |
head -n1 |
secret-tool store --label="Personal calendar vdirsyncer" url "$URL" user "$USER"
)
# GitHub API token
HOST="api.github.com"
USER="pixelifytica^forge"
secret-tool clear host "$HOST" user "$USER"
pass show "api/$HOST" | head -n1 | secret-tool store --label="Forge GitHub Token" host "$HOST" user "$USER"
# IRC
HOST="irc.libera.chat"
USER="xenia3"
secret-tool clear host "$HOST" user "$USER"
pass show "social/$HOST" | head -n1 | secret-tool store --label="IRC libera.chat" host "$HOST" user "$USER"
secret-tool lookup host "$HOST" user "$USER" >/dev/null || (
pass show "api/$HOST" |
head -n1 |
secret-tool store --label="Forge GitHub Token" 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"

38
system/home/scripts/shell/rsync-local-config.sh Normal file → Executable file
View file

@ -1,23 +1,23 @@
HOSTS=("$@")
# Config files
for TARGET in ".inputrc" ".config/starship.toml" ".ipython/profile_default/ipython_config.json"; 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 {};"
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
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

@ -0,0 +1,14 @@
# Clone ~/.config/emacs/ if it doesn't exist
EMACS_DIR="$HOME/.emacs.d"
if [ ! -d "$EMACS_DIR" ]; then
git clone "https://git.xenia.me.uk/pixelifytica/emacs.git" "$EMACS_DIR"
fi
(
cd "$EMACS_DIR" || exit 1
# Pull changes by fast-forwarding only
git pull --ff --ff-only
# Update submodules for local packages
git submodule update --init --recursive
# Install and update extensions
make install
)

58
system/home/scripts/shell/sync-git.sh Normal file → Executable file
View file

@ -1,45 +1,31 @@
# 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/.password-store/"
"$HOME/Documents/org/"
"$HOME/Documents/notebooks/"
"$HOME/.password-store/"
"$HOME/Documents/org/"
"$HOME/Documents/library/"
)
SYNC_URLS=(
"https://git.xenia.me.uk/pixelifytica/pass.git"
"https://git.xenia.me.uk/pixelifytica/org.git"
"git@git.ccfe.ac.uk:elitherl/notebooks.git"
"https://git.xenia.me.uk/pixelifytica/pass.git"
"https://git.xenia.me.uk/pixelifytica/org.git"
"https://git.xenia.me.uk/pixelifytica/library.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
DIRECTORY="${SYNC_DIRS[$i]}"
URL="${SYNC_URLS[$i]}"
echo "--- sync: $DIRECTORY ---"
if [ ! -d "$DIRECTORY" ]; then
git clone "$URL" "$DIRECTORY"
fi
git pull --ff --ff-only
git submodule update --remote --recursive
git-sync -ns
git status --porcelain
)
(
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

0
system/home/scripts/shell/xdg-query-program.sh Normal file → Executable file
View file

View file

@ -0,0 +1,31 @@
{ config, ... }:
{
programs.bottom = {
enable = true;
settings = {
flags = {
group_processes = true;
temperature_type = "celsius";
battery = true;
enable_gpu = true;
enable_cache_memory = true;
};
colors =
let
scheme = config.lib.stylix.scheme.withHashtag;
rainbow = with scheme; [
red
yellow
green
cyan
blue
magenta
];
in
{
cpu_core_colors = rainbow;
gpu_core_colors = rainbow;
};
};
};
}

View file

@ -0,0 +1,18 @@
{ config, ... }:
{
programs.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}'";
};
};
};
}

View file

@ -1 +0,0 @@
$env.config.show_banner = false

View file

@ -1,32 +1,72 @@
{
config,
lib,
pkgs,
...
}:
{ config, pkgs, ... }:
{
imports = [
./git.nix
./ssh.nix
./starship.nix
./bottom.nix
./cava.nix
];
home = {
packages = with pkgs; [
asciiquarium-transparent
pipes
cbonsai
];
shellAliases = {
sync-all = "sync-git; vdirsyncer sync; mbsync -a";
sync-and-shutdown = "sync-all && shutdown now";
};
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 = {
carapace.enable = true;
fd.enable = true;
jq.enable = true;
ripgrep.enable = true;
bat = {
enable = true;
configFile.source = ./config.nu;
config.style = "plain,numbers,changes";
};
direnv = {
enable = true;
nix-direnv.enable = true;
};
eza = {
enable = true;
git = true;
icons = true;
extraOptions = [ "--octal-permissions" ];
};
fzf = {
enable = true;
defaultCommand = "${pkgs.fd}/bin/fd --type f";
changeDirWidgetCommand = "${pkgs.fd}/bin/fd --type d";
fileWidgetCommand = "${pkgs.fd}/bin/fd --type f";
};
hyfetch = {
enable = true;
settings = {
preset = "rainbow";
mode = "rgb";
light_dark = config.stylix.polarity;
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";
horizontal-scroll-mode = "On";
mark-directories = "On";
mark-symlinked-directories = "On";
visible-stats = "On";
};
};
zsh = {
enable = true;
@ -59,83 +99,5 @@
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";
changeDirWidgetOptions = [ "--preview '${pkgs.tree}/bin/tree -C {} | head -200'" ];
fileWidgetCommand = "${pkgs.fd}/bin/fd --type f";
fileWidgetOptions = [ "--preview '${pkgs.bat}/bin/bat -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

@ -11,7 +11,7 @@
forwardAgent = true;
compression = true;
serverAliveInterval = 15;
serverAliveCountMax = 5;
serverAliveCountMax = 3;
controlMaster = "auto";
controlPersist = "10s";
extraConfig = ''
@ -21,7 +21,11 @@
"git*".user = "git";
"legion" = {
user = "pixelifytica";
hostname = "192.168.1.225";
hostname = "192.168.0.31";
};
"vanguard" = {
user = "pixelifytica";
hostname = "192.168.0.90";
};
"ionos" = {
user = "root";
@ -34,7 +38,7 @@
};
"heimdall" = {
user = "elitherl";
hostname = "heimdall003.jet.uk";
hostname = "10.40.4.115"; # heimdall115.jetdata.eu
compression = true;
};
};

View file

@ -5,11 +5,18 @@
enableTransience = true;
settings = {
add_newline = false;
aws.symbol = "󰸏 ";
buf.symbol = " ";
c.symbol = " ";
character = {
success_symbol = "[λ](bold green)";
error_symbol = "[λ](bold red)";
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;
@ -17,6 +24,10 @@
truncate_to_repo = false;
};
direnv.disabled = false;
docker_context.symbol = " ";
elixir.symbol = " ";
elm.symbol = " ";
fennel.symbol = " ";
fossil_branch.symbol = " ";
git_branch = {
symbol = " ";
@ -46,20 +57,97 @@
untracked = " ";
typechanged = " ";
};
golang.symbol = " ";
guix_shell.symbol = " ";
haskell.symbol = " ";
haxe.symbol = " ";
hg_branch.symbol = " ";
hostname.ssh_symbol = "󰢹 ";
hostname = {
ssh_only = false;
ssh_symbol = "󰢹 ";
};
java.symbol = " ";
jobs.symbol = "󰈏 ";
julia.symbol = " ";
kotlin.symbol = " ";
line_break.disabled = false;
memory_usage.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 = "󰍲 ";
};
};
python.python_binary = "python3";
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 = "ν";
format = "using [$indicator]($style)";
bash_indicator = " ";
zsh_indicator = "󰰶 ";
fish_indicator = "󰈺 ";
powershell_indicator = " ";
cmd_indicator = " ";
unknown_indicator = " ";
};
status = {
disabled = false;
@ -72,7 +160,12 @@
sigint_symbol = " ";
signal_symbol = " ";
};
sudo.disabled = false;
sudo = {
disabled = false;
symbol = "󱑷 ";
};
swift.symbol = " ";
zig.symbol = " ";
};
};
}

View file

@ -14,7 +14,7 @@ zle-line-init() {
local saved_prompt=$PROMPT
local saved_rprompt=$RPROMPT
PROMPT='λ '
PROMPT='󰁔 '
RPROMPT=''
zle .reset-prompt
PROMPT=$saved_prompt

202
system/home/sway.nix Normal file
View file

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

View file

@ -1,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,8 +1,9 @@
{ ... }:
{ config, ... }:
{
programs.alacritty = {
enable = true;
settings = {
shell = "${config.programs.zsh.package}/bin/zsh";
window = {
dynamic_title = true;
padding = {
@ -10,7 +11,7 @@
y = 5;
};
};
general.live_config_reload = true;
live_config_reload = true;
selection.save_to_clipboard = true;
mouse.hide_when_typing = true;
};

View file

@ -0,0 +1,4 @@
{ ... }:
{
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,9 +0,0 @@
{ ... }:
{
services.udiskie = {
enable = true;
notify = true;
automount = true;
tray = "never";
};
}

View file

@ -1,6 +1,5 @@
{ config, pkgs, ... }:
{
imports = [ ./avizo.nix ];
stylix.targets.waybar.enable = false;
systemd.user.targets.tray.Unit = {
Description = "Home Manager System Tray";
@ -13,22 +12,19 @@
settings.main = {
name = "main";
layer = "top";
position = "left";
position = "top";
# Layout
"modules-left" = [
"hyprland/workspaces"
"mpris"
"hyprland/window"
];
"modules-center" = [ ];
"modules-center" = [ "mpris" ];
"modules-right" = [
"custom/notification"
"pulseaudio#source"
"pulseaudio#sink"
"pulseaudio"
"network"
"bluetooth"
"custom/calendar-icon"
"clock#calendar"
"custom/clock-icon"
"clock"
"backlight"
"battery"
@ -40,14 +36,13 @@
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
"1" = "󰆍";
"2" = "󰖟";
"3" = "󰭹";
"4" = "󱧶";
"5" = "󰢹";
"6" = "󰐫";
"7" = "󰊴";
default = "󰀻";
"1" = "󰆍 ";
"2" = "󰈹 ";
"3" = "󰝰 ";
"4" = "󰭹 ";
"5" = "󰢹 ";
"6" = "󰓓 ";
default = "󰀻 ";
};
all-outputs = false;
persistent-workspaces = {
@ -57,12 +52,41 @@
"4" = [ ];
"5" = [ ];
"6" = [ ];
"7" = [ ];
};
};
"hyprland/window" = {
"format" = "{title}";
"max-length" = 50;
"rewrite" = {
"(.*) - GNU Emacs at (.*)" = " $1 [$2]";
"(alacritty.*)" = " $1";
"(.*) - mpv" = "󰦟 $1";
"swayimg: (.*)" = "󰋩 $1";
"swappy" = "󰹑 swappy";
"(?:/nix/.*)(btm)" = " Resource Usage [$1]";
"(?:/nix/.*)(cava)" = "󰝚 Music Visualiser [$1]";
"Mozilla Firefox" = "󰈹 $1";
"(.*) Mozilla Firefox" = "󰈹 $1";
"Nyxt - (.*)" = "󰀹 $1";
"(.*) - Chromium" = "󰊯 $1";
"(Signal.*)" = "󰭹 $1";
"(ZapZap.*)" = "󰖣 $1";
"((?:.*)WebCord.*)" = "󰙯 $1";
"(Cartridges.*)" = "󰊗 $1";
"([Ss]team.*)" = "󰓓 $1";
"(Prism Launcher.*)" = "󰍳 Minecraft ($1)";
"(.*)(?: *)PrusaSlicer-(.*)" = "󰐫 $1 PrusaSlicer ($2)";
"(.*)(?: *)PrusaSlicer G-code Viewer-(.*)" = "󰹛 $1 G-code Viewer ($2)";
"FreeCAD (.*)" = "󰻬 FreeCAD $1";
"(.*) - Blender.* " = "󰂫 $1";
"(Remmina Remote Desktop Client)" = "󰢹 $1";
"(NoMachine|Nxplayer.bin)(?: *)(.*)" = "󰢹 $1 $2";
};
};
mpris = {
"format" = "{player_icon}\n{status_icon}";
"tooltip-format" = "{player_icon} ({player}) {status_icon}\n{title}\n{album}\n{artist}";
"format" = "{player_icon} {status_icon} | {album} - {artist} - {title}";
"tooltip-format" = "{player_icon} ({player}) {status_icon} {dynamic}";
"title-len" = 64;
"interval" = 1;
"dynamic-order" = [
"album"
@ -72,65 +96,70 @@
"length"
];
"player-icons" = {
"default" = "󰲸";
"default" = "󰲸 ";
};
"status-icons" = {
"playing" = "󰐊";
"paused" = "󰏤";
"stopped" = "󰓛";
};
"ignored-players" = [
"com"
"firefox"
];
"ignored-players" = [ "firefox" ];
};
"pulseaudio#source" = {
pulseaudio = {
scroll-step = 5;
format = "{format_source}";
format-source = "󰍬";
format-source-muted = "󰍭";
tooltip = true;
tooltip-format = "{desc} ({volume}%)";
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
on-click-right = "${config.services.avizo.package}/bin/volumectl %";
on-scroll-up = "${config.services.avizo.package}/bin/volumectl -u + 5";
on-scroll-down = "${config.services.avizo.package}/bin/volumectl -u - 5";
};
"pulseaudio#sink" = {
scroll-step = 5;
format = "{icon}";
format = "{format_source}{icon}{volume}%";
format-muted = "{format_source} 󰝟 ";
format-source = "󰍬 ";
format-source-muted = "󰍭 ";
format-icons = {
car = "󰄍";
car = "󰄍 ";
default = [
"󰕿"
"󰖀"
"󰕾"
"󰕿 "
"󰖀 "
"󰕾 "
];
default-muted = "󰝟";
hands-free = "󰥰";
headset = "󰋎";
phone = "󰏲";
portable = "󰏳";
headphone = "󰋋";
hands-free = "󰥰 ";
headset = "󰋎 ";
phone = "󰏲 ";
portable = "󰏳 ";
headphone = "󰋋 ";
};
tooltip = true;
tooltip-format = "{desc} ({volume}%)";
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
on-click-right = "${config.services.avizo.package}/bin/volumectl %";
on-scroll-up = "${config.services.avizo.package}/bin/volumectl -u + 5";
on-scroll-down = "${config.services.avizo.package}/bin/volumectl -u - 5";
on-click-right = "${pkgs.pamixer}/bin/pamixer -t";
on-scroll-up = "${pkgs.pamixer}/bin/pamixer -i 5";
on-scroll-down = "${pkgs.pamixer}/bin/pamixer -d 5";
};
disk = {
format = "󰋊 {percentage_used}%";
path = config.home.homeDirectory;
};
cpu = {
format = "󰻠 {usage}%";
tooltip = false;
};
memory = {
format = "󰍛 {}%";
};
temperature = {
critical-threshold = 80;
format = "{icon} {temperatureC}°C";
format-icons = [
"󱃃"
"󰔏"
"󱃂"
];
};
network = {
format-icons = [
"󰤟"
"󰤢"
"󰤥"
"󰤨"
"󰤟 "
"󰤢 "
"󰤥 "
"󰤨 "
];
format-wifi = "{icon}";
format-ethernet = "󰈁";
format-linked = "󰈂";
format-disconnected = "󰈂";
format-linked = "󰈂 ";
format-disconnected = "󰈂 ";
tooltip-format = "{essid} ({signalStrength}%)";
on-click = "${pkgs.networkmanagerapplet}/bin/nm-connection-editor";
};
@ -143,16 +172,12 @@
tooltip-format = "{status} | {device_alias}";
on-click = "${pkgs.blueman}/bin/blueman-manager";
};
"custom/calendar-icon" = {
format = "󰃭";
tooltip = false;
};
"clock#calendar" =
let
size = "${toString config.stylix.fonts.sizes.popups}pt";
in
{
format = "{:%d\n%m}";
format = "󰃭 {:%Y-%m-%d}";
tooltip-format = "<span size='${size}'>{calendar}</span>";
calendar = {
mode = "month";
@ -175,27 +200,20 @@
on-scroll-down = "shift_down";
};
};
"custom/clock-icon" = {
format = "󰅐";
tooltip = false;
};
clock = {
format = "{:%H\n%M}";
tooltip = false;
};
clock.format = "󰥔 {:%R}";
backlight = {
format = "{icon}";
tooltip-format = "{percent}%";
format-icons = [
""
""
""
""
""
""
""
""
""
" "
" "
" "
" "
" "
" "
" "
" "
" "
];
};
battery = {
@ -205,28 +223,31 @@
};
format = "{icon}";
format-time = "{H}:{m}";
format-charging = "󰂄";
format-plugged = "󰚥";
format-charging = "󰂄 ({time})";
format-plugged = "󰚥 ";
format-warning = "{icon}{capacity}%";
format-critical = "{icon}{capacity}% ({time})";
tooltip-format = "{capacity}% | {power}W | {time}";
format-icons = [
"󱃍"
"󰁺"
"󰁻"
"󰁼"
"󰁽"
"󰁾"
"󰁿"
"󰂀"
"󰂁"
"󰂂"
"󰁹"
"󱃍 "
"󰁺 "
"󰁻 "
"󰁼 "
"󰁽 "
"󰁾 "
"󰁿 "
"󰂀 "
"󰂁 "
"󰂂 "
"󰁹 "
];
};
"systemd-failed-units" = {
hide-on-ok = true;
format = "󰀦";
hide-on-ok = false;
format = "󰀦 S:{nr_failed_system} U:{nr_failed_user}";
format-ok = "󰄬 ";
system = true;
user = false;
user = true;
};
"custom/notification" =
let
@ -234,16 +255,15 @@
jq = "${pkgs.jq}/bin/jq";
in
{
exec = "( ${makoctl} list | ${jq} -e '.data[] | length > 0' >/dev/null && echo '󱅫' ) || echo '󰂚' ";
exec = "( ${makoctl} list | ${jq} -e '.data[] | length > 0' >/dev/null && echo '󱅫 ' ) || echo '󰂚 ' ";
format = "{}";
tooltip = false;
on-click = "${makoctl} dismiss -a";
interval = 3;
};
"custom/weather" =
let
date-format = "%Y-%m-%d";
custom-indicator = "{ICON}"; # "{temp_C}°C({FeelsLikeC}°C)";
custom-indicator = "{ICON}{temp_C}°C({FeelsLikeC}°C)";
in
{
format = "{}";
@ -261,13 +281,12 @@
style =
let
scheme = config.lib.stylix.scheme.withHashtag;
opacity = config.stylix.opacity.desktop;
in
''
* {
all: unset;
font-family: ${config.stylix.fonts.monospace.name};
font-size: ${toString config.stylix.fonts.sizes.desktop}pt;
font-size: ${toString config.stylix.fonts.sizes.popups}px;
}
window {
@ -278,19 +297,18 @@
window > box {
color: ${scheme.base05};
background: alpha(${scheme.base00}, ${toString opacity});
margin: 5px 0px 5px 6px;
padding: 2px;
border: 1px solid ${scheme.base04};
border-radius: 10px;
background: ${scheme.base00};
margin: 5px 5px 0px;
padding: 0px;
border-top: 1px solid ${scheme.base04};
border-radius: 5px;
}
tooltip {
background: ${scheme.base00};
border: 2px solid ${scheme.base0E};
border-radius: 10px;
border: 1px solid ${scheme.base0E};
border-radius: 5px;
box-shadow: none;
padding: 10px;
}
tooltip label {
@ -300,13 +318,37 @@
margin: 0px;
}
#workspaces {
background: ${scheme.base00};
border-radius: 5px;
margin: 3px 2px;
padding: 2px 3px;
#workspaces,
#window,
#mpris,
#pulseaudio,
#network,
#bluetooth,
#backlight,
#battery,
#clock,
#custom-notification,
#custom-weather,
#tray {
margin: 0px;
padding: 1px 5px;
}
#workspaces,
#window,
#tray,
#backlight,
#battery,
#custom-weather {
color: ${scheme.base05};
}
#workspaces button {
background: transparent;
color: ${scheme.base05};
margin: 0px;
padding: 0px 5px;
}
#workspaces button.empty {
color: ${scheme.base03};
}
@ -324,28 +366,20 @@
#custom-notification {
color: ${scheme.base08};
}
#pulseaudio.source {
#pulseaudio {
color: ${scheme.base09};
}
#pulseaudio.sink {
#network {
color: ${scheme.base0A};
}
#network {
#bluetooth {
color: ${scheme.base0B};
}
#bluetooth {
#clock.calendar {
color: ${scheme.base0C};
}
#custom-calendar-icon,
#clock.calendar {
color: ${scheme.base0D};
}
#custom-clock-icon,
#clock {
color: ${scheme.base0E};
}
#backlight {
color: ${scheme.base0F};
color: ${scheme.base0D};
}
#battery.warning {
@ -365,11 +399,6 @@
#systemd-failed-units.degraded {
color: ${scheme.base08}
}
#custom-weather,
#tray {
padding: 2px 2px 2px 3px;
}
'';
};
}

View file

@ -1,86 +0,0 @@
{ config, ... }:
{
programs.wlogout = {
enable = true;
layout = [
{
label = "reboot";
action = "systemctl reboot";
text = "Reboot";
keybind = "r";
}
{
label = "shutdown";
action = "systemctl poweroff";
text = "Shutdown";
keybind = "s";
}
{
label = "lock";
action = "${config.programs.hyprlock.package}/bin/hyprlock";
text = "Lock Screen";
keybind = "l";
}
];
style =
let
scheme = config.lib.stylix.scheme;
opacity = config.stylix.opacity.popups;
icons = "${config.programs.wlogout.package}/share/wlogout/icons";
in
''
* {
background-image: none;
box-shadow: none;
}
window {
background-color: rgba(${scheme.base00-rgb-r}, ${scheme.base00-rgb-g}, ${scheme.base00-rgb-b}, ${toString opacity});
}
button {
border-radius: 0;
border-color: ${scheme.withHashtag.base03};
text-decoration-color: ${scheme.withHashtag.base05};
color: ${scheme.withHashtag.base05};
background-color: ${scheme.withHashtag.base00};
border-style: solid;
border-width: 1px;
background-repeat: no-repeat;
background-position: center;
background-size: 25%;
}
button:focus, button:active, button:hover {
text-decoration-color: ${scheme.withHashtag.base00};
color: ${scheme.withHashtag.base00};
background-color: ${scheme.withHashtag.base0E};
outline-style: none;
}
#lock {
background-image: image(url("${icons}/lock.png"));
}
#logout {
background-image: image(url("${icons}/logout.png"));
}
#suspend {
background-image: image(url("${icons}/suspend.png"));
}
#hibernate {
background-image: image(url("${icons}/hibernate.png"));
}
#shutdown {
background-image: image(url("${icons}/shutdown.png"));
}
#reboot {
background-image: image(url("${icons}/reboot.png"));
}
'';
};
}

View file

@ -0,0 +1,15 @@
{ ... }:
{
# TODO add emacs keybinds
programs.zathura = {
enable = true;
options = {
adjust-open = "best-fit";
database = "null";
dbus-service = true;
sandbox = "normal";
scroll-page-aware = true;
synctex = true;
};
};
}

View file

@ -0,0 +1,208 @@
# Being an Emacs user, it is natural for me to use emacs-like and info-like keybindings for zathura.
#
# Zathura configuration documentation is available at
# https://git.pwmt.org/pwmt/zathura/-/blob/e5d2ca487147e79d0bb7acbf5174cd9dcc92a86c/doc/man/zathurarc.5.rst
# A full list of available functions and default keybindings is available at
# https://git.pwmt.org/pwmt/zathura/-/blob/e5d2ca487147e79d0bb7acbf5174cd9dcc92a86c/zathura/config.c#L301
#
# If you want to integrate Zathura with Emacs AUCTeX mode, see
# [emacs wiki](https://www.emacswiki.org/emacs/AUCTeX).
#
# Put the following inside `$XDG_CONFIG_HOME/zathura/zathurarc
## niceties
# when selecting text with mouse,
# copy to clipboard
set selection-clipboard clipboard
# keep several lines of text when
# scrolling a screenful
set scroll-full-overlap 0.2
# see documentation for details
set scroll-page-aware true
set window-title-basename true
set adjust-open width
set statusbar-home-tilde true
set vertical-center true
set synctex true
# large bold font easier on the eyes in index mode
# status bar can be disabled with A-s
set font "FreeSans bold 16"
set zoom-step 3
map [normal] <C-b> scroll left
map [normal] <C-n> scroll down
map [normal] <C-p> scroll up
map [normal] <C-f> scroll right
map [normal] <C-g> abort
map [insert] <C-g> abort
map [normal] <C-[> abort
map [normal] <A-\<> goto top
map [normal] <A-\>> goto bottom
map [normal] a adjust_window best-fit
map [normal] s adjust_window width
map [normal] F display_link
map [normal] <C-c> copy_link
map [normal] f follow
map [normal] m mark_add
map [normal] \' mark_evaluate
map [normal] \, navigate next
map [normal] \. navigate previous
map [normal] <A-Right> navigate next
map [normal] <A-Left> navigate previous
map [normal] <PageDown> scroll full-down
map [normal] <PageUp> scroll full-up
map [normal] <C-P> print
map [normal] c recolor
map [normal] R reload
map [normal] v rotate rotate_cw
map [normal] V rotate rotate_ccw
map [normal] <Left> scroll left
map [normal] <Up> scroll up
map [normal] <Down> scroll down
map [normal] <Right> scroll right
map [normal] <A-a> scroll half-left
map [normal] <C-V> scroll half-down
map [normal] <A-V> scroll half-up
map [normal] <A-e> scroll half-right
map [normal] <C-a> scroll full-left
map [normal] <C-v> scroll full-down
map [normal] <Return> scroll full-down
map [normal] <A-v> scroll full-up
map [normal] <C-e> scroll full-right
map [normal] <Space> scroll full-down
map [normal] <C-h> scroll full-up
map [normal] <BackSpace> scroll full-up
map [normal] <S-Space> scroll full-up
map [normal] l jumplist backward
map [normal] r jumplist forward
map [normal] <A-r> bisect forward
map [normal] <A-l> bisect backward
# still need to use '/' to trigger search
map [normal] <C-s> search forward
map [normal] <C-r> search backward
map [normal] p snap_to_page
map [normal] <C-i> toggle_index
map [normal] i toggle_index
map [normal] <Tab> toggle_index
map [normal] <A-s> toggle_statusbar
map [normal] <A-i> focus_inputbar
map [normal] d toggle_page_mode
map [normal] q quit
map [normal] + zoom in
map [normal] - zoom out
map [normal] = zoom in
map [normal] <A-P> toggle_presentation
map [normal] <A-F> toggle_fullscreen
map [normal] j toggle_fullscreen
map [fullscreen] j toggle_fullscreen
map [fullscreen] q toggle_fullscreen
map [fullscreen] <C-b> scroll left
map [fullscreen] <C-n> scroll down
map [fullscreen] <C-p> scroll up
map [fullscreen] <C-f> scroll right
map [fullscreen] <C-g> abort
map [fullscreen] <C-[> abort
map [fullscreen] <A-\<> goto top
map [fullscreen] <A-\>> goto bottom
map [fullscreen] a adjust_window best-fit
map [fullscreen] s adjust_window width
map [fullscreen] F display_link
map [fullscreen] <C-c> copy_link
map [fullscreen] f follow
map [fullscreen] m mark_add
map [fullscreen] \' mark_evaluate
map [fullscreen] \, navigate next
map [fullscreen] \. navigate previous
map [fullscreen] <A-Right> navigate next
map [fullscreen] <A-Left> navigate previous
map [fullscreen] <PageDown> scroll full-down
map [fullscreen] <PageUp> scroll full-up
map [fullscreen] <C-P> print
map [fullscreen] c recolor
map [fullscreen] R reload
map [fullscreen] v rotate rotate_cw
map [fullscreen] V rotate rotate_ccw
map [fullscreen] <Left> scroll left
map [fullscreen] <Up> scroll up
map [fullscreen] <Down> scroll down
map [fullscreen] <Right> scroll right
map [fullscreen] <A-a> scroll half-left
map [fullscreen] <C-V> scroll half-down
map [fullscreen] <A-V> scroll half-up
map [fullscreen] <A-e> scroll half-right
map [fullscreen] <C-a> scroll full-left
map [fullscreen] <C-v> scroll full-down
map [fullscreen] <Return> scroll full-down
map [fullscreen] <A-v> scroll full-up
map [fullscreen] <C-e> scroll full-right
map [fullscreen] <Space> scroll full-down
map [fullscreen] <C-h> scroll full-up
map [fullscreen] <BackSpace> scroll full-up
map [fullscreen] <S-Space> scroll full-up
map [fullscreen] l jumplist backward
map [fullscreen] r jumplist forward
map [fullscreen] <A-r> bisect forward
map [fullscreen] <A-l> bisect backward
map [fullscreen] <C-s> search forward
map [fullscreen] <C-r> search backward
map [fullscreen] p snap_to_page
map [fullscreen] i toggle_index
map [fullscreen] <C-i> toggle_index
map [fullscreen] <Tab> toggle_index
map [fullscreen] <A-s> toggle_statusbar
map [fullscreen] <A-i> focus_inputbar
map [fullscreen] d toggle_page_mode
map [fullscreen] + zoom in
map [fullscreen] - zoom out
map [fullscreen] = zoom in
# status bar will obscure last item in index mode
map [index] <A-s> toggle_statusbar
map [index] q toggle_index
map [index] i toggle_index
map [index] <C-p> navigate_index up
map [index] <C-h> navigate_index up
map [index] <BackSpace> navigate_index up
map [index] <C-n> navigate_index down
map [index] <A-v> navigate_index up
map [index] <C-v> navigate_index down
map [index] \< navigate_index top
map [index] \> navigate_index bottom
map [index] <A-\<> navigate_index top
map [index] <A-\>> navigate_index bottom
map [index] <C-b> navigate_index collapse
map [index] <C-f> navigate_index expand
map [index] <C-i> navigate_index expand-all
map [index] <A-i> navigate_index collapse-all
map [index] <Up> navigate_index up
map [index] <Down> navigate_index down
map [index] <Left> navigate_index collapse
map [index] <Right> navigate_index expand
map [index] <C-m> navigate_index select
map [index] <Space> navigate_index select
map [index] <Return> navigate_index select
map [index] <C-j> navigate_index select
map [index] <Esc> toggle_index
map [index] <C-[> toggle_index
map [index] <C-g> toggle_index
map [index] <C-c> toggle_index
map [presentation] i toggle_index
map [presentation] r navigate next
map [presentation] <Down> navigate next
map [presentation] <Right> navigate next
map [presentation] <PageDown> navigate next
map [presentation] <Space> navigate next
map [presentation] l navigate previous
map [presentation] <Left> navigate previous
map [presentation] <Up> navigate previous
map [presentation] <PageUp> navigate previous
map [presentation] <S-Space> navigate previous
map [presentation] <BackSpace> navigate previous
map [presentation] <F5> toggle_presentation
map [presentation] q toggle_presentation
map [presentation] <C-h> navigate previous
map [presentation] <M-v> navigate previous
map [presentation] <C-v> navigate next
map [presentation] <A-\<> goto top
map [presentation] <A-\>> goto bottom

View file

@ -7,14 +7,14 @@
)
(defalias
capsctrl (tap-hold $tap-time $hold-time esc lctl)
capsctrl (tap-hold $tap-time $hold-time caps lctl)
a (tap-hold $tap-time $hold-time a lmet)
s (tap-hold $tap-time $hold-time s lsft)
d (tap-hold $tap-time $hold-time d lalt)
f (tap-hold $tap-time $hold-time f lctl)
j (tap-hold $tap-time $hold-time j lctl)
k (tap-hold $tap-time $hold-time k lalt)
l (tap-hold $tap-time $hold-time l lsft)
s (tap-hold $tap-time $hold-time s lalt)
d (tap-hold $tap-time $hold-time d lctl)
f (tap-hold $tap-time $hold-time f lsft)
j (tap-hold $tap-time $hold-time j lsft)
k (tap-hold $tap-time $hold-time k lctl)
l (tap-hold $tap-time $hold-time l lalt)
; (tap-hold $tap-time $hold-time ; lmet)
)

View file

@ -1,14 +1,10 @@
{
pkgs,
...
}:
{ pkgs, ... }:
{
imports = [ ./desktop.nix ];
environment.systemPackages = [ pkgs.acpi ];
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,15 +1,14 @@
let
emacs = [ "emacs.desktop" ];
emacs = [ "emacsclient.desktop" ];
browser = [ "firefox.desktop" ];
in
{
"inode/directory" = [ "org.xfce.thunar.desktop" ];
"inode/symlink" = [ "org.xfce.thunar.desktop" ];
"inode/directory" = [ "org.gnome.Nautilus.desktop" ];
"inode/symlink" = [ "org.gnome.Nautilus.desktop" ];
"image/jpeg" = [ "com.xfce.ristretto.desktop" ];
"image/png" = [ "com.xfce.ristretto.desktop" ];
"audio/mpeg" = [ "com.github.neithern.g4music.desktop" ];
"video/mp4" = [ "mpv.desktop" ];
"image/jpeg" = [ "com.github.weclaw1.ImageRoll.desktop" ];
"image/png" = [ "com.github.weclaw1.ImageRoll.desktop" ];
"video/mp4" = [ "com.github.rafostar.Clapper.desktop" ];
"text/plain" = emacs;
"text/richtext" = emacs;
@ -64,7 +63,7 @@ in
"x-scheme-handler/chrome" = browser;
"x-scheme-handler/webcal" = browser;
"x-scheme-handler/geo" = [ "openstreetmap-geo-handler.desktop" ];
"x-scheme-handler/mailto" = [ "emacs-mail.desktop" ];
"x-scheme-handler/mailto" = [ "emacsclient-mail.desktop" ];
"x-scheme-handler/unknown" = emacs;
"x-scheme-handler/prusaslicer" = [ "PrusaSlicerURLProtocol.desktop" ];
@ -72,4 +71,7 @@ in
"x-scheme-handler/ms-word" = [ "writer.desktop" ];
"x-scheme-handler/ms-powerpoint" = [ "impress.desktop" ];
"x-scheme-handler/ms-excel" = [ "calc.desktop" ];
"x-scheme-handler/msteams" = [ "teams-for-linux.desktop" ] ++ browser;
"x-scheme-handler/zoomus" = browser;
"x-scheme-handler/zoommtg" = browser;
}

29
system/one-light.yaml Normal file
View file

@ -0,0 +1,29 @@
system: "base24"
name: "One Light"
author: "Pixelfiytica, modified from FredHappyface (https://github.com/fredHappyface)"
variant: "light"
palette:
base00: "fafafa"
base01: "f0f0f1"
base02: "cacace"
base03: "a0a1a7"
base04: "696c77"
base05: "383a42"
base06: "202227"
base07: "090a0b"
base08: "ca1243"
base09: "c18401"
base0A: "febb2a"
base0B: "50a14f"
base0C: "0184bc"
base0D: "4078f2"
base0E: "a626a4"
base0F: "986801"
base10: "f0f0f1"
base11: "fafafa"
base12: "ec2258"
base13: "f4a701"
base14: "6db76c"
base15: "01a7ef"
base16: "709af5"
base17: "d02fcd"

View file

@ -2,14 +2,13 @@
{
services.adguardhome = {
enable = true;
port = 3200;
mutableSettings = false;
openFirewall = true;
settings = rec {
http.address = "0.0.0.0:3200";
dns = {
bind_hosts = [
"127.0.0.1"
"192.168.0.31"
"192.168.1.230"
];
bootstrap_dns = [
"9.9.9.9"
@ -17,20 +16,16 @@
];
ratelimit = 0;
safe_search.enabled = true;
rewrites =
let
local = "192.168.0.31";
in
[
{
domain = "xenia.me.uk";
answer = local;
}
{
domain = "*.xenia.me.uk";
answer = local;
}
];
rewrites = [
{
domain = "xenia.me.uk";
answer = "192.168.1.230";
}
{
domain = "*.xenia.me.uk";
answer = "192.168.1.230";
}
];
blocked_services.ids = [ ];
};
filtering = {
@ -44,6 +39,7 @@
inherit (querylog) ignored;
};
};
openFirewall = true;
};
networking.firewall = {
allowedTCPPorts = [ 53 ];

View file

@ -1,4 +1,4 @@
{ config, ... }:
{ config, pkgs, ... }:
{
imports = [ ./caddy.nix ];
services = {
@ -23,10 +23,16 @@
};
};
};
caddy.virtualHosts."git.xenia.me.uk".extraConfig =
let
port = config.services.forgejo.settings.server.HTTP_PORT;
in
"reverse_proxy http://localhost:${toString port}";
# gitea-actions-runner = {
# package = pkgs.forgejo-runner;
# instances.default = {
# enable = true;
# name = "monolith";
# url = config.services.forgejo.settings.server.ROOT_URL;
# tokenFile = /var/lib/forgejo/runner_registration_token;
# labels = ["native:host"];
# };
# };
caddy.virtualHosts."git.xenia.me.uk".extraConfig = "reverse_proxy http://localhost:3100";
};
}

View file

@ -32,6 +32,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

@ -4,26 +4,13 @@
backend = "podman";
containers.homeassistant = {
volumes = [
"/var/lib/home-assistant:/config"
"home-assistant:/config"
"/run/dbus:/run/dbus:ro"
"/var/lib/syncthing/Music:/music"
"/tmp:/.dockerenv" # TEMP FIX FOR CONTAINER CHECKS
];
environment.TZ = config.time.timeZone;
image = "ghcr.io/home-assistant/home-assistant@sha256:db0f344d5126bfedd7bf18e0bfb8249a9a5e6785e2f6cb3728edbd393fff1981"; # 2024-12-20T10:54:13.805911135Z
image = "ghcr.io/home-assistant/home-assistant:2024.8.0.dev202407210221";
extraOptions = [ "--network=host" ];
};
};
networking.firewall = {
allowedTCPPorts = [
1400
1443
];
allowedUDPPorts = [
1400
1443
5353
];
};
services.caddy.virtualHosts."home.xenia.me.uk".extraConfig = "reverse_proxy http://localhost:8123";
}

View file

@ -6,6 +6,5 @@
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}";
services.caddy.virtualHosts."nix.xenia.me.uk".extraConfig = "reverse_proxy http://localhost:${toString config.services.nix-serve.port}";
}

View file

@ -6,6 +6,5 @@
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}";
}

View file

@ -1,28 +0,0 @@
{ config, ... }:
{
imports = [ ./caddy.nix ];
services = {
webdav = {
enable = true;
settings = {
address = "0.0.0.0";
port = 6065;
debug = true;
behindProxy = true;
directory = "/srv/webdav";
users = [
{
username = "pixelifytica";
password = "{bcrypt}$2b$12$ulThbG9JGJP/FYI4RyX8sufMOE/vfw928gJMFedajiINbqx585wY.";
permissions = "CRUD";
}
];
};
};
caddy.virtualHosts."files.xenia.me.uk".extraConfig =
let
inherit (config.services.webdav.settings) port;
in
"reverse_proxy http://localhost:${toString port}";
};
}

View file

@ -1,5 +1,9 @@
{ username, ... }:
{ pkgs, username, ... }:
{
environment = {
sessionVariables.MANGOHUD = 1;
systemPackages = [ pkgs.mangohud ];
};
hardware.steam-hardware.enable = true;
programs = {
gamemode.enable = true;
@ -15,6 +19,7 @@
};
home-manager.users.${username}.programs.mangohud = {
enable = true;
settings.preset = 1;
enableSessionWide = true;
settings.preset = 2;
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

BIN
system/wallpapers/blake.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 KiB

View file

Before

Width:  |  Height:  |  Size: 642 KiB

After

Width:  |  Height:  |  Size: 642 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

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