Compare commits

..

1 commit
main ... nvim

Author SHA1 Message Date
Evie Litherland-Smith 2532939134 Messing around with neovim again 2025-01-05 14:02:07 +00:00
45 changed files with 774 additions and 856 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

@ -7,12 +7,10 @@ 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
server:
nixos-rebuild build --flake .#Legion
nix copy ./result --to ssh://legion && rm ./result
nix copy ./result --to ssh://legion
rm ./result
flathub:
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

View file

@ -119,59 +119,6 @@
"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": {
@ -212,11 +159,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1736061677,
"narHash": "sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60=",
"lastModified": 1735141468,
"narHash": "sha256-VIAjBr1qGcEbmhLwQJD6TABppPMggzOvqFsqkDoMsAY=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "cbd8ec4de4469333c82ff40d057350c30e9f7d36",
"rev": "4005c3ff7505313cbc21081776ad0ce5dfd7a3ce",
"type": "github"
},
"original": {
@ -228,11 +175,11 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1735554305,
"narHash": "sha256-zExSA1i/b+1NMRhGGLtNfFGXgLtgo+dcuzHzaWA6w3Q=",
"lastModified": 1733097829,
"narHash": "sha256-9hbb1rqGelllb4kVUCZ307G2k3/UhmA8PPGBoyuWaSw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "0e82ab234249d8eee3e8c91437802b32c74bb3fd",
"rev": "2c15aa59df0017ca140d9ba302412298ab4bf22a",
"type": "github"
},
"original": {
@ -258,7 +205,6 @@
"base16-vim": "base16-vim",
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"git-hooks": "git-hooks",
"gnome-shell": "gnome-shell",
"home-manager": [
"home-manager"
@ -272,11 +218,11 @@
"tinted-tmux": "tinted-tmux"
},
"locked": {
"lastModified": 1736019457,
"narHash": "sha256-MWe3RXEV9dov1wFZraWagVAxynPo/VceStIYfNRgqG4=",
"lastModified": 1734110444,
"narHash": "sha256-fp1iV2JldCSvz+7ODzXYUkQ+H7zyiWw5E0MQ4ILC4vw=",
"owner": "danth",
"repo": "stylix",
"rev": "5204b085385c0bfaa1eb1bb0f8dc81922012128d",
"rev": "9015d5d0d5d100f849129c43d257b827d300b089",
"type": "github"
},
"original": {
@ -356,11 +302,11 @@
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1736154270,
"narHash": "sha256-p2r8xhQZ3TYIEKBoiEhllKWQqWNJNoT9v64Vmg4q8Zw=",
"lastModified": 1735135567,
"narHash": "sha256-8T3K5amndEavxnludPyfj3Z1IkcFdRpR23q+T0BVeZE=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "13c913f5deb3a5c08bb810efd89dc8cb24dd968b",
"rev": "9e09d30a644c57257715902efbb3adc56c79cf28",
"type": "github"
},
"original": {

View file

@ -30,22 +30,9 @@
...
}:
let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
treefmt = treefmt-nix.lib.evalModule pkgs ./treefmt.nix;
treefmt = treefmt-nix.lib.evalModule nixpkgs.legacyPackages.x86_64-linux ./treefmt.nix;
in
{
packages.x86_64-linux =
let
fonts = pkgs.callPackage ./system/fonts.nix { };
in
{
inherit (fonts)
iosevka-custom
iosevka-custom-aile
iosevka-custom-etoile
iosevka-custom-nerdfont
;
};
formatter.x86_64-linux = treefmt.config.build.wrapper;
checks.x86_64-linux.formatting = treefmt.config.build.check self;
nixosConfigurations = {

View file

@ -9,10 +9,9 @@
./services/nix-serve.nix
./services/sshd.nix
./services/syncthing.nix
./services/webdav.nix
./services/xandikos.nix
# ./services/minecraft.nix
# ./services/satisfactory/default.nix
./services/satisfactory/default.nix
];
boot.loader = {
systemd-boot.enable = true;

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";
}

View file

@ -9,6 +9,7 @@
./desktop.nix
./steam.nix
];
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/onedark.yaml";
home-manager.users.${username} = {
imports = [ ./home/swww/default.nix ];
home = {
@ -62,7 +63,9 @@
workspace = [
"2, monitor:desc:${secondary}"
"3, monitor:desc:${secondary}"
"4, monitor:desc:${primary}"
"5, monitor:desc:${primary}"
"6, monitor:desc:${primary}"
"7, monitor:desc:${primary}"
];
};
@ -88,6 +91,5 @@
};
};
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,12 +18,19 @@
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;
@ -32,6 +39,16 @@
options = "--delete-older-than 3d";
};
optimise.automatic = true;
registry.my-nixos = {
from = {
type = "indirect";
id = "my-nixos";
};
to = {
type = "git";
url = "https://git.xenia.me.uk/pixelifytica/nixos.git?ref=main";
};
};
extraOptions = ''
keep-outputs = false
keep-derivations = false
@ -50,7 +67,7 @@
"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}";
@ -93,7 +110,6 @@
isNormalUser = true;
group = "users";
description = "Evie Litherland-Smith";
shell = pkgs.zsh;
extraGroups = [
"networkmanager"
"wheel"
@ -118,7 +134,7 @@
imports = [
./home/shell/default.nix
./home/scripts/default.nix
./home/gpg/default.nix
./home/neovim/default.nix
];
home = {
inherit username;
@ -150,14 +166,12 @@
dig
wireguard-tools
librespeed-cli
dust
quickemu
distrobox
];
localBinInPath = true;
};
programs = {
zsh.enable = true;
command-not-found.enable = false;
ssh.startAgent = true;
nano = {
@ -201,43 +215,30 @@
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
applications = 0.9;
desktop = 0.7;
popups = 0.5;
terminal = 0.9;
};
cursor = {
package = pkgs.volantes-cursors;
name = "volantes_cursors";
size = 32;
};
fonts =
let
fpkgs = pkgs.callPackage ./fonts.nix { };
in
{
serif = {
package = fpkgs.iosevka-custom-etoile;
name = "Iosevka Custom Etoile";
};
sansSerif = {
package = fpkgs.iosevka-custom-aile;
name = "Iosevka Custom Aile";
};
monospace = {
package = fpkgs.iosevka-custom-nerdfont;
name = "IosevkaCustom Nerd Font Propo";
};
sizes = {
applications = 12;
desktop = 14;
popups = 16;
terminal = 12;
};
fonts = {
monospace = {
package = pkgs.nerdfonts.override { fonts = [ "DejaVuSansMono" ]; };
name = "DejaVuSansM Nerd Font";
};
sizes = {
applications = 10;
desktop = 12;
popups = 14;
terminal = 10;
};
};
};
fonts.packages = with pkgs; [
dejavu_fonts # Compatibility
liberation_ttf # Documents
lmodern # LaTeX
(nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; })

View file

@ -23,10 +23,7 @@
systemPackages = with pkgs; [
libsecret
libnotify
libarchive
xdg-utils
imagemagick
ffmpeg
hunspell
hunspellDicts.en_GB-large
wl-clipboard
@ -34,14 +31,19 @@
grim
slurp
swappy
xfce.ristretto
g4music
picard
zotero
evince
nautilus
libreoffice
evince
image-roll
imagemagick
clapper
g4music
ffmpeg
picard
webcord
signal-desktop
whatsapp-for-linux
teams-for-linux
nomachine-client
];
};
@ -58,36 +60,24 @@
};
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;
};
hyprland.enable = true;
xwayland.enable = true;
};
gtk.iconCache.enable = true;
qt = {
enable = true;
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;
@ -121,6 +111,10 @@
};
};
};
xserver = {
enable = true;
xkb.layout = "gb";
};
};
xdg.portal = {
enable = true;
@ -137,21 +131,21 @@
{
imports = [
./home/hyprland.nix
./home/terminal.nix
./home/terminal/default.nix
./home/browser/firefox.nix
./home/browser/nyxt.nix
./home/emacs/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 = {
@ -205,24 +199,44 @@
early_exit=false
fill_shape=false
'';
# Matplotlib default figure sizes and font settings
"matplotlib/matplotlibrc".text =
# WhatsApp config
"whatsapp-for-linux/settings.conf" =
let
inherit (config.stylix) fonts;
inherit (config.lib.stylix.scheme) variant;
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
'';
{
force = true;
text = ''
[web]
allow-permissions=true
hw-accel=2
[general]
notification-sounds=true
close-to-tray=true
start-in-tray=true
[appearance]
prefer-dark-theme=${if variant == "dark" then "true" else "false"}
'';
};
# Teams config
"teams-for-linux/config.json" = {
force = true;
text = builtins.toJSON {
awayOnSystemIdle = true;
closeAppOnCross = false;
followSystemTheme = true;
notificationMethod = "electron";
optInTeamsV2 = true;
spellCheckerLanguages = [ "en_GB" ];
};
};
# Autostart some programs
"autostart/signal-desktop.desktop".source =
"${pkgs.signal-desktop}/share/applications/signal-desktop.desktop";
"autostart/com.github.eneshecan.WhatsAppForLinux.desktop".source =
"${pkgs.whatsapp-for-linux}/share/applications/com.github.eneshecan.WhatsAppForLinux.desktop";
};
};
};

View file

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

View file

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

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,7 +46,6 @@
'("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")
'("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/")
@ -61,7 +58,8 @@
(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)))

View file

@ -18,32 +18,33 @@
;; Define custom theme
(define-configuration browser
((theme (make-instance 'theme:theme
:dark-p ${if variant == "light" then "nil" else "t"}
:font-family "${fonts.sansSerif.name}"
:monospace-font-family "${fonts.monospace.name}"
:text-color "${scheme.base05}"
:contrast-text-color "${scheme.base01}"
:background-color "${scheme.base00}"
:primary-color "${scheme.base04}"
:primary-color "${scheme.base02}"
:secondary-color "${scheme.base03}"
:tertiary-color "${scheme.base02}"
:quaternary-color "${scheme.base02}"
:accent-color "${accent}"
:tertiary-color "${scheme.base04}"
:quaternary-color "${scheme.base04}"
:accent-color "${scheme.base0E}"
:action-color "${scheme.cyan}"
:success-color "${scheme.green}"
:warning-color "${scheme.yellow}"
:highlight-color "${scheme.base04}"
:highlight-color "${scheme.base01}"
: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}"
:on-accent-color "${scheme.base01}"
:on-action-color "${scheme.base01}"
:on-success-color "${scheme.base01}"
:on-warning-color "${scheme.base01}"
:on-highlight-color "${scheme.base01}"
:on-codeblock-color "${scheme.base05}"
;; :on-background-color "${scheme.base05}"
;; :on-primary-color "${scheme.base05}"
;; :on-secondary-color "${scheme.base05}"
;; :on-tertiary-color "${scheme.base05}"
;; :on-quaternary-color "${scheme.base05}"
;; :on-accent-color "${scheme.base01}"
;; :on-action-color "${scheme.base01}"
;; :on-success-color "${scheme.base01}"
;; :on-warning-color "${scheme.base01}"
;; :on-highlight-color "${scheme.base01}"
;; :on-codeblock-color "${scheme.base05}"
))))
'';
};
@ -52,8 +53,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 +64,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,4 +1,6 @@
{
config,
lib,
pkgs,
...
}:
@ -10,7 +12,13 @@
../texlive/default.nix
../programming/default.nix
];
home.sessionVariables.EDITOR = "emacs";
services.emacs = {
enable = lib.mkDefault true;
package = config.programs.emacs.finalPackage;
defaultEditor = true;
client.enable = true;
socketActivation.enable = true;
};
programs.emacs = {
enable = true;
package = pkgs.emacs30.override {
@ -29,7 +37,5 @@
mupdf-headless
poppler_utils
graphviz-nox
toolbox
];
}

View file

@ -4,12 +4,11 @@ with epkgs;
# EViL Mode
evil
# UI and Appearance
delight
nerd-icons
nerd-icons-dired
nerd-icons-ibuffer
nerd-icons-corfu
doom-modeline
visual-fill-column
# Email and Calendar
khalel
mu4e
@ -26,6 +25,7 @@ with epkgs;
corfu-terminal
cape
consult
consult-eglot
tempel
tempel-collection
rainbow-delimiters
@ -34,15 +34,18 @@ with epkgs;
treesit-auto
apheleia
flymake-shellcheck
flymake-yamllint
flymake-clippy
flymake-eslint
magit
forge
nix-mode
nix-ts-mode
nushell-ts-mode
julia-mode
julia-ts-mode
python-docstring
python-pytest
engrave-faces
auctex
markdown-mode
pandoc-mode
scad-mode
]

View file

@ -248,21 +248,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"
# File picker dialog
"float, xdg-desktop-portal-gtk"
"size 800 600, xdg-desktop-portal-gtk"
"center, xdg-desktop-portal-gtk"
# Audio control panel
"float, pavucontrol"
"size 800 600, pavucontrol"
"move onscreen 100%-820 50,pavucontrol"
# File browser and picker dialog
"float, org.gnome.Nautilus|xdg-desktop-portal-gtk"
"size 800 600, org.gnome.Nautilus|xdg-desktop-portal-gtk"
"center, org.gnome.Nautilus|xdg-desktop-portal-gtk"
# Matplotlib plots
"float, Matplotlib"
# Workspace rules
"workspace 2, (firefox)" # Browser
"workspace 3, (signal|WebCord|teams-for-linux|twinkle)" # Messaging
"workspace 4, (Zotero|libreoffice|soffice|org.musicbrainz.Picard)(.*)" # Files
"workspace 3, (signal|whatsapp-for-linux|WebCord|teams-for-linux|twinkle)" # Messaging
"workspace 4, (libreoffice|soffice)(.*)" # Documents
"workspace 5, (Nxplayer.bin)" # Remote Desktop
"workspace 6, (PrusaSlicer)" # 3D Printing
"workspace 7, (steam_app|steam|lutris|page.kramo.Cartridges|org.prismlauncher.PrismLauncher|explorer.exe|gw2-64.exe|rsi launcher.exe)" # Gaming
@ -281,16 +281,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"
@ -328,7 +327,7 @@
++ [
# 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\""
"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"
@ -345,11 +344,11 @@
"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"
"SUPER, Space, exec, ${config.programs.fuzzel.package}/bin/fuzzel"
"SUPER, Return, exec, ${config.programs.alacritty.package}/bin/alacritty"
"SUPER SHIFT, Return, exec, ${config.programs.emacs.finalPackage}/bin/emacsclient -c"
"SUPER, W, exec, ${pkgs.nyxt}/bin/nyxt --no-socket"
"SUPER, F, exec, ${pkgs.nautilus}/bin/nautilus"
# Misc useful binds
",Print,exec,${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\" - | ${pkgs.swappy}/bin/swappy -f -"

View file

@ -0,0 +1,53 @@
{ pkgs, ... }:
{
stylix.targets.neovim.enable = false;
stylix.targets.neovim.transparentBackground = {
main = true;
signColumn = true;
};
programs.neovim = {
enable = true;
# defaultEditor = true;
viAlias = true;
vimAlias = true;
vimdiffAlias = true;
withNodeJs = true;
withRuby = true;
withPython3 = true;
extraLuaConfig = ''
require "defaults"
'';
# extraPackages = with pkgs; [
# # Misc utils
# curl
# fzf
# git
# gnutar
# gnumake
# gnused
# gcc
# ripgrep
# tree-sitter
# # Language servers
# nil
# lua-language-server
# fortls
# nodePackages.pyright
# nodePackages.yaml-language-server
# nodePackages.vim-language-server
# nodePackages.bash-language-server
# # Null LSP formatters
# alejandra
# beautysh
# black
# nodePackages.fixjson
# fprettify
# isort
# python3Packages.mdformat
# shellharden
# stylua
# ];
};
}

View file

@ -1,46 +1,23 @@
{ 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
imports = [
./python/default.nix
./lua/default.nix
];
home.packages = with pkgs; [
## Linters
shellcheck
yamllint
## Linters
shellcheck
ruff
## Formatters
nixfmt-rfc-style
shfmt
nodePackages.prettier
nodePackages.prettier-plugin-toml
## 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;
## Language servers
nixd
rust-analyzer
nodePackages.typescript-language-server
];
}

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

@ -0,0 +1,8 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
(luajit.withPackages (ps: [ (ps.callPackage ./luarocks/scilua.nix { }) ]))
lua-language-server
stylua
];
}

View file

@ -0,0 +1,24 @@
{ pkgs, ... }:
let
pythonEnv = (
pkgs.python312.withPackages (
ps: with ps; [
python-lsp-server
isort
flake8
mypy
numpy
xarray
netcdf4
matplotlib
]
)
);
in
{
home.packages = [
pkgs.ruff
pythonEnv
];
xdg.configFile."ruff/pyproject.toml".source = ./ruff.toml;
}

View file

@ -1,20 +1,18 @@
{
pkgs ? import <nixpkgs> { },
python3 ? pkgs.python3Full,
extraPackages ? [ ],
extraLibs ? [ ],
python3 ? pkgs.python3,
extraPackages ? with pkgs; [ uv ],
}:
let
inherit (pkgs) lib;
ldlibs = lib.makeLibraryPath (
(with pkgs; [
with pkgs;
[
stdenv.cc.cc
glib
glibc
zlib
zstd
])
++ extraLibs
]
);
pythonWrapped = pkgs.symlinkJoin {
name = "python";
@ -26,12 +24,8 @@ let
};
in
pkgs.mkShellNoCC {
packages = [
pythonWrapped
pkgs.uv
] ++ extraPackages;
packages = [ pythonWrapped ] ++ extraPackages;
shellHook = ''
[ ! -d .venv ] && ${pythonWrapped}/bin/python3 -m venv .venv
[ -f .venv/bin/activate ] && source .venv/bin/activate
'';
}

View file

@ -24,9 +24,3 @@ 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"

View file

@ -1,6 +1,6 @@
HOSTS=("$@")
# Config files
for TARGET in ".inputrc" ".config/starship.toml" ".ipython/profile_default/ipython_config.json"; do
for TARGET in ".inputrc" ".config/starship.toml"; do
SOURCE="$HOME/$TARGET"
echo "--- $SOURCE ---"
TMP_TARGET=/tmp/rsync-local-config

View file

@ -1,27 +1,13 @@
# 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/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/library.git"
)
for i in "${!SYNC_DIRS[@]}"; do
@ -43,3 +29,17 @@ for i in "${!SYNC_DIRS[@]}"; do
git status --porcelain
)
done
# 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"

View file

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

View file

@ -9,56 +9,18 @@
./git.nix
./ssh.nix
./starship.nix
./extras.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 = {
enable = true;
configFile.source = ./config.nu;
};
zsh = {
enable = true;
enableCompletion = true;
autocd = true;
autosuggestion.enable = true;
defaultKeymap = "emacs";
syntaxHighlighting = {
enable = true;
highlighters = [
"brackets"
"cursor"
];
};
historySubstringSearch.enable = true;
history = {
extended = true;
share = true;
ignoreDups = true;
ignoreAllDups = true;
ignoreSpace = true;
expireDuplicatesFirst = true;
};
initExtra = ''
## completion config and styling
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}'
zstyle ':completion:*' menu 'select=long-list'
## transient prompt
source ${./transient.zsh}
'';
};
nushell.enable = true;
# CLI programs and utilities
btop.enable = true;
carapace.enable = true;
@ -101,9 +63,7 @@
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";
@ -111,8 +71,8 @@
};
hyfetch = {
enable = true;
settings = rec {
preset = if light_dark == "dark" then "transgender" else "rainbow";
settings = {
preset = "pansexual";
mode = "rgb";
light_dark = config.lib.stylix.scheme.variant;
lightness = 0.4;

View file

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

View file

@ -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";

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,96 @@
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 = "ν";
bash_indicator = "";
powershell_indicator = "";
cmd_indicator = "";
unknown_indicator = "";
};
status = {
disabled = false;
@ -72,7 +159,12 @@
sigint_symbol = " ";
signal_symbol = " ";
};
sudo.disabled = false;
sudo = {
disabled = false;
symbol = "󱑷 ";
};
swift.symbol = " ";
zig.symbol = " ";
};
};
}

View file

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

View file

@ -27,16 +27,16 @@ 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" ];
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";
};
};
Service = {
Type = "oneshot";
ExecStart = "${dynamicWallpaper}/bin/dynamic-wallpaper";
};
};
timers.dynamic-wallpaper.Timer = {
OnCalendar = "*:0";
Unit = "dynamic-wallpaper.service";

View file

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

View file

@ -2,7 +2,18 @@
{
home.packages = with pkgs; [
(texlive.combine {
inherit (texlive) scheme-full;
inherit (texlive)
scheme-medium
dvisvgm
dvipng
wrapfig
amsmath
ulem
hyperref
capt-of
listings
bera
;
latex-beamer-ukaea.pkgs = [ (callPackage ./latex-beamer-ukaea/default.nix { }) ];
})
];

View file

@ -10,254 +10,270 @@
programs.waybar = {
enable = true;
systemd.enable = true;
settings.main = {
name = "main";
layer = "top";
position = "left";
# Layout
"modules-left" = [
"hyprland/workspaces"
"mpris"
];
"modules-center" = [ ];
"modules-right" = [
"custom/notification"
"pulseaudio#source"
"pulseaudio#sink"
"network"
"bluetooth"
"custom/calendar-icon"
"clock#calendar"
"custom/clock-icon"
"clock"
"backlight"
"battery"
"custom/weather"
"systemd-failed-units"
"tray"
];
# Module config
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
"1" = "󰆍";
"2" = "󰖟";
"3" = "󰭹";
"4" = "󱧶";
"5" = "󰢹";
"6" = "󰐫";
"7" = "󰊴";
default = "󰀻";
};
all-outputs = false;
persistent-workspaces = {
"1" = [ ];
"2" = [ ];
"3" = [ ];
"4" = [ ];
"5" = [ ];
"6" = [ ];
"7" = [ ];
};
};
mpris = {
"format" = "{player_icon}\n{status_icon}";
"tooltip-format" = "{player_icon} ({player}) {status_icon}\n{title}\n{album}\n{artist}";
"interval" = 1;
"dynamic-order" = [
"album"
"artist"
"title"
"position"
"length"
settings.main =
let
terminal = "${config.programs.alacritty.package}/bin/alacritty -e";
in
{
name = "main";
layer = "top";
position = "left";
# Layout
"modules-left" = [
"hyprland/workspaces"
"mpris"
];
"player-icons" = {
"default" = "󰲸";
};
"status-icons" = {
"playing" = "󰐊";
"paused" = "󰏤";
"stopped" = "󰓛";
};
"ignored-players" = [
"com"
"firefox"
"modules-center" = [ ];
"modules-right" = [
"custom/notification"
"pulseaudio"
"network"
"bluetooth"
"clock#calendar"
"clock"
"backlight"
"battery"
"custom/weather"
"systemd-failed-units"
"tray"
];
};
"pulseaudio#source" = {
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-icons = {
car = "󰄍";
default = [
"󰕿"
"󰖀"
"󰕾"
# Module config
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
"1" = "󰆍";
"2" = "󰖟";
"3" = "󰭹";
"4" = "󱧶";
"5" = "󰢹";
"6" = "󰐫";
"7" = "󰊴";
default = "󰀻";
};
all-outputs = false;
persistent-workspaces = {
"1" = [ ];
"2" = [ ];
"3" = [ ];
"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";
"(WhatsApp for Linux.*)" = "󰖣 $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}";
"interval" = 1;
"dynamic-order" = [
"album"
"artist"
"title"
"position"
"length"
];
default-muted = "󰝟";
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";
};
network = {
format-icons = [
"󰤟"
"󰤢"
"󰤥"
"󰤨"
];
format-wifi = "{icon}";
format-ethernet = "󰈁";
format-linked = "󰈂";
format-disconnected = "󰈂";
tooltip-format = "{essid} ({signalStrength}%)";
on-click = "${pkgs.networkmanagerapplet}/bin/nm-connection-editor";
};
bluetooth = {
format = "󰂯";
format-disabled = "󰂲";
format-off = "󰂲";
format-on = "󰂯";
format-connected = "󰂱";
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}";
tooltip-format = "<span size='${size}'>{calendar}</span>";
calendar = {
mode = "month";
weeks-pos = "left";
on-scroll = 1;
format =
let
scheme = config.lib.stylix.scheme.withHashtag;
in
{
months = "<span color='${scheme.red}'><b>{}</b></span>";
weeks = "<span color='${scheme.cyan}'><i>W{}</i></span>";
weekdays = "<span color='${scheme.orange}'><u>{}</u></span>";
days = "<span color='${scheme.base05}'>{}</span>";
today = "<span color='${scheme.magenta}'><b><u>{}</u></b></span>";
};
"player-icons" = {
"default" = "󰲸";
};
actions = {
on-scroll-up = "shift_up";
on-scroll-down = "shift_down";
"status-icons" = {
"playing" = "󰐊";
"paused" = "󰏤";
"stopped" = "󰓛";
};
"ignored-players" = [
"com"
"org"
"firefox"
];
};
"custom/clock-icon" = {
format = "󰅐";
tooltip = false;
};
clock = {
format = "{:%H\n%M}";
tooltip = false;
};
backlight = {
format = "{icon}";
tooltip-format = "{percent}%";
format-icons = [
""
""
""
""
""
""
""
""
""
];
};
battery = {
states = {
warning = 20;
critical = 10;
};
format = "{icon}";
format-time = "{H}:{m}";
format-charging = "󰂄";
format-plugged = "󰚥";
tooltip-format = "{capacity}% | {power}W | {time}";
format-icons = [
"󱃍"
"󰁺"
"󰁻"
"󰁼"
"󰁽"
"󰁾"
"󰁿"
"󰂀"
"󰂁"
"󰂂"
"󰁹"
];
};
"systemd-failed-units" = {
hide-on-ok = true;
format = "󰀦";
system = true;
user = false;
};
"custom/notification" =
let
makoctl = "${config.services.mako.package}/bin/makoctl";
jq = "${pkgs.jq}/bin/jq";
in
{
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)";
in
{
format = "{}";
pulseaudio = {
scroll-step = 5;
format = "{format_source}\n{icon}";
# format-muted = "{format_source} {icon}";
format-source = "󰍬";
format-source-muted = "󰍭";
format-icons = {
car = "󰄍";
default = [
"󰕿"
"󰖀"
"󰕾"
];
default-muted = "󰝟";
hands-free = "󰥰";
headset = "󰋎";
phone = "󰏲";
portable = "󰏳";
headphone = "󰋋";
};
tooltip = true;
interval = 900; # Every 15 minutes
exec = ''${pkgs.wttrbar}/bin/wttrbar --location Didcot --date-format "${date-format}" --custom-indicator "${custom-indicator}"'';
return-type = "json";
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";
};
network = {
format-icons = [
"󰤟"
"󰤢"
"󰤥"
"󰤨"
];
format-wifi = "{icon}";
format-ethernet = "󰈁";
format-linked = "󰈂";
format-disconnected = "󰈂";
tooltip-format = "{essid} ({signalStrength}%)";
on-click = "${terminal} ${pkgs.networkmanager}/bin/nmtui";
};
bluetooth = {
format = "󰂯";
format-disabled = "󰂲";
format-off = "󰂲";
format-on = "󰂯";
format-connected = "󰂱";
tooltip-format = "{status} | {device_alias}";
on-click = "${terminal} ${pkgs.bluez}/bin/bluetoothctl";
};
"clock#calendar" =
let
size = "${toString config.stylix.fonts.sizes.popups}pt";
in
{
format = "󰃭";
tooltip-format = "<span size='${size}'>{calendar}</span>";
calendar = {
mode = "month";
weeks-pos = "left";
on-scroll = 1;
format =
let
scheme = config.lib.stylix.scheme.withHashtag;
in
{
months = "<span color='${scheme.red}'><b>{}</b></span>";
weeks = "<span color='${scheme.cyan}'><i>W{}</i></span>";
weekdays = "<span color='${scheme.orange}'><u>{}</u></span>";
days = "<span color='${scheme.base05}'>{}</span>";
today = "<span color='${scheme.magenta}'><b><u>{}</u></b></span>";
};
};
actions = {
on-scroll-up = "shift_up";
on-scroll-down = "shift_down";
};
};
clock = {
format = "{:%H\n%M}";
tooltip = false;
};
backlight = {
format = "{icon}";
tooltip-format = "{percent}%";
format-icons = [
""
""
""
""
""
""
""
""
""
];
};
battery = {
states = {
warning = 20;
critical = 10;
};
format = "{icon}";
format-time = "{H}:{m}";
format-charging = "󰂄";
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 = "󰀦";
system = true;
user = false;
};
"custom/notification" =
let
makoctl = "${config.services.mako.package}/bin/makoctl";
jq = "${pkgs.jq}/bin/jq";
in
{
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)";
in
{
format = "{}";
tooltip = true;
interval = 900; # Every 15 minutes
exec = ''${pkgs.wttrbar}/bin/wttrbar --location Didcot --date-format "${date-format}" --custom-indicator "${custom-indicator}"'';
return-type = "json";
};
tray = {
icon-size = 20;
show-passive-items = true;
spacing = 5;
};
tray = {
icon-size = 20;
show-passive-items = true;
spacing = 5;
};
};
style =
let
scheme = config.lib.stylix.scheme.withHashtag;
@ -267,7 +283,7 @@
* {
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.desktop + 2)}px;
}
window {
@ -300,6 +316,22 @@
margin: 0px;
}
#workspaces,
#window,
#mpris,
#custom-notification,
#pulseaudio,
#network,
#bluetooth,
#clock,
#backlight,
#battery,
#custom-weather,
#tray {
margin: 0px;
padding: 2px 4px 2px 3px;
}
#workspaces {
background: ${scheme.base00};
border-radius: 5px;
@ -307,6 +339,9 @@
padding: 2px 3px;
}
#workspaces button {
padding: 2px 5px 2px 1px;
}
#workspaces button.empty {
color: ${scheme.base03};
}
@ -324,30 +359,31 @@
#custom-notification {
color: ${scheme.base08};
}
#pulseaudio.source {
#pulseaudio {
color: ${scheme.base09};
}
#pulseaudio.sink {
color: ${scheme.base0A};
}
#network {
color: ${scheme.base0B};
color: ${scheme.base0A};
padding: 2px 6px 2px 1px;
}
#bluetooth {
color: ${scheme.base0C};
color: ${scheme.base0B};
}
#custom-calendar-icon,
#clock.calendar {
color: ${scheme.base0D};
color: ${scheme.base0C};
padding: 2px 3px 2px 3px;
}
#custom-clock-icon,
#clock {
color: ${scheme.base0E};
}
#backlight {
color: ${scheme.base0F};
color: ${scheme.base0D};
padding: 2px 1px 2px 2px;
}
#backlight {
padding: 2px 3px 2px 3px;
}
#battery {
padding: 2px 2px 2px 4px;
}
#battery.warning {
color: ${scheme.base09};
}
@ -359,6 +395,9 @@
color: ${scheme.base0B};
}
#systemd-failed-units {
padding: 2px 4px 2px 1px;
}
#systemd-failed-units.ok {
color: ${scheme.base0B}
}

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,15 +1,15 @@
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" ];
"image/jpeg" = [ "com.github.weclaw1.ImageRoll.desktop" ];
"image/png" = [ "com.github.weclaw1.ImageRoll.desktop" ];
"audio/mpeg" = [ "com.github.neithern.g4music.desktop" ];
"video/mp4" = [ "mpv.desktop" ];
"video/mp4" = [ "com.github.rafostar.Clapper.desktop" ];
"text/plain" = emacs;
"text/richtext" = emacs;
@ -64,7 +64,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 +72,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" ];
"x-scheme-handler/zoomus" = browser;
"x-scheme-handler/zoommtg" = browser;
}

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

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

@ -5,13 +5,15 @@
...
}:
{
services.samba.enable = true;
environment.systemPackages = with pkgs; [ twinkle ];
home-manager.users.${username} =
{ config, ... }:
{
imports = [ ./home/openfortivpn/ukaea.nix ];
programs.git.userEmail = config.accounts.email.accounts.outlook.address;
programs = {
git.userEmail = config.accounts.email.accounts.outlook.address;
firefox.profiles.user.settings."browser.startup.homepage" = "https://nucleus.ukaea.uk";
};
accounts.email.accounts = {
proton.primary = lib.mkForce false;
outlook.primary = lib.mkForce true;